首页 > 解决方案 > 试图将一个字节加载到 DX 中,但加载了错误的值

问题描述

我正在尝试将第三个值 (03h) 加载到 DX 中,但加载了错误的值。我不明白发生了什么事。

DATA SEGMENT
STRING1 DB 01h,02h,03h,04h

DATA ENDS 

CODE SEGMENT
ASSUME CS:CODE, DS:DATA
START:
MOV AX,DATA
MOV DS, AX
LEA BX, STRING1
INC BX
MOV DX, [BX+1]

HLT
CODE ENDS
END  START

输出:DX 的值变成了 0403

从 debug.exe 输出屏幕截图

标签: assemblyx86-16masm

解决方案


我正在尝试将第三个值(03h)加载到 DX 中,

是的,但是你要求它从地址 STRING+2 和 STRING+3 加载 16 位值,所以它加载 03 和 04,作为 little endian 中的 16 位值:0403。  DX是一个 16 位寄存器,通过使用它,您要求进行 16 位传输。

如果您只想要一个字节,请使用DL,例如,而不是DX

否则,可以DW在数据段中使用。数据大小和传输大小需要匹配。


推荐阅读