|
|
最近学习的cpuid指令,因此写了两行试一下,运行结果正确,但是用cv调试时结果却不正确。
( o8 M. E' P6 J& G运行环境:
8 z' \( z7 w0 b8 F% `" Lmasm 6.110 H, O& T6 h8 B& V; @8 R5 w* P
tasm 5.0
3 [2 M. b1 k2 U) d: O) wwindow xp' l0 B# P/ q' b5 v$ e
在DOS下也试过了,结果相同。6 l& i4 L- z0 f# M. L( S
u& j0 H8 \5 F" k' a% s正常运行,结果正确。
9 o# |! d8 z+ l) T; H- z $ P) c5 Z% b N. G
% T/ G3 s5 x3 r" W# T8 @$ n在cv中调试,结果错误。
; @ f% E: _& A2 @8 o! \% X
8 t$ x3 Z* I" q* |
, a$ h! a N. d0 a' Z6 R退出cv后,显示的也错误。& @4 Q) I3 O( R5 e# s+ w

' `' X# c7 K! Y0 v* v0 Y3 v" S2 |% v! k8 ?' |
在td中,结果正确。1 E5 `/ ~) O- Z. y% `
- S) M! s* r2 T& I5 y
9 {7 U5 C& m) F7 x' {
" w+ _2 _8 T& I
还有的时候在cv中寄存器的值莫名其妙的变化,请高手指教是为什么
: B9 ]( Z# M8 } `
8 a& F$ O. ]/ r; c+ r/ B
1 _1 W" _( {- E$ U2 A代码如下,请各位帮忙分析下,谢谢% o+ Z6 n* K0 l" u. o! `% ]+ ~
" n f- h- ^3 B0 j- X
.model small4 z$ _0 n' w- T# f
.5867 y$ S S# Z$ h! k6 `- C& b' j
.stack5 x1 S. J d h
.data) g/ ?( |" f3 z1 a0 C/ \( a
cpu_str dd 4 dup (?); Q( |5 T# p, C5 K
db '$'+ V' ~0 e/ x$ r' @2 ^ B0 W7 r4 f ^& D
.code
6 H4 M+ m! a7 z7 {$ Rstart:5 Z9 w& l2 \' r: w- }9 y) d# U
mov ax,@data- J0 ^7 y: B# [1 v4 S
mov ds,ax
6 h5 E6 S5 A' C6 S( f' D: I% @ mov es,ax# B- L" M3 Q( S# u: P/ C) g; [
) L6 F! `3 [! x mov eax,80000002h+ y3 W6 e; |: q1 y
cpuid( J: M- m5 V; v1 S
mov cpu_str,eax2 `; x' C1 i g1 m1 n6 I2 T0 q" h
lea dx,cpu_str& E1 e* p0 r. Y- v
mov ah,09h
, ?0 E9 N: l9 T! B) [& O) k int 21h. p# R% u9 Q0 ]3 |9 B1 S
mov ax,4c00h6 ^% V6 X3 ~1 F! v2 g4 s$ Q+ d$ v
int 21h
9 E) L8 }. P6 j- _* }9 Mend start |
|