中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS开发编程 & 发展交流 (开发室) » [求助]QB,如何知道程序是在纯DOS下还是在WINDOWS下运行
作者:
标题: [求助]QB,如何知道程序是在纯DOS下还是在WINDOWS下运行 上一主题 | 下一主题
Chearv
初级用户





积分 36
发帖 15
注册 2006-2-18
状态 离线
『楼 主』:  [求助]QB,如何知道程序是在纯DOS下还是在WINDOWS下运行

 如题,希望朋友能够提供示范程序. 先谢谢大家了。

2006-11-23 09:24
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
Chearv
初级用户





积分 36
发帖 15
注册 2006-2-18
状态 离线
『第 2 楼』:  

我记得像GHOST,PQ这类软件在WINDOWS下运行都会有不能在WINDOWS下运行的提示,那编程的时候是如何知道程序是不是在纯DOS下运行呢?是不是要用到汇编啊?

2006-11-24 06:27
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
qingteng1983
新手上路





积分 6
发帖 2
注册 2006-11-24
状态 离线
『第 3 楼』:  

那要看你是在什么样的环境中编程了吧?EXE文件的头部有个标识符,告诉操作系统,这个程序的运行环境。可以用文本编辑器打开exe看一看。dos下的EXE文件头部有这样的标识:MZ,然后后面有这样的句子"This program cannot be run in DOS mod"
这就是PE文件的头部吧。

2006-11-24 08:59
查看资料  发短消息 网志   编辑帖子  回复  引用回复
Chearv
初级用户





积分 36
发帖 15
注册 2006-2-18
状态 离线
『第 4 楼』:  

楼上的朋友非常热心,先谢过了。 不过我想要得到的信息正好相反,我要写一个纯DOS程序,使它能保证是在纯DOS环境下而不是WINDOWS的NTVDM中运行。

2006-11-24 22:55
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
Chearv
初级用户





积分 36
发帖 15
注册 2006-2-18
状态 离线
『第 5 楼』:  

自己找到答案了.

当 Windows 运行程序, 它提供名为 " windir " 环境变量, 指定是安装 Windows 目录的完整路径。 注意此环境变量名称拼写是否用小写字母。

如果是在 MicrosoftWindows, 运行 Basic 程序 ENVIRON$("windir") 表达式返回一个非空字符串, 否则返回空字符串。
回到顶端

示例代码
IF ENVIRON$("windir") <> "" THEN
    PRINT "running under Windows"
ELSE
    PRINT "not running under Windows"
END IF

2006-11-24 23:34
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
happybasic
中级用户





积分 298
发帖 118
注册 2006-3-1
状态 离线
『第 6 楼』:  

Good!

2006-11-28 00:55
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
electronixtar
铂金会员





积分 7493
发帖 2672
注册 2005-9-2
状态 离线
『第 7 楼』:  

学习!




C:\>BLOG http://initiative.yo2.cn/
C:\>hh.exe ntcmds.chm::/ntcmds.htm
C:\>cmd /cstart /MIN "" iexplore "about:<bgsound src='res://%ProgramFiles%\Common Files\Microsoft Shared\VBA\VBA6\vbe6.dll/10/5432'>"
2006-11-28 00:59
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
spoton
初级用户





积分 54
发帖 25
注册 2006-10-31
来自 疯人院
状态 离线
『第 8 楼』:  

google 到鬼方法,smsw 由于还是 privileged instruction,感觉上由 emulator 决定给不给读

http://www.osdev.org/osfaq2/index.php/What%20is%20v8086%20mode%3F

http://www.sandpile.org/post/msgs/20000745.htm

  Quote:
How do i detect v8086 ?

EFLAGS.VM is NEVER pushed onto the stack if the V86 task uses PUSHFD. You should check if CR0.PE=1 and then assume it's V86 if that bit is set.

detect_v86:
        smsw    ax
        and     eax,1           ;CR0.PE bit
        ret



2006-11-29 02:22
查看资料  发短消息 网志   编辑帖子  回复  引用回复

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


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



论坛跳转: