王爽的汇编语言第二版的检测点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=多少?为什么? 在debug下 ax=(ds:) 应该是这个结果 ax=2662H 你首先要明白DS是什么?DS是段寄存器,mov ds,ax 就是把段寄存器指向了0001:0000(也就是0000:0010,即00010H这个地址,也就是你问题的第二行),然后mov ax, 就是指向第一个地址,但是ax是通用寄存器(十六位的),所以要加上高地址(即26);所以ax=2662H。如果是al,ah这些分高低位的寄存器(八位的),就不用加高地址的数据了。 mov ax, 的时候ds被赋值为1 ds*10+0000 == 1*10+0000
因为ax是16位 所以读取两个字节,所以ax==2662 明白了,主要是第一点开始没弄懂。谢谢啦! chinapass 发表于 2017-6-29 21:27
明白了,主要是第一点开始没弄懂。谢谢啦!
你明白了把我搞晕了mov ax, 不就是把(ds:0000)=(0001:0000)中的数据传给ax麽 本帖最后由 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就明白了 erh 发表于 2017-7-4 10:53
为啥晕?段地址X16+偏移地址,十进制的16就是十六进制的10H,书上就是这么讲的。
即1x10H+0就是数据的 ...
debug了发现两处都一样
西殴 发表于 2017-7-4 19:46
debug了发现两处都一样
正常,因为物理地址是一样的
物理地址 = 段地址 x 10h + 偏移
物理地址 = 1 x 10h + 0 = 10h
物理地址 = 0 x 10h + 10h = 10h
物理地址一样,内容当然一样
页:
[1]