- [doing1984] 我做错了~~~! mov ax,1 mov ds,ax 04/18 16:54
- [doing1984] 3.3字的传送写得很清楚了“因为8086CPU是16位结构,有16根数据线.......” 04/18 15:49
- [doing1984] 看了下别人的答案,说是修改了四次了,我之前也是想着四次的,但是我觉得执行指令后IP是自己移动的,不是 04/18 10:56
- [doing1984] 我觉得我这种解释比书说的“左移4位”要好理解一些,书上写的进制好混乱,看得我一头雾水 04/17 20:15
- [doing1984] 谢谢游客,反正它一次读一条指令就对了,不知道书后面有没有具体解释 09/03 08:21
- [游客] 十六进制10001H不是10H(16)的整数倍啊。 段地址最后一位如果为0,说明SA*10H=** 08/31 15:25
- [游客] 应该与源代码中指令操作符有关系,特定的操作符号集合决定了这个指令将被编译成多少个字节码,当然也包括指 08/31 15:15
- [游客] 不是的,你看到的“;”是字符层面上的,而机器指令是2进制层面的。你的源代码经过编译器的编译才能变成机 08/31 15:12
- [doing1984] “这不是一个16位数”写错了,应该是这不是一个16的倍数 08/31 09:08
- [doing1984] 上面那个写错了,20000H-FFFFH=65537 08/31 09:04
[2012-08-30 15:44] 检测点2.2(有问题啊)
第二小题,20000H = SA*16+0H----SA=2000H
20000H = SA*16+FFFFH----SA*16=10001H
看了下别人这里SA=1001,但是我用计算器算的10001H/10H得到得是1000H啊,因为16进制的16应该是10H吧,是吧~~!
[ doing1984 发表于 2012-08-30 15:45 ]
这里的*16,这个16应该是2进制的吧?
[ doing1984 发表于 2012-08-30 15:57 ]
@fpamc,我可能@你吧,谢谢
[ fpamc 发表于 2012-08-31 07:18 ]
十进制的16=十六进制的10H
至于为什么是1001H
因为段地址*16(也就是10H)+偏移地址=物理地址。
段地址*16也就是起始地址。所以一个段的起始地址必然是16的倍数。这句话的专业说法在书的24页。
SA*16+0FFFFH=20000H
SA*16=10001H
这不是16的倍数。
所以。
我们可以改变最大偏移地址为0FFF0H
SA*16+0FFF0H=20000H
SA*16=10010H
SA=1001H
[ doing1984 发表于 2012-08-31 08:48 ]
也就是说20000H-偏移地址=16的倍数
这个偏移地址最大是FFFF,但是减去FFFF后所得的值不是16的倍数,所以减少FFFF,一直到得到的值是16的倍数时,才是正确的偏移地址
[ doing1984 发表于 2012-08-31 09:02 ]
请问你是怎么得到0FFOH这个偏移地址的呢,是一点点减的吗?
我现在用的方法是将20000H-FFFFH=60037,这不是一个16的位数,然后我推出了小于60037,但是是16位数的数
16*4000=64000
16*97=1552
SA=4097=1001H
这样也是可以的,谢谢解答
[ doing1984 发表于 2012-08-31 09:04 ]
上面那个写错了,20000H-FFFFH=65537
[ doing1984 发表于 2012-08-31 09:08 ]
“这不是一个16位数”写错了,应该是这不是一个16的倍数
[ 游客 发表于 2012-08-31 15:25 ]
十六进制10001H不是10H(16)的整数倍啊。
段地址最后一位如果为0,说明SA*10H=****0H,那么也就是说那么****0H+****H=20000H的话,说明第二个加数最大只能是FFF0H,那么第一个加数最小值就出来了10010H,这是物理地址,在处以10H的话,就是1001了,即SA=1001,这就是SA的最小值。