|
|
各位前輩好,以下的程式為在 big_real_mode 讀取記憶體的值
0 w' q# ]/ r9 t( H
; W: g8 R2 _3 A6 \$ p* x& X例如: C:\memory.exe(程式檔名) 01000100(Address); U$ x& l3 I' n I1 _* w
' S! u7 B* t) t3 b
則會顯示01000100位置的值
( U) W& W) |0 h0 O" w" t0 A+ N1 P* n
但是我另外還有要顯示出字串,但是顯示出來都是亂碼3 r4 z8 B8 P0 g, r9 @; \2 j
- q3 Y ]4 {6 R) P1 R9 G麻煩前輩給我一些指導,謝謝
6 W2 e. A$ u2 y \1 b# D6 o' N) r0 `- p6 G# k
1 y4 O1 o! B# [) e
.model small* P3 J+ [# g2 }8 ]
.386p6 q! _" q3 {: w ~ s) ~# V
;------------------------------------------------------------------------------------------------
5 o7 m1 z1 {6 _9 d B2 b0 }7 U% S4 uDSEG SEGMENT USE16'data' ) `* ]# w8 H* @, o. W x
2 X( Z5 z) w0 s2 _6 l& F0 y
DESC STRUC
- |4 M3 B) a* q- ` E0 J LimitL DW 0 9 u, V' J$ K* K8 F, ]6 _& R
BaseL DW 0 ; x6 x" L! o' b1 q1 z
BaseM DB 0 . K, I3 ?7 E) z. t
Attributes DB 0
0 q. i- g% a$ g {& E LimitH DB 0 / E* L* \' P( l% }0 | K: F; ?
BaseH DB 0
" g, @- z" s5 Y. w; A9 `DESC ENDS2 p+ E, B/ N' f6 \
- ?' H! z! u, ]/ ~7 M# L
PDesc STRUC. a% k9 E* d) D8 c! b6 B
Limit DW 0
* g6 E( z% B @3 y Base DD 0 ! Y. k. _ F& ?- a. h7 t
PDesc ENDS
4 W% ^. _3 B, x3 \- I2 Q5 D1 Z; B
( D3 p6 ?! C( g# H8 I+ UGDT_def Label Fword6 [8 h0 `" q+ w* C: Y
Null_Desc DESC < 0h, 0h, 00h, 00h, 000h, 0>
3 p; g& z# Z0 N3 \0 _Data_Desc DESC < 0FFFFh, 0h, 00h, 92h, 0CFh, 0>% ^$ n' p4 K$ U8 t# w) s
GDT_Addr PDesc <$-GDT_def-1, >5 v E- }9 t) \7 U) P8 I
' E2 h( z. {- h, z u$ a2 K3 Q
msg1 BYTE 'The Input Address is '9 }: F: R% v4 U' f+ _
msg2 BYTE 'The Data is:','$'/ A' ?1 I0 C5 r( b
7 }3 e5 X3 V! r- d. J4 R* F" S \DSEG ENDS
. P+ E4 D7 z* a! {, J" T# o- E- V, z: Z$ O# E0 m
- F; R. O7 L6 q( ?! E
;------------------------------------------------------------------------------------------------
8 J0 D4 ^0 H$ n- x/ z- G
7 I+ B5 y2 v) y0 A9 X& F! L% LASSUME CS:CSEG,DS SEG. W( p7 |& ] A/ ?
9 D' |- ]$ [" H. Y5 a4 B( u$ CCSEG SEGMENT USE16'code'
9 P. C' F. K; j0 w 3 I+ D2 a* L4 j
push ds
# r# c, T7 J0 h' m8 `3 V. @ push es
/ h. \* F, G% C9 i8 ? push fs
/ `$ {; L( `8 |/ {$ E9 R push gs5 o4 q7 f5 Q; @9 {3 J
, V% ]/ e& {) R' b- `% d& P4 c
call big_real_mode. v7 T5 f' w# M/ h2 n
: y0 v. Q0 k0 e/ e4 X2 |+ e . u$ {6 I) j: _ s3 T2 ^" P
mov edx,OFFSET msg1;
( h( ^4 N! ?1 y) A+ | mov ah,09h;
5 N+ w0 Z* e$ ~$ x/ u int 21h;
' }, B2 D# I& W6 I, E4 l mov edx,OFFSET msg2;
" ?5 e) @* k: v I+ Z1 K mov ah,09h;
/ r, N! b2 K" c7 ]( q# [ int 21h;! W) H, g7 s% ?8 Q8 n, y( G7 s
: z, ^- z/ A9 j3 k* j
call PSP
% x1 @5 r* Z0 h
: c$ q% T% e. I call crlf
7 c; H0 }) \9 ?1 O4 W: \
3 L* @7 N5 D0 Z% L/ {( a mov esi,ebx
c5 `- P# \- F% I& f mov eax,fs:[esi]% T% c0 Z D$ j, C3 l4 [
out 80h,eax: j/ u% b6 M" ]( J( M6 }0 M+ u
mov ebx,eax4 O P8 ]% W: N6 l; L# H7 y
call _8bits, ^( Q( L) w/ S
1 D9 ^( b' x. F! `
call real_mode
' o& C1 ^ U$ M1 H( {! d; C! N% J) R
. U p! d, k: d! u pop gs1 _& }" d* s% \! A
pop fs" M& A% W% Y( z5 S( V3 R
pop es
1 r& E- D9 a( ^5 j5 K" Z pop ds% W V; V7 g6 N. e2 ?: b
; s$ M' ]* o* I0 k% m .exit
" @# d2 y. V. \# v5 M( z;------------------------------------------------------------------------------------------------
4 t% U7 J# o3 gbig_real_mode proc near+ p3 L! a. X% s! F m
in al, 92h; A4 D6 Y3 J, ?8 F
or al, 002
% f) m, c! F7 U2 A$ F Q. L out 092h, al
# }8 f$ q: f6 V6 { out 0edh, al
, |8 @. s# W4 n' I: w ~ cli
) y5 }* v# {3 h# S mov eax,DSEG
2 u: Z- g7 O/ n) Q5 h/ i shl eax, 43 c8 s, n/ ?9 ?- J
xor ebx, ebx; e% D4 a/ [" u- t& E8 L& D
mov ebx, offset GDT_def
9 b* q) d$ D4 _& b add eax, ebx8 x/ D# Q' P4 V- m7 g
mov dword ptr GDT_Addr.Base, eax! D' m6 q) m) w' i1 M
lgdt fword ptr GDT_Addr6 m, m* Y% j& `7 K/ ?
mov bx, 8* \, R; F: G* d3 h
mov eax, cr0
- S" _, N/ {4 o! p3 ^6 j or al, 1$ M, H. z+ u3 o( Y% ?' {) F" g
mov cr0, eax$ |" g9 I1 H( }$ s
jmp PMod
9 S/ A3 k6 R1 J" @PMod:
7 s' t7 O3 ^; \/ ?9 z3 y, | mov fs, bx& y, r; X. W" k6 g8 ]5 R
mov gs, bx$ I$ z3 h7 C+ H- U
mov eax,cr0+ x1 q$ ?2 l* m
and al, 0FEh
0 R# O6 o- T6 Q5 V6 j. v mov cr0, eax
9 U8 b/ `( ~+ L4 W5 ~) f4 v jmp RMod! r2 s# t* [4 W9 M' i
RMod:* `9 a8 X8 Q) ^: ?3 ]% q
xor ax, ax# h o$ |4 \8 K |6 U% H& n+ W
mov fs, ax) A2 m) v/ j- V. I O
mov gs, ax
! V% l& @, e5 u. m/ B* \" H1 t
7 u, G2 |6 W( n) A" d sti1 Y8 {5 R5 C+ N* v
( H0 i3 a, ^( ?, r- p3 T& _
ret
+ M5 Z5 A- H, z" k8 O9 K. m% ]big_real_mode ENDP- x% ~% t/ Q3 Q! \5 Q; ?
;------------------------------------------------------------------------------------------------
8 ?% T. E# g7 ~. _real_mode proc near
8 K5 f- `4 r- ~) n+ u6 W in al, 92h
. n# g3 D, U* j7 C/ U6 t, g- ` and al, 02
3 b, e" B3 c+ {# `5 c( i) { out 92h, al
, o, s2 |* U) b7 w# N+ }7 O" Y ret
% |: F# g* _3 r( \- P# treal_mode ENDP5 N- R4 ~1 u7 F. d" Q& g
;------------------------------------------------------------------------------------------------) F; k m5 d/ x$ V9 {
Get_Commandtail PROC near3 g$ u9 `% d; k: @5 _% W: K9 b+ K
push es 7 Q+ g; C! p3 L& g+ Q
pusha7 Q! Q8 n, L2 F6 f2 |3 S4 j
mov ah,62h
/ d" q4 }8 [4 ^8 s9 \3 b1 K1 k" l int 21h
# f; `2 c8 I2 ], m0 y s mov es,bx$ m. S5 i- a3 n( H1 k
popa
" z9 }" n6 P0 Q: e. G2 s pop es e) Z2 O" O, X4 L; K; u% ` i
ret2 Q i3 k2 d- Q/ A
Get_Commandtail ENDP( P$ f: L: O; P2 e: j
;------------------------------------------------------------------------------------------------
`* j D8 D0 Z& q# t6 @PSP proc near$ H; Y! C/ e. ^ c: v
mov ah,62h6 L" O% r, ^( ^2 W$ Q+ W0 R
int 21h, g1 z+ S: s5 S5 [! \& N) ?* h
mov es,bx
* s B# q1 _ d: c' e& i7 Z( s& N xor ebx,ebx
b8 W) X; j5 }) C' }$ Z mov si,82h
5 T% a$ `/ f- @3 w* S1 s' Z mov al,es:[si]
0 k+ Q, F- V3 f# @: l0 D& a8 J2 M, R call Change: c- Z5 Y, @# _" n. c
mov cl,4# ~2 m: Q, [( K: G/ [5 p2 V& S* p
shl ebx,cl
: n# L8 J, W j7 M8 K+ [ add ebx,eax! h) C6 ^$ k+ g1 g8 U
mov al,es:[si+1]
2 q0 P0 V. d# ?8 Q" k7 `* ]/ f call Change
0 @- `. D. Q- P2 ?5 t8 n0 w mov cl,4
+ h& o( f6 r/ J0 y' x; J5 M# g" W shl ebx,cl
' Z" W4 H" W4 L3 r) Z- o add ebx,eax2 k: ^0 l; `' H- z/ r& u
mov al,es:[si+2]
+ v; k3 @; J; i$ Y0 @" P call Change! _6 A, ?/ X2 R5 C
mov cl,4
& G% A& T. E3 o& r6 w2 ]' } shl ebx,cl
7 c+ _% P+ _4 x9 i* i' y3 x add ebx,eax6 q) U, ^3 m$ U
mov al,es:[si+3]3 T7 ~( j7 B; D6 d) C) r
call Change3 Y' K4 B& T$ d- }
mov cl,4 L8 Q7 I) `2 G6 S! O4 Y1 J: R
shl ebx,cl
9 S' {' ~& @9 B' \ add ebx,eax
4 T8 U) S" H6 Q1 d0 o mov al,es:[si+4]% [7 ]4 w* _2 e$ S2 \ C Y
call Change( F; Y g I* S
mov cl,4
1 D8 ~5 u0 C5 g) f8 ^+ `- W shl ebx,cl
, F& w& l/ \: \; L7 h; f4 Z9 j add ebx,eax( ^5 T, A y: }2 g; g
mov al,es:[si+5] z: {' q/ t$ M& J s
call Change
1 V' l0 ~7 J2 s mov cl,4
/ U6 m$ Q6 Z" K! c8 q8 N+ l0 n: h& e shl ebx,cl
# p/ i* I' D' p3 [ add ebx,eax, ~+ q8 _- ~2 l
mov al,es:[si+6]2 M( m6 n a0 w- c: }
call Change
- b4 C# I o. F mov cl,4
9 |% ?# E+ W; h# L8 j3 O shl ebx,cl
7 H# O" g2 T; V. @2 X- J add ebx,eax$ D" k' {8 Q0 K3 m: O8 D% b
mov al,es:[si+7]
; f1 w6 x3 X) _8 a- X) U( z call Change. `8 n1 d2 p; E& o6 A/ ?
mov cl,4
/ P; a& M2 Z7 | shl ebx,cl
$ r0 U+ z2 G% y# S add ebx,eax
! f! s6 j) \0 J ret
4 j' {1 [* `& o5 U/ J( F( E& m! N& I; GPSP endp
% |7 F2 \1 U4 j( I;------------------------------------------------------------------------------------------------
8 i+ t# h( h! R: z8 }& x" X9 WChange proc near2 }. {8 Y) }: M- S
A: ' X* N9 O8 y/ Q$ Y* u
movzx eax,al" y1 j/ x \/ W$ ~# ^
mov edx,eax
/ g: ~4 D2 F; K3 |8 n) _2 b cmp eax,'0'
: H& P9 i4 D/ R7 r$ z) D jb A
( T$ a$ ^; @% Y9 | cmp eax,'9'
1 Q9 M( P( B+ n4 Q7 u5 L2 W ja B
" e% o) b7 m9 [) n8 ]7 W4 t sub eax,'0'
) {1 z4 U9 t) } jmp short E
( r3 R- Z: L) xB:) F6 u* ?$ N* S, E2 @
and eax,0dfh + d, k- B4 N9 A/ n; Z( E4 k
mov edx,eax
5 d2 g' |2 t f9 u6 }( e6 C2 J5 B1 L sub eax,37h - F% P* K h# {/ }
cmp eax,0ah( p( ]) E* M- `& Z O8 F) m
jb A ( W1 Z0 \! {& r. ~
cmp eax,0fh! p, _- L4 ?% k
ja A
3 ?8 R" g% f. {1 `E:
6 {0 s: C" F0 P push eax
1 }2 E, R* W4 V# @5 `" t/ O call PRT
4 S# b; F1 O. ^2 \- b pop eax
5 R' E8 j; {! `CExit:( S4 x+ u$ ~, q5 h" }
ret+ x2 z$ }& T+ c; C* Y$ y( A
Change endp; U/ I* n) Y& P. i
;------------------------------------------------------------------------------------------------
3 z/ ]" d" _8 \2 Q: n$ E2 pPRT proc near
) o: |6 |0 G+ \5 E; V7 Q mov ah,02h
; K9 P/ n" ]0 ]* |% x+ H2 Y( x int 21h
( ]5 R' x7 c; M/ b9 y+ ]1 D ret
# m U9 e) j9 A% b5 \PRT endp
2 @3 h: ~( I; z7 };------------------------------------------------------------------------------------------------% E0 ~8 G7 Z5 F4 R# r1 }3 P! f
crlf proc near1 ]4 @& ], R; B" F4 b+ l1 G
mov ah,02h
! j% q7 ~& ~3 ~ h1 B" { mov dl,0dh
% ^ ^/ O& G, `2 D) V9 u9 {, U; A int 21h- k6 P: A; @0 z* ?# v( T
mov ah,02h( d' U: W9 ?* c5 m
mov dl,0ah! k e0 u8 U+ X; i2 N
int 21h
! S+ {+ |6 p! ^" S ret; | K S7 M( O- l' P2 o
crlf endp
4 M8 g/ I0 a; B;------------------------------------------------------------------------------------------------
: U: m; d8 x$ r0 D* q6 l_32bits proc near2 O2 b7 K P' o8 p/ ?% v4 u8 w
pushad
3 e+ ^" R: p; a2 r. E1 E mov cl,4 \5 N6 f' v1 a& H+ Z
rol ebx,cl% M4 y( @- s ]6 e |
call print_4_bits" D! c4 J. y+ t9 B2 V- ?
rol ebx,cl
5 T9 s7 J9 E' k call print_4_bits. g7 }! d3 o2 h7 f9 S* m, r
rol ebx,cl& x* Y+ H4 \: m
call print_4_bits
& p- x1 n' _: B0 c) V rol ebx,cl
) F# [5 y$ |4 c9 C/ E9 s call print_4_bits
& y" ^+ ~, K3 i3 F3 v' o/ ?1 Z$ @ rol ebx,cl
4 j, c7 k, z) O" h9 B3 A call print_4_bits
* z+ G' |( u7 _7 a* l& O8 T rol ebx,cl
' T: ~1 I% a% ]3 n; m0 y. h6 x9 y" w call print_4_bits; W; k+ [' q4 t$ K
rol ebx,cl! r- Q m- v' p9 C
call print_4_bits. S" t1 _4 }$ {! a- W# Y0 t
rol ebx,cl! y1 H, h2 m+ V8 `- c
call print_4_bits
- |0 @+ \! A8 T- I& `3 U" Q' R rol ebx,cl
. G1 U) k M" m r! L0 p! m/ t n popad
2 @6 ?) v( @+ c% O% U! v8 L ret
0 T/ S7 @$ m8 W& P_32bits endp
/ E1 s& z% e. ^* F r3 F7 w. g: G;------------------------------------------------------------------------------------------------9 O; ^3 q3 @( T* _& Q$ R2 e# V$ f
_16bits proc near- W1 R" T% T& b
pusha # R, A' i, P/ J. [) P) s& Z
rol bx,cl! G" X# p/ K+ {! U3 p2 j; M* L
call print_4_bits9 C) S9 ?9 E) {, i7 f0 O: C( K
rol bx,cl
8 e& D0 O9 V1 O/ U8 Q call print_4_bits9 a6 }( \1 ?- b% p% T) L
rol bx,cl
, ^3 ]. w9 l- a% X call print_4_bits* q/ D3 O. V7 o _- _3 U1 o
rol bx,cl
+ V! F8 y% g/ l1 [ call print_4_bits6 z+ n& @- u2 w' ?( ~/ F# Z
popa6 F9 r1 ^4 Q7 z
ret7 {4 l( S% g9 ^4 C9 O" |0 q
_16bits endp
! }5 k5 j- c, Y% G& w;------------------------------------------------------------------------------------------------
4 }& y! m; V6 |* a$ i+ E+ g5 F+ Y_8bits proc near
1 M5 K4 g% {+ ]4 ]0 C$ q1 `& ~$ A3 ` pusha ( s6 e7 o3 L% r- c
rol bx,cl4 z1 T/ y- N" ?7 U/ J
call print_4_bits
% ^0 b, `5 B; E. ~# }# x rol bx,cl
% O! A! F% R7 v& v call print_4_bits
2 z6 G' w1 b& _ q popa# M2 n$ T& z. Q3 n9 D' |: `# `
ret5 c$ m2 [' `9 [2 b$ g/ d
_8bits endp
3 F* d5 @9 m4 R% W/ U;------------------------------------------------------------------------------------------------, W$ c' N) d5 P b+ {% [/ V( {4 e
print_4_bits proc near
& s4 \ b: `7 _3 h7 j8 X mov dx,bx
& c( t3 g0 c% Z$ n) B; W and dl,0fh
3 F/ J0 l# ~# U add dl,30h+ \2 q5 e4 o; I/ n) J. q6 T- M
cmp dl,3ah
8 w5 V8 j2 `+ r, _7 e7 w jb print
# F# A H; _( S u add dl,70 j% e. U" G, Q
print: 2 w* ~3 _2 }, i& o0 R- L
mov ah,2
: D, @. p' F! }6 Q0 p int 21h
3 V5 D7 u: J7 z( D ret* `( D/ Y8 z2 J- g; `4 {( ?; [" g
print_4_bits endp
! |4 p1 l# V, |4 N8 j;------------------------------------------------------------------------------------------------/ F$ M) U# n: R( z! C$ c9 e- B
CSEG ends
+ \8 p" X. V( y) f' j$ i# jEND |
|