chinapass 发表于 2017-6-29 18:49:27

王爽的汇编语言第二版的检测点3.1

(1)在DEBUG中,用 "D 0:0 lf" 查看内存,结果如下:

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
这行代码看不明白。
mov ax,1
mov ds,ax
mov ax,
ax=多少?为什么?

西殴 发表于 2017-6-29 19:49:21

在debug下 ax=(ds:)   应该是这个结果

shuiyu 发表于 2017-6-29 20:44:47

ax=2662H 你首先要明白DS是什么?DS是段寄存器,mov ds,ax 就是把段寄存器指向了0001:0000(也就是0000:0010,即00010H这个地址,也就是你问题的第二行),然后mov ax, 就是指向第一个地址,但是ax是通用寄存器(十六位的),所以要加上高地址(即26);所以ax=2662H。如果是al,ah这些分高低位的寄存器(八位的),就不用加高地址的数据了。

13960672142 发表于 2017-6-29 20:45:42

mov ax, 的时候ds被赋值为1   ds*10+0000 == 1*10+0000
因为ax是16位 所以读取两个字节,所以ax==2662

chinapass 发表于 2017-6-29 21:27:15

明白了,主要是第一点开始没弄懂。谢谢啦!

西殴 发表于 2017-7-1 00:04:34

chinapass 发表于 2017-6-29 21:27
明白了,主要是第一点开始没弄懂。谢谢啦!

你明白了把我搞晕了mov ax, 不就是把(ds:0000)=(0001:0000)中的数据传给ax麽   

erh 发表于 2017-7-4 10:53:38

本帖最后由 erh 于 2017-7-4 10:57 编辑

西殴 发表于 2017-7-1 00:04
你明白了把我搞晕了mov ax, 不就是把(ds:0000)=(0001:0000)中的数据传给ax麽

为啥晕?段地址X16+偏移地址,十进制的16就是十六进制的10H,书上就是这么讲的。
即1x10H+0就是数据的地址。ax是字,两个字节,高位字节26,低位字节62,合起来就是2662

估计是没有明白1:0和0:0010是一个位置吧?
你可以debug一下,然后d1:0,再d0:10就明白了

西殴 发表于 2017-7-4 19:46:57

erh 发表于 2017-7-4 10:53
为啥晕?段地址X16+偏移地址,十进制的16就是十六进制的10H,书上就是这么讲的。
即1x10H+0就是数据的 ...

debug了发现两处都一样

人造人 发表于 2017-7-4 21:17:06

西殴 发表于 2017-7-4 19:46
debug了发现两处都一样

正常,因为物理地址是一样的
物理地址 = 段地址 x 10h + 偏移

物理地址 = 1 x 10h + 0 = 10h

物理地址 = 0 x 10h + 10h = 10h

物理地址一样,内容当然一样
页: [1]
查看完整版本: 王爽的汇编语言第二版的检测点3.1