IT工作室 发表于 2013-2-12 21:59:46

第三章 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 21:59:47

本帖最后由 メ㊣逆ご帅☆ 于 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




青草 发表于 2013-2-13 11:34:38

看来楼主的段寄存器原理还是没有全吃透

8023az 发表于 2013-2-14 20:37:50

2楼好详细!

IT工作室 发表于 2013-2-14 23:04:50

谢谢 楼主我又复习了一下前面的功课终于明白了谢谢
页: [1]
查看完整版本: 第三章 3.5 数据段检测点3.1 习题求解