寄存器AL,寄存器BX

DATE SEGMENT
DA1 DW 1234H
DA2 DB 56H,78H
DATA ENDS



MOV AX,DATA
MOV DS,AX
MOV DI,OFFSET DA1
MOV BX,OFFSET DA2
MOV AL,[DI]
ADD AL,[DI+2]
寄存器AL的值是8AH
寄存器BX的值是0002H

两个值是怎么计算得到的啊,我计算出来,怎么不一样啊,谁能给个较详细的流程?
那些指令,我都懂
DATE SEGMENT是定义数据段
SEGMENT
DW,DB 定义字和字节
MOV传送
OFFSET计算地址偏移量
ADD加
(目的变址DI加个[]是个啥?)
但,就是计算出来不对~!

首先确定数据段中各数据的存放顺序如下:
da1:
34h
12h
da2:
56h
78h
执行mov di, offset da1后,di指向字节数据34h
di+2指向56h,两数相加结果为34h+56h=8ah
注意:字数据存储在内存中时,低字节存入低地址单元,高字节存入高地址单元。所以da1定义的字数据1234h在内存中的存放顺序是34h、12h而不是12h、34h。你可能是这个地方弄错了,结果就成了68h了
bx的值是da2定义的第一个字节数据56h在内存中的偏移地址。因为数据段中定义的所有数据的地址从0开始顺序加1(以字节为单位),56h是第三个字节,bx的值当然为0002h
温馨提示:答案为网友推荐,仅供参考
第1个回答  2008-04-26
da1:
34h (0000)
12h (0001)
da2:
56h (0002)
78h
第一个回答和上面一样
MOV BX,OFFSET DA2
BX=0002,数偏移量
第2个回答  2008-04-26
DI加个[]意思就是DI中的数据作为地址用,就相当于高级语言中的指针,里面存放的是地址,而地址里放的才是你需要是数据
第3个回答  2008-04-26
MOV AL,[DI]是将34h赋给al,因为在汇编中,字保存在内存中是用低地址作为首地址的,所以,取字节的时候会取34h而不是12h,di加2后,就指向da2(即56h),所以结果是8ah,至于bx,那就是da2的逻辑地址是0002H的原因
相似回答