第三章 3.5 数据段检测点3.1 习题求解
在 debug中用 d 0:0 1f查看内存,结果如下解题过程可以给我说下吗步骤最好详细点(谢谢)0000:0000 70 80 F0 30 EF 60 30 E2-00 80 80 12 66 20 22 60
0000:0010 62 26 E6 D6 CC 2E 3C 3B-AB BA 00 00 26 06 66 88
下面程序执行前,AX=0,BX=0,写出每条汇编指令执行完后相关寄存器的值
movax,1
movds,ax
movax, AX=________
movbX, BX=________
movax,bx AX=________
movax, AX=________
movbx, BX=________
add ax,bx AX=________
add ax, AX=________
movax,0 AX=________
moval, AX=________
mov bx,0 BX=________
movbl, BX=________
add al,bl AX=________
求前辈指点谢谢
本帖最后由 メ㊣逆ご帅☆ 于 2013-2-12 23:02 编辑
详细点的意思是啰嗦点么?
在 debug中用 d 0:0 1f查看内存,结果如下解题过程可以给我说下吗步骤最好详细点(谢谢)
0000:0000 70 80 F0 30 EF 60 30 E2-00 80 80 12 66 20 22 60
0000:0010 62 26 E6 D6 CC 2E 3C 3B-AB BA 00 00 26 06 66 88
下面程序执行前,AX=0,BX=0,写出每条汇编指令执行完后相关寄存器的值
movax,1
movds,ax
movax, AX=2662h
movbX, BX=E626h
movax,bx AX=E626h
movax, AX=2662h
movbx, BX=D6E6h
add ax,bx AX=FD48h
add ax, AX=2C14h
movax,0 AX=0
moval, AX=00E6h
mov bx,0 BX=0
movbl, BX=0026h
add al,bl AX=000Ch
首先制定段地址为1
第一条空 mov ax,,默认DS为段地址,偏移为括号中的0000,那么地址计算就是这样1*10h+0=10h
换算下就是段地址为0,偏移为10h的地方(理由0*10h+10h=1*10h+10h,这两个是同一个地址)
所以mov ax,就是取0000:0010 中一个字的值 就是这里0000:0010 62 26
由于是反过来读的,所以ax=26 62h
mov bx同上就是段地址为0000,偏移为11h的地方(红色为偏移11H位置,下面会采取同样的方法)
0000:0010 62 26 E6 D6 CC 2E 3C 3B-AB BA 00 00 26 06 66 88
由于是取一个字的值,所以不只取26一个还得向前取 E6
由于是反过来读的,所以bx=E6 26h
mov ax,bx 就是把BX的值E626h给AX,那么AX就和BX一样是E626H了
movax,不多说
movbx, BX=D6E6h
换算下0001:0002,换算完也就是段地址为0000偏移为0012h的地方
0000:0010 62 26 E6 D6 CC 2E 3C 3B-AB BA 00 00 26 06 66 88
由于是取一个字的值,所以不只取E6一个还得向前取 D6
反过来读 所以是 D6E6H
add ax,bx AX=FD48h
AX=2662H,BX=D6E6H
相加等于FD48H,把这个值给AX,所以AX=FD48H
add ax, AX=2C14h
把AX的值FD48H和段地址为0000偏移为14H的值(2ECCH)相加得到12C14H,AX不够装,最高位舍去,所以AX=2C14H
movax,0 AX=0 不多说
moval, AX=00E6h 取一个字节所以等于E6H
mov bx,0 BX=0 不多说
movbl, BX=0026h 不多说,同上
add al,bl AX=000Ch
AL=E6H,BL=26HE6+26=10CH,把这个值给AL,所以AL=10CH,最高位溢出舍去
AL=0C
所以AX=000CH
看来楼主的段寄存器原理还是没有全吃透 2楼好详细! 谢谢 楼主我又复习了一下前面的功课终于明白了谢谢
页:
[1]