|
|
最近学习的cpuid指令,因此写了两行试一下,运行结果正确,但是用cv调试时结果却不正确。5 T% |1 J# u2 W3 `
运行环境:
+ F i# i! z' y" gmasm 6.11
$ D6 G+ q: w$ E- j* w- G. Ztasm 5.0
# p5 Q1 E3 O9 A# ywindow xp
4 J' f( m1 r$ `; {% [在DOS下也试过了,结果相同。$ D+ x/ B0 `8 K3 n ?4 `
5 Z5 k( V0 R% {正常运行,结果正确。1 V! k' z5 T# }. B) o* ~

* j9 ?( U$ B) }3 f) v. Y }: s- z: Z0 L
在cv中调试,结果错误。
4 p* V0 M* X1 x6 O) P1 a5 P# ?
- l1 d% {' q6 L9 R9 ^9 n# @2 F9 o: l; `# [. J* g
退出cv后,显示的也错误。
) q; C; b1 `8 u1 k* T0 i8 S9 D
/ r+ w: A6 l3 D: A0 N5 {6 y; ]0 q$ _7 @! e
在td中,结果正确。7 Q- J' P1 Q8 M! R+ y7 m+ Z8 b
`5 @! Z) Z8 S- P
" b9 ^/ N. _2 M- t
0 w {9 g( G* A6 j c2 D% x2 X还有的时候在cv中寄存器的值莫名其妙的变化,请高手指教是为什么0 g, O [( b! L; e/ E" l2 [
) S3 j9 ?( M; m+ p# B+ G" p# Z0 l/ T4 j0 X5 j6 S N L
代码如下,请各位帮忙分析下,谢谢, v b6 P3 [7 Y9 {
8 V6 M2 A8 X) a1 ^* M8 m2 r% B/ z
.model small! t/ L. F# J& w# P" g1 I
.5868 D2 |/ n- e' d+ y
.stack
) Q& x/ F/ u/ A u/ }8 y.data6 m* Y; S9 F' t7 a3 {9 H! `& ]( T9 x
cpu_str dd 4 dup (?)
) X+ h; L- a% T* C2 E1 R db '$'$ H/ ?! M! y8 v! z
.code5 C) Q1 G7 b1 }$ Q- U- _5 _9 @
start:
. p6 v: e5 {: A7 R( V, I8 G/ n/ ~ mov ax,@data: F: j0 l. I0 Y! m- {1 U
mov ds,ax
) M5 b0 @- T8 G mov es,ax
7 `$ i( \/ [6 c, ^0 ?5 G1 K; I5 x9 y , W/ C" o; q' Y& H6 P
mov eax,80000002h
' p% m! |8 p+ W, ] cpuid
2 x: b \( g& p! }+ Z, {% l, s mov cpu_str,eax
$ f% A; e& e2 j. j, [& {0 W lea dx,cpu_str0 ~* I k& P4 h* O6 U" F; N
mov ah,09h
+ J: H6 M/ [ r/ K. R$ ] int 21h
3 R) F+ z' e. ^' ~* P: d mov ax,4c00h
+ N' C% V- L c+ {/ {* T int 21h7 T0 Q9 r& Q; l( {, ^! e% W
end start |
|