|
|
最近学习的cpuid指令,因此写了两行试一下,运行结果正确,但是用cv调试时结果却不正确。
, ~5 k# r) \2 i1 G* E运行环境:# z) ]( F2 B( `8 M$ }
masm 6.116 @5 n( m5 r3 [% X: x2 ~
tasm 5.0
4 z6 Q9 O4 w& cwindow xp
% B3 \. O# P& E. y L* T$ Q- Y在DOS下也试过了,结果相同。4 k# }! G% G8 Z- s; H$ H
$ H3 u, r2 P6 n- ~正常运行,结果正确。$ Q/ n8 M* |0 m

- g/ w) H7 F6 s& s9 x+ [ s u6 S& n$ n: H8 M8 @$ l* y
在cv中调试,结果错误。1 Q- ~! H D. _8 y5 n, U3 r3 h
: x1 R! f* v. `+ k0 o
5 O7 C4 z' W! l9 P) f
退出cv后,显示的也错误。
6 b" }9 X( b. D9 }& \. P3 Z2 i - d T+ ]1 H' a S t: ]# {9 N1 _
1 _& |/ {& z, j. I% g/ J
在td中,结果正确。
9 R8 N# B+ Z2 a5 Q 2 l' U4 s" b6 H# H$ q" n
" ?4 P3 I' X3 o, |/ x$ S* \- `( ]' c" d. U
还有的时候在cv中寄存器的值莫名其妙的变化,请高手指教是为什么
3 O: V- v2 T, [3 ^1 u5 a8 l
0 d- Z: j" s# q5 e7 }& q' F( T
; W ?+ m/ y% Q$ z代码如下,请各位帮忙分析下,谢谢
; ]. h5 S' n% H0 y( L0 Y+ ?( h7 o3 T4 I) W9 \% g. B+ F6 S
.model small
0 W/ @5 ^1 |, e.586
- X. `8 f# N" [.stack
5 Y% W& s) e( U. |' r) x$ r) C.data
* u- {" t+ h9 Zcpu_str dd 4 dup (?)
0 J1 l w0 v; `& B db '$'
: Z! v; r% r( g$ A! } [.code
Q! u- S' X- I. c" W. M( ~" L/ a) g( Mstart:
! X7 S# J/ E# c$ B mov ax,@data
6 X z( x& k% d$ k; h- x8 A mov ds,ax
6 h# F# m+ P# ~4 l: d5 z2 o mov es,ax* {( h! ?+ ~# H& l+ s6 r
5 F$ x5 d8 h# t9 y l) V1 a
mov eax,80000002h2 B& k% I' x) Y! H9 T( F
cpuid
- }1 v" k x* u mov cpu_str,eax$ I7 h( i3 [; K1 y6 Q& B* q- s
lea dx,cpu_str$ t9 T' y/ p6 \. O: `. \
mov ah,09h1 e0 K- E. ?6 r2 |9 L
int 21h: [0 g- g: k! j7 |# M
mov ax,4c00h2 X. H9 _" u- g0 M4 J( G
int 21h
x+ G0 l+ g& Q. F6 Cend start |
|