|
|
各位前輩好,以下的程式為在 big_real_mode 讀取記憶體的值
, p2 s) V7 ^6 ]' m7 b/ Z: c* _
例如: C:\memory.exe(程式檔名) 01000100(Address)! R8 R7 }+ h4 C2 s5 M0 N/ @
$ e3 [% L6 c3 V, C J# }" K3 y0 f則會顯示01000100位置的值
7 \) ~5 l- V. l7 J& c* {7 I3 a3 J+ p4 ^0 O" O
但是我另外還有要顯示出字串,但是顯示出來都是亂碼+ \7 R; E' v5 g! z' y C d1 I3 _
* F, b% B# C" X* ]6 L
麻煩前輩給我一些指導,謝謝 ) K; H2 ~7 i2 n3 v. b: [
# }" `/ T/ c! ]
/ B( N5 t6 S) S- e! S.model small! D' A0 n" B. k" ^
.386p
1 K" a7 P& G7 X2 [& D2 q( {;------------------------------------------------------------------------------------------------/ D$ _$ m; s1 T, [) w' U# Z
DSEG SEGMENT USE16'data' ( `$ X# l F+ ?! M$ ?
6 I4 {5 M9 W7 n$ { J. C7 P
DESC STRUC! G4 l) ~5 O2 ?, C: V! {$ d- |
LimitL DW 0 & a4 i5 L3 Z$ E% c. W
BaseL DW 0 , i6 _, |( J, L. H& m3 J. b' v
BaseM DB 0
6 N3 ~4 y2 _/ T8 S4 t* {5 z Attributes DB 0 ! \$ `7 u% Z2 U& H) N
LimitH DB 0
3 I0 L3 T3 m$ k) I BaseH DB 0 % P6 i$ p) H: g
DESC ENDS
7 X' \0 z: f6 m" W9 _: _: @3 F4 Y/ d8 R2 U/ ]- M
PDesc STRUC' |" P$ g" r ]! T. N4 L
Limit DW 0 % }5 @; e1 u( j. J
Base DD 0 4 t+ Y5 { h& I( W- g
PDesc ENDS
% E# w" v P# o
3 f# c' F2 y6 b& L7 aGDT_def Label Fword F% m# y* o; X, I* w& \
Null_Desc DESC < 0h, 0h, 00h, 00h, 000h, 0>; u% J" Q! s8 l+ V, \+ p5 i
Data_Desc DESC < 0FFFFh, 0h, 00h, 92h, 0CFh, 0>0 w3 {6 a8 d; ^3 [* `
GDT_Addr PDesc <$-GDT_def-1, >
( V x0 k4 G. k+ ?+ @
0 V2 K- j6 U2 ]5 o6 y; tmsg1 BYTE 'The Input Address is ', D4 G) l r8 |4 v* C& P
msg2 BYTE 'The Data is:','$'/ Z) x5 |% i0 \8 V5 [2 @
5 U- C# _1 w3 E! y1 xDSEG ENDS
3 T B5 |% p! ~1 ^* A
\& X! _, d& W% E6 J0 H6 ~6 X) T; v; ?# a/ T5 b. n: _# Y5 b2 I
;------------------------------------------------------------------------------------------------
: D3 _ W. L( e9 W% a$ J
7 P4 k/ a* p& C5 i( x" M7 bASSUME CS:CSEG,DS SEG
& Z, N9 g& f* U1 f8 p* I: m
3 h) a& w& e1 W9 c/ O. c- }) }CSEG SEGMENT USE16'code'
/ m' C" n+ D! E7 p 2 U0 X# h" m' G g H
push ds
1 q- k, v2 t- I! y6 s. g push es, U/ l9 M( N" W5 B( |2 G
push fs
1 M) F, n' E1 w* S9 S! Z push gs
6 Y! o2 l% c$ r7 U! A# M
! H5 F3 t! ?4 R0 ^9 N7 i3 o: X call big_real_mode
1 D* D' a2 A) Q# H6 _% U6 `' @% [. H1 J( X k4 y
+ k; D- J4 F$ b2 q' n0 j# K mov edx,OFFSET msg1;
; Q' T/ R) I% Z; I$ a- W$ h ]/ P" S mov ah,09h;
! P% Q& {) i+ E) C b. N) R8 c int 21h;; ]& L/ |: Q3 j7 k* S- W }) m
mov edx,OFFSET msg2; Y; ?- Z9 ~' U; X6 o9 T! A
mov ah,09h;- {# A; ?/ S) k5 t# u7 T& c
int 21h;
+ [3 {, m' s! a, D" u
8 v3 L8 A: b- w! D; k. h0 S call PSP ( {$ R) r9 g G D0 Z6 w4 M2 j. E# F C
7 Y* V* h- o: E3 e/ D- p: F
call crlf / t% l# U: E/ P* {8 M0 [) ?; t; H
& t7 a3 @# B* w4 R) Z) T+ l, _ mov esi,ebx9 q0 k) y/ G( i0 f ^' e% c- j
mov eax,fs:[esi]( @! M2 M6 X f( s' Z6 k
out 80h,eax
" c# l$ { p! e; M' h% X mov ebx,eax
9 z* h- T3 E8 F+ ^& R$ {- t% t, I* S call _8bits! s' w3 K; ?- S p7 \
# H! K1 a: V0 Z! K5 J call real_mode
. w+ E5 [' _0 \/ y
% b$ a- Y* n. z5 s pop gs
) ^3 j& I' L3 p+ u+ t. Q$ } pop fs
) v# V( o! S0 X, A# `6 Q5 Y pop es
, H- ^- V5 @( m% d+ d. w pop ds
0 A7 v2 e" t @& i9 p
- }2 f1 F' _; w3 R1 [$ ^ .exit$ F( i8 V; Q3 o- M6 B5 H7 _
;------------------------------------------------------------------------------------------------
- L# U/ [( T# d! Q' C$ J4 d$ l! g+ y/ ibig_real_mode proc near
5 h/ {' `/ G! c, u' f' S in al, 92h
+ z {+ J& G& a) F or al, 002
8 S G- |; k$ E/ n! W out 092h, al2 ^) S" W/ \6 h! i
out 0edh, al$ V! e$ O! E$ k) @" j9 @( q
cli2 O$ q8 U: ]( Z, H! X
mov eax,DSEG2 O4 [% U6 U! Q+ D ~3 [
shl eax, 4
% f$ @, P1 y) A9 n& b" l' G8 L6 q xor ebx, ebx% {, j$ I& x/ m
mov ebx, offset GDT_def
* Y ^! a# o9 R7 I9 H1 B add eax, ebx
+ j4 g* R5 k0 ^- R; l; b& } mov dword ptr GDT_Addr.Base, eax& Q3 Q+ {' S# [! ~* c# l
lgdt fword ptr GDT_Addr
7 i. T4 E. s& m$ x/ f. A mov bx, 89 D# I! ]+ V6 v* ^
mov eax, cr0
8 l3 M; J$ ]8 n# G- H1 T* J+ a or al, 17 E s4 c" _! S
mov cr0, eax
2 \5 ?3 Q+ g' C' X jmp PMod- }+ ~' H+ @ Y& B) C3 b8 a; C
PMod:
9 s# p9 ^: w6 f' S" H mov fs, bx t& ~- W! T1 e5 n; T6 o
mov gs, bx
& f' a/ @+ Z0 ]: l7 W mov eax,cr0
! S* I7 E, i# d Q7 c; } and al, 0FEh! ^6 J5 I3 c& H% o6 T& B" D2 z
mov cr0, eax 0 ~5 y" {2 p: a! n) n1 i
jmp RMod- H* `- A" ^! p( N* @
RMod:/ Q4 i% U; ~. a4 A( x
xor ax, ax
9 l& ^. A* t3 b! ?% z2 r' f mov fs, ax. S# t# R2 E4 W3 j$ }5 x( [2 s
mov gs, ax2 F+ \* J& _+ U+ f- t# K
6 q: H" w) q6 G v/ [/ d sti( `- O' o2 |% A4 M Y
% _5 @+ F" w9 _" m8 c1 L
ret& a, N) c- J2 M
big_real_mode ENDP
* t( x" o/ B# r$ Q L" v;------------------------------------------------------------------------------------------------2 \+ G, ]$ F% s
real_mode proc near
' P5 W+ f5 X1 W$ ?$ W+ H: q in al, 92h
9 ~8 f3 W* L& ]3 N# x0 D! X and al, 02% v8 r5 L" @ J0 `& ^$ I( |
out 92h, al
( A* N, h. }; m( D5 R ret
4 E; X( @, e6 ~% b3 c, z+ `real_mode ENDP
) H3 `9 E, Y- M. B( [- }5 [;------------------------------------------------------------------------------------------------
' D; Q: n6 N3 Y$ [0 q6 wGet_Commandtail PROC near8 s3 e Q A- z/ o' i* F* C
push es
8 [' w" I* ~& | pusha
8 v6 c; r9 m$ d; \$ T mov ah,62h * Q0 Q8 i0 U+ @& l
int 21h
) [" r9 J, Z# G mov es,bx' i: [" N! ~- z6 P. _
popa % j4 ?+ Z G t
pop es
; Q0 d ]8 @& P/ } ret7 r, ]. m5 Z/ w* {- ~2 n3 I
Get_Commandtail ENDP' |- F2 b! J( `9 {/ K0 Q6 _
;------------------------------------------------------------------------------------------------' R9 f: v: C1 Z) X
PSP proc near
! M+ G9 x2 {* n# K ~7 ^0 B mov ah,62h
% `) D2 ?5 n2 M% D int 21h
; `, n! Z$ P/ e) W% J1 @! Y0 J mov es,bx ! o- B$ w' K1 d, D
xor ebx,ebx4 G& ~4 P) t8 L8 ]/ R1 ]) E
mov si,82h9 O( s6 T( N. a
mov al,es:[si]
+ C1 J3 H; i* t- a. U* Q call Change
0 _% n' @" J& _: b mov cl,4
) E. C; {' k$ l) ?8 G shl ebx,cl$ O1 X% A- m, _/ R. T
add ebx,eax
2 N0 n9 I3 T1 k2 f( n9 d8 i$ A( G% }8 H2 S mov al,es:[si+1]
; A/ u( \/ m% I8 D call Change
, |- W( p, x" @ mov cl,41 h% x9 O. o* @9 m
shl ebx,cl
! P3 L) g1 Z/ I2 V% v" w add ebx,eax- _3 p6 G5 y- D* {
mov al,es:[si+2]( m; `6 Z# e- m7 f$ _
call Change
- L& v6 E4 q5 `+ i3 _4 d mov cl,4/ c2 Y: z3 j8 C0 ^1 s5 i
shl ebx,cl
$ _" w2 `+ M J! K! T5 Z. j add ebx,eax* ?& n+ Z( V+ \' I2 D& I# Q D5 _
mov al,es:[si+3]+ T7 n5 G$ C7 @4 _! D; }8 u
call Change+ N. Z1 E. \; N, L" [' o$ \
mov cl,4& L5 U5 s! I% l: r$ \* p7 q9 ^
shl ebx,cl
* n3 S" {" R4 h! l6 b' Y add ebx,eax
/ O% V9 `# q1 F+ L9 F" d mov al,es:[si+4]
$ N: z8 b. t8 M" O( g call Change
! r* m* V" \( t3 L% U mov cl,4
* t# b6 V5 w' ^$ V* ^1 ] shl ebx,cl
0 w# Q" w" O, W# G add ebx,eax
" {, u/ V: v/ r; h- } mov al,es:[si+5]
) W# }# D; a% X6 r/ C# X call Change
/ @7 X0 W ^3 L: M& K mov cl,4. x" n! }3 w, R4 d: y' Z
shl ebx,cl
8 f1 B* |1 q7 e* s/ W; ]+ D$ ? add ebx,eax2 T0 b6 N) t6 V7 j! l
mov al,es:[si+6]
: `9 b. b5 C; H) D$ n call Change1 x' |6 O L0 ?4 w- |
mov cl,4( w& t( ~+ w6 s0 [* o* E9 Y) }
shl ebx,cl
7 p, K3 i+ \4 Y; ?& k add ebx,eax
V9 Q' }+ J, g$ D( R mov al,es:[si+7]
. c: a% q1 j1 g, [. } call Change
* j9 |% o7 j+ x8 a3 U" ~ mov cl,4
( q1 q& \% O+ {+ R shl ebx,cl) y; {2 K. @% q/ V* x2 N
add ebx,eax7 g$ c0 _/ K& d7 r1 Q
ret
% |7 W( D4 }- s( ]$ _( X- ^* \& Z0 FPSP endp$ A, O( V0 i; L$ |: B- {$ z1 l
;------------------------------------------------------------------------------------------------
0 B, m6 ^+ J! p2 ]Change proc near |7 ]% K5 Y7 e" S) ?5 t
A: $ m, H( F# m, {- |& M6 I) U/ {4 H
movzx eax,al
5 |6 _2 t# r% v X: q mov edx,eax. M7 ^& e/ `, H. c4 a6 r
cmp eax,'0' 0 _& _) p+ `) F# u8 k" e! E. ?
jb A
$ X" Q. u# L; H$ H1 D cmp eax,'9' ( J5 s6 x t9 B r: X
ja B
1 g/ R3 C* |) p/ D sub eax,'0') }. F" D# { B& ?0 i5 E9 a# S
jmp short E! L, P. t: Q: ~2 M8 ~
B:! a8 v* c+ \: N' D, c
and eax,0dfh
0 }5 _' R/ d5 K' D) s mov edx,eax8 W) ?! E, o+ f! J" ]% H1 Y; T
sub eax,37h
5 P% l b/ r: ^% C9 L5 H- _9 Z* x cmp eax,0ah2 s& L# v% t" A, y( ]
jb A
+ Q/ U; o$ H% D% _9 Q cmp eax,0fh
+ q. d9 s. P4 w7 P) J ja A $ i$ k# e2 A( s4 j0 H- b4 h* T
E:# h# o1 S) [- V; V t9 n; ?
push eax 3 M6 g9 t% {: \! e; W
call PRT * B4 o1 U, Y! ]" l
pop eax+ t ^: R; X1 w. f
CExit:
% W2 @; k: d# c W5 @ j Y& V ret I. R" q8 m3 S; Q8 ^
Change endp
, l0 g5 l' [9 A5 [4 U( T;------------------------------------------------------------------------------------------------- T; G1 @% _* z
PRT proc near8 T5 a( m) ?# s# k" B5 J
mov ah,02h
" m& U4 B$ k- W! B9 K int 21h3 M7 M Q9 M8 e1 ~2 C" L6 a
ret% f: s; {; Q/ M6 s& r( [. D9 q7 |+ c
PRT endp7 D& \8 V5 E, h# b* V5 v f8 l
;------------------------------------------------------------------------------------------------
3 D6 r& d6 E' W, A/ ocrlf proc near
& w/ x7 B0 _& r2 ]4 [ mov ah,02h D3 l/ ?3 R+ E" w1 P8 H" j
mov dl,0dh
: I# v+ j! q6 N% k8 R8 d int 21h
% m3 `: L2 U# ~! n5 Q! L. W mov ah,02h
) z' y( v9 M2 F& H! u mov dl,0ah ~: [5 y, W0 M1 m: ^# R9 _9 h
int 21h- B0 z! T6 ^& N* h3 s2 V. Y
ret5 q! G1 Y$ x/ k* E6 K! z; K: f
crlf endp
6 b( s6 a* I+ J. O k/ S;------------------------------------------------------------------------------------------------$ y6 N; f5 Q1 u5 r, w
_32bits proc near
L% z$ O9 `4 D$ b/ x pushad
& K, n$ `1 I4 P4 u; V mov cl,4, u7 V4 i& f3 u9 r% k! C7 V% Q
rol ebx,cl8 v0 E% u* A# W: \8 a; k
call print_4_bits; o0 V1 o" ^. M% Y" ?
rol ebx,cl
, J" {. V7 q; G/ @. i call print_4_bits% J: K; B! a* ^# G+ n) v
rol ebx,cl
1 U4 Y' O; c# _ call print_4_bits
6 I- p; _% c" q& Z: e$ F rol ebx,cl
- r) }* N# q5 a0 s4 ]% b call print_4_bits( x, p: G' n |3 R! ]
rol ebx,cl
; @/ B2 [/ Q. ]* {. l( d call print_4_bits6 H7 n* D* }6 q
rol ebx,cl& }' k) H& k# X( I$ @( M) W& ?5 D
call print_4_bits0 u" p5 n9 M+ `1 ~, O3 y% z1 }9 w
rol ebx,cl
1 R4 w1 c' E2 Q* l call print_4_bits
6 i1 G/ g, @/ Z5 [9 F+ R+ K; u( g, H rol ebx,cl
" j( G! K5 g3 U% K6 ~ call print_4_bits+ k0 |$ [) q& m+ D5 S2 d
rol ebx,cl j1 b- x* i# _, a% b! ?: d
popad
% c5 W2 S9 [# P$ u/ j2 O ret1 j! i" m+ f( N2 y9 u5 S/ [
_32bits endp
8 G. W" Z1 h- Z; ~- s8 d; l;------------------------------------------------------------------------------------------------
" @% s. J) x9 `" C_16bits proc near( @) O! R9 q+ V
pusha
" h! {! w, `& m! x! i, A: ], i rol bx,cl
. f( o$ Z+ y& I call print_4_bits1 E3 P1 J. d8 B. N( H
rol bx,cl% o! ~" ~5 O. {, v" z( W0 j
call print_4_bits
0 E9 Q% M# K! c% L2 Z& g% n rol bx,cl
: }4 r" e2 n( Y call print_4_bits
3 l2 `9 f1 a! i7 g rol bx,cl7 Z# R7 k( D) `* H: T6 ?& [
call print_4_bits6 w- s* R" i) L3 f! {( y& h
popa" b* v& E( d' J) D# \
ret
9 I ^' F; x0 r( Q_16bits endp% T' `9 ^- z" B
;------------------------------------------------------------------------------------------------; ^% s9 W: ? ~
_8bits proc near; c: k! d: l* J5 J# u C' E
pusha
5 F$ h! t5 ~2 W$ h% C- |" e4 p rol bx,cl
; A8 Y. V, n! {- Q" L7 \: Q call print_4_bits+ x- U+ b" Y( l& b; p T$ T9 ^, V
rol bx,cl
& Y0 @2 c9 ~/ @- W5 n. M call print_4_bits
! c# j/ f u5 H2 l9 |/ N+ t popa
/ a M0 d' B j2 J) p# H# b ret, ]" [2 q L ~# f3 x
_8bits endp. n3 P( G$ P6 T& \$ W: u: e4 ?+ ^% Z. n
;------------------------------------------------------------------------------------------------2 N* K! ^* z9 {7 C/ p
print_4_bits proc near
. q* x. ~- ?2 n7 G9 J mov dx,bx
7 J, m& i, p' D5 j; t K and dl,0fh% m8 r$ }! [" O: s: m1 w
add dl,30h
* e( ?! L; q8 [" U cmp dl,3ah9 u, @) X3 V! v( [! S
jb print1 ]8 S, w I* B) y1 d* _: x
add dl,7' \# Z! U8 c4 e! f+ U
print:
u/ z- y# W5 q, e4 W7 i% g mov ah,2
# j2 ?9 `$ _7 W! O" z5 Y int 21h' `% m4 N( ?7 i, F) {
ret6 e; Z8 o8 q6 [
print_4_bits endp / i) t& B& M3 w1 d0 R3 l
;------------------------------------------------------------------------------------------------5 j8 K4 Z- p& S, m2 Z$ w
CSEG ends
% t# z1 E ~8 k1 D* nEND |
|