鱼C论坛

 找回密码
 立即注册
查看: 3314|回复: 14

汇编的两个小问题,望高手帮下忙

[复制链接]
发表于 2011-9-16 21:14:51 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
问题一:  大家都知道,8086CPU给出地址的方法是  CPU提供16位段地址和16位偏移地址,这两个地址被送到地址加法器中,
加法器将两个16位地址合成一个20位的物理地址,是这样的吧,我想请问这时这个20位物理地址是储存在哪里呢?
8086CPU是16位呀,怎么可以储存20位物理地址呢?
QQ截图未命名.jpg

问题二:出栈后,之前栈中的内容到底有没有被清空呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-9-16 21:58:23 | 显示全部楼层
表面是被清空了  其实里面还存在  不是说了清不掉吗  只能反复的用其他的内容来覆盖
不然对于那些真正的高手是能查看到的   鱼老师说的  哈哈  

评分

参与人数 1荣誉 +2 鱼币 +2 收起 理由
loop + 2 + 2 赞一个!

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-9-17 01:43:59 | 显示全部楼层
cpu数据线是十六位  但是地址线是二十位的

评分

参与人数 1荣誉 +2 鱼币 +2 收起 理由
loop + 2 + 2 赞一个!

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-9-17 10:56:23 | 显示全部楼层

知道了,谢谢你~~~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-9-17 22:02:36 | 显示全部楼层
学习了...........
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-9-17 22:47:33 | 显示全部楼层
1、20位的物理地址肯定是通过地址总线来传输的,而8086的地址总线是20位的,所以,懂了么?
2、出栈以后,栈里面的数据没有清空,除非有新的数据入栈来覆盖

以上是我的理解,希望对你有帮助

评分

参与人数 1荣誉 +2 鱼币 +2 收起 理由
loop + 2 + 2 赞一个!

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-9-18 10:41:26 | 显示全部楼层
Ak.xuer 发表于 2011-9-17 01:43
cpu数据线是十六位  但是地址线是二十位的

8086 CPU地址总线和数据总线都是16位的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-9-18 10:49:01 | 显示全部楼层
zackary 发表于 2011-9-18 10:41
8086 CPU地址总线和数据总线都是16位的

呵呵 不好意思 记错了 地址总线是20位
但我想楼主应该想问的是8086 CPU中的寄存器都是16位的,产生的20位物理地址用16位寄存器是肯定没办法存储的
之前我也有问过类似的问题,但没得到权威的答案,我个人认为有两个地方
1.地址加法器中的特殊的20位寄存器
2.直接就是在地址总线上进行计算的

评分

参与人数 1荣誉 +2 鱼币 +2 收起 理由
loop + 2 + 2 赞一个!

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-9-18 11:20:54 | 显示全部楼层
磨合啊磨合 我的荣誉啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-9-18 20:38:27 | 显示全部楼层
1)地址加法器输出的数据通过20根输出引脚和20根地址线接在一起,至于地址加法器里面是如何将两个16位的(0,1)信号通过移位寄存器和加法器,整成20位的(0,1)信号,我也想知道,如果你非要刨根究底,若能找份8086的器件手册,看看电路是如何搭建的,自然就知道了。
2)数据出栈后,之前栈中的内容已被其他数据覆盖,假如初始状态 (SS):(SP)=2000:10,则
2000:00-0f xx xx xx xx xx xx 00 20 - 00 00 (IP) (CS) 4B 0E       ;4B 0E 可能因不同的cpu而不一样
注意:执行过push 或pop后,(IP) (CS) 4B 0E 总是紧跟着栈顶SP

评分

参与人数 1荣誉 +2 鱼币 +2 收起 理由
loop + 2 + 2 赞一个!

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-9-19 01:56:21 | 显示全部楼层
本帖最后由 tsembrace 于 2011-9-19 01:59 编辑

半夜睡不着,随便猜想一下~
1、对于地址加法器,可以简单化认为:地址加法器必然有20个和地址总线一一对应的引脚,以对应传输地址信息。加法器并不需要“20位”的中转寄存器。例如:段地址9876h,偏移地址1112h。将偏移地址进行分拆,最低位“2”(16进制)直接传入20个引脚对应的最低4位(即0~3位);偏移地址剩余的就是111h,移位操作转成新数'0111h';再将段地址“9876h"与新数'0111h'相加,相加的结果传入对应的4~19位的引脚。

2、栈在物理上也是内存空间。。。当然我晓得这你都清楚~出栈只是压缩了栈空间的定义长度(sp=sp+2),但原来栈顶所在的内存单元仍然有值,只是它不再属于这个栈。

评分

参与人数 1荣誉 +2 鱼币 +2 收起 理由
loop + 2 + 2 很有专研精神。

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-9-19 10:56:11 | 显示全部楼层
tsembrace 发表于 2011-9-19 01:56
半夜睡不着,随便猜想一下~
1、对于地址加法器,可以简单化认为:地址加法器必然有20个和地址总线一一对应 ...

谢谢,我想也是~~~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-9-19 13:34:38 | 显示全部楼层
tsembrace 发表于 2011-9-19 01:56
半夜睡不着,随便猜想一下~
1、对于地址加法器,可以简单化认为:地址加法器必然有20个和地址总线一一对应 ...

再将段地址“9876h"与新数'0111h'相加,相加的结果传入对应的4~19位的引脚。
??
如果这两个12位数相加最高位产生进位怎么办??地址加法器内部电路肯定不止就这么个12位的加法器。

评分

参与人数 1荣誉 +2 鱼币 +2 收起 理由
loop + 2 + 2 有想法。

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-9-19 17:10:07 | 显示全部楼层
wangkaichao2 发表于 2011-9-19 13:34
再将段地址“9876h"与新数'0111h'相加,相加的结果传入对应的4~19位的引脚。
??
如果这两个12位数相加 ...

如果产生进位,则说明段地址和偏移地址的设置有误,那是编程人员在设置段/偏移地址时候自己应考虑的问题,系统检测到有进位,则取消操作或报错或其他,总之不会将错误的地址信息传至地址总线。继续举例吧,进位情况,比如:ds=ffffh,bx=0010h;
这样的设置地址相加后为100000h,已经超过了20根地址线的表示范围,则这个地址设置对于8086来说是错误的;

这个例子,按我之前说的方法,bx中最低位传至0~3号引脚,bx中剩余值为“001”,移位后新数0001h再加上ds,最高位有进位,则报错~
还有。。关于你说的地址加法器内部肯定不止加法原件这么简单,我赞同,只不过这个话题里我的想象只能限于这个。。
我发现自己最近脑子不好了。。。:dizzy:,严重失忆

评分

参与人数 1荣誉 +2 鱼币 +2 收起 理由
loop + 2 + 2 赞一个!

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-9-19 20:34:56 | 显示全部楼层
本帖最后由 lsgo 于 2011-9-20 15:06 编辑

个人理解应该是没有储存的  因为他是加了之后直接寻址的 如果有储存的话 他存储的应该是 段地址和偏移地址    下次如有使用 就从新加下

评分

参与人数 1荣誉 +2 鱼币 +2 收起 理由
loop + 2 + 2 赞一个!

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-8 22:19

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表