Assembly 试图将字节加载到DX中,但加载了错误的值

Assembly 试图将字节加载到DX中,但加载了错误的值,assembly,x86-16,masm,Assembly,X86 16,Masm,我试图将第三个值(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 我试图将第三个值(03

我试图将第三个值(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

我试图将第三个值(03h)加载到DX中

是的,但您要求它从地址字符串+2和字符串+3加载16位值,因此它加载03和04,作为little endian:0403中的16位值。
DX
是一个16位寄存器,使用它可以请求16位传输

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

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