. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->寄存器(CPU工作原理)
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  检测点2.2  [待解决] 回复[ 3次 ]   点击[ 432次 ]  
neur2520
[帖 主]   [ 发表时间:2011-04-29 10:08 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2011-04-28 17:19
有一数据存放在内存20000H单元中,问当段地址给定多少时,CPU无论怎么变化偏移地址都无法寻找到20000H单元?
请给个具体思路,重在思路,不在答案,授人以鱼不如授人以渔,谢谢。
段地址不会是在给定20000H的时候无法寻到吧?
tsembrace
[第1楼]   [ 回复时间:2011-04-29 11:32 ]   [引用]   [回复]   [ top ] 
荣誉值:31
信誉值:3
注册日期:2009-06-15 19:20
给你看下我的学习笔记吧:
一、汇编语言-检测点2.2
(1)给定段地址为0001H,仅仅通过变化偏移地址寻址,CPU的寻址范围?
0001H*16+0000H——0001H*16+FFFFH即00010H~1000FH。
(2)一数据存放在内存20000H单元中,现给定段地址为SA,若用偏移地址寻到此单元,则SA最小最大各多少?
20000H=(SA*16+EA);EA取值范围:0000H~FFFFH---->SA*16=(20000H~10001H)
则SA为10001H/16~2000H;注意10001H/16取整应+1,则SA最小为1001H,最大为2000H。
二、
*8086地址总线宽度为20,则其可寻址能力为1MB,地址编码为5位(16进制),而其单次处理数据为16位,即4位(16进制),其如何处理的?
8086引入段地址和偏移地址的概念,各为16位,在向cpu输出指令中确定段地址及偏移地址,通过CPU内部总线将该两个地址传输至CPU内部的”地址加法器“部件,该部件作:“段地址*16+偏移地址”运算,得出最终访问内存的物理地址(20位宽度);再由CPU内部的输入输出控制电路通过外部20位地址总线寻址。
*段地址的理解。
段地址作为CPU内部的概念,对内存单元来说不存在“分段”的概念,内存并未被分段划分。但对于内存单元地址,逻辑上可以按“分段”去考虑,比如:
a.内存单元物理地址10000H~100FFH,段地址为1000H,偏移地址为00H~FFH;
b.内存单元物理地址10020H~100FFH,段地址可以为1000H,其偏移地址为20H~FFH;段地址也可以为1002H,则其偏移地址为00H~DFH。
---------------
具体针对你这个问题,在上面“一”中的第2个问题就是,只要记得对8086来说其内存单元地址表达式为:段地址×16+偏移地址,这道题其实也就比较容易分析了,而偏移地址的取值范围为0000H~ffffH,则段地址取多少可查询到20000H,再简化为数学问题,就是对x=16*a+b,当ffffh>=b>=0时,a取何范围值可使得x=20000h,a\b\x均为整数。这道数学题应该很容易解吧。
其次,如何去理解内存单元地址的表达式,可看下上面的“二”中第一部分。
pascal.s
[第2楼]   [ 回复时间:2011-05-07 00:05 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2011-05-06 06:09
由于SA*10H+EA=20000H,并且0H<=EA<=FFFFH,所以0H<=(20000H - SA*10H)<=FFFFH,即:10001H<=SA*10H<=20000H.由于SA是整数,所以1001H<=SA<=2000H. 总结:当段地址小于1001H或者大于2000H时,偏移地址无论怎么变化都无法寻到20000H内存单元。
tily
[第3楼]   [ 回复时间:2011-06-04 10:51 ]   [引用]   [回复]   [ top ] 
荣誉值:12
信誉值:1
注册日期:2011-06-04 00:01
当1001H<=SA<=2000H时方程有解
那么方程无解当然只有:SA小于1001H或者大于2000H
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved