|
主题 : : CS:IP表达的寻址地址,能否超出8086CPU的1MB地址空间? [已解决] |
回复[ 8次 ]
点击[ 779次 ] | |
|
|
|
|
[帖 主]
[ 发表时间: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是否也如此? | | |
|
|
|
|
[第1楼]
[ 回复时间:2008-07-08 08:26 ]
[引用]
[回复]
[ top ] | |
荣誉值:5
信誉值:0
注册日期:2008-07-04 19:03 |
之所以这么想,是因为想到了8086芯片的数控设备上,编程是不是应考虑注意这个问题? | | |
|
|
|
|
[第2楼]
[ 回复时间:2008-07-08 09:55 ]
[引用]
[回复]
[ top ] | |
荣誉值:56
信誉值:0
注册日期:2008-01-19 14:51 |
段地址*16+偏移地址=物理地址 这个东东是 根据 20根地址线来的, 8086的寻址能力是它具有且只有20根地址线决定的。
lz理解8086的寻址应该着眼与,8086cpu的 地址总线宽度。 | | |
|
|
|
|
[第3楼]
[ 回复时间:2008-07-08 09:59 ]
[引用]
[回复]
[ top ] | |
荣誉值:56
信誉值:0
注册日期:2008-01-19 14:51 |
8086cpu :20根地址线,16位数据线,刚才说的遗漏了数据线,呵呵。
因为8086 cpu 的总线是这样的,所以“地址”以数据的形式表达,一个16位数据是“能力有限的”
。所以变通的做法用一个左移4位,加上另一个,来获得一个20位的数据,用它来寻址。其实“数据”和“地址”都是总线上的高低电平,或者说以高低电平表达的“二进制信息”。 | | |
|
|
|
|
[第4楼]
[ 回复时间:2008-07-09 09:26 ]
[引用]
[回复]
[ top ] | |
荣誉值:5
信誉值:0
注册日期:2008-07-04 19:03 |
嗯,着眼于总线宽度确实没错,但考虑段址与偏址取值范围也是需要的,这与数学中函数的值域和定义域的情况类似.
对于普通的编程,这里估计确实是我想的太多了.
不过对于8086芯片的数控设备,这样考虑问题我想还是有必要的,从可靠性上讲,至少要保证即使在极端情况下,也不会因段址和偏址设置原因,从而导至程序出错. | | |
|
|
|
|
[第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就可以表示完了,剩下的应该利用不到吧。 | | |
|
|
|
|
[第6楼]
[ 回复时间:2008-07-25 14:32 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2008-07-25 14:29 |
超出范围会回滚,就是截掉高于20位的内容,跟20位溢出同个意思 | | |
|
|
|
|
[第7楼]
[ 回复时间:2008-07-25 22:47 ]
[引用]
[回复]
[ top ] | |
荣誉值:5
信誉值:0
注册日期:2008-07-04 19:03 |
嗯,感觉上应该是超出范围会回滚,就如栈顶指针一样.但实际在WIN模拟DOS下,却不回滚.有其真实内存地址.这点在DEBUG中查验了,估计在8086实DOS下会有变吧. | | |
|
|
|
|
[第8楼]
[ 回复时间:2008-07-26 09:44 ]
[引用]
[回复]
[ top ] | |
荣誉值:5
信誉值:0
注册日期:2008-07-04 19:03 |
此贴由 贴主 于 [ 2008-07-26 09:44 ] 结贴。 结贴原因:问题已解决 | | |