|
各位前輩好,以下的程式為在 big_real_mode 讀取記憶體的值4 P* l& C& p, @5 B- o. A+ N
: l$ n" t* G& w例如: C:\memory.exe(程式檔名) 01000100(Address)
; d6 ^ \ Y* `
* ~! B+ F! {( c/ C5 O( Y" f則會顯示01000100位置的值/ d+ _6 [0 H9 O$ g$ N. j5 \3 q5 w0 r
; r% x: V% V$ W/ l5 v& Z$ E5 A7 R但是我另外還有要顯示出字串,但是顯示出來都是亂碼" `# O% T0 W3 I6 c# a2 f
: G6 }! r9 l, C# q麻煩前輩給我一些指導,謝謝 1 T/ ~: I1 r1 O" o
6 b/ E V1 J0 C. p
) v5 v0 t9 ~3 e9 V; k.model small* C g% y1 H! s3 G" C/ M4 c( C) b5 }
.386p3 i) U% T# S. y3 w4 y
;------------------------------------------------------------------------------------------------
6 v5 z4 M7 l9 v9 z' \DSEG SEGMENT USE16'data'
) k9 a( k, p1 G
8 B* I* ^; h* X9 P, ]$ r6 K8 vDESC STRUC5 I. M8 q. |& [: [# ^4 o6 ]
LimitL DW 0
' _: ?3 E `& c" B BaseL DW 0
$ l' }) v6 B1 ^! i BaseM DB 0
6 F% V. Q( P% T0 Z Attributes DB 0 ! k5 T4 `+ V2 e5 ]# }3 Z
LimitH DB 0
. d" o3 i, k: x/ g5 h- ? BaseH DB 0
% d; ?( m% h: T- g, U/ L9 g" hDESC ENDS, Q; _2 u7 w: M& h7 w _! L+ i/ r+ ?
& ~- m4 w+ n6 P/ h6 B! UPDesc STRUC l) G+ r8 ?. c: u; }
Limit DW 0
* R6 j3 M% Z8 W* z2 S t Base DD 0
4 k1 r* A2 D) o( O @PDesc ENDS
8 c0 Q z( @+ G1 w3 h6 k# z2 k1 M& q% P
GDT_def Label Fword( c9 f! e, O% V. L" A4 V
Null_Desc DESC < 0h, 0h, 00h, 00h, 000h, 0>9 f" f) C/ u7 Z, r, V
Data_Desc DESC < 0FFFFh, 0h, 00h, 92h, 0CFh, 0>
1 h1 X( L$ m, Y" T: S' v9 w5 b0 ]GDT_Addr PDesc <$-GDT_def-1, >( z0 P/ O' a$ G3 P6 V3 F& p
. _8 \# F, n+ L1 b
msg1 BYTE 'The Input Address is '
* I" f+ s( R7 r0 {: q9 R3 l. C6 Amsg2 BYTE 'The Data is:','$'0 g0 A% B, u1 I, ?8 f) K3 w
& y; _1 O# ^- p' Z' qDSEG ENDS
. S. d4 C" z6 q! [1 b" e' v% @/ B8 V# Z" D% U: M
1 D5 B/ \8 ]( }: s0 b7 t;------------------------------------------------------------------------------------------------ 6 \) `9 h0 F- W! z
. r2 P T7 F# w
ASSUME CS:CSEG,DS SEG0 @7 I a0 I7 Z/ m
& X3 O1 X7 z4 r2 [6 y/ M
CSEG SEGMENT USE16'code'3 _, i" u7 i1 S' L5 ?0 L. u
- k+ I' j& J8 x: p' c, @9 ] push ds, ~: F! f9 P* Q2 S
push es
4 E# G( {" e0 w/ ~. ]8 f' ^0 P push fs8 O! H' e* Y# E& z
push gs0 p& j+ Y4 M$ n
6 }, q7 |% ^7 Q
call big_real_mode, g! |( E, b4 k4 {- I. i
' n# c3 ~2 T3 |
; L, p5 r; X! t) u& d, u0 } mov edx,OFFSET msg1;
! l, [7 }' ?$ \7 A# R2 [4 m4 l* f mov ah,09h;
! a# f# c" [- ]2 G \: J1 c* J& E int 21h;# A8 ^1 M+ f% N l
mov edx,OFFSET msg2;* L; c2 }+ z }* u$ Q) k
mov ah,09h;0 G, i2 Q& C- b+ s1 L7 y
int 21h;
" F1 S, X3 `8 m, e 2 y( x6 _% ~& @' t' O E
call PSP 6 J' ?/ _( z# ~0 r
; R9 C; m6 x: V
call crlf : \" A" Q& [2 W% W
0 R+ i9 m/ U3 C0 ^, ^/ W
mov esi,ebx
% k0 ?( Q( T# w! \1 k; L0 X mov eax,fs:[esi]6 Q* K# |, R4 _5 U4 i3 j/ k
out 80h,eax# V4 m: f% ^& s: G$ _5 ]
mov ebx,eax
" {; L0 y: \) A call _8bits4 O' k& t( l# M
; _/ o8 f/ f, _& H9 o8 b/ B: L6 @
call real_mode
2 o6 b; }! P; r4 \/ B1 m3 Q ; v+ e" H2 G* L: o6 d0 o/ x& W
pop gs9 q" L+ p' t; b) G7 _7 I
pop fs$ e: b. H$ g/ H
pop es
5 ?: f$ D5 a X/ Q+ | pop ds* j: o& Z4 k: c* { B
) K: ^1 m1 C2 a4 F& J+ S& P .exit/ c6 W6 g; s0 U7 m+ l- \# ]4 E
;------------------------------------------------------------------------------------------------
. N" }+ j w+ [6 { Z/ R$ @big_real_mode proc near
- d/ T$ N5 z5 q# Y# j: Z* b8 Q0 @ in al, 92h; ~4 C# v+ m) Z& _- ]6 G' ~
or al, 002$ u# ^& `7 B, n1 A, P' b3 K0 t+ W
out 092h, al$ T6 J- |. I( ~5 T
out 0edh, al
9 T/ S# z3 o; a3 H& J% f cli
! q; a/ I& z8 _ @6 _. m" C mov eax,DSEG
?7 F; U- \; I" w% Y8 v6 g4 N/ j shl eax, 4! @, y& U" z# ^, g7 G- b7 C8 L
xor ebx, ebx
) {) F& n" j4 P9 c& f mov ebx, offset GDT_def
, k: T+ @7 o. x+ G0 M8 J& ?) |7 g add eax, ebx
6 K* z( V s: e( }: X5 E mov dword ptr GDT_Addr.Base, eax
' k& ?& U, A1 |- Z lgdt fword ptr GDT_Addr5 c) H6 E3 t( I- |7 E" \
mov bx, 8
/ _7 A) ^+ V' N0 ?. O+ o mov eax, cr0& d+ P9 A, T7 g' P) o
or al, 1: i" C; K& _# @/ \4 U
mov cr0, eax! z* z; Q0 G) R* M% E' n
jmp PMod
% f" N* z8 B6 E' m( C: \0 UPMod:; `1 n' A- r W3 Z
mov fs, bx) K* o# J! |' w& E
mov gs, bx
- f5 e3 v4 d5 M( k4 a' c. o mov eax,cr00 ~/ `: U# t5 h) }+ D4 Q5 M1 C* m
and al, 0FEh& _3 O2 ^6 ~( S3 [! O; G& E6 K
mov cr0, eax
6 y7 b( x* X B" j jmp RMod1 g% X" k. Y' V2 O
RMod:
9 e r7 x" c; y3 n( { xor ax, ax' y7 v! e+ V+ x
mov fs, ax
- g) [% A4 c' m* w- ?0 w& } mov gs, ax
- |& G0 O9 K- _1 p% P
7 t. J+ S; h" x# D1 R sti9 p1 e1 k; B# \0 f
. r* ~* ^5 m- r9 E4 | ret6 _* R$ k; e: Q6 j
big_real_mode ENDP
0 W+ u. |* ?9 M1 P2 v) ]/ H2 o/ b;------------------------------------------------------------------------------------------------
( S" q5 o" |8 hreal_mode proc near
- ~2 T' i! `) z O, @$ B, a in al, 92h
. l& a$ g; W/ X8 D* _ and al, 02
3 x* ?0 W8 f2 \6 e out 92h, al
+ O4 d2 ^1 Z; Z" g9 V) O ret! f$ H, `! w" O2 e4 S3 b6 _/ E( L
real_mode ENDP
# A6 L. t; X: G- K;------------------------------------------------------------------------------------------------
) V' b9 X3 {4 Q |$ lGet_Commandtail PROC near
5 a8 m5 T7 u1 D. l8 E7 q push es & G+ P7 C) y+ t6 Z8 q
pusha- q8 y# A5 w# t( {) l' o% W# |
mov ah,62h ( ]1 [; y1 q7 l! ?: g
int 21h- ?0 f* B: L; A; _7 [1 N
mov es,bx
* @1 \9 a2 i9 p) y7 Y popa 4 p2 K& e9 b: u4 A4 C& c
pop es9 t! o7 R4 i! O0 X% H- t/ _" D' F
ret
- ?* l. F5 n6 x N" ^8 X0 FGet_Commandtail ENDP
7 A- Q; g: Q7 t) b! R2 c;------------------------------------------------------------------------------------------------2 X+ h+ }, ?+ K) v. B J" V
PSP proc near
9 m& S+ `! @2 b0 l" [) T mov ah,62h/ D3 H' ?# i2 i& q1 [
int 21h/ ~+ o- J1 x/ I0 ^% _0 S
mov es,bx " d H$ n: m* m! h' v! o. e3 R, ~
xor ebx,ebx! a* C/ n- v0 C3 ?0 h% e8 R
mov si,82h
* W6 c" y; C d7 A mov al,es:[si]
5 a$ O7 \3 ~& T# t) m call Change
9 M' F; U4 X3 R) m mov cl,4
q8 H7 ^2 c0 z+ g- N' a shl ebx,cl
5 u# ]" G1 P2 D* }8 a# F add ebx,eax0 W: t$ S! Y6 E- a
mov al,es:[si+1]
' e' [. C: g% V- ^, x call Change7 ^8 j8 n# y6 l/ ~
mov cl,4
3 @' h, m, S6 f0 S9 {! h shl ebx,cl7 W, J3 g& \/ ~' C
add ebx,eax
- ^& G2 h$ r) ~3 } mov al,es:[si+2]# J. p4 s5 ?- Y) X- B$ V# S5 ?
call Change4 f- r D0 e: Q1 L1 `
mov cl,4; d; e7 n! i$ F0 J2 G
shl ebx,cl/ y* _) h' \/ _$ }) u
add ebx,eax
; H) Y b# o$ ]. u mov al,es:[si+3]
% m- o; U7 u1 P- B$ c J# w call Change
1 I4 T* K! l* v mov cl,46 M' L4 Y/ L0 U; p; }
shl ebx,cl
6 }# O- R* k; \) `/ A" ^: v q4 T" [ add ebx,eax
. i7 Y7 O# y! m% Q( U& U mov al,es:[si+4]
2 f2 ]/ I6 i6 ]3 i. v& _ call Change( R9 ?9 C( E5 K8 L/ X
mov cl,4! t. n0 I1 Z3 X/ H
shl ebx,cl: V+ I% D$ t6 _9 B) f
add ebx,eax
* \. j& q7 N5 E mov al,es:[si+5]5 P, A' ?" N$ U+ ?4 ^
call Change9 J d6 M8 ^, C, o
mov cl,4
5 k+ l1 V3 |3 p# T7 U7 Y9 i shl ebx,cl
+ P6 l0 `+ r7 R A/ K7 d" h' ?4 M# m/ { add ebx,eax
$ D4 k# O4 v; ~; P3 i, s1 D mov al,es:[si+6]
9 \* Y; E' ^; f) y" [ call Change/ v8 h! V% J& h+ U( A
mov cl,4: R" u* V5 N2 F4 N; I( d
shl ebx,cl
. n# h# w8 G7 J/ J6 a add ebx,eax
" T5 \; p/ _6 z mov al,es:[si+7]4 E+ `0 w# J" t l/ `/ l7 k& p
call Change
5 v' J; a" k9 v( l/ b9 y s mov cl,4# Q* {: A' ?$ P( z
shl ebx,cl6 w, A' Y4 G* c, g/ d
add ebx,eax |) [) o4 W; F9 ?
ret
/ J2 C) ~) ?# l# NPSP endp4 i6 r, m( K4 ]0 q
;------------------------------------------------------------------------------------------------
2 t1 `4 Z& y# ]: p+ R4 B7 |7 RChange proc near
$ w! F3 ?" \( F3 YA: ) l2 n8 ~% T. \1 X, c# P, l. Z- n
movzx eax,al: b5 ?, E- I8 K$ S, {
mov edx,eax7 w( E! d# r# S6 h
cmp eax,'0'
9 {4 z/ t& I1 n* T jb A
$ I7 t& t$ p, o9 G6 o0 D cmp eax,'9'
' I% G# N$ v/ v0 C/ q: X ja B# X* Y! k" l# i9 d' Y
sub eax,'0'- O, {# m4 n+ Y5 [- O+ ~! y% X
jmp short E
, L: l5 ~+ a0 n8 ^: G B; fB:; y. M3 s- V( m
and eax,0dfh " E2 {# J4 R9 w/ O( T5 V& ]" n
mov edx,eax+ A; T$ U% I# c+ ?
sub eax,37h ( L) a I3 S9 ^! m% |0 X
cmp eax,0ah
2 U) q6 J/ t# h, O: I jb A
9 K4 z) r0 S+ d6 V; X3 j, u cmp eax,0fh$ e S4 G/ d5 }/ L- K
ja A ; l* N5 x" Q9 }( a1 n1 `. F
E:! {; ?' v4 z3 u8 a# i) p
push eax
! L! b7 ^+ J8 {* f4 Z% g" n call PRT
! O9 d' Q8 n. R( [2 N) k pop eax, e# n* O( T: h* g
CExit:% J: N( I, {7 m
ret
0 I% K9 d* O5 C" w* K; T7 gChange endp4 y2 n9 E& c- p
;------------------------------------------------------------------------------------------------
V0 K( y) y& @" B) o/ RPRT proc near
4 n& ^# ~) d7 Q6 ` mov ah,02h
; D0 S. @" n( ` ^& A int 21h
+ y& O) @0 X4 d J ret" m, Q2 N# N* X i3 h
PRT endp. F+ g# b, }* `; \, \! r
;------------------------------------------------------------------------------------------------" p3 ^( e3 i6 I( P% M. b# a
crlf proc near& T( Z3 a1 `$ B* Y
mov ah,02h b j- Y5 [3 L. b8 g& K
mov dl,0dh+ P7 `/ N9 n A% c* [
int 21h
, w; |+ O% k, w9 L" |- V |' ^ mov ah,02h- V. q0 o [; p& |% h
mov dl,0ah
$ {- v% a+ Q! }5 S6 o5 [ int 21h
2 A& k. j3 J2 D; O# \9 l, u% H9 s8 R ret
q& G. m) D* o! o- d- m- hcrlf endp4 Q* k9 g- z6 [ s5 q
;------------------------------------------------------------------------------------------------# B8 `) |& f9 k& z; T3 G
_32bits proc near- h) {! b/ n6 P2 f# v
pushad
& t/ R3 z {8 }5 I$ i6 O, Q) [4 i mov cl,4
; _) ?0 `" @1 R. ]9 v8 v rol ebx,cl) c, M8 A+ D8 S4 Z6 r, ^( u* H
call print_4_bits
, J4 ~; q# ~, Q8 p& j: G rol ebx,cl
" w3 h/ q* B. m9 r; k& z' D# \8 B3 M call print_4_bits
7 N! }9 w7 b% d" _ rol ebx,cl
0 `6 ?( R" }5 W- T call print_4_bits, i* R8 o0 U$ {
rol ebx,cl
" j$ [' S P: i call print_4_bits; k' @* V# D" Q5 S+ y
rol ebx,cl
$ e7 _, J: |( X6 Y k0 M T# | call print_4_bits/ U6 v: @/ [7 E+ t }5 W
rol ebx,cl+ x: N( M: \5 I3 V( ?! L, Y2 c
call print_4_bits" l/ c: D7 G( t+ b8 E
rol ebx,cl
- ^6 M, a- m$ |/ O8 z A f8 t! e call print_4_bits* b3 w6 |: b% ]0 D9 q
rol ebx,cl
% D0 Q% x/ I. j6 w- A: a j: ^/ Z call print_4_bits h! a7 ]; k( w- E d
rol ebx,cl+ l- |7 w/ M* j6 T
popad; m7 o1 _8 F) v( ^3 e
ret0 e, X+ d* G8 r0 D0 T5 r7 y
_32bits endp1 K" N! c) }4 ?: h
;------------------------------------------------------------------------------------------------! w7 R A6 R k2 g7 l
_16bits proc near- m& Y) | D* |4 l+ g5 i V# G; P
pusha 6 u- U; i1 G$ O- g/ e
rol bx,cl9 L) p; F9 t& c
call print_4_bits: x3 K5 |+ V7 Y, \7 v/ }5 n) {
rol bx,cl" B) v6 j1 y6 l0 o
call print_4_bits9 V% }0 Y$ G! N) G2 d
rol bx,cl
6 X, `) S! R2 w* r5 t# h call print_4_bits( B$ J+ L6 J- D
rol bx,cl7 z4 Z1 p8 e9 `, s! P7 L
call print_4_bits* h: q) T0 U/ t% Y* l ~
popa
0 K9 i6 @ K- W1 G& V ret) u& s# R5 P C
_16bits endp( q! w) o1 C! \. v, P) Q
;------------------------------------------------------------------------------------------------
+ c% w" Q( _3 j# P_8bits proc near
) d; X$ ?& K; l3 i2 ^$ ]3 U6 @( { pusha
Q1 M* {" p8 V# V4 c rol bx,cl
9 H2 a/ k) |0 A6 b7 I' ? call print_4_bits
`+ N% Y. t# y" @( y1 O0 R rol bx,cl
: C& K9 A" i) [" v, ? call print_4_bits; A3 k5 W/ R, R. b% F0 r
popa
7 S; z1 A; y! k/ H; g ret
, K- g! O$ @, |0 B) e_8bits endp7 y- {2 L& r& t4 @( B
;------------------------------------------------------------------------------------------------0 P) R9 E, e& B
print_4_bits proc near
" i1 _9 M3 W9 L6 x; c mov dx,bx$ Y& l8 ~) M( m5 q6 v
and dl,0fh. }/ J1 e! A: i
add dl,30h6 a) i0 |, b8 U# N5 v( c
cmp dl,3ah; M2 t+ p# A: x% c: d
jb print
. Q7 d2 K) Z9 z& z, c add dl,7( V3 Q c/ i6 ^) J" `
print:
' ^- V8 T: C6 h/ f6 s) @1 S mov ah,2- U0 ^' Q; b, F6 C
int 21h S0 I* s; I* Y1 i
ret
. ~3 j5 n# J! t! g. vprint_4_bits endp
6 b- u: {# _$ n' s% J;------------------------------------------------------------------------------------------------
& o! |( E, f4 r! ~$ R. uCSEG ends' }" n8 `- z; L" k! e0 t
END |
|