|
各位前輩好,以下的程式為在 big_real_mode 讀取記憶體的值, F* z5 N# Q& s# ~* }
% d9 m$ w% {; {例如: C:\memory.exe(程式檔名) 01000100(Address)
8 |4 H+ q6 b# f E5 j2 s2 |) I- W' `$ X. ^5 \6 Y! R/ y! E& @
則會顯示01000100位置的值9 W$ f7 m, x4 _( x+ q: ~) ]
) N9 y, p; E3 w9 R1 g" p但是我另外還有要顯示出字串,但是顯示出來都是亂碼
% h- c# q# U: |4 v; w
# o% n; P! ~, S麻煩前輩給我一些指導,謝謝 8 ~/ g# L% C/ {. ?+ w
# q! |7 N* I. J) l
/ Z% u; l9 o$ J2 A4 b) B) h.model small
+ t+ r4 D, L6 C& `.386p, @$ b6 F8 f0 s- l9 ~/ O. t; X
;------------------------------------------------------------------------------------------------
' z4 d' T% ]3 A, P; YDSEG SEGMENT USE16'data'
2 @4 I2 ^: a7 [0 U2 G; L5 b! S3 f' Q# K. x9 ^$ _( d; u L8 C
DESC STRUC
. f" V4 [8 G K LimitL DW 0 ( }3 l ?$ C9 L2 ~/ q
BaseL DW 0
5 x' `( Z% ^; \# m, I* g: K BaseM DB 0
# Q- n6 }! D8 ]$ G8 @( ?6 A Attributes DB 0 2 o5 @ q4 ]+ H) R* [* u5 s5 z
LimitH DB 0
+ M5 D. J+ c T7 z$ _ BaseH DB 0 1 Q% ` g# b r4 B
DESC ENDS+ m2 a! q* X# V
! x/ w$ C3 H- `" s6 t6 y2 t
PDesc STRUC) C; j; B; @) ~0 {' h, z$ P1 O0 a) ?
Limit DW 0
+ `3 C' J; _' ?8 {8 k Base DD 0 8 F3 B; R1 f$ i
PDesc ENDS
+ U* n8 [* }8 X" S/ @, a0 t
- K( A9 e; ?( ?$ O! j. S! mGDT_def Label Fword
% u- r6 [2 c& d0 s" M/ {Null_Desc DESC < 0h, 0h, 00h, 00h, 000h, 0>2 w0 y0 A4 o9 J6 E
Data_Desc DESC < 0FFFFh, 0h, 00h, 92h, 0CFh, 0>/ l$ a! Q, l+ l O5 P1 t ] |
GDT_Addr PDesc <$-GDT_def-1, >
0 D) g, q( w1 i
8 C3 e6 o& d) \msg1 BYTE 'The Input Address is'
& s: P0 N% c: `6 Y- l* P8 Smsg2 BYTE 'The Data is:','$'
% [2 |7 v4 z& y. U" w
6 K& _3 ~- O+ U; S! t$ X, m4 KDSEG ENDS
. R' B& z: J: X3 r% e1 J: y- N! l
6 O1 |9 D G, |. r8 _
+ M# h( ?* v% T% j;------------------------------------------------------------------------------------------------ q! |( R: @3 ^/ v, [9 K/ \# C' G
( n8 I. K4 t' U z' u& Y9 b
ASSUME CS:CSEG,DSSEG
* w9 Y- o- B) K* W ]) J0 S- t/ A
: W5 I+ A$ j8 m4 O8 V& h3 J. {CSEG SEGMENT USE16'code'% l/ w5 T; d; f, N8 w
4 b1 x: d. @* ^' \ push ds( d! W* }9 ^5 W# g) `- t2 N: r
push es
; P4 v2 N( m% ]4 j* \ push fs! R4 O5 B3 }2 Z2 J) s, G
push gs: e' e8 R" M; d0 `
% z- K! |* ?9 f: O
call big_real_mode
( O: y+ l- W) Q
4 q( R1 i+ I( } & U' U$ e% e$ }' K- M6 @0 ^
mov edx,OFFSET msg1;3 a8 D. Q9 k4 o9 g
mov ah,09h; + Z* G2 ~/ Z. n2 H& a
int 21h;
4 C. _+ a% n# c' z$ r, h mov edx,OFFSET msg2;
( T+ v6 ]+ b) X4 A0 g6 c mov ah,09h;
8 O/ {2 X: w, s" i5 w7 A7 J2 x. z" A int 21h;
A( ^+ ?1 W, w! Y _1 [. o1 c/ J' q, d( c
call PSP
- R# O" m* r- X5 |% t1 g& I7 i
' u# Y' \$ \; I, d& ]6 L% [# ?5 e call crlf ' E, x$ z. s8 {8 J" J
' P% z5 o5 @( L
mov esi,ebx2 z9 E3 ^, C8 X/ f( b3 e6 f
mov eax,fs:[esi]
$ M$ y: B9 c# s* o3 ^$ B out 80h,eax
. q2 V" m/ k" p/ C3 ]& ` mov ebx,eax4 ^$ n! \% r. I: S& u+ K
call _8bits- g. @1 N4 i; s
. R! {. s" s' W- j1 ~
call real_mode
) d$ F2 Q6 C8 V% i! \3 i
, y% ? Q3 U! [ u6 G' W9 D/ E pop gs
4 e6 }) q ^/ S. r pop fs& B3 g0 |3 F5 T5 ? \
pop es6 z7 F0 m/ p- ]. H* j% a
pop ds
2 W, y/ z& \# E, I
; z5 K; u; V' A0 P" B" E .exit7 r! o7 S* A9 n; w& Z! X
;------------------------------------------------------------------------------------------------0 @ y7 O4 R3 k2 N1 S
big_real_mode proc near# g. H: Z6 q4 J+ z* H; E
in al, 92h
1 U+ R8 F" ]/ t, E- Z or al, 002# Y; P# v, {4 |6 I7 _ A4 m
out 092h, al- ^% G$ r p) ~: t
out 0edh, al
: e+ I; z6 d5 H$ ]4 q" j cli
' T! K" u0 v* A( x mov eax,DSEG
% d0 B" g$ y! s0 _; i shl eax, 4" Z' ]2 ]7 }5 z: ^2 n- G- ?( N
xor ebx, ebx
) R8 K9 i7 U# o5 W3 V mov ebx, offset GDT_def
- K3 }) Z: O: L$ c+ R add eax, ebx8 B6 x( A1 S7 h# s" x# v4 O2 \
mov dword ptr GDT_Addr.Base, eax
# V4 j. P, B& ~4 |7 t6 G lgdt fword ptr GDT_Addr
6 E1 [# w" k' s: s4 O$ x/ B mov bx, 85 G t* C6 ]0 {/ w$ q- C
mov eax, cr0
9 g& G; ]0 I( z5 i# d5 k or al, 1
9 L9 m0 a3 ]+ a/ `3 l- y mov cr0, eax% w# U+ h+ B# O, F, x
jmp PMod/ F* R A0 Z2 H8 y3 O% E" B
PMod:. Z0 t- ~1 a1 T$ H1 @+ ]
mov fs, bx
, w( V% x8 n) Q1 ^, c3 V, A: v6 F" { mov gs, bx! l2 }! x) Z" u5 r; A b ^
mov eax,cr02 V' U5 w( M2 S
and al, 0FEh+ r# s0 V4 q" s* z& n! `
mov cr0, eax
y2 _" t0 d2 @3 _ jmp RMod
" I( N3 {2 I7 x- S! q4 a7 aRMod:' ^: J; g+ x8 A! {. c
xor ax, ax
) R% c: B7 [! { mov fs, ax
% n1 x* `" R2 W3 Q4 B- P mov gs, ax# k! r, O; i6 a0 O1 w
7 ^. p. S9 R1 X4 d4 X
sti
7 N% q) Z& R$ J; D! B4 f
3 k6 o& l E! e s1 @2 f* R ret
7 L4 U3 f* P8 [4 r7 q/ k" t+ ~# Wbig_real_mode ENDP
; K% z" V- W! Y" X" b;------------------------------------------------------------------------------------------------7 ^, T% Q- W5 ?9 `
real_mode proc near2 Q" f5 R7 ]5 C' D
in al, 92h- ]$ {# T6 K6 ~" u
and al, 02
o7 f e1 G* S2 h# a* e" G7 B out 92h, al # e0 D3 q! R6 `
ret# Y/ c, Z+ {4 _1 b8 C3 G3 |
real_mode ENDP
* h q5 m. W- J;------------------------------------------------------------------------------------------------
) B. r- m- Z8 U8 }) @Get_Commandtail PROC near8 O( [" v, D% Q# Q' r3 s( q( ^
push es & l/ F% ?+ c7 v0 q4 ~
pusha
6 \2 _; ^2 T; l& P' N; U: f( F mov ah,62h ( G/ s; H4 u6 |$ D
int 21h# ^: R$ J* b) o$ [% H8 D0 {$ `; p
mov es,bx
. ^! X3 }2 ]0 C( S8 T, X5 J popa
0 r6 l- B& s6 `) `0 v) m* p, c8 T. i pop es
0 P, B+ C/ F3 z. K% q ret
2 o: X2 A6 c0 t" N- |: M4 O' BGet_Commandtail ENDP# Q% s, `+ F, E1 \/ P
;------------------------------------------------------------------------------------------------* }/ t2 R" L: a1 V y8 X& B2 _* q
PSP proc near8 P1 M/ G l" k8 B' o5 c
mov ah,62h6 T# f' f; ^8 s1 ]1 ]
int 21h
~, {& V2 U, q mov es,bx
$ N# I8 D. I9 I, j6 R, j/ a3 _ xor ebx,ebx
( Q8 H1 T5 b7 q j mov si,82h
0 ?* X: V7 j+ f" ?, N mov al,es:[si]+ L& o* X, {+ j1 L6 f8 v
call Change2 G" [% g; q. ], W
mov cl,4
9 C) c- t& T( f shl ebx,cl. ]/ `$ K* @" r+ R3 A7 {
add ebx,eax
& Z$ b: r, G* k# I0 Q" X mov al,es:[si+1]
8 w8 R, \9 w/ J4 @8 D call Change
2 X6 G; F) D9 x. Y5 ? mov cl,4
6 D0 v/ p& c/ ^% _% ~4 @ shl ebx,cl# C0 ]7 i5 x6 h+ d \
add ebx,eax
. R6 F" T) f. \7 I7 I& L mov al,es:[si+2]4 }+ s1 G1 M$ G( p Y
call Change& `" G) p& U$ C) a
mov cl,4
9 s& L* ] }1 l8 \0 S$ Y' U$ j shl ebx,cl
+ C+ C0 ] {: j! L add ebx,eax
/ \6 E3 [) Q4 d. v: L+ ? mov al,es:[si+3]
* q% f+ N3 ]; c$ H: b- m7 ^$ C6 P call Change3 f" W }. [% \: Q( u" F3 S* d
mov cl,4
+ D0 h* |9 F* C' C8 \+ @/ a& U shl ebx,cl
7 G- _: v! L: f8 ^, m6 n/ {' ] add ebx,eax
1 ^. K4 u3 Y M mov al,es:[si+4]
2 }- p# Y% I! C2 o' b call Change
" N2 v2 D3 z+ g mov cl,4
& J9 N( d( s: T shl ebx,cl
" b' F5 W( T8 `% a7 [* o$ ]$ |+ d add ebx,eax# ~) J( G5 z- o# N& i0 j* g
mov al,es:[si+5]% h4 F8 G! ^) q
call Change
( K! _2 l6 Z: ?$ z/ o mov cl,4
. ?& w0 |. I0 M8 d4 ^ shl ebx,cl
) O9 S; ]0 Z K2 g6 Z" v* p3 N4 v8 d% W add ebx,eax2 g+ Q7 D7 _. s, F% Q0 W
mov al,es:[si+6]; l* S m Z# \- P5 P6 h
call Change
, U: ]! F8 O* H* t( I3 z! z mov cl,4- [ }* ^9 D6 l+ Q+ d
shl ebx,cl: q! K6 k7 j* z
add ebx,eax
. t4 j: a. h* n( N% D mov al,es:[si+7]
7 v! T; U. O. W call Change5 S8 ~$ @" t& C Z5 R/ [0 D% u; T }
mov cl,4
% u5 l( j3 i% _+ B. s6 ]8 z shl ebx,cl, A0 z/ Y( \ |' Z5 {
add ebx,eax
0 F7 b; ]0 K- N% y& B" L ret
* t' X( ~" ]/ y0 GPSP endp
9 A7 J/ R; W6 D; M( T9 w;------------------------------------------------------------------------------------------------
+ G8 B9 o8 R0 ?* ?2 TChange proc near
Z- U/ r, k1 y# zA: * j1 s6 d7 e( C1 i, N. [
movzx eax,al( \; w1 M9 p0 `/ o. j
mov edx,eax
, O9 l* b) M# |# r cmp eax,'0'
" _; d) `$ H x# v9 p7 P jb A) P5 d/ P, }" ^; q2 ~: w
cmp eax,'9'
5 q1 `5 Z+ ?- ? ja B
- w) ?7 K8 I- g sub eax,'0'
# x, P) I @: F" b jmp short E
- e9 A5 Q, J8 ]8 _) D, @B:* D( X/ _5 @# {
and eax,0dfh . P+ y) n* b9 f; W/ j6 t7 L$ @
mov edx,eax- w, C6 u3 B0 L
sub eax,37h % F. S0 n) x7 ` t1 s$ M! \! ~
cmp eax,0ah: j6 n5 f! m! I1 |/ Z$ u2 t% h, _/ G
jb A 3 ~' Y; `# C% o# O% s2 `
cmp eax,0fh
+ U* ] @$ @( F1 c3 t3 M ja A
/ F0 K) S4 j# i5 u2 TE:
) ~# \' ?* b9 e! \ push eax ! A+ Q/ K; a/ @
call PRT 1 _ I" [9 Z& i5 D
pop eax
8 _5 [' D! A5 W: b# \0 F4 _) k, gCExit:3 R' P1 _2 } V( w7 T# {
ret: F/ M0 \+ @7 ]
Change endp
- e* w5 T3 |( v* R+ [0 L;------------------------------------------------------------------------------------------------$ k6 B5 |! B0 t' Y
PRT proc near# d$ B5 p2 a u3 M
mov ah,02h" y: y. H8 k7 Q$ `. U3 q
int 21h
* z0 M; ?; R! R: l' d) K1 W8 X ret
& R5 a4 W, p* j" P* u+ qPRT endp
% T% ?$ y8 X8 p;------------------------------------------------------------------------------------------------; C0 Z% Q% X6 l0 D- D: T
crlf proc near: f0 p" H6 m% F( b
mov ah,02h# {! T q [' Q0 I
mov dl,0dh2 E2 h; |, t' l- h; Z
int 21h- T4 O7 }* \( l! e- O5 A
mov ah,02h
) V/ ?# v+ m0 D( y6 } mov dl,0ah
8 J. F+ O7 r. q# b# t7 x int 21h
3 Y! |( q3 ^% O8 D, ~ ] ret0 o: p& ?) |* Y; W+ L1 O
crlf endp
3 v2 J1 y( E- U- c' R, M) `) U# j;------------------------------------------------------------------------------------------------
' t. d7 F1 n8 Y. l$ O_32bits proc near, ] T6 E D: Z. j; g3 ^
pushad
5 Q, r }! ] n/ o' B mov cl,4
, f2 [- l. H o& }) y0 _ rol ebx,cl
: A# M3 E+ }8 n2 c call print_4_bits
7 W* n2 X$ v9 T* D0 T rol ebx,cl
- J! ^! A9 D; T0 t call print_4_bits
" W& w5 O; L5 a) o5 h" ^ rol ebx,cl- J* i! Y4 l ]+ {
call print_4_bits7 H6 i# x4 D0 d8 Y2 k
rol ebx,cl/ r6 d' }; U( i( T7 u
call print_4_bits
+ O2 g4 I$ P- O0 Q9 r/ p" E: C rol ebx,cl
9 f2 v: i( L) s a, h$ N call print_4_bits X& F$ S l' ~# M) F+ n w) w
rol ebx,cl# C% `) @2 Z/ k2 Z8 W
call print_4_bits7 O( l, J% U: H m
rol ebx,cl- e/ X( B; W; _. C* \1 S
call print_4_bits3 p5 L# j. w8 v
rol ebx,cl" e/ X7 o* D: ^; v" ~( C
call print_4_bits7 e9 g' ]2 A0 M8 R
rol ebx,cl8 @, Y1 I( ]3 a% r8 W. \
popad
; m/ _1 c0 I( K5 I5 [ h8 Z ret
) ~( C8 }3 G7 x- Y6 [4 C# |_32bits endp$ {7 C: E- A6 f( q5 B& g! a; w. e
;------------------------------------------------------------------------------------------------5 O6 `8 u& f1 m
_16bits proc near
" j3 |2 W9 Z& v, P! j pusha
5 a8 J+ E& y5 {$ a; P rol bx,cl' D1 Q8 d5 I2 k/ t; G( e
call print_4_bits
7 x$ W/ m* L& E rol bx,cl
+ v0 b* @) I6 z& o% P/ { call print_4_bits
+ x4 S" B6 F2 y# o2 @ o+ Q8 Q rol bx,cl
% K) T3 ]+ h K5 L! l/ c call print_4_bits
0 ?1 D5 _! x" a+ G) \7 w' s8 k J rol bx,cl7 [: W8 I# T5 G2 c- c- I
call print_4_bits
$ Q$ C7 j" ^. b4 l7 l0 z popa
4 a W0 o4 a- F5 s ret: z- U0 K& w I3 z
_16bits endp7 N+ ]5 a6 D; U4 @6 H
;------------------------------------------------------------------------------------------------ z1 ~* n$ P: r* N4 F
_8bits proc near
/ G% h% W* n6 D2 j2 m pusha / }' {- R: P" g/ c: n
rol bx,cl
% S6 Y* |- Q* G call print_4_bits% T: | B; W+ o5 N! j
rol bx,cl
5 m0 _5 w3 [& ^. C call print_4_bits5 J9 U6 Q1 K# q2 ~3 R( ~% H
popa% V0 K( Q7 e3 N4 v1 ^2 [
ret
# Q4 w& C1 M$ }& x_8bits endp6 C/ |) p6 H* ?( Z; L" E+ E
;------------------------------------------------------------------------------------------------
* v' \: N. }3 K% Y4 h4 r6 iprint_4_bits proc near
! A7 Z8 b3 I$ ?) @1 {( p mov dx,bx
4 Z" Q7 ~ |7 C and dl,0fh; r; H8 u4 d: S o3 P& |2 X, E
add dl,30h; C Q! h* P4 j9 U$ u
cmp dl,3ah; z0 I2 U* ?0 J8 |
jb print) M+ c" b, M1 d3 J9 i
add dl,7% ]; f& ]8 E6 l& }
print:
3 X$ w- ?6 a$ x7 j8 e mov ah,21 l$ a y3 y9 M& L+ J0 B& C' O
int 21h9 v$ a/ U! i" q I5 U; N
ret" d2 R Y/ W% ~5 m. y$ w
print_4_bits endp
! L7 V1 a. b @; I; W8 I, m3 P2 ];------------------------------------------------------------------------------------------------! L+ |$ X# h; G" k* B! d
CSEG ends& |0 H( v3 G" }
END |
|