鱼C论坛

 找回密码
 立即注册
查看: 11803|回复: 21

汇编中段地址和物理地址怎么理解

[复制链接]
发表于 2013-8-12 03:23:45 | 显示全部楼层 |阅读模式
4鱼币
最近看王爽老师的汇编,看到了物理地址和段地址,有下面几点不明白
1:段地址和基地址有什么区别?(我理解是它们都是用来做偏移的起始地址,请问这样理解对吗?)
2:划分一个段地址,最大是64KB,那在内存中它的起始地址和结束地址怎么算?
3:64KB是一个容量,内存的物理地址又是用十六进制表示,一个是容量,一个是数值,这个怎么算它的起始地址和结束地址?

算这个段地址搞了我几天也搞不明白,反复看书,看视频就是搞不懂(小鱼甲老师的视频感觉就是照本宣科读完就收工,说实话如果看书不明白的话,看小甲鱼老师的视频基本上也是看不明白的,因为他都是照书上念{:1_1:}。当然可能是我太笨了)。希望各位大牛能帮我解答下这个问题,要不然我这是吃不香也睡不着啊。。痛苦啊。

最佳答案

查看完整内容

看的时候我理解的是。 8086CPU内存空间有1MB,但8086CPU的地址总线只有十六位,2的16次方=65536(0~65535)等于十六进制的FFFF,65536B/1024=64kb,也就是一个段的长度。 最后引进了段地址*16(十进制)+偏移地址=物理地址 因为物理地址表达方法是十六进制*16相当于把十六进制向前移了1位,4个二进制等于16进制,FFFFF(10485575)/1024=1023KB(0~1023KB),【2的20次方等于10485575/1024=1024kb】 1024KB等于1MB,所以段地址只用 ...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-8-12 03:23:46 | 显示全部楼层
看的时候我理解的是。
8086CPU内存空间有1MB,但8086CPU的地址总线只有十六位,2的16次方=65536(0~65535)等于十六进制的FFFF,65536B/1024=64kb,也就是一个段的长度。
最后引进了段地址*16(十进制)+偏移地址=物理地址
因为物理地址表达方法是十六进制*16相当于把十六进制向前移了1位,4个二进制等于16进制,FFFFF(10485575)/1024=1023KB(0~1023KB),【2的20次方等于10485575/1024=1024kb】
1024KB等于1MB,所以段地址只用移一位在加上偏移地址,用【段地址:偏移地址】(debug)的方法就可以表达8086CPU索引的1MB了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-8-12 05:13:34 | 显示全部楼层
1,你理解的应该不对吧,段地址从某程度上来说是基地址,但是基地址并不等于是段地址
对于1的问题,我觉得我们没必要去深究因为王爽老师这本书我记得没有让我们去探讨基地址的问题。
如果要探讨基地址的问题,请高手出来探讨吧我也不是很了解
2,划分一个段地址,最大是64KB
为什么是64KB,首先给定一个段地址,比如段地址为0000h,它的偏移地址最小是0h最大是ffffh对吧,总共有2^16(2的16次方)=64K
3,你这个问题和第二个问题一样
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-8-12 07:39:47 | 显示全部楼层
第一个问题 我觉得楼上的回答已经可以了 真的没必要去研究这个问题 基地址昨天我看甲鱼的PE结构好像看到了但不是很懂
第二个问题 物理地址 = 段地址:偏移地址  所以范围是段地址*16+0000~段地址*16+FFFF
FFFF就是二进制的 十六个一 0000就是二进制的十六个零
第三个问题
貌似每个段都有断首和断尾的标志吧比如OD载入程序后断尾一般就是retn
本菜也只是学到第十章如能帮到你申请最佳
如有说错望请见谅
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-8-12 08:39:11 | 显示全部楼层
段地址和基地址的区别我也查过一下 ,段地址从某程度上来说是基地址,但是基地址并不等于是段地址 二楼说的一样。这个没有必要去深究了~~~理解段*16+偏移就行了。对后续的学习没有影响。
第二个问题,比如段地址为0fffh 偏移地址为 0001H 那么它组合起来来的物理地址就是0fff1h。是一个二十位的物理地址  那么它最大多大呢  就是0fffH*16+ffffh 是最大了  
容量怎么算呢? 一个地址的内存段元为一个byte  一个字节  一个字节等于8个bit 位 那么 ffffh 一个十六进制位为一个byte  那么它就有ffff个byte 接下来就剩下换算了,把它换算成kb就行
3.我们都知道 是段*16+偏移 那么它的起始地址就是段地址 段*16确定了一个内存单元是不是 ?这个内存单元还是一个20位的  那么它就是从0fff0h开始的 它就是从这个地方开始去寻找数据或者说是指令吧~~~~
---------------------------------------
以上为个人的理解 其实也是挺菜 的。朋友可以验证一下  如果有纰漏欢迎指出。  
关于小甲鱼的视频 。照本宣科倒是没这么严重~~~汇编本来就比较的难学。一遍就看懂那是一种境界了。前3章我反反复复 看了不下6遍才看懂那么一丁点。小甲鱼的视频从来都是写好课件再讲。但是他有照着一个概念念过去就完事了吗?朋友可以到看看他写的课件压根就不多 就几个字而已,他做的课件只是给他自己看看的 ,朋友你可以自己录制一段视频,看看如果不写大纲不写课件讲出来的效果怎么样,我录过几次,非常的痛苦 有的时候半天想不起内容来。好了这个话题就不说了。分享一下我学习 汇编的一些看法吧。首先 做笔记    第二把课后题完成(我就不大老实,有些直接略过了),重视前三章,因为它的知识贯穿整个 8086汇编
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-8-12 09:37:01 | 显示全部楼层
1、基地址 = 段地址 × 16
2、一个大小为64KB的段
起始地址 = 段寄存器的值(段地址) × 16 + 0
结束地址 = 段寄存器的值(段地址) × 16 + 0ffffh
3、8086cpu为16位,ip为16位寄存器,2^16 = 64(2^6) × 1024(2^10) = 64KB

逻辑上,基地址 = 起始地址,理论上不等于
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-8-12 16:51:59 | 显示全部楼层
王爽老师的书很经典,第一遍看不懂没关系,不懂得话,先记下来,接着看完书,再看第二遍。。。我是这样做的。回到正题,回答你的问题:基本都是按书上说的:
1,基地址(基础地址)=段地址*16。(P33加黑字,P34加黑字及后面一句话:段地址*16可看作基础地址);
2,段是人为规定的,计算机不会自动识别,所以段的起始地址也就是由我们来设定,设置了段起始地址后,根据段内容的大小来计算段的结束地址。段的大小为不大于64kB。举个例子:我在编程时规定代码段的起始地址为0x0010H,代码段的内容大小为16个字节,所以该代码段的结束地址(字节地址)就是0x0010H+16-1=0x001FH。
3,第三个问题主要是你概念混淆了。一般我们所的物理地址指的是某个单位的起始地址。这个某个单位是字节、字、或者某一段。
对于字节单元的物理地址:因为只有一个存储单元,所以其物理地址就是该单元的编号。
对于字单元的物理地址:因为只有两个存储单位,所以其物理地址就该单元的低字节单元地址(起始地址=小编号,结束地址=起始地址+2-1=大编号)。
对于段的物理地址:段的内容大小为"容量",所以其物理地址(起始地址)就是该段的低字节单元的编号,结束地址=起始地址+容量-1.
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-8-13 00:32:42 | 显示全部楼层
但是我觉的视频中还有一个小视频可以理解的很清楚啊,就是向左偏移一位的意思啊,如果是二进制就是向左偏移4位,加上偏移地址!搞定!收工!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-8-13 12:19:18 | 显示全部楼层

回答的不错,有兴趣加群: 176658528  我们聊聊,
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-8-13 12:34:54 | 显示全部楼层
怡静 发表于 2013-8-13 12:19
回答的不错,有兴趣加群: 176658528  我们聊聊,

加群了.咱也是一个新人刚入门= =
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-8-13 12:38:20 | 显示全部楼层
5元 发表于 2013-8-13 12:34
加群了.咱也是一个新人刚入门= =

就是有你们这样的新人支持,我们论坛的工作才好做,我看你回答新人问题不错,
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-8-13 12:46:10 | 显示全部楼层
上面说的已经很详细了。
我的理解只是补充一下:
    物理地址就是真正的试试在在的地址。
    至于什么偏移地址,段地址,都是为了补充硬件上的缺陷而想出来的寻址办法罢了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-8-13 22:00:00 | 显示全部楼层
非常感谢各位的回复,这分怎么给人,,点哪?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-8-16 23:13:27 | 显示全部楼层
支持一下,学习了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-8-18 16:27:37 | 显示全部楼层
物理地址是怎么算的啊?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-8-18 17:03:38 | 显示全部楼层
楼上都说得比较清楚了,只是在基址这个概念上,我的看法和5楼一样:基址首先就是一个物理地址,是20位的,它表示的是一段内存的起始地址;而段地址只是寻址时的概念,两者不一致。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-8-18 18:05:57 | 显示全部楼层
根据你们的说法,有1M的物理地址那么1M=1024 x1024=1048576个位是不是他的物理地址就是0-1048576?????
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-8-18 19:43:30 | 显示全部楼层
Crazy迷恋. 发表于 2013-8-12 08:39
段地址和基地址的区别我也查过一下 ,段地址从某程度上来说是基地址,但是基地址并不等于是段地址 二楼说的 ...

不愧是汇编的版主 自愧不如 ~~~~(>_<)~~~~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-8-20 21:31:35 | 显示全部楼层
继续酱油{:2_27:}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-8-21 23:42:30 | 显示全部楼层
527505583 发表于 2013-8-13 22:00
非常感谢各位的回复,这分怎么给人,,点哪?

请问你需要给谁呢?告诉我几楼~~~???我帮你处理或者自己处理都行
在楼层下边有一个选项是选为答案的 选项 可以点击它来完成悬赏。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-4-20 11:29

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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