加法器将两个16位地址合成一个20位的物理地址,是这样的吧,我想请问这时这个20位物理地址是储存在哪里呢?
8086CPU是16位呀,怎么可以储存20位物理地址呢?
[img=http://bbs.fishc.com/forum.php?mod=attachment&aid=MTcxNHw0YmI2N2IwNHwxMzE2MTc4ODkyfDEwNzA5Nnw0MzQ4&noupdate=yes][/img]
问题二:出栈后,之前栈中的内容到底有没有被清空呢?
13 个解决方案
#1
20位物理地址 是传在20条地址线上哦
#2
80x86中的寄存器都是16位的,在实模式下,存储器地址采用存储空间的分段技术来解决寻址1MB的存储空间,即用分段技术来解决16位的寄存器寻址20位地址的问题,段地址与偏移地址组合形成20位物理地址。
分段方法:物理地址=段地址*16D(10H)+偏移地址;即:二进制的段地址左移四位+二进制的偏移地址。
分段方法:物理地址=段地址*16D(10H)+偏移地址;即:二进制的段地址左移四位+二进制的偏移地址。
#3
1。存储的物理地址是存于内存中;而段地址(也就是段基地址)存放在寄存器中;
2。对于数据段,代码段之类的“段”,是在内存中定义的一篇存储空间。
2。对于数据段,代码段之类的“段”,是在内存中定义的一篇存储空间。
#4
计算之后的结果存在地址累加器的寄存器中,通过这个寄存器直接给20根地址线
#5
这个涉及到内存控制器中的两个寄存器MAR 和MDR了, 即地址寄存器和数据寄存器
如果是20条地址线,那么mar就是20位, 因为是16位数据线,mdr是16位
首先搞清楚一点,内存的数据或者说指令(指令也可以看作是数据,就是一坨0和1嘛),是怎么被取出来的,最简单的描述:CPU给出地址,送给内存,内存收到这个地址,把对应内存单元的数据输出
CPU在产生地址的时候 有个地址累加器(这个在地址变换机构里,是个专用的,并不使用CPU的累加器来算这个地址),这个累加器的功能就是将段地址左移4位加上偏移地址,同时在CPU的控制下将产生的20位地址送往20位的地址线(应该说20条地址线),同时CPU控制下内存MAR接收这20位数据。然后内存收到这20位数据,就把相应的数据送到MDR中了,中间的过程如果详细说更复杂些,关于时序,锁存之类的。楼主有兴趣的话可以查阅关于内存的一些资料。
如果是20条地址线,那么mar就是20位, 因为是16位数据线,mdr是16位
首先搞清楚一点,内存的数据或者说指令(指令也可以看作是数据,就是一坨0和1嘛),是怎么被取出来的,最简单的描述:CPU给出地址,送给内存,内存收到这个地址,把对应内存单元的数据输出
CPU在产生地址的时候 有个地址累加器(这个在地址变换机构里,是个专用的,并不使用CPU的累加器来算这个地址),这个累加器的功能就是将段地址左移4位加上偏移地址,同时在CPU的控制下将产生的20位地址送往20位的地址线(应该说20条地址线),同时CPU控制下内存MAR接收这20位数据。然后内存收到这20位数据,就把相应的数据送到MDR中了,中间的过程如果详细说更复杂些,关于时序,锁存之类的。楼主有兴趣的话可以查阅关于内存的一些资料。
#6
补充一点:话说现在内存控制器都做到CPU里去了,所以说MAR和MDR貌似都在CPU里了 - -
#7
谢谢各位的回答,大家可能没有听懂我的意思,是这样的,当地址加法器通过运算得到20位物理地址的时候,就是这个20位地址还没有被输入输出控制器输出时,它是储存在哪里的?
#8
#9
#10
我也刚学汇编,来学习一下,大二了啊。。。
#11
实模式分段管理物理地址!
比如说CS!CS是一个代码段寄存器,还有一个IP寄存器,这两个都是16位的!
CS存着段的基地址,IP存着段内的偏移
然后CPU要读这个CS段的某个IP位置的命令时,也就是要得到20位地址时:
物理地址 = CS * 16 + IP 这样就可以得到20位的物理地址了。
而你问20位地址是存放在哪里的,这个其实就是让CS与IP共同合作的结果了。一个段的基地址,一个存这个段的偏移量。
这样就可以用两个16位寄存器存放20位的地址了。
至于怎么分段的LZ可以看看书。
得到20位地址就用在了地址总线上了,就拿数据了吧。
比如说CS!CS是一个代码段寄存器,还有一个IP寄存器,这两个都是16位的!
CS存着段的基地址,IP存着段内的偏移
然后CPU要读这个CS段的某个IP位置的命令时,也就是要得到20位地址时:
物理地址 = CS * 16 + IP 这样就可以得到20位的物理地址了。
而你问20位地址是存放在哪里的,这个其实就是让CS与IP共同合作的结果了。一个段的基地址,一个存这个段的偏移量。
这样就可以用两个16位寄存器存放20位的地址了。
至于怎么分段的LZ可以看看书。
得到20位地址就用在了地址总线上了,就拿数据了吧。
#12
2 一般出栈后只是栈指针移动了,实际内容不动,可以随便写个什么调试下看看。
仅供参考……
仅供参考……
#13
地址线20位 ,数据线 16位
11楼正解
11楼正解
#1
20位物理地址 是传在20条地址线上哦
#2
80x86中的寄存器都是16位的,在实模式下,存储器地址采用存储空间的分段技术来解决寻址1MB的存储空间,即用分段技术来解决16位的寄存器寻址20位地址的问题,段地址与偏移地址组合形成20位物理地址。
分段方法:物理地址=段地址*16D(10H)+偏移地址;即:二进制的段地址左移四位+二进制的偏移地址。
分段方法:物理地址=段地址*16D(10H)+偏移地址;即:二进制的段地址左移四位+二进制的偏移地址。
#3
1。存储的物理地址是存于内存中;而段地址(也就是段基地址)存放在寄存器中;
2。对于数据段,代码段之类的“段”,是在内存中定义的一篇存储空间。
2。对于数据段,代码段之类的“段”,是在内存中定义的一篇存储空间。
#4
计算之后的结果存在地址累加器的寄存器中,通过这个寄存器直接给20根地址线
#5
这个涉及到内存控制器中的两个寄存器MAR 和MDR了, 即地址寄存器和数据寄存器
如果是20条地址线,那么mar就是20位, 因为是16位数据线,mdr是16位
首先搞清楚一点,内存的数据或者说指令(指令也可以看作是数据,就是一坨0和1嘛),是怎么被取出来的,最简单的描述:CPU给出地址,送给内存,内存收到这个地址,把对应内存单元的数据输出
CPU在产生地址的时候 有个地址累加器(这个在地址变换机构里,是个专用的,并不使用CPU的累加器来算这个地址),这个累加器的功能就是将段地址左移4位加上偏移地址,同时在CPU的控制下将产生的20位地址送往20位的地址线(应该说20条地址线),同时CPU控制下内存MAR接收这20位数据。然后内存收到这20位数据,就把相应的数据送到MDR中了,中间的过程如果详细说更复杂些,关于时序,锁存之类的。楼主有兴趣的话可以查阅关于内存的一些资料。
如果是20条地址线,那么mar就是20位, 因为是16位数据线,mdr是16位
首先搞清楚一点,内存的数据或者说指令(指令也可以看作是数据,就是一坨0和1嘛),是怎么被取出来的,最简单的描述:CPU给出地址,送给内存,内存收到这个地址,把对应内存单元的数据输出
CPU在产生地址的时候 有个地址累加器(这个在地址变换机构里,是个专用的,并不使用CPU的累加器来算这个地址),这个累加器的功能就是将段地址左移4位加上偏移地址,同时在CPU的控制下将产生的20位地址送往20位的地址线(应该说20条地址线),同时CPU控制下内存MAR接收这20位数据。然后内存收到这20位数据,就把相应的数据送到MDR中了,中间的过程如果详细说更复杂些,关于时序,锁存之类的。楼主有兴趣的话可以查阅关于内存的一些资料。
#6
补充一点:话说现在内存控制器都做到CPU里去了,所以说MAR和MDR貌似都在CPU里了 - -
#7
谢谢各位的回答,大家可能没有听懂我的意思,是这样的,当地址加法器通过运算得到20位物理地址的时候,就是这个20位地址还没有被输入输出控制器输出时,它是储存在哪里的?
#8
#9
#10
我也刚学汇编,来学习一下,大二了啊。。。
#11
实模式分段管理物理地址!
比如说CS!CS是一个代码段寄存器,还有一个IP寄存器,这两个都是16位的!
CS存着段的基地址,IP存着段内的偏移
然后CPU要读这个CS段的某个IP位置的命令时,也就是要得到20位地址时:
物理地址 = CS * 16 + IP 这样就可以得到20位的物理地址了。
而你问20位地址是存放在哪里的,这个其实就是让CS与IP共同合作的结果了。一个段的基地址,一个存这个段的偏移量。
这样就可以用两个16位寄存器存放20位的地址了。
至于怎么分段的LZ可以看看书。
得到20位地址就用在了地址总线上了,就拿数据了吧。
比如说CS!CS是一个代码段寄存器,还有一个IP寄存器,这两个都是16位的!
CS存着段的基地址,IP存着段内的偏移
然后CPU要读这个CS段的某个IP位置的命令时,也就是要得到20位地址时:
物理地址 = CS * 16 + IP 这样就可以得到20位的物理地址了。
而你问20位地址是存放在哪里的,这个其实就是让CS与IP共同合作的结果了。一个段的基地址,一个存这个段的偏移量。
这样就可以用两个16位寄存器存放20位的地址了。
至于怎么分段的LZ可以看看书。
得到20位地址就用在了地址总线上了,就拿数据了吧。
#12
2 一般出栈后只是栈指针移动了,实际内容不动,可以随便写个什么调试下看看。
仅供参考……
仅供参考……
#13
地址线20位 ,数据线 16位
11楼正解
11楼正解