16位汇编-段寄存器-需要复习-练习题未做
1. 给定段地址为0001H,仅通过变化偏移地址寻址,CPU的寻址范围为 _______ 到_______H 。
物理地址=SA*16+EA EA的变化范围为0h~ffffh 物理地址范围为(SA*16+0h)~(SA*16+ffffh) 现在SA=0001h,那么寻址范围为 (0001h*16+0h)~(0001h*16+ffffh) =0010h~1000fh
首先,cpu的寻址能力和地址总线的宽度(即地址总线的位数)有关。假设CPU寻址上限为Max,地址总线的宽度为N,那么:Max=2^N,即cpu寻址范围为:0到2^N。
例:地址总线为16位,侧Max=2^16=65535=0xFFFFh,
即CPU得寻址范围为:0x0000h到0xFFFFh.
假设你所用CPU的地址总线也为16位,那么偏移地址的变化范围为:0x0000h到0xFFFFh。
给定段地址为0x0001h,则cpu的寻址范围为:
(0x0000h+0x0001h)到(0xFFFFh+0x0001h)=0x0001h到0x10000h.
据说:物理地址=段地址*16+偏移地址
那实际cpu的寻址范围就为:
(0x0000h+0x0001h*16)到(0xFFFF
h+0x0001h*16)
=0x0010h到0x1000Fh.
2.有一数据存放在内存20000H单元中,现给定段地址为SA,若想用偏移地址寻到此单元。则SA应满足的条件是:最小为 ___(20000H-FFFFH)/16____H ,最大为___(20000-0000)/16_____H 。
20000=sa*16-(0000H-FFFFH)
提示:反过来思考,当段地址给定为 1001H 以下和 2000H 以上,CPU无论怎么变化偏移地址都无法寻到20000H单元?
3.8086/8088上运行的程序某一时刻最多可以访问几个段?程序最多可以具有多少个段?程序至少有几个段?
因为8086/8088只有4个段寄存器CS/DS/SS/ES,在任意时刻,只能有4个段可用。访问更多的段需要切换段寄存器的值。
64
4.8086/8088如何寻址1M字节的存储器物理地址空间?在划分段时,必须满足的两个条件是什么?最多可以把1M字节空间划分成几个段?最少可把1M字节地址空间划分为几个段?
s5.存储单元的逻辑地址如何表示?存储单元的20位物理地址如何构成?
逻辑地址由两个16位的地址分量构成,一个为段基值,另一个为偏移量。两个分量均为无符号数编码。 物理地址 =逻辑地址*16+偏移地址
6、当段重叠时,一个存储单元的地址可以表示成多个逻辑地址。请问物理地址12345H可表示多少个不同的逻辑地址?偏移最大的逻辑地址是什么?偏移最小的逻辑地址是什么?
0000H
FFFFH
7、什么情况下,根据段值和偏移确定的存储单元地址会超出1M?8086如何处理这种情况?