. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->基础知识
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  关于虚拟8086CPU模式下可寻址空间大于1M的问题  [已解决] 回复[ 9次 ]   点击[ 616次 ]  
zhllhz
[帖 主]   [ 发表时间:2010-10-31 10:45 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:4
注册日期:2009-12-18 19:17
大家可以试验

在DEBUG中,用D命令查看 FFFF:0处往后的内存有多少?

看是不是以循环的方式访问了其他地方的内存呢?

大家多讨论讨论
qucklay
[第1楼]   [ 回复时间:2010-10-31 12:58 ]   [引用]   [回复]   [ top ] 
荣誉值:10
信誉值:0
注册日期:2009-06-25 23:01
内存回环
zhllhz
[第2楼]   [ 回复时间:2010-10-31 15:51 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:4
注册日期:2009-12-18 19:17
回复:[第1楼]
------------------
^_^请教 :回环的哪段内存
masmaster
[第3楼]   [ 回复时间:2010-10-31 16:55 ]   [引用]   [回复]   [ top ] 
荣誉值:268
信誉值:12
注册日期:2010-06-18 22:19
在8086cpu中,有效地址超过FFFFH时, 则取64K的模作为有效地址。比如:

d:\MASM>debug
-dffff:fff0 ;显示ffff:fff0~ffff
FFFF:FFF0  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................
-d          ;当偏移地址超过FFFFH的时候, debug从FFFF:0000开始显示,也即产生环绕。
FFFF:0000  EA 5B E0 00 F0 30 38 2F-33 31 2F 30 37 00 FC 00   .[...08/31/07...
FFFF:0010  34 12 00 00 00 00 00 00-00 00 00 00 00 00 00 00   4...............
FFFF:0020  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................
FFFF:0030  70 00 2E 8E 06 30 00 BF-7F 01 B9 02 00 AB 47 47   p....0........GG
FFFF:0040  E2 FB CB 56 50 51 52 57-55 1E 06 53 8B EC 8B 76   ...VPQRWU..S...v
FFFF:0050  12 2E 8E 1E 30 00 8B 44-02 A2 22 00 88 26 08 01   ....0..D.."..&..
FFFF:0060  8B 34 C4 1E 18 00 26 8A-47 01 26 8A 67 0D 26 8B   .4....&.G.&.g.&.
FFFF:0070  4F 12 26 8B 57 14 97 26-8A 47 02 2E 3A 04 73 2C   O.&.W..&.G..:.s,
-
zhllhz
[第4楼]   [ 回复时间:2010-11-02 15:09 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:4
注册日期:2009-12-18 19:17
回复:[第3楼]
------------------
恩 我理解你的意思

请你想想这个问题:
8086虚拟模式下 FFFF:FFF0 等价于 10FFE0H,
10FFE0H已经超出了1M的寻址空间,
而我试验时没有发现“超出1M的内存空间的内容”和“0到FFFFFH中的某一段的内容”相同,
所以我感觉不是内存循环的问题。
qucklay
[第5楼]   [ 回复时间:2010-11-03 18:01 ]   [引用]   [回复]   [ top ] 
荣誉值:10
信誉值:0
注册日期:2009-06-25 23:01
由于FFFF:FFF0在逻辑上符合CPU的分段体系,OS不认为它是个错误的地址,并在DOS下从内存的低部访问。这就像CPU在处理算术运算FFFF+1h时不告诉你“容量已经满了”,而是产生从0开始的结果。
在DOS下访问大于1MB的内存必须开启A20地址线。
保护模式下的虚拟8086不在此讨论范围内。
masmaster
[第6楼]   [ 回复时间:2010-11-03 20:56 ]   [引用]   [回复]   [ top ] 
荣誉值:268
信誉值:12
注册日期:2010-06-18 22:19
回复:[第5楼]
------------------
嗯, 正解
zhllhz
[第7楼]   [ 回复时间:2010-11-03 21:13 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:4
注册日期:2009-12-18 19:17
回复:[第5楼]
------------------
恩 通过你的回答和网上查的一些资料,我有些理解了这个A20。

虚拟8086模式可以这样理解吧:保护模式下,虚拟出的是开启了A20的8086模式。
(什么模式与是否开启A20无关)
zhllhz
[第8楼]   [ 回复时间:2010-11-03 21:15 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:4
注册日期:2009-12-18 19:17
关于A20地址线的一个网址:
http://student.csdn.net/space.php?uid=45960&do=blog&id=11613
zhllhz
[第9楼]   [ 回复时间:2010-11-04 16:12 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:4
注册日期:2009-12-18 19:17
此贴由 贴主 于 [ 2010-11-04 16:12 ] 结贴。 结贴原因:问题已解决
得分情况: 3楼(masmaster):3分   5楼(qucklay):10分  
此问题已结贴!
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved