ikj78i 發表於 2024-10-15 09:28:52

DOS能執行CPUID指令

CPUID是MASM 6.x新增的指令,它能提共CPU的種類,但在DOS真實模式下無法執行
,不過這似乎是ML.EXE限制的,還是可以利用填充CPUID的機械碼在DOS系統中執
行。原始程式CPUID.ASM內容如下:

.MODEL        TINY
.486    ;可以使用40486指令集,因為EAX、EBX等暫存器要80386以後的CPU
        ;才有
mycpuid MACRO
        DB        0fh,0a2h;CPUID的機械碼
ENDM
CODE        SEGMENT USE16   ;USE16指定16位元定址模式
ASSUME        cs:CODE,ds:CODE
ORG        100h
start:        jmp        short begin
string        DB        12 DUP (?),"$"
begin:        mov        eax,0
        mycpuid
        mov        DWORD PTR string,ebx    ;EBX=756e6547h=uneG
        mov        DWORD PTR string,edx ;EDX=49656e69h=Ieni
        mov        DWORD PTR string,ecx ;ECX=6c65746eh=letn
        mov        dx,OFFSET string
        mov        ah,9
        int        21h
        int        20h
CODE        ENDS
END        start

EBX內的數值是高位元寫在左邊,但存放於string字串須放在低位址,所以寫成
數值看起來很奇怪,但寫成字串就不會了,小端序排列就是如此,沒辦法。底
下是執行過程:
頁: [1]
查看完整版本: DOS能執行CPUID指令