别走别忘 发表于 2014-8-27 20:34:46

第八章除法里的偏移地址

这些偏移地址怎么数出来的啊?

小靚同学Leon 发表于 2014-8-27 20:48:57

1. 被除数的的形式是dd 100001,是一个双字。它在数据区的地址是ds-ds
2. 除数是形式是dw 100,是一个字。地址是ds-ds
3. 结果的商存在ax,也是一个字。地址是ds-ds

流行语 发表于 2014-8-27 20:50:05

因为在data段中定义了dd,dw,dw.第一个dd是4个字节,dw是2个字节。在内存中它们的排列顺序按照定义时排列。十六进制 A1 86 01 00 64 00 00 00 ,前四个是被除数(dd)占的字节,下面两个是除数(dw)占有的字节,最后两个是用于保存商的。这样应该懂了吧。

别走别忘 发表于 2014-8-27 21:23:06

A1 86 01 00 64 00 00 00 ,那对应偏移地址就是
0   1   23   4   5   6   7   吗?

别走别忘 发表于 2014-8-27 21:33:03

【2】里应放是01,【0】里0?

别走别忘 发表于 2014-8-27 21:33:55

流行语 发表于 2014-8-27 20:50
因为在data段中定义了dd,dw,dw.第一个dd是4个字节,dw是2个字节。在内存中它们的排列顺序按照定义时排列。 ...


A1 86 01 00 64 00 00 00 ,那对应偏移地址就是
0   1   23   4   5   6   7   吗?
【2】里应放是01,【0】里0?

别走别忘 发表于 2014-8-27 21:52:29

还有这个除法规定是被除数高位放到DX里,低位放到AX里,除数放到BX里,这个被除数是186A1H 高位1正好和【2】里低位一样所以要取这个【2】里这个数吗?

流行语 发表于 2014-8-27 21:53:28

在内存中应该反着读,第一个字中数据应该是86A1,第二个字的数据是0001。第三个数据应该是0064,第四个数据应该是0000。

小靚同学Leon 发表于 2014-8-27 21:56:21

本帖最后由 小靚同学Leon 于 2014-8-27 21:59 编辑

别走别忘 发表于 2014-8-27 21:23
A1 86 01 00 64 00 00 00 ,那对应偏移地址就是
0   1   23   4   5   6   7   吗?
理解没错,不过数据在内存中是小端排序的

别走别忘 发表于 2014-8-27 21:58:48

流行语 发表于 2014-8-27 21:53
在内存中应该反着读,第一个字中数据应该是86A1,第二个字的数据是0001。第三个数据应该是0064,第四个数据 ...

还有这个除法规定是被除数高位放到DX里,低位放到AX里,除数放到BX里,这个被除数是186A1H 高位1正好和【2】里低位一样所以要取这个【2】里这个数吗?

流行语 发表于 2014-8-27 22:04:36

Ax寄存器中存放186A,dx中存放0001啊。你debug一下,看看内存。这样帮助你理解。

流行语 发表于 2014-8-27 22:05:11

截图

别走别忘 发表于 2014-8-27 22:13:55

流行语 发表于 2014-8-27 22:05
截图

    10进制里100001不是为16进制的1861AH寄存器里只能放下861A那多出1算它的高位不?

流行语 发表于 2014-8-27 22:24:53

高位不是放在DX中了吗?

别走别忘 发表于 2014-8-27 22:33:38

流行语 发表于 2014-8-27 22:24
高位不是放在DX中了吗?

正好DW 100是【2】里高位是1   正好多出来那个1一样的数,这里取【2】里的1和第一行数据被除数的高位1有联系吗?还是【2】只是来说明除数是100

流行语 发表于 2014-8-27 23:15:34

你最好自己调试一下吧。

别走别忘 发表于 2014-8-28 08:31:55

流行语 发表于 2014-8-27 23:15
你最好自己调试一下吧。

好的,谢谢!

别走别忘 发表于 2014-8-28 09:35:01

小靚同学Leon 发表于 2014-8-27 20:48
1. 被除数的的形式是dd 100001,是一个双字。它在数据区的地址是ds-ds
2. 除数是形式是dw 100,是一 ...

那我再继续问下,DB 'BASIC!' 每个字母算一个偏移地址包括那个!也算一个,DW 0,0,0,0,0,0 这里一个0就是

两个字节那是两个偏移地址,我就想问 这个引号作用是什么啊?什么情况上用引号,只有定义字母时用吗?还有逗号为什么不用数?是不是只有在‘’单引号里的符号才能当成字节来数?   

要把DB改成DW 'BASIC!'这里字母一个表示两个偏移地址吧?DD‘BASIC!’一个字母表示4个字节就是4个偏移地址。
还有别的什么情况数偏移地址这里还没列举的到的呢?

流行语 发表于 2014-8-28 10:08:40

在汇编程序中,用单引号的方式指明数据是以字符的形式给出的,编译器将把它们转化为相应的ASCII码。如果你想显示ASCII码时,可以用单引号。

别走别忘 发表于 2014-8-28 11:08:30

流行语 发表于 2014-8-27 20:50
因为在data段中定义了dd,dw,dw.第一个dd是4个字节,dw是2个字节。在内存中它们的排列顺序按照定义时排列。 ...

你好,我才反应过来这个人说的1. 被除数的的形式是dd 100001,是一个双字。它在数据区的地址是ds-ds
2. 除数是形式是dw 100,是一个字。地址是ds-ds
3. 结果的商存在ax,也是一个字。地址是ds-ds
和你说的十六进制 A1 86 01 00 64 00 00 00 ,前四个是被除数(dd)占的字节,不一样吧,那人说的偏移地址第一个4个字节就算了4个偏移地地了,而你是DD第一段占了【0】和【1】偏移地址!
页: [1] 2
查看完整版本: 第八章除法里的偏移地址