我觉得书上给的例子,进制有点混乱
段地址:1230
偏移地址:00C8
这里的段地址跟偏移地址都是16进制
那么这个公式应该严谨的写成下面这样:
1230H*10H+00C8H=12300H+00C8H=123C8H
再往下看....
8086CPU是16位结构的
8086CPU的地址总线是20位的
【注意】这里的位是说二进制的16位,20位
20位-16位=4位
4位二进制可以用十六进制的1位表示
二进制 十六进制
0000 —— 0
0001 —— 1
0010 —— 2
0011 —— 3
0100 —— 4
0101 —— 5
0110 —— 6
0111 —— 7
1000 —— 8
1001 —— 9
1010 —— A(10)
1011 —— B(11)
1100 —— C(12)
1101 —— D(13)
1110 —— E(14)
1111 —— F(15)
其实十六进制就是二进制的简写,两者的转换非常简单(我是这样理解的^_^)
我们再来看书上的例子“1230H*10H+00C8H=12300H+00C8H=123C8H”
物理地址是20位二进制数,用十六进制表达就是5位
但CPU是16位的二进制数,也就是十六进制的4位
所以十六位的段地址1230H需要升一位,也就是1230H*10H,然后再加个尾巴就成物理地址了
有的东西书上有的我就不详写了
反正我看的时候有点头晕这个16是怎么个怎么回事
最后我们再来看书上的原文“段地址*16+偏移地址=物理地址”,这里的16到底是10进制还是16进制?我真晕了~~!
- [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