- UID
- 460236
- 帖子
- 23
- 主題
- 13
- 精華
- 0
- 積分
- 26
- 楓幣
- 866
- 威望
- 25
- 存款
- 0
- 贊助金額
- 0
- 推廣
- 0
- GP
- 14
- 閱讀權限
- 10
- 性別
- 保密
- 在線時間
- 22 小時
- 註冊時間
- 2024-10-12
- 最後登入
- 2024-12-22
|
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[4],edx ;EDX=49656e69h=Ieni
mov DWORD PTR string[8],ecx ;ECX=6c65746eh=letn
mov dx,OFFSET string
mov ah,9
int 21h
int 20h
CODE ENDS
END start
EBX內的數值是高位元寫在左邊,但存放於string字串須放在低位址,所以寫成
數值看起來很奇怪,但寫成字串就不會了,小端序排列就是如此,沒辦法。底
下是執行過程:
|
|