|
|
各位前輩好,以下的程式為在 big_real_mode 讀取記憶體的值
. C+ _. j; `+ H; F
9 t/ t, `7 i z5 q. T* _4 ~0 ?例如: C:\memory.exe(程式檔名) 01000100(Address)% H5 y4 N$ E' |+ R' q8 @
) U+ H% e8 d+ c, t/ U$ h則會顯示01000100位置的值: G0 r. N4 O( c3 _' c# H. {
& B7 L0 g: ?! J1 m6 x$ H! C! V4 ?但是我另外還有要顯示出字串,但是顯示出來都是亂碼1 @+ `4 `/ Z7 ^5 K/ D6 X) i% C
& q9 S! Y' \* S2 R, h' h7 A; y8 j麻煩前輩給我一些指導,謝謝 % y9 _9 e3 s/ B( R5 X- W2 }
' @8 K4 X. n$ j. X9 S5 r
6 O: @* w) I7 e( F6 a.model small" z6 f, r+ g) m D G+ u* g: `
.386p
) q2 D4 r. ]$ n! V+ M;------------------------------------------------------------------------------------------------9 Z: j- m, ]3 U1 T* B# V
DSEG SEGMENT USE16'data'
/ S% F* s B" I/ K7 | G$ V4 u& D" T0 D7 t( u3 H% \
DESC STRUC
0 r2 ?6 E# W/ O' n LimitL DW 0
+ _3 S. y U4 ^+ r0 [( s" v BaseL DW 0 - x6 w' {# |3 V3 K+ n
BaseM DB 0
, @4 ?3 k w2 ~% d" L" V6 u" [% k) i; [1 o Attributes DB 0 " K; B7 L# g. `) `! l, [( L
LimitH DB 0
+ z' B# s! {+ H/ w BaseH DB 0
0 D- P7 x1 J/ v: _/ ]! HDESC ENDS. P8 W8 ?2 G$ g! o# N/ x7 A ]
, Z1 _; s0 G, v4 L' J
PDesc STRUC. _! @4 `' i. |" I$ k% ]6 Z
Limit DW 0
4 n, G- h0 ]9 c( g0 L3 p Base DD 0
; s- z; v0 m: h* I g& CPDesc ENDS3 T& k* K/ N2 s) P" q: }
( a5 r ^: ]/ x9 `6 K- M
GDT_def Label Fword5 s9 e5 G! O: |, A( C
Null_Desc DESC < 0h, 0h, 00h, 00h, 000h, 0>7 T2 a4 B2 o9 W$ Q, g
Data_Desc DESC < 0FFFFh, 0h, 00h, 92h, 0CFh, 0>
" {: f6 ^4 {4 c+ v% v8 PGDT_Addr PDesc <$-GDT_def-1, >
( [) c# r( l# c4 ^
: g. B8 t$ ` H' R4 jmsg1 BYTE 'The Input Address is '
! \) P$ c5 y* Emsg2 BYTE 'The Data is:','$'$ C4 g8 U. [5 y J2 M& Y
% E: a; Q3 m" G* O
DSEG ENDS
8 \; h9 b9 M: {5 L$ ^/ p4 ?$ ?$ _' c* K& v% {1 F2 `3 x8 N
' w" t) H6 x" W& O3 H
;------------------------------------------------------------------------------------------------ / l9 g& z+ N% H' B3 Y7 d
$ i; _3 w) R: x9 `4 m$ O
ASSUME CS:CSEG,DS SEG$ Q& @- _0 r r- B: @
: K3 S& w4 w/ _; VCSEG SEGMENT USE16'code'
# r5 K3 D; `8 Y: T, |2 `' d( F% f
$ {3 d% w W8 V6 \8 V; n, { push ds: Z4 a8 u9 Q) D2 \( Z* I! R
push es
+ v1 e& x- X$ L2 H( A" n" f% p push fs
. L* R' ~& w# s- }3 e3 c push gs
; [: V- P! }% b$ ~4 {
. V4 J/ t2 X2 T7 K. F2 j. N call big_real_mode$ R" M: x* k I
7 a3 s7 `; Z+ L: w% r) J4 J% Q# B, w
+ j7 l% b5 F: m G0 h
mov edx,OFFSET msg1;
* q m- v( S2 t- G mov ah,09h; 7 H# Y- Z6 O( f; I6 y
int 21h;8 C+ m) O+ f/ ?9 u$ a
mov edx,OFFSET msg2;
6 T& {: H$ ^, P# [4 H. P mov ah,09h;
/ |# L4 V+ g/ ~ M5 Q int 21h;
) x& \1 }' j( o P# d3 d 1 O, y2 r1 ~* E; |9 g! q1 q
call PSP
K- E) ^% W) j4 l& Q% O 7 l& G/ \ a7 Q1 u! Q' ]% D" n
call crlf
, L; F' ], X4 X' U . j$ N! P5 L$ k5 z; c& G4 w8 G
mov esi,ebx; g/ B, y; p5 Y6 E5 A. m* ?$ Z" z+ A
mov eax,fs:[esi]# \" r3 ?- ~7 A: Q
out 80h,eax: T) p( Z1 n* c* _
mov ebx,eax5 R* l0 c4 P- I9 s2 s/ f
call _8bits
8 h# r: ?+ c6 w6 V' D! n , E% x8 k2 v" i' G3 U% a" `
call real_mode: N3 ?% S( E1 {$ h- f8 r
8 s% d$ Y/ ~5 ?& u
pop gs
1 d+ A& G! m0 F9 g pop fs
! Y! s/ a/ _( S3 p. ?( y; Q: I pop es
8 e V% x1 z/ c/ |+ J! S pop ds F, ]4 |9 s3 x+ t4 \9 V
2 g& R. y- z' A5 n% c+ r& z .exit
# b$ e/ S/ z: N. g' k9 L;------------------------------------------------------------------------------------------------+ I6 _4 g! I- k: ?, q, }
big_real_mode proc near6 D) C; b3 Z0 l5 ]. r' o
in al, 92h
. C' ^* N) T% @( ^' ~ or al, 002
! m1 ? k" y/ [6 L! U4 X+ Z) t; W- N out 092h, al0 x% z6 a2 e6 o+ B8 n& }- `
out 0edh, al
0 ]. D; H/ S$ ?4 f) ?, Z% `2 ~ cli- }! b. P, X {; G) ~2 n6 q& r9 X; |
mov eax,DSEG
7 d( T. D% N* N. m) [ shl eax, 4- N6 M" X3 X+ A" [+ O+ d8 I
xor ebx, ebx) X B4 H: E- U U5 z9 l
mov ebx, offset GDT_def
- S7 e" }3 S, z/ z' ? add eax, ebx4 [. D4 D; M' S# y c
mov dword ptr GDT_Addr.Base, eax
8 P/ E" g n" | lgdt fword ptr GDT_Addr3 z/ z9 L2 {; g3 ]
mov bx, 8, V$ ?, w! G$ S, E5 \
mov eax, cr04 H: V. E7 S% N: }/ J
or al, 1
) M3 I" ?" T% w4 B/ y: ]7 } mov cr0, eax! i( W+ L; P; u* r
jmp PMod
2 U: x' ~( M' D8 j4 y& DPMod: G- M/ W' @9 g4 X9 \
mov fs, bx
1 m1 h" F- C" i; ?9 p0 H% U mov gs, bx
. V2 `4 {! l9 n9 }7 l mov eax,cr0) [6 S' u5 ^0 F+ B
and al, 0FEh, ^ O4 m) L# E- v) D5 Q
mov cr0, eax 4 J/ t' a7 V) T3 z. V; @
jmp RMod5 v6 ^( e d- v$ `; O6 M, m
RMod:
c6 M/ E2 W+ F% E- `6 C E" T xor ax, ax; |1 K8 P$ q) O0 `6 C, K: Y
mov fs, ax
: s" v1 N% p' }1 `1 ` [9 F2 \5 { mov gs, ax, M) z2 U# w: g! s3 Z9 @
: T8 [, k$ t" s. j* l1 `, g
sti/ I; u$ _/ d0 B
4 r- s2 m3 ^4 m' Y/ C- p; X ret
5 L: V; Z- F) Y; R3 a4 @. |* Q2 }big_real_mode ENDP
+ j5 r% V* H! Q4 s! D4 s1 U;------------------------------------------------------------------------------------------------
" v9 S! o' c4 w' w$ a! n" Yreal_mode proc near; {4 t9 G2 ?+ a
in al, 92h/ F3 w5 G/ N: z- U+ @
and al, 02* b4 p7 [& b# v+ v: }6 K; I
out 92h, al % B- m+ k( `6 Y. e7 e
ret
& {9 m, k9 v2 z! Jreal_mode ENDP
4 k+ K. N+ V4 M8 }7 t;------------------------------------------------------------------------------------------------
2 t" _$ H/ j' Z. I: H6 P4 IGet_Commandtail PROC near
2 A9 \) Q% u4 B push es 5 b0 A( q3 i- p2 {* P
pusha
3 h. v: ?6 t2 P& x; I. _# E mov ah,62h * y6 @. i/ G6 N' q& z
int 21h
- W) w9 }9 ~& X2 v6 f, v2 g mov es,bx
7 d7 D. B9 Y6 i popa ' b4 I2 I3 t5 Z! n4 A& V( Q2 t
pop es
: x# l# N, a$ R/ v) n ret
6 n% P1 B) n+ u0 x9 N# g) qGet_Commandtail ENDP- D" H5 m8 _& N/ _7 A$ |6 o
;------------------------------------------------------------------------------------------------
f7 j% ^: V \6 j- U% \/ I* YPSP proc near
8 p% S4 a% R* @7 z R4 ]) u mov ah,62h
0 a0 M* Q+ T; E' _) B! c" L( @ int 21h5 k+ L5 D6 f6 |
mov es,bx
+ }" s9 p; h! \' w; l; v xor ebx,ebx0 l. ~- }& D* i" d; w6 }0 ^( j
mov si,82h
) Q! D- l+ O! f mov al,es:[si]
3 d2 u: t) T$ v, k call Change. g% d. e" a \' }
mov cl,46 q- s/ d5 [- H4 C
shl ebx,cl* k. A: k2 A: h
add ebx,eax
9 x1 I: I4 o' v mov al,es:[si+1], r/ p9 T9 Y \1 k
call Change8 ^* _8 E& \$ c
mov cl,4" t0 L$ M' u9 `" ?& b
shl ebx,cl+ l" M! Z9 a+ B3 z
add ebx,eax, x8 w! N0 c+ ^5 G
mov al,es:[si+2]9 A/ k% F- d7 Z& X8 `" j+ o# w
call Change
$ T- v x! C/ r/ \8 @( O mov cl,4
, f* ?, L7 ?0 R shl ebx,cl
+ R" O2 e; ?( k7 d! H add ebx,eax
9 y y8 U/ \/ R4 v) I. A mov al,es:[si+3]
+ D, e3 R4 M3 U2 g" \8 `1 g call Change
/ D; H, h" ?. @9 i mov cl,4. @& s6 v6 [! ~- }0 l
shl ebx,cl% d9 A }9 U) X* O* G
add ebx,eax
3 ~9 L: D8 A! ?/ K mov al,es:[si+4]
5 d% o/ U. [5 z9 D2 ^0 { call Change
* V) p; E. W9 Y! s# y2 Y mov cl,4
* }+ j: O$ L, Q$ [+ h shl ebx,cl+ ]( A+ L) V% P$ Y; j
add ebx,eax
2 z; O+ T6 l$ h mov al,es:[si+5]
, K* S6 F9 N. M w! L, B: | call Change
' g/ i2 G& t6 g1 O mov cl,4) H9 X/ J! W! V. s3 |1 m- f; W
shl ebx,cl
7 q; B, i' E9 i" I add ebx,eax
9 _: p7 y: ~: e2 m mov al,es:[si+6]! s+ c: t! ]4 {- t# u6 G7 y' k
call Change
! E5 y( h. l, y% B7 u mov cl,4
" a B" C' y" P9 w' z* b shl ebx,cl
$ t# X( P, ]3 @( t add ebx,eax4 T1 R( ]+ N8 A8 d0 H: p. h! {
mov al,es:[si+7] e, X# g; O* R& {2 L/ X& m4 d
call Change; _ ?& V) d' C/ n: {
mov cl,4# P0 t/ L# c G/ o! Y3 C
shl ebx,cl
: S. C2 ~/ m" f9 p, [* a8 @ add ebx,eax! Z( P' P' u( R0 f
ret2 \' D; a* D, {" h! C! i
PSP endp) U8 U4 m, B! y9 I
;------------------------------------------------------------------------------------------------1 Q% M- y2 Z6 d
Change proc near5 u" d+ q9 Y, R0 P6 ^! g/ \
A:
! z! ?2 v, @3 ^& T movzx eax,al
& N2 h- m z" j1 S mov edx,eax/ x" {- G8 J; m6 J+ [
cmp eax,'0' 5 T X+ A2 p+ w% |
jb A
5 j2 S6 [& ~: J: f$ O9 `) W D( ] cmp eax,'9' / S- o6 {, |8 `6 k
ja B' L9 l4 w- h3 f6 t0 Z% e
sub eax,'0'
! V& G0 N* b7 J& P. | jmp short E+ x/ h9 U$ H, o% a9 I
B:
. V- g* D2 }5 _- w/ P and eax,0dfh ( c& Q( G( ^8 X y0 e# @
mov edx,eax$ Z% v: z5 `( S3 L
sub eax,37h 7 s" v) D5 s O+ Z
cmp eax,0ah8 }3 @8 [& |* l8 {
jb A
( I: |. T- J9 a) p( Q cmp eax,0fh2 p" R$ r! A# U& O( K% x2 q
ja A
; K# K* U+ o$ @5 `# \E:4 x9 N9 _3 I6 _( P4 V/ x
push eax
2 t: l" S6 d* C/ e8 A/ W# y call PRT
9 ~1 W. G! Y U: N/ m1 V* t+ |7 S pop eax
_ Y$ q6 |: K7 L0 [5 l6 K5 WCExit:
+ u* S( `- J: O8 ], N, u) A# P ret! T( j9 E3 a' @
Change endp
* I. q/ B/ N0 Q# m3 v( X) ?* O;------------------------------------------------------------------------------------------------
! c. j8 e5 U. K, [& q0 ?PRT proc near, p1 I3 }! x% I" E% b; b
mov ah,02h4 [7 b2 Y5 G+ ~
int 21h" j; m8 N. U& B1 D
ret7 F/ ]+ R9 p. U1 ~
PRT endp
' B8 I4 v! e! v& n! T' _;------------------------------------------------------------------------------------------------( K" O: b1 W6 y" d
crlf proc near H2 D7 i( d. T. H
mov ah,02h
6 c) [( A4 B0 E mov dl,0dh
& V- h5 h4 T" ?* v- W- ?! [ int 21h
$ h/ t4 Y# C! n7 G1 m3 | R mov ah,02h
$ T: l9 [$ }6 h; }1 [2 @ mov dl,0ah2 L; d2 U1 k+ w4 _) T
int 21h0 b' P& c) A" Z( P$ r/ Z s1 X
ret9 S8 @; ]4 G+ n: E" ^) S3 `1 U3 S
crlf endp
5 H6 g, g: L' j% m2 z;------------------------------------------------------------------------------------------------
8 ]& A. q& a0 Q, \2 x% w6 H2 h_32bits proc near: y$ E& t, G, f& I
pushad- i2 A; ?: o0 f, D0 K# E
mov cl,4/ o2 @" x1 Z# o; O
rol ebx,cl
; h$ W2 e- m+ | M& B call print_4_bits
- o, U5 y4 {. t- E* |9 `8 s rol ebx,cl' s- w, @) d K
call print_4_bits7 ~4 {0 V% Y3 _0 ^
rol ebx,cl$ z6 }. q2 ^9 G# z0 _# u1 Y
call print_4_bits7 n: A/ X4 U3 G7 P* M
rol ebx,cl
4 ]) p9 e* I) D' X call print_4_bits
2 H5 h* ?7 q- \, p1 v: R rol ebx,cl# G# E5 X$ F$ Z) U* L8 p
call print_4_bits
/ K- x* i4 v, S! T& s rol ebx,cl1 o- S3 _& f8 @
call print_4_bits
' {, t4 E! h5 C8 r rol ebx,cl
0 p5 t. V5 o. N) b' k+ p, W call print_4_bits, L$ Y9 f9 e8 ` t# N8 D5 |, \8 `
rol ebx,cl3 B M s% _0 D; }, W: V, d
call print_4_bits2 ^: n4 `$ [# r" M& R9 ]% I4 T) Q
rol ebx,cl9 S2 R- t" [% T* V, s+ {
popad" N! F: Q5 C g. t% c+ S6 J7 b
ret
1 H8 _. r: A; h' D; F) q6 K_32bits endp
7 g/ Q7 @6 y* b1 Q;------------------------------------------------------------------------------------------------
9 n3 V9 d6 Z6 D% q4 s_16bits proc near
* y' f; e5 l% `* f" s+ x: v" b6 t pusha $ V' U2 F' @3 Z/ i! E
rol bx,cl) J! y4 h: C% g, ]2 S
call print_4_bits) `4 x- D( q7 d; |' T
rol bx,cl
, c: z9 c5 Q/ s1 _6 ]; e3 _ call print_4_bits
) K" f0 D& h6 S& N) v rol bx,cl2 ]7 p6 j# T4 I7 |) U0 T
call print_4_bits, I c( B% Z# _" R& J. A: t$ Q; B
rol bx,cl" ^4 J U2 Y& c
call print_4_bits
4 h$ W% I, `6 O( O A popa. @6 T& \. r8 B& W$ \/ }
ret) C. \6 z* `: o$ K) w8 C
_16bits endp
4 C- E3 ?" w7 m5 @;------------------------------------------------------------------------------------------------
5 x" |( n' {5 e/ N5 D' r_8bits proc near+ d, a. m" r B
pusha $ b1 @* \0 B+ Z6 R" x$ g% s4 W1 V+ [
rol bx,cl3 g9 }: X5 p, _6 h! c2 w
call print_4_bits) q6 I) P9 W% `+ `$ i1 ?8 |! m
rol bx,cl, o! c1 h4 I- V e! N
call print_4_bits7 a6 B h; V0 A i' v1 u
popa% {+ Q5 ^1 D; V
ret
* m- O- Z" x" k4 u: u! e' f_8bits endp H6 @1 j( _, i! Y" ]" B
;------------------------------------------------------------------------------------------------
1 \9 v7 G+ }9 O5 c% a/ Nprint_4_bits proc near
' F2 M" d8 f1 h) Z) h# p mov dx,bx
2 L; r- ?* s$ M5 |1 z9 ^ and dl,0fh
7 c# M# H' g% {4 D8 X add dl,30h
# u/ g. a' _6 w. _. m' ] cmp dl,3ah3 G, ]& l5 y: d; z+ u% P% z
jb print
6 J( j: S% l4 ]5 K' m& ] add dl,76 e9 E1 [5 ?1 |7 u+ S
print: 4 j, G% x0 ?5 p* Z; I) [
mov ah,2
3 s' y1 N7 X7 r+ V* M; T& W: J: r0 g7 { int 21h
" e/ @, R% X1 G' K/ N! o3 v/ L ret* I' d8 j) M: s0 L
print_4_bits endp # F! N# Z7 Z# N9 v2 z4 H
;------------------------------------------------------------------------------------------------
% \6 a4 p% o8 `# q8 C. [CSEG ends
# g Q5 n# p. b$ m5 iEND |
|