中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 搜索 | 上传 | 帮助 »
作者:
标题: 重要发现,纯DOS下,直接寻址4G 上一主题 | 下一主题
cxdzxc
新手上路





积分 10
发帖 4
注册 2010-6-13
状态 离线
『楼 主』:  重要发现,纯DOS下,直接寻址4G

重要发现,纯DOS下,不操作CR0,不装载描述符,直接寻址4G,欢迎验证 romdizhi equ 0fffffff0h mov esi,romdizhi huancun equ 80000h qushu: xor ax,ax mov ds,ax mov es,ax mov edi,huancun mov ecx,10h/4 db 67h ;就是这句,非常关键 rep movsd mov ax,huancun/10h mov ds,ax mov es,ax [ Last edited by cxdzxc on 2010-6-14 at 10:09 ]


2010-6-14 10:06
查看资料  发短消息  网志   编辑帖子  回复  引用回复
cxdzxc
新手上路





积分 10
发帖 4
注册 2010-6-13
状态 离线
『第 2 楼』:  

topic.csdn.net/u/201 ... hpsmouse ()鼠() 等 级: #15楼 得分:0回复于:2010-06-14 09:50:54验证成功,不过这个 0x67 好像只对 movs 有用,对一般的 mov 没用。


2010-6-14 11:01
查看资料  发短消息  网志   编辑帖子  回复  引用回复
cxdzxc
新手上路





积分 10
发帖 4
注册 2010-6-13
状态 离线
『第 3 楼』:  

cnzdgs (满天星\n技术问题请勿私聊) 等 级: 2 更多勋章 #40楼 得分:0回复于:2010-06-15 01:54:48 16位代码中加上67H前缀就表示使用32位寻址,在实模式下也可以使用32位寻址,但要求相关段寄存器必须已装入适当的描述符,貌似还要求段寄存器的当前值必须为0(这点未验证过)。 在Windows的虚拟DOS环境中不允许使用32位寻址;在虚拟机中则要依赖于“虚拟”的具体实现,能否运行未知。在某些实体机纯DOS环境中可以运行,是由于启动时BIOS程序曾切入过保护模式,并且在ds、es中装入了32位段描述符,而在切回实模式时没有清除,所以在实模式中仍可使用。可以做个简单的验证,自己写一小段程序,切入保护模式,将ds、es装入空描述符,然后再切回实模式,之后再运行这段程序就会出问题了。


2010-6-15 10:08
查看资料  发短消息  网志   编辑帖子  回复  引用回复
cxdzxc
新手上路





积分 10
发帖 4
注册 2010-6-13
状态 离线
『第 4 楼』:  

cxdzxc 等 级: #42楼 得分:0回复于:2010-06-15 09:30:51 经过实验,王老师和DelphiGuy说的是正确的,应该是我的BIOS---在ds、es中装入了32位段描述符,而在切回实模式时没有清除,所以在实模式中仍可使用 下面帖出实验代码: org 100h cli xor eax,eax mov ax,cs shl eax,4 add [gdtzhizhen+2],eax lgdt [gdtzhizhen] mov eax,cr0 or al,1 mov cr0,eax mov bx,gdt1-gdt0 mov ds,bx mov es,bx and al,0feh mov cr0,eax mov ah,4ch int 21h gdt0 dd 0,0 gdt1 db 0ffh,0ffh,0,0,0,92h,0fh,0 gdtzhizhen dw $-gdt0,gdt0,0 ---------------------------- 用NASM编译成一个COM文件,先在DOS下运行这个文件,然后DEBUG 装入先前的实验代码,G命令运行就会死机了


2010-6-15 10:09
查看资料  发短消息  网志   编辑帖子  回复  引用回复
netwinxp
高级用户





积分 741
发帖 366
注册 2007-7-25
状态 离线
『第 5 楼』:  

DOS下访问4G要先打开A20,否则访问偶数地址会出问题。


2010-6-17 20:50
查看资料  发短消息  网志   编辑帖子  回复  引用回复
AlexZhang
系统支持





积分 978
发帖 419
注册 2007-2-8
状态 在线
『第 6 楼』:  

Originally posted by netwinxp at 2010-6-17 08:50 PM: DOS下访问4G要先打开A20,否则访问偶数地址会出问题。
对头,需要打开A20地址线


2010-6-17 22:22
查看资料  访问主页  发短消息  网志   编辑帖子  回复  引用回复
johnsonlam
银牌会员

阿林


积分 1410
发帖 497
注册 2004-6-28
来自 九龍,香港
状态 离线
『第 7 楼』:  

Originally posted by AlexZhang at 2010-6-17 10:22 PM: 对头,需要打开A20地址线
根 據 Jack Ellis 兄 所 說 , A20 控 制 原 來 也 挺 『 不 標 準 』 ... 1) Port 92h logic 2) keyboard-port logic 還 要 用 時 上 鎖 和 解 鎖 lock / unlock , 煩 !




我 的 網 站 - optimizr.dyndns.org
2010-6-18 23:58
查看资料  发送邮件  访问主页  发短消息  网志   编辑帖子  回复  引用回复
netwinxp
高级用户





积分 741
发帖 366
注册 2007-7-25
状态 离线
『第 8 楼』:  

KBC是286以后的标准,92口不标准(它是MAC总线的标准,很多机子不能用,要在在BIOS SETUP把A20 Fast打开(如果有此项的话)才能支持),KBC法对x86通用,不过切换慢,而且有时会和USB键鼠冲突(写KBC A20位时要先禁止KBC数据缓冲区写入,写完后再去掉禁止,否则USB键鼠有可能错误写到KBC命令缓冲区造成USB键鼠失效)。 我最早看到的DOS下利用FS、GS访问4G是梁肇新(就是那个超级结巴的开发者)9x年写的“在DOS实模式下直接存取4GB内存”一文,现在的“砖家”抄袭够狠的,全成了“原创”。 实模式下访问4G的最大问题是——对于FFFF:FFFF以上内存没有管理,所以还是通过INT 15、XMS、EMS、DPMI稳妥。 [ Last edited by netwinxp on 2010-6-20 at 14:14 ]


2010-6-20 13:59
查看资料  发短消息  网志   编辑帖子  回复  引用回复
gssxd
新手上路





积分 6
发帖 3
注册 2010-5-19
状态 离线
『第 9 楼』:  

[ Last edited by gssxd on 2010-6-21 at 22:42 ]


2010-6-21 22:40
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
gssxd
新手上路





积分 6
发帖 3
注册 2010-5-19
状态 离线
『第 10 楼』:  

Originally posted by netwinxp at 2010-6-20 13:59: KBC是286以后的标准,92口不标准(它是MAC总线的标准,很多机子不能用,要在在BIOS SETUP把A20 Fast打开(如果有此项的话)才能支持),KBC法对x86通用,不过切 ...
关于A20 Disable以及Enable,还是要看BIOS里面的实现的。DOS下都是在调用INT15,BIOS提供的接口,属于Rumtime。BIOS在引导OS之前会把A20给Disbale。


2010-6-21 22:47
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
netwinxp
高级用户





积分 741
发帖 366
注册 2007-7-25
状态 离线
『第 11 楼』:  

CMOS里面的A20 Fast Enable/Disable是指提不提供92H口来快速切换A20的状态,如果Disable掉就不提供92H口,只能用慢速的KBC来切换,它和A20 Enable/Disable不是一回事。INT 15H事实上也是通过KBC或者92H口来操作。至于所谓的FireWare Runtime其实也就是把总线操作、I/O操作、所需数据用ASL(微软要求的格式)包装起来方便windows acpi操作硬件罢了,本质上和以前的APM差不多,只不过APM通过INT 15H调用,需切换到实模式(比如win98的关机),windows可以在保护模式通过ACPI根据ASL定义来操作硬件而已。ASL是微软提供标准和工具,说白了也就形成变相上的垄断,看看linux在实现ACPI上走了多少弯路不就明白了?其实如果里面放的是没经过“故意编译”的脚本,别的操作系统实现起来也不难了。 [ Last edited by netwinxp on 2010-6-22 at 18:52 ]


2010-6-22 18:25
查看资料  发短消息  网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: