|
|
各位前輩好,以下的程式為在 big_real_mode 讀取記憶體的值, i/ ~, \7 U$ L
' T9 d! ^; |+ X, |7 @0 Z. c$ W
例如: C:\memory.exe(程式檔名) 01000100(Address)
: u) T6 X p1 j4 M3 ~9 x" d( O
6 W* y6 ~, I7 J, h6 E% ^. ~& [) c則會顯示01000100位置的值0 E- G- y+ h3 ^3 }
' ]: y8 O" u3 ]3 o但是我另外還有要顯示出字串,但是顯示出來都是亂碼
% L2 Q! @& L5 D
- e" }, Z7 c) [3 f+ c* v麻煩前輩給我一些指導,謝謝 7 q+ X' ^! l4 y+ `, D2 {
: s/ f) `, L7 u8 |) A5 I3 w) E9 S% I0 K
6 s9 z7 k! u$ O: V$ Y" t
.model small7 A1 V; v# h2 ^+ t
.386p
8 r1 Y1 E; c; w' c% l;------------------------------------------------------------------------------------------------
) u! ^- X( [. j: t4 h3 qDSEG SEGMENT USE16'data' 5 Q$ ^ H+ m e3 m9 f
, b/ Q) [) {1 R' k. w1 }; [
DESC STRUC* t' Z, l" B X, s
LimitL DW 0 - G g) J2 J8 Q6 D& ~7 p
BaseL DW 0 4 F" u# l8 B3 Q1 r- Z
BaseM DB 0 ' X* {- m! D( n, N0 G2 a; G
Attributes DB 0 0 F4 n$ I: c1 }+ X+ k8 i* K
LimitH DB 0
: h+ n3 t: Z4 s' C0 i BaseH DB 0
, z0 D) E8 A, J4 A- L% G+ h4 ~DESC ENDS, v ~: h- d5 m3 R" W7 e/ Z
- [9 J9 @+ [. WPDesc STRUC! }7 T" L4 p3 [& H1 d7 J" H3 c
Limit DW 0 . ]) @2 d$ Z5 j. X. @9 C) W' ?+ b: b
Base DD 0 ' U. T; p6 r" e4 |
PDesc ENDS# t! F# ~$ ?' c3 e4 j0 f" u
( ^/ @! `, e% L3 \ m! j
GDT_def Label Fword4 H1 c* Z1 x1 x4 a J& d, @9 }* e
Null_Desc DESC < 0h, 0h, 00h, 00h, 000h, 0>2 _2 F. a# u. j5 v, G U( ?" h9 W
Data_Desc DESC < 0FFFFh, 0h, 00h, 92h, 0CFh, 0>
~' \" ?0 b% h$ qGDT_Addr PDesc <$-GDT_def-1, >
; i, S8 ~+ c8 }2 \; S
/ H( W5 \- q7 U" P! J' H1 imsg1 BYTE 'The Input Address is '
9 W% s. l# n: _9 Qmsg2 BYTE 'The Data is:','$'3 `$ v0 C( I4 q. [2 p+ k
; h% }- i: }) V1 X1 A3 KDSEG ENDS
8 T- v( z" d0 [; C4 a. V0 t' R# j! w4 |& B1 F# n) ~
# i; c: `; m* r- i- x3 S;------------------------------------------------------------------------------------------------
2 K( D0 @! V5 ^7 q" Y7 [* c- c' E# r; |
ASSUME CS:CSEG,DS SEG
% k* _, [: K8 {, J& p0 j
8 C( N8 A% r5 y" ~CSEG SEGMENT USE16'code'
* u2 p. i D3 W+ {( H( Y/ p
2 r7 F, A) e0 \6 w2 D/ W5 k: }7 Y push ds
P/ b+ ^# [# O4 Y push es
$ ^3 m( P6 d2 V! B, N8 G3 e3 S3 n push fs
" G* \, q/ Z/ E8 M& {4 C* N push gs/ X! z- O" P0 k6 R0 w# s) b" m& {
) N( f" j& o& @5 Y7 x! z9 O
call big_real_mode
" U' u# I) v+ \+ o/ K
$ e9 P s' K. i; }: P% S% \4 [ ! [& }1 P1 V7 u! ]! k' j) c1 B
mov edx,OFFSET msg1;' p1 H2 M5 U) H% z; B" ^! Q8 x3 g3 v5 W
mov ah,09h; 7 j( a5 E x# C+ e' I) ?4 \; J
int 21h;; a" L) W: ^% r
mov edx,OFFSET msg2;0 H t4 J4 V3 I
mov ah,09h;
% m7 k3 j" M, T6 o int 21h;
! u2 N5 Y; M* w
1 [7 }1 o$ W" [' K. w* \1 v4 Z call PSP ) o9 U+ G. M$ Y% ^( j3 ?6 |
3 o1 |- I0 l% ]. i9 S call crlf " |! {! n8 ?8 M) o/ c# i) \
, s4 P4 @2 q1 l# k8 W+ i mov esi,ebx- O* n# b5 `% R& ^6 D
mov eax,fs:[esi]
g( W7 o; u( I e8 f out 80h,eax2 I3 ^/ F3 ?& V0 W1 ]2 H
mov ebx,eax- ~3 [/ a, G9 L( D( ]4 V( b& ~! |$ Z
call _8bits
) P% N) ?! w( W: ]) u/ T
# p. D% E2 x* e call real_mode
8 v! n, O G1 y 3 s1 Y& G, I3 `" i( h
pop gs
. E; z; }8 m6 d pop fs
( j/ U5 B" N: ^3 w% f/ T+ L pop es
" S1 h& B* K0 {- s pop ds
1 ?' p8 U2 _& g3 l* L: i$ t) @( y 7 X* }& ]* u! Z! x2 N
.exit
$ U# m' \8 s$ X! U% [* r2 r;------------------------------------------------------------------------------------------------) E' |- h0 ~6 h
big_real_mode proc near
8 i. a. I+ a& a! K5 | in al, 92h
+ w* s& U3 L$ A+ u# q6 L" Z or al, 0026 L. x7 s3 C% |. \+ S' u
out 092h, al: n6 e+ ~7 x! [" o" }; X1 S8 ~
out 0edh, al
0 ]" [- Z/ r6 J cli
- w' o! s6 } V0 x, k! P mov eax,DSEG
9 ^& U2 v3 @) Q5 h- y3 c7 X8 [ shl eax, 4. Q/ M8 P+ |2 E; a1 c2 U0 n
xor ebx, ebx6 f# s4 K- [% @7 a6 }: Q9 p/ A+ u
mov ebx, offset GDT_def3 }/ ?9 b9 q5 w- I8 P' B9 u8 `
add eax, ebx
! s, ^; r* w. T# J mov dword ptr GDT_Addr.Base, eax
7 Q" B9 U/ \" G/ p8 ^6 P lgdt fword ptr GDT_Addr6 F7 f2 B+ ^5 t) v
mov bx, 8
! i" L; q/ h( Z( T" N, Q mov eax, cr08 M% Y0 T6 _; j3 |( b. X
or al, 1! N* l$ n& M) t# N* l
mov cr0, eax5 C1 i, N$ E: ` X1 O
jmp PMod
( K5 G$ o" b. s4 z% q* ~9 J: Y8 @PMod:
, w, }) }6 R% U+ C. [4 F' O7 k! k mov fs, bx
9 k* L4 I5 e0 Y) |: z8 m& K0 W mov gs, bx' s; }1 x x1 v$ S! o1 U$ U0 M
mov eax,cr0% x9 b8 X1 m( }
and al, 0FEh$ u7 ~" {5 i& C/ v" P7 i+ _- w: k! a
mov cr0, eax
j' y8 @( b: R# o! b; n jmp RMod
+ L5 k( G/ g# I4 P% z- J2 ORMod:9 Q$ a. X3 F8 X
xor ax, ax
" H' {8 _* Q2 ~) |2 B4 i& b; b mov fs, ax
$ Y# b F# B7 W; D2 \ mov gs, ax
# s; _' c: H5 T- |# g 6 T$ ?4 |8 _4 S$ K/ @0 ~* J
sti+ L& A: O: N6 N. }' A
2 R0 W& C5 `# b2 x# G' V5 `) ? ret- y9 j1 G u6 P& L
big_real_mode ENDP
) D4 z; ` l( K; ^;------------------------------------------------------------------------------------------------
L4 x; @) c% preal_mode proc near
; K0 c2 \8 j! [+ `! r9 [- O& R in al, 92h! E. P0 d( H( K$ k
and al, 02
7 N& Y- h1 C) g# b- r, n out 92h, al
2 _9 ], t) n/ c6 g( k) ^# y ret
/ _, D. F$ g; R' O$ I. f# Zreal_mode ENDP u, w' m% t- H6 \/ {9 ]
;------------------------------------------------------------------------------------------------
) I S% ?0 s8 H) M8 _Get_Commandtail PROC near
4 o5 x! H. U- Z- r9 Q, h% Z9 q8 y push es ' r& O7 u* W4 S5 T S/ u' W! ?) K
pusha, r! @9 J% Q2 V! p h5 L) w
mov ah,62h & D# I7 M* I6 Q) E& ^0 i, L
int 21h; t; z) G0 |) r- q( `
mov es,bx
4 @8 g3 |) V6 L& U# n3 y popa ' I; Y: ^ l# {% @
pop es
$ j8 |. L' Z8 v. _4 E ret
) ~! S9 t. Y9 N0 @2 BGet_Commandtail ENDP
& K6 M& h+ O7 l; H5 D, H;------------------------------------------------------------------------------------------------
5 T ?8 J5 U! u& ^PSP proc near
7 }9 E* x( l6 }8 ~ d/ J mov ah,62h4 d( E& }0 z X$ F6 s
int 21h" z, x: I- X- N, {" f& p1 R* O. f
mov es,bx
* K8 o( }, t; a7 I$ J- ^ xor ebx,ebx
" [, h6 e: y0 {- @ v0 v4 o mov si,82h/ W5 v+ ^, i1 q" v2 y( b& e8 v
mov al,es:[si]
' W: m7 {; O+ |2 | call Change
# o7 W: W* I8 Z7 u4 f# ~' m mov cl,4
: J/ H! ~( W+ g" m shl ebx,cl
6 P s I4 O6 U6 i" M5 M. Z; r add ebx,eax; G0 k/ j# V% `+ f5 M3 h: B Q+ Z
mov al,es:[si+1]. d4 T# p1 ~2 i
call Change
: O. L4 n8 O/ z f* o3 s mov cl,41 O3 ?$ h# O" {+ J9 H7 Y+ ]8 V
shl ebx,cl
' K' d0 E6 Q7 b: z! c0 k' r add ebx,eax
# G: P& }* H8 z: d& R- \; b mov al,es:[si+2]
8 N/ k3 N/ k0 `( w call Change5 a+ i( Z6 B1 f7 e+ e
mov cl,4/ ^8 ~/ t! h5 S" ]% ?
shl ebx,cl- h0 {7 V' Y& ?. C7 D
add ebx,eax3 i0 j* Q5 _% O
mov al,es:[si+3]
7 T9 Z/ j0 ^" q( l) N call Change' n' d& {# E+ S4 |8 d
mov cl,43 z8 Y7 r6 m# }& G- j; J+ R/ p
shl ebx,cl
0 k! e6 X9 p" l1 H( U Y add ebx,eax
, h; [) ^$ ~' j/ N- q; s mov al,es:[si+4]
* Q$ r% Y/ @" O" b" Z call Change
k- \: \" ~5 k" B3 U+ z1 {4 A" g mov cl,4
3 T' @+ s( r# a" U* ?& S shl ebx,cl3 g, d$ p) D `
add ebx,eax: S9 `0 ]& y% w! N( v
mov al,es:[si+5]9 {) u" Q. \ a x; \) S- F
call Change
" K; c! Q" i" ?, N# i6 ]7 J6 L mov cl,49 k9 h7 ~1 x/ y
shl ebx,cl
j7 j+ c7 w. \* P add ebx,eax$ H) Z8 k L* @
mov al,es:[si+6]
: b. S8 F$ g6 j; [- D call Change
; V8 T$ O6 V% R& H mov cl,44 W# t4 Z4 `& O
shl ebx,cl
9 F( r3 ^0 ~, u" |) b0 o add ebx,eax# o, [' `7 U% E: K k; \
mov al,es:[si+7]
0 D+ U, [% A7 U" ] call Change4 ^* M" ]2 o7 p) f" f( s
mov cl,4% T: G5 _* p' N; l8 M7 J
shl ebx,cl
T) _5 s' O1 \4 j8 @ add ebx,eax- l0 v2 ~- X# U, x
ret
4 N" q1 O3 r) q. g2 p& P% O# R" ?PSP endp
7 s* `! c% q# c7 ^4 w4 D* K& R' Y;------------------------------------------------------------------------------------------------% f5 b- Z* \" }' t B S
Change proc near
8 j( u7 S$ x# G) MA:
7 g. i7 R" ~. _* }: _ movzx eax,al
: R& j. V& V3 o. ]5 U5 i mov edx,eax
# q% G I) E* G- y1 p9 C cmp eax,'0'
8 M, A* z7 ]$ } jb A
) H; U9 @1 o/ F% g cmp eax,'9'
0 v) C1 w2 {" S* m; p ja B) U8 R- S& o7 a4 y Y; K# {
sub eax,'0'% V! l8 N R- g: \& P
jmp short E$ U4 {. i% M2 I" {
B:' F. f+ V9 q8 q% _
and eax,0dfh
! Y7 r+ N7 H5 i6 `4 d- ^& V mov edx,eax
6 c: v5 ?$ G4 L3 G sub eax,37h
; z) |9 a% U) v5 {+ @" L cmp eax,0ah
# y" D' K$ k9 k7 B% H. Q jb A : o+ `! |8 X0 X3 j3 d7 t+ \
cmp eax,0fh
" `' K( k7 G& y* _" I3 ~" J ja A
3 F, i$ n( T2 F( d9 XE:
5 O5 _+ Y2 ?4 q8 I5 `4 y2 A9 k push eax
, e i8 ?+ L, ^+ e4 E7 ` call PRT
" Q$ L+ H7 x6 f. i/ ?( S8 t& ^' M6 d pop eax8 A8 j J+ G4 Q$ O8 P. h6 w2 Q
CExit:* Z3 \: j o4 G, G/ }: h0 |, @+ G0 x- h
ret
O# |4 Z# l% D7 v- D$ BChange endp/ c" Q$ X4 Q) {) L
;------------------------------------------------------------------------------------------------
: ?7 j9 D' q2 gPRT proc near
0 ]5 @4 w" @7 r# ^5 C `, U" I mov ah,02h; ?0 u" O1 N/ i7 X
int 21h
8 n( l L+ A( i. @ ret) o6 d' m' `$ \/ C( Z
PRT endp, c8 |5 z, c- `9 M
;------------------------------------------------------------------------------------------------% k# K" H( j/ a! k7 x4 f# X
crlf proc near. k9 ?" _8 Z: s* V* h8 U4 e
mov ah,02h
3 V( v0 i4 B+ B3 H% K" W mov dl,0dh
1 v- e5 ]- }9 G3 g2 D6 ~* S int 21h8 y D" \2 f7 A5 k
mov ah,02h
- W8 ]* Q4 ]1 C) J2 V! A" D- `2 { mov dl,0ah9 B: W+ l3 T/ ]$ j/ p, U2 J
int 21h1 k0 _) J% Z5 S5 {; t D- q& G6 b# S
ret8 y3 r) f) g* S/ R" C
crlf endp
! V4 G: {9 _9 A0 l;------------------------------------------------------------------------------------------------
' I P0 ]% g- M3 L* z_32bits proc near
- ]& U+ Q9 K/ b pushad
# P. b% _/ h8 v0 `3 Y mov cl,4
* M+ {! K+ q8 h. }9 {% m; G$ K9 S5 e; v rol ebx,cl
' V) i, I2 `$ E& W A call print_4_bits0 p& W* B/ q3 m) H& N) q y
rol ebx,cl. \! _5 b$ `7 V
call print_4_bits
" y( I1 T! d" D0 r* I4 F7 E, K x rol ebx,cl
# y9 ^% W. b; q$ I8 S1 f call print_4_bits5 s% t- a9 ~6 i2 v
rol ebx,cl" \+ G0 q1 b7 e0 p7 x! @" \
call print_4_bits
4 j9 C) ?- D9 d6 f3 o rol ebx,cl8 c" u4 K0 O5 R4 ?: b# G
call print_4_bits
/ l, l* m8 w9 L3 u8 q6 R rol ebx,cl6 K0 g0 f L2 B
call print_4_bits
% l* |2 ~1 B2 _- P5 ^ rol ebx,cl
0 @6 `( S5 l* j5 V; _ call print_4_bits& ?3 t `* R7 @) e/ N
rol ebx,cl
+ b+ Z4 r" H8 `, N( H call print_4_bits
$ P9 L& J% V" ]6 R! u1 I- ]( P) w) F; h rol ebx,cl7 F1 d# t- C# p6 \! H7 |& o
popad
1 \/ n1 Z$ J$ E7 m; A0 h/ N$ _5 d ret
. l; Z I5 i9 s4 V_32bits endp5 X+ c1 H8 Z# _8 i2 x4 @
;------------------------------------------------------------------------------------------------$ \2 G6 L, \2 u
_16bits proc near) r) o q6 K- N5 K, J
pusha
1 r ` x0 f! Q0 b q7 ], l5 B. b rol bx,cl& o% c, X0 g* W7 p; |+ ?
call print_4_bits- ]% I: k0 M+ s& P) g
rol bx,cl
1 G2 |% Y3 f i4 Q/ Q# C call print_4_bits
* i& _# z- F7 u) o H rol bx,cl1 i4 W2 I/ E$ M
call print_4_bits
' s L1 ?; o( k$ z, M/ L+ e rol bx,cl
V- }: S) ]* i call print_4_bits i+ }6 l6 ^' @7 u7 }; O
popa
, t6 Q6 P/ u+ Q6 e ret: M3 ^) I7 b% z0 m6 O; V( }, \
_16bits endp; R, O8 _/ N( K% z
;------------------------------------------------------------------------------------------------8 o4 |8 a8 p6 L9 h' C
_8bits proc near& c& P+ r9 t8 i& h, R _0 c8 ?
pusha 2 O3 |0 x, {! j( J. B- e3 H
rol bx,cl+ J6 N& r) ]' t
call print_4_bits( @9 }- \* ~0 U9 A) l. E W
rol bx,cl9 A: H" |0 L, }* G5 _+ `8 M/ L
call print_4_bits
* Q9 C/ h: D3 g) @0 y/ E popa
L4 A( D5 g. _, O% _ ret
" l! P, `( y1 v9 e8 a_8bits endp
V" j8 o- L- p4 G X- V;------------------------------------------------------------------------------------------------
$ O- V& F: T; O4 Nprint_4_bits proc near; }( |# [* N1 m5 E! ?
mov dx,bx
) X$ _/ L( Z, t3 N, _ and dl,0fh+ t [3 E5 @ W5 v
add dl,30h
! s7 y3 i: E6 p9 Y3 g cmp dl,3ah
! G, D6 x$ e) n$ C% F* m jb print
4 B+ B+ W) R: g6 b add dl,7
/ U N0 L8 ?( O, L7 Fprint: 7 u t* r* f7 E& r# U: p! u
mov ah,2
7 Y; Z/ O% R) J! j int 21h
8 J- T7 { C' d3 {$ o4 r: [ ret
1 i. D+ I/ A, aprint_4_bits endp ) c( g C6 ]: H- X
;------------------------------------------------------------------------------------------------
/ T6 v% N, E4 y2 ~/ CCSEG ends+ u3 b) j# r8 \2 p, ~
END |
|