第八章除法里的偏移地址
这些偏移地址怎么数出来的啊?1. 被除数的的形式是dd 100001,是一个双字。它在数据区的地址是ds-ds
2. 除数是形式是dw 100,是一个字。地址是ds-ds
3. 结果的商存在ax,也是一个字。地址是ds-ds 因为在data段中定义了dd,dw,dw.第一个dd是4个字节,dw是2个字节。在内存中它们的排列顺序按照定义时排列。十六进制 A1 86 01 00 64 00 00 00 ,前四个是被除数(dd)占的字节,下面两个是除数(dw)占有的字节,最后两个是用于保存商的。这样应该懂了吧。 A1 86 01 00 64 00 00 00 ,那对应偏移地址就是
0 1 23 4 5 6 7 吗?
【2】里应放是01,【0】里0? 流行语 发表于 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? 还有这个除法规定是被除数高位放到DX里,低位放到AX里,除数放到BX里,这个被除数是186A1H 高位1正好和【2】里低位一样所以要取这个【2】里这个数吗? 在内存中应该反着读,第一个字中数据应该是86A1,第二个字的数据是0001。第三个数据应该是0064,第四个数据应该是0000。 本帖最后由 小靚同学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:53
在内存中应该反着读,第一个字中数据应该是86A1,第二个字的数据是0001。第三个数据应该是0064,第四个数据 ...
还有这个除法规定是被除数高位放到DX里,低位放到AX里,除数放到BX里,这个被除数是186A1H 高位1正好和【2】里低位一样所以要取这个【2】里这个数吗? Ax寄存器中存放186A,dx中存放0001啊。你debug一下,看看内存。这样帮助你理解。 截图 流行语 发表于 2014-8-27 22:05
截图
10进制里100001不是为16进制的1861AH寄存器里只能放下861A那多出1算它的高位不?
高位不是放在DX中了吗? 流行语 发表于 2014-8-27 22:24
高位不是放在DX中了吗?
正好DW 100是【2】里高位是1 正好多出来那个1一样的数,这里取【2】里的1和第一行数据被除数的高位1有联系吗?还是【2】只是来说明除数是100 你最好自己调试一下吧。 流行语 发表于 2014-8-27 23:15
你最好自己调试一下吧。
好的,谢谢! 小靚同学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个偏移地址。
还有别的什么情况数偏移地址这里还没列举的到的呢? 在汇编程序中,用单引号的方式指明数据是以字符的形式给出的,编译器将把它们转化为相应的ASCII码。如果你想显示ASCII码时,可以用单引号。 流行语 发表于 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