|
|
最近学习的cpuid指令,因此写了两行试一下,运行结果正确,但是用cv调试时结果却不正确。
& f. n% v" f( y) v% E运行环境:
( N; Y5 T Z |5 l Kmasm 6.114 O3 s% ?* c) O0 f( N1 F/ F7 w6 f
tasm 5.0$ r z' z$ x% ~' g6 ]. b7 G3 z
window xp
9 c x$ a( p. f- I: B在DOS下也试过了,结果相同。 l; l. q: t4 ~0 C4 j. I2 G4 [$ }
8 d9 ~6 I) M9 j* M正常运行,结果正确。6 G1 I: S. p! C

% E% ^! J7 O8 F) O H# a# {- u1 X1 z) i; i" X2 J
在cv中调试,结果错误。 _! s9 D0 Q4 c8 Z ~/ X" x0 ^; g
% R$ l" N6 B R: t
0 q- u( {* ~( O( L5 }" ?退出cv后,显示的也错误。4 M1 `3 f3 Y( L( c! v
: F& p0 D9 u0 h. q6 R1 i/ r8 F1 U k
/ \3 V* |& x7 {在td中,结果正确。4 | H* l& {) R$ k, ~

2 F0 h) Q) Q1 C: k; ?5 t5 L2 x: m! K3 g& @. ^0 T- o
2 Q( ?, b, M2 k
还有的时候在cv中寄存器的值莫名其妙的变化,请高手指教是为什么. e, m2 B7 j+ S
$ Y# m. m1 x- ^ A h; l$ J% Z! F( e- I; Y4 w( p0 l
代码如下,请各位帮忙分析下,谢谢6 q6 a# c% i3 a+ {5 o
4 m- q# E b% x9 ^4 Z.model small
# ?& C/ o% B. g7 k7 y( L.586; [. R# h, z! w8 s, i- |
.stack% X' \; V4 h2 r* k6 ]
.data* D$ w3 H" S5 s( d/ Y2 O9 L
cpu_str dd 4 dup (?)
$ W5 c; U- K" |. I db '$'" A& X: ^; f; Q- u' ~2 _
.code. P, q3 u# Y/ H2 q6 N3 D1 t: ^" @
start:- e' H+ O y" b- @' c+ e# m
mov ax,@data/ t$ Y' F0 P/ [" b3 N+ f
mov ds,ax, t) e3 G8 i+ d3 F8 g: }6 n; B9 c. E
mov es,ax8 H4 [9 R3 R1 r( ~. ]4 ] ~
7 {9 z. |3 g3 g! Y& @2 O2 O) ]
mov eax,80000002h0 @4 u5 Z# ~1 Z+ t* k
cpuid
& k/ V. X3 l5 g9 `0 o' b mov cpu_str,eax
' I0 O3 \+ G6 }3 y4 { lea dx,cpu_str
& i" y1 k: V) P+ w mov ah,09h9 \" C/ p7 z1 b
int 21h( a, @% |- N' w1 u2 N! X; u
mov ax,4c00h3 a& D% Y$ U* r+ d1 n4 ^$ A$ f
int 21h& U/ s4 r2 x. T7 ]; m- d0 c: S
end start |
|