|
|
最近学习的cpuid指令,因此写了两行试一下,运行结果正确,但是用cv调试时结果却不正确。
9 A9 ]. r# B) V1 l运行环境:7 v7 ^" r/ U, U$ W+ s
masm 6.11
1 t3 J; b: j7 D0 ctasm 5.0
6 a/ G, K7 D3 f# f, b: d+ s! [/ [window xp) v" `7 s" M8 g% a. W" @
在DOS下也试过了,结果相同。
7 r! E4 `. |' G V5 o* B& |( V3 S k6 u' U. ~
正常运行,结果正确。
0 B% V/ e2 k: A ' S: @% P( H9 T; {( C. b5 j
% t% Y5 L* d3 _6 d3 f在cv中调试,结果错误。6 E. {( U j9 }. G+ `
* \; A- }- i) d. r1 F/ E; Y; f2 ~3 z% d
`( [2 y2 ~1 |0 Y% L& `
退出cv后,显示的也错误。
) x u Q) d6 @, _( f & ~* ~+ W+ b0 K6 @" U, g# K7 ~
" z- ]- n5 t" C7 X" p5 J) R; W2 A在td中,结果正确。
8 k6 P! K# p G6 F% a
6 [0 g& f. p( S! B8 \: Z8 \% U. Y1 Q9 f( u: j/ u1 d, {
+ K; N6 E8 e4 O还有的时候在cv中寄存器的值莫名其妙的变化,请高手指教是为什么 |( d. G% a. O" o+ V. L3 p6 S3 ]
) a( p- I7 p2 P' |# s# Z* e
' P; [ W1 I: V3 G8 _5 P代码如下,请各位帮忙分析下,谢谢9 |- @: e! L$ `" Y1 n* R- G* @
1 T2 n7 ]$ i' p) D2 V.model small
/ B1 T$ b9 }8 G8 q.5866 r4 B# ]+ d3 m% }% M
.stack
0 ~7 M' P* h- K3 x/ G3 J+ z.data
6 Q/ c! B& |: \1 m8 mcpu_str dd 4 dup (?)
" A0 j3 m4 m! m/ e1 d$ _& Q; j" O db '$'7 H) N' s# F, O5 x; Y
.code
$ p4 [5 y+ Q5 R3 Y2 tstart:
- u1 U) K b) z/ V, }6 I. w mov ax,@data
6 y( Z* Z B* T+ `3 u- M. X3 o mov ds,ax
9 ?8 N: m, [4 ~" e5 c mov es,ax* f7 `/ h4 P7 W
X1 \& y5 @) {8 ?$ w8 u1 {
mov eax,80000002h
9 T- }1 d* ~, ^ cpuid
7 R# z! {+ ?1 m6 w; A/ Y) K mov cpu_str,eax
+ G: L) e# V2 B' E1 e) P lea dx,cpu_str
$ E" m' F+ o* z/ l l mov ah,09h
/ S' O1 E* L, G6 h' s5 [1 A int 21h% e0 N# L0 L4 g& K" ?+ n
mov ax,4c00h
0 l, S; w# G9 x. B0 [7 G int 21h
5 ]: m& }6 s) T0 b7 m) J, cend start |
|