在DOS下如何试用CPUID指令获取CPU信息?

lilingcx 2007-10-10 06:11:36
小弟对汇编这方面不是很了解,还请各位大哥多看看,首先谢过各位了:)

问题如题.我以前在VC下内嵌汇编的方法实现过在Win32环境的相似程序.可是现在要移植到DOS下面了,小弟有几个疑惑

1)CPUID指令牵涉到(eax,ecx等等),应该是32位的汇编吧?
2)32位的汇编编译后可以在DOS下面运行吗?
3)CPUID是不是有专门的支持16位汇编的指令呢?
4)有汇编的编译器可以编译CPUID指令并且能运行在DOS吗? 有C编译器能支持内嵌CPUID命令吗?

请各位路过的知道的就指点一二吧,再次谢谢各位大哥了!
...全文
1369 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
lilingcx 2007-10-18
  • 打赏
  • 举报
回复
感谢大家的回复,我按照大家的思路终于达到了目的,现在总结一下:

首先再次感谢xinteng Jiessie ui_ppoppopp BAYNPU

1.程序从source code到exe需要经过编译和连接两个过程.编译器是将src编译成obj文件,连接器将obj转化为exe.
2.编译器有16/32位之分,连接器也分为for dos,win32.但是obj文件都是通用的COFF或者其他格式.
3.所以32位的汇编代码要在dos上运行有两个途径:1)对于16位的编译器,将相关指令换成机器码取代(db方法),然后再使用for dos的连接器连接 2)32位的编译器就可以直接使用32的指令,但是生产的obj需要for dos的连接器连接.

具体的方法可以参考楼上的各位兄弟的帖子.

BTW.介绍一个GCC for DOS的编译器,可以使用32位环境的标准C编译出在DOS下运行的程序 -->DJGPP
主页:http://www.delorie.com/djgpp/


结贴,散分!
BAYNPU 2007-10-14
  • 打赏
  • 举报
回复
此程序可以在dos下运并能检测到cpu
.model tiny
.586
dispdl macro
mov ah,2
int 21h
shr edx,8
endm
.code
.startup
mov eax,0
cpuid
push edx
push ebx
pop edx
repeat 4
dispdl
endm
pop edx
repeat 4
dispdl
endm
mov edx,ecx
repeat 4
dispdl
endm
.exit
end
wangxy200696 2007-10-14
  • 打赏
  • 举报
回复
在里面的第一部分的后面倒数第三个,和第二部分的中间,具体的我也记不清了,你好好找找,
32位的指令,你用db 伪指令定义指令就是了,里面有的,可以不用32位,用16位就可以了
Jiessie 2007-10-11
  • 打赏
  • 举报
回复
在DOS下也可以使用 EAX ECX,编译器是支持的。
如果不支持,你直接写

db 66
mov ax,low_word
db high_word

就相当于 mov eax, high_word*0x10000 + low_word

如果还不行,你直接硬编码进去。

2057:0100 66B878563412 MOV EAX,12345678
ui_ppoppopp 2007-10-11
  • 打赏
  • 举报
回复
如果对CPUID 指令不熟悉,看INTEL和AMD的文档。
如果不会执行,找格debug32.exe 这个能在DOS下直接用CPUID。


http://www.intel.com/design/core2XE/documentation.htm
http://www.amd.com/us-en/Processors/TechnicalResources/0,,30_182_739_7203,00.html
lilingcx 2007-10-11
  • 打赏
  • 举报
回复
TO xinteng:

大哥,你在这里指定了使用486的指令集,这样的asm源文件可以用32的汇编编译器编译,但是16位的行吗?
而且这样编译出来的程序可以在16位的Dos下面使用吗?
xinteng 2007-10-10
  • 打赏
  • 举报
回复
.model small
.stack
.486
.data
...
lilingcx 2007-10-10
  • 打赏
  • 举报
回复
To wangxy200696

罗云彬的那边书我这有一本,不过我大致翻阅了一下,似乎都是在将asm32语言的东西,似乎没有涉及到比如cpuid这类指令(可能是32位的)如何编译并在dos下运行的内容呢!
wangxy200696 2007-10-10
  • 打赏
  • 举报
回复
最好是看罗云彬网站上的
Intel Architecture Software Developer Manual.zip
我在网上找到一些不过不能发,提示内容过长
你到网上搜搜就很多

21,459

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧