. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->寄存器(CPU工作原理)
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  CS:IP表达的寻址地址,能否超出8086CPU的1MB地址空间?  [已解决] 回复[ 8次 ]   点击[ 779次 ]  
asm_sande
[帖 主]   [ 发表时间:2008-07-07 23:02 ]   [引用]   [回复]   [ top ] 
荣誉值:5
信誉值:0
注册日期:2008-07-04 19:03
前辈们好:
CS:IP如果从取值范围上看,段地址、偏移地址,均可取0000H~FFFFH,由公式:段地址*16+偏移地址=物理地址,得出物理地址范围将在00000H~10FFEFH之间(FFFFH*16+FFFFH=FFFF0H+FFFFH=10FFEFH),而10FFEFH值将超出预定的16进制的5位FFFFFH。显然,利用段地址值左移位后与偏移地址取和将获得大于单纯5位16进制数所能表达的寻址能力.如果在某一特定的如20根地址总线的情况下(实际是2^20=FFFFFH+1H=100000H=1048956个),段地址:偏移地址所能表达的寻址能力将大于总线实际所能达到的寻址能力(FFFFH*16+FFFFH=FFFF0H+FFFFH=10FFEFH=1114095 加上0H,即1114096个),显然,为了保证物理内存地址的唯一存在并可寻,段地址与偏移地址的取值范会因实际情况而变。当段地址取值变化到大于F000H时,偏移地址取值范围将会相应缩小。如,当段地址为FF00H时,左移后就成为FF000H,此时,若偏移地址取值大等于1000H则其和表达的地址码就大于100000H,将超出20根地址总线寻址范围,因此:此时偏移地址取值只能取0000H~0FFFH之间。
不过,再用windows模拟dos的debug中实验,却发现CS:IP在全址可寻并有意义。因此弄不懂8086是否也如此?
asm_sande
[第1楼]   [ 回复时间:2008-07-08 08:26 ]   [引用]   [回复]   [ top ] 
荣誉值:5
信誉值:0
注册日期:2008-07-04 19:03
之所以这么想,是因为想到了8086芯片的数控设备上,编程是不是应考虑注意这个问题?
deepblue
[第2楼]   [ 回复时间:2008-07-08 09:55 ]   [引用]   [回复]   [ top ] 
荣誉值:56
信誉值:0
注册日期:2008-01-19 14:51
段地址*16+偏移地址=物理地址 这个东东是 根据 20根地址线来的, 8086的寻址能力是它具有且只有20根地址线决定的。

lz理解8086的寻址应该着眼与,8086cpu的 地址总线宽度。
deepblue
[第3楼]   [ 回复时间:2008-07-08 09:59 ]   [引用]   [回复]   [ top ] 
荣誉值:56
信誉值:0
注册日期:2008-01-19 14:51
8086cpu :20根地址线,16位数据线,刚才说的遗漏了数据线,呵呵。

因为8086 cpu 的总线是这样的,所以“地址”以数据的形式表达,一个16位数据是“能力有限的”
。所以变通的做法用一个左移4位,加上另一个,来获得一个20位的数据,用它来寻址。其实“数据”和“地址”都是总线上的高低电平,或者说以高低电平表达的“二进制信息”。
asm_sande
[第4楼]   [ 回复时间:2008-07-09 09:26 ]   [引用]   [回复]   [ top ] 
荣誉值:5
信誉值:0
注册日期:2008-07-04 19:03
嗯,着眼于总线宽度确实没错,但考虑段址与偏址取值范围也是需要的,这与数学中函数的值域和定义域的情况类似.
对于普通的编程,这里估计确实是我想的太多了.
不过对于8086芯片的数控设备,这样考虑问题我想还是有必要的,从可靠性上讲,至少要保证即使在极端情况下,也不会因段址和偏址设置原因,从而导至程序出错.
hardyleumg
[第5楼]   [ 回复时间:2008-07-21 14:00 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2008-07-20 18:33
我们一共8位16进制的数字表示,范围是0-ffff:ffff,一共4G=2^32。
对于8086的CPU,只要0-ffff:f就可以表示完了,剩下的应该利用不到吧。
gongtao0607
[第6楼]   [ 回复时间:2008-07-25 14:32 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2008-07-25 14:29
超出范围会回滚,就是截掉高于20位的内容,跟20位溢出同个意思
asm_sande
[第7楼]   [ 回复时间:2008-07-25 22:47 ]   [引用]   [回复]   [ top ] 
荣誉值:5
信誉值:0
注册日期:2008-07-04 19:03
嗯,感觉上应该是超出范围会回滚,就如栈顶指针一样.但实际在WIN模拟DOS下,却不回滚.有其真实内存地址.这点在DEBUG中查验了,估计在8086实DOS下会有变吧.
asm_sande
[第8楼]   [ 回复时间:2008-07-26 09:44 ]   [引用]   [回复]   [ top ] 
荣誉值:5
信誉值:0
注册日期:2008-07-04 19:03
此贴由 贴主 于 [ 2008-07-26 09:44 ] 结贴。 结贴原因:问题已解决
得分情况:
此问题已结贴!
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved