找回密码
 register

QQ登录

只需一步,快速开始

查看: 46|回复: 1

[汇编语言] [零基础入门学习]·09·寄存器·段的概念·内存单元地址小结·检测点2.2

[复制链接]

[汇编语言] [零基础入门学习]·09·寄存器·段的概念·内存单元地址小结·检测点2.2

[复制链接]
  • 打卡等级:热心大叔
  • 打卡总天数:91
  • 打卡月天数:14
  • 打卡总奖励:91
  • 最近打卡:2025-01-15 02:59:34
Waylee

主题

0

回帖

1万

积分

仙帝

积分
11890
Waylee 2024-12-23 18:20 | 显示全部楼层 |阅读模式 | Google Chrome | Windows 10

马上注册,查看网站隐藏内容!!

您需要 登录 才可以下载或查看,没有账号?register

×

2.8 段的概念

我们注意到,“段地址”这个名称中包含着“段”的概念。这种说法可能对一些学习者产生误导,使人误以为内存被划分成一个一个的段,每一个段有一个段地址。如果我们在一开始形成了这种认识,将影响以后对汇编语言的深入理解和灵活运用。

其实,内存并没有分段,段的划分来自于CPU,由于8086CPU用“基础地址(段地址x16)+偏移地址=物理地址”的方式给出内存单元的物理地址,使得我们可以用分段的方式来管理内存。如图2.9所示,我们可以认为:地址10000H~100FFH的内存单元组成一个段,该段的起始地址(基础地址)为10000H,段地址为1000H,大小为100H;我们也可以认为地址10000H~1007FH、10080H~100FFH的内存单元组成两个段,它们的起始地址(基础地址)为:10000H和10080H,段地址为:1000H和1008H,大小都为80H。

006.webp

以后,在编程时可以根据需要,将若干地址连续的内存单元看作一个段,用段地址x16定位段的起始地址(基础地址),用偏移地址定位段中的内存单元,有两点需要注意:段地址x16必然是16的倍数,所以一个段的起始地址也一定是16的倍数;偏移地址为16位,16位地址的寻址能力为64KB,所以一个段的长度最大为64KB。

内存单元地址小结

CPU访问内存单元时,必须向内存提供内存单元的物理地址。8086CPU的内部用段地址和偏移地址位移相加的方法形成最终的物理地址。

思考下面的两个问题。

(1)观察下面的地址,你有什么发现?

物理地址 段地址 便宜地址
21F60H 2000H 1H60H
- 2100H 0F60H
- 21F0H 0060H
- 21F6H 0000H
- 1F00H 2F60H

结论:CPU可以用不同的段地址和偏移地址形成同一个物理地址。

比如CPU要访问21F60H单元,则它给出的段地址SA和便宜地址EA满足SAx16+EA=21F60H即可。

(2)如果给定一个段地址,则通过变化偏移地址来进行寻址,最多可定位多少个内存单元?

结论:便宜地址16位,变化范围为0~FFFFH,仅用便宜地址来寻址最多可寻64KB个内存单元。

比如给定段地址1000H,用偏移地址寻址,CPU的寻址范围为:10000H~1FFFFH。

“数据在21F60H内存单元中”这句话对于8086PC机一般不这样讲,取而代之的是两种类似的说法:①数据存在内存2000:1F60单元中;②数据存在内存的2000H段中的1F60H单元中,这两种描述都表示“数据在内存21F60H单元中”。

可以根据需要,将地址连续、起始地址为16的倍数的一组内存单元定义为一个段。

检测点 2.2

  1. 给定段地址为0001H,仅通过变化偏移地址寻址,CPU的寻址范围为____
  2. 有一数据存放在内存 20000H 单元中,现给定段地址为SA,若想用偏移地址寻到此单元,则SA应满足的条件是:最小为__,最大为__
    提示:反过来思考一下,当段地址给定为多少,CPU无论怎么变化偏移地址都无法寻到20000H单元。

没有通过检测点请不要向下学习!
做完后再看二楼的参考答案

  • 打卡等级:热心大叔
  • 打卡总天数:91
  • 打卡月天数:14
  • 打卡总奖励:91
  • 最近打卡:2025-01-15 02:59:34
楼主
Waylee 楼主

主题

0

回帖

1万

积分

仙帝

积分
11890
Waylee 2024-12-23 19:01 | 显示全部楼层 | Google Chrome | Windows 10

检测点 2.2 参考答案

一、给定段地址为0001H,仅通过变化偏移地址寻址,CPU的寻址范围为00010H1000FH
解析
在8086中,物理地址是由段地址和偏移地址组成的,即物理地址=段地址SA * 16 + 偏移地址EA。而上题中给定段地址为0001H,乘以16后为00010H,而偏移地址范围为0~FFFFH,所以根据物理地址公式可得出寻址范围为 00010H + 0 = 00010H ~ 00010H + FFFFH = 1000FH


二、有一数据存放在内存 20000H 单元中,现给定段地址为SA,若想用偏移地址寻到此单元,则SA应满足的条件是:最小为1001H,最大为2000H
解析
求最大,已知偏移地址的范围从0~FFFFH,则当偏移地址EA=0时,物理地址20000H = SA * 16 + 0,可得出最大段地址SA = 2000H
求最小,当偏移地址EA = FFFFH时,物理地址20000H = SA * 16 +FFFF,此时的 SA * 16 = 10001,而段地址SA还需要除以16,因而得出SA = 01000H,但是此时加上偏移地址再去反推物理地址时,最大的寻址地址为1FFFFH,少了1,无法寻到,所以此时段地址需要再加1即01000H + 1 =1001H才能寻到。


提示:反过来思考一下,当段地址给定为多少,CPU无论怎么变化偏移地址都无法寻到20000H单元。
答:小于1001H或大于2000H时无法寻到20000H。

您需要登录后才可以回帖 登录 | register

本版积分规则

雪舞知识库 | 浙ICP备15015590号-1 | 萌ICP备20232229号|浙公网安备33048102000118号 |天天打卡

GMT+8, 2025-1-15 17:19 , Processed in 0.120894 second(s), 8 queries , Redis On.

Powered by XueWu Licensed

Copyright © Tencent Cloud.

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