注册 登录
编程论坛 汇编论坛

一道汇编基础题请指教

leanrose 发布于 2007-09-07 01:30, 1044 次点击

d 0:0 1f命令查看内存,结果如下:
0000:0000 70 80 f0 30 40 ef 80 87-00 e2 80 65 78 e3 4d 1a
0000:0010 62 26 e6 d6 cc 2e 3c 3b-ab ba 45 3e df 1d ds fd
ax=0,bx=0,写出寄存器的值
mov ax,1
mov ds,ax
mov ax,[0000] ax=?
mov bx,[0001] bx=?
mov ax,[0002] ax=?

有人得到答案如下:
AX 2662H
BX 0E626H
AX 2662H+0D6E6H=0FD48H
最后一个AX怎么会是AX+BX的值了?

4 回复
#2
liyun20602007-09-07 08:35
dae6
具体是多少 你自己做个程序 运行下就知道了啊
#3
leanrose2007-09-07 08:48
不懂原理啊
#4
leanrose2007-09-07 09:15
d6e6把?
#5
hkbyest2007-09-09 23:09

0000:0010 62 26 e6 d6 cc 2e 3c 3b-ab ba 45 3e df 1d ds fd

段地址ds=1,转成线性地址是1×10h=10h,

mov ax,[0002] ax=?
等同于 mov ax,ds:[0002],
这里表示的是1:[0002],1×10h+2h=12h,表示10h开始的地址偏移2字节,也就是上面数据的e6处,
ax是16位寄存器(16位=两字节),所以是把e6和后面的一字节数据放到ax中,又因为x86处理器使用小尾或称小端的数据表示方式,低位数据在前,
所以综合起来结果就是ax=0d6e6H,masm语法规定16进制数据第一位为字母的前面要加0。

这就是原理,不知道楼主懂了没。

1