|
|
各位前輩好,以下的程式為在 big_real_mode 讀取記憶體的值& W* c& z/ d8 C- e
7 e9 U8 i$ t9 { X6 G$ i
例如: C:\memory.exe(程式檔名) 01000100(Address)
2 b! l$ C9 r, w, p& D* H' ~9 Y7 N; I4 A. ^7 N& v* Y/ _5 y
則會顯示01000100位置的值
/ x) p& d' F: K! Z7 \
# f/ }. @* c6 P但是我另外還有要顯示出字串,但是顯示出來都是亂碼
5 M: N, W. F( `0 l. q( i
3 \/ @+ y8 p* l: b$ j7 G* @5 H, P麻煩前輩給我一些指導,謝謝
. X) f4 a& Y' {3 P7 S7 p1 w/ s
+ \; |# K# N4 n& w2 ~* S: L+ s0 u: i2 ~( I$ V6 b) j
.model small% k9 e$ d2 }5 G" b
.386p
% ~( `7 A- _$ R" O( D;------------------------------------------------------------------------------------------------
1 }. N) \" ~. `8 I+ i) I3 M9 N$ iDSEG SEGMENT USE16'data' 3 F4 O5 p# z" z- e9 |% \$ L" Y$ }: O
) M8 q7 T& E; ^( o( S' A( eDESC STRUC. i) E5 @( a0 y2 _" O% N1 U
LimitL DW 0
6 M3 w( ]( R$ p5 o. T BaseL DW 0 . Y7 L6 g% B6 y. g) e
BaseM DB 0 # w: m5 {. Y/ V0 `
Attributes DB 0 ) B, s1 E8 y3 e6 f! ~
LimitH DB 0
: R" b) p! g) \ BaseH DB 0
) ]- b. M; y# T* x: B; }1 LDESC ENDS" k# z9 ~% N G
7 g( V# k3 ]9 W* T
PDesc STRUC
B4 D! j2 m) z Limit DW 0
4 G# h. q0 s A& n( T, W: A5 u Base DD 0 3 j' l% i5 q9 L" [! F5 B
PDesc ENDS
+ c! s7 f7 @' w% N
# X: U/ m, \0 |& sGDT_def Label Fword! M& d* P+ H6 T
Null_Desc DESC < 0h, 0h, 00h, 00h, 000h, 0>
& Y( C: k3 ~( `2 cData_Desc DESC < 0FFFFh, 0h, 00h, 92h, 0CFh, 0>
! ^+ V0 ]& l, N5 y5 yGDT_Addr PDesc <$-GDT_def-1, >
- h* j0 I2 Y, l- ]- p! J& m3 q
msg1 BYTE 'The Input Address is '
1 J8 I3 u: X1 U8 f% M" Smsg2 BYTE 'The Data is:','$'
6 t/ _. B5 s% \
3 Z% _# m3 T3 Z5 g+ `) b7 FDSEG ENDS N+ E. |" D2 e
- O1 M$ M2 y) ~4 [+ f' {5 _8 I) Z$ F# M* D4 K, J( ^ W; V/ t# r
;------------------------------------------------------------------------------------------------
/ p) V! o+ s- F) a6 x& h
0 i5 H# u6 z0 d( [0 U$ W, J- KASSUME CS:CSEG,DS SEG
& {! m5 F) P8 ^. e9 b$ w# H8 G; U/ \
CSEG SEGMENT USE16'code'
, I; n' r% M& ^' J' ? * |" e, W$ C. u9 M3 g: Z* o
push ds% w% ?9 o" `" }0 q4 f! T
push es
. K# A; ?4 H' {: z" F push fs- K3 u y, w" p' D, z( l+ C- y
push gs
2 h3 L/ ?/ [& {
: H+ t0 E: \2 f; @# l- ]# \, X1 Z call big_real_mode1 z4 U: z) }) y, S
b4 m# C) a t ) j9 R, i8 x+ ~1 x/ ?
mov edx,OFFSET msg1;0 N, T6 r; a" l# X
mov ah,09h;
8 W0 u* _- y- a* T" _/ v int 21h;9 u1 f; H8 E% D) ]& k! p& Z! d
mov edx,OFFSET msg2;: C' L( O: g& d f( c# s f1 K
mov ah,09h;. k* R" `+ z4 @0 _+ C7 z7 ^2 G9 t
int 21h;" w) q; K; g" O% t5 }/ \1 f& v
0 w( P7 i% Y; K8 }
call PSP & p, k0 g4 b/ K% O6 ~# F: a
b* b, K9 X+ }) V1 t; G" N/ V. R call crlf 6 e2 b3 s2 {, j" a1 P3 C9 q
) |. B i0 R0 G# M8 X. Z- Z
mov esi,ebx
/ c B& t* a6 ~ mov eax,fs:[esi]
9 u2 r4 b, L/ G4 ~. x5 S out 80h,eax9 K9 X7 m3 N3 ?8 g9 u) q
mov ebx,eax
: u% n6 i5 m$ O/ _+ l! f call _8bits* V7 H% F6 h# D! A9 A( R& k! n
6 J5 _% y. D7 R* D) c call real_mode8 d' N2 F$ m% _2 H
) B0 t7 {4 a, v1 F& y
pop gs! b2 U# V8 Y) m- G! K
pop fs7 p# `# O% F2 {, v+ A
pop es
# s, |# j( w1 ~0 r" n& v pop ds0 i& I, e3 X# d' J" K" W- B
: Z5 a0 x4 t8 D. [- K4 y
.exit7 F( k( q& f8 E2 p* h5 b" [
;------------------------------------------------------------------------------------------------+ i. c) a5 S, K
big_real_mode proc near& H% G6 e' N( H4 Y! s
in al, 92h) k' W$ L) u: [5 X
or al, 002
, \! K/ @5 I5 s1 `8 ^; U( p out 092h, al
: O8 P( ? u+ I' L" a6 A out 0edh, al
/ f, a+ E+ T1 o" F' V cli
- O _, Y, v R; G4 B mov eax,DSEG
# z) Z* L: @4 X% q+ t shl eax, 46 p: `! a7 ?5 f5 z B' e+ p
xor ebx, ebx
. S5 Z8 Z s# A mov ebx, offset GDT_def
: s5 }: v* q5 ~8 G add eax, ebx
9 W6 x, [ C+ d7 C# U mov dword ptr GDT_Addr.Base, eax5 | e4 ^& |' Y( v- h
lgdt fword ptr GDT_Addr
9 o2 D) ~: A6 v3 a mov bx, 8
; B& ]* t5 x+ b2 G3 C mov eax, cr0
& E) |0 F* S" o% @1 K* [ or al, 1: B5 {9 E) L- v9 Y' e% A
mov cr0, eax; [# X' p( W' J! p6 j
jmp PMod% D* K% P1 z# M" ~& C* u# A6 s6 p
PMod:0 [ v" ?; ^) A: |- M5 r
mov fs, bx# w8 p& ^9 ~+ m# D: z- F/ \. x \* D
mov gs, bx
2 w/ e A6 @# k mov eax,cr0. K) K9 x$ l8 j) ]. p( b
and al, 0FEh& ]- c$ U$ G. f, c
mov cr0, eax
" m# w1 p7 k! Z6 }& S jmp RMod
6 f j- T+ r6 d/ o# r* C- ORMod:
1 K& Y0 @7 N. s- y' d xor ax, ax4 |; t8 s4 K9 Y ]8 N0 f( o
mov fs, ax+ Z8 b# I# j: l' q) N$ r7 C. E
mov gs, ax$ w/ z/ l0 o0 a# N
; }8 C" u3 t' N, d5 Q
sti5 |. J5 Q1 L2 B
5 F) ]3 [" j# ]4 ^4 a+ ~
ret' k& ^5 f# O- t$ z
big_real_mode ENDP! m5 `/ S& a8 u# X- G
;------------------------------------------------------------------------------------------------' M3 N0 I. Q* ~# ~' o
real_mode proc near+ l* S5 @% L, i
in al, 92h
- p4 _/ M, b/ _* x and al, 02
4 l/ k. k q! D out 92h, al # o2 g5 _/ @5 A: W' {' z/ U
ret
) g- K6 d- `8 H3 V+ ]1 u/ Preal_mode ENDP0 H4 f/ o$ ]$ L) D5 l! h9 m& @
;------------------------------------------------------------------------------------------------
, ?- N- k- R7 o% p' VGet_Commandtail PROC near
0 x2 H+ {* h- k: Q: n push es
! V' `. O* |! s" D pusha
1 z7 R! u& U0 g ` mov ah,62h
1 }# R3 L* N( n& i int 21h
% h" l1 }7 I: G: V4 B mov es,bx
$ D$ u9 q' j0 G. a, z. o popa
; @. M' s, X8 h" X# d' [( T pop es: Q$ x/ a ]% r! E$ W! Q; ^
ret
/ @, j4 b% X( E( e4 O, IGet_Commandtail ENDP
. r0 c) f" m6 U( {) y3 M;------------------------------------------------------------------------------------------------, y: g. ?* g1 k/ P z7 p
PSP proc near
$ Z. f. V, l8 W$ C! S; B mov ah,62h5 D- C8 n* b0 S4 J+ S7 }& W
int 21h+ O; T" l, w0 I1 O' k+ n0 d9 X1 ]
mov es,bx
$ U5 j' C8 G% A( M+ T xor ebx,ebx0 P& k/ P$ n/ A4 U4 ~7 y' {
mov si,82h& G6 O2 X7 z/ M: P$ X5 h( C# k
mov al,es:[si]
) Z8 N$ d" _8 e6 H9 \ call Change
$ I2 p7 h0 p: M; e mov cl,4
) d" T+ p" C' F& M shl ebx,cl
8 o* |( t8 v3 c add ebx,eax
1 }, F$ @; b) y' i) G mov al,es:[si+1]
: f/ W9 ]" d7 j call Change
+ S G" j+ K6 d; H mov cl,4
# U/ b% E! `/ d1 d; m5 U shl ebx,cl: F$ r8 b5 x: N1 ^2 E# U
add ebx,eax
( u6 l1 n: }5 J$ F, W+ N mov al,es:[si+2]7 i& t( ?! j; m" ?% i
call Change' S* W1 W# @; R+ Y; c- x
mov cl,40 u3 y$ |$ H$ F
shl ebx,cl
& U( F) x: I2 U& s3 \9 z% X add ebx,eax
! q+ ]9 d M1 B9 J/ T. Z/ @' y. X mov al,es:[si+3]$ P- ~7 |; I- S
call Change
. K) F9 {& E ~3 W1 Y; J mov cl,4! m4 H7 U8 l0 l
shl ebx,cl; {0 i; h7 ?! W+ k3 n9 G2 b$ ]
add ebx,eax
; s% B3 B! O0 x mov al,es:[si+4]: {( P9 ^4 _5 l: [" W
call Change2 u" v7 W2 F: U
mov cl,47 m5 J) d# j' d: [4 A0 Q- G) e
shl ebx,cl9 w- G: m3 f9 _
add ebx,eax- {/ Z' c6 J% k/ l! p+ E
mov al,es:[si+5]8 [0 V1 |' |+ C6 ^# `! U
call Change
8 e! s+ U. F9 x6 ?2 T* x mov cl,4
" X+ g% @- M; }/ G shl ebx,cl/ {2 f' X; w. T( Q# s7 Q
add ebx,eax. X, ^ T/ g5 z, Y; O
mov al,es:[si+6]
3 T0 |5 x- n$ } a/ y) o6 X% [ call Change L: C$ J7 q: v9 Z- f
mov cl,4
5 _, @- L7 F+ m" `5 |8 D6 y2 S shl ebx,cl
3 D+ i4 W) d2 q/ w* Z$ Y add ebx,eax \% W& x" g% Q! P7 q0 G: N
mov al,es:[si+7]1 f; w2 e2 M" f8 h, _6 L
call Change. P' o8 m w" @' j }9 M' C
mov cl,4
$ R0 H, l2 t* [2 p( e3 v/ V3 E% x3 ^. Z shl ebx,cl6 O' y4 g7 D( s& K# g/ \. {' u
add ebx,eax) e8 i) i/ b2 L8 u* G9 n0 D! V
ret2 _, Z8 }! R2 s% u* x
PSP endp
" O+ ~2 C5 u& K;------------------------------------------------------------------------------------------------$ @/ M( b; v5 V% d2 {7 ?
Change proc near1 Z' ?2 P/ H8 K# w1 s6 c
A: : Q4 k% G- U! t0 B
movzx eax,al
4 l' Z' o# u: B, i! d- a$ q8 ^ mov edx,eax
; V z1 M" z4 J+ d# A" d cmp eax,'0' " ~. z; K9 f A1 n) g
jb A
+ q1 D% t( U3 W C8 r cmp eax,'9'
) T* m7 X+ J( N/ O ja B* L' K% s4 v6 j0 w, S. z
sub eax,'0'
( \8 X' V' I% u1 a jmp short E
/ d- g4 i Z3 b5 P6 T7 Q4 ZB:
" `: V, o/ Q( f; X; M4 L' P and eax,0dfh 7 U6 r) A1 A5 s. L+ \6 w! o
mov edx,eax
$ d; p) D5 a0 D) W9 i% [- ^ sub eax,37h
# e9 o4 d# j8 K cmp eax,0ah
( |: H6 z" T& O jb A
: l" t7 i: b, E$ B8 m( \% f) U9 L cmp eax,0fh
+ F) e) @' G e1 X ja A , r& o0 _- X) E) L3 t- q0 t2 w
E:
4 ]4 m4 x" x! O, y. I( n push eax
! {' n1 `- x" q" P call PRT
# `2 G. P# l8 x$ {0 w7 `" P, ] pop eax
2 i3 j, n% N" m- z9 V0 JCExit:
. p6 |! F$ P. R+ o ret
@# J/ q- I$ B9 AChange endp+ F' s% V6 q" U! v" M0 R* z6 k% Y6 n
;------------------------------------------------------------------------------------------------9 Y% B8 P: _2 n1 M7 W$ d
PRT proc near. [, B3 j0 D. M
mov ah,02h
4 }1 C7 V5 I$ V w int 21h
1 E% J# k) D5 x% N/ l; q. n) S ret
2 E8 f E* M2 c3 K. p( y! m1 o1 mPRT endp6 k9 y4 N2 p! U+ Y4 X
;------------------------------------------------------------------------------------------------: m; U: m) _1 W! o# w' e
crlf proc near
% L% e' f0 r: i6 p mov ah,02h7 u6 s* |" h3 a' ^
mov dl,0dh
- D G6 n. g4 ~" _. z; n/ y$ I int 21h
+ g$ Q/ f0 M5 |; K* H: D1 Q; b mov ah,02h
) w! h6 K+ `3 G3 _6 e# A2 G mov dl,0ah
% y$ F- H8 E. L4 e int 21h5 e- O2 `# v) D
ret7 }0 s5 R" e: Q4 X6 F7 h
crlf endp
% x; m: T+ P) R# g8 p: c$ j' ?;------------------------------------------------------------------------------------------------
( u3 d1 A9 @( _! u_32bits proc near+ K1 p. V. b& e* e
pushad
4 M, E& a3 S$ w% m& m/ A; b+ \ mov cl,4
% [' m' V. B8 S/ z- A* P' a" @6 _# \* j rol ebx,cl( ?8 t, }- C; E! M
call print_4_bits
. n' C8 F: B( b1 \* Y/ n2 m rol ebx,cl
- W& A3 a6 P R! Q. m+ r9 L call print_4_bits
% f3 a# o+ c H$ z& n9 w$ U rol ebx,cl7 h7 I7 Z: @2 v9 T
call print_4_bits6 c0 L6 X" l( x6 d$ ?# ?- L" E6 Z( y
rol ebx,cl
3 I* @4 N4 f4 S' g! w call print_4_bits
3 C8 B% _' T( E; s& Q$ n rol ebx,cl6 e8 r5 E3 ~3 j S2 h+ a O
call print_4_bits
- p- B9 x0 v7 k rol ebx,cl
4 p7 U' M' Z% U" c0 L call print_4_bits
+ S# F* B. j! H8 C4 k* o rol ebx,cl
9 G& y9 V P& L' n/ F call print_4_bits
% }6 ~' |3 R( r. E) | rol ebx,cl
' ]5 r( W9 T. r" U3 F call print_4_bits5 k, k8 a6 L L3 b' B
rol ebx,cl% r9 X/ `4 w$ D7 S
popad Y6 X* A$ N4 k7 ?" x
ret
& e3 Q0 R3 y% ]_32bits endp. ]9 I4 \" M; P! X" I, F
;------------------------------------------------------------------------------------------------" H. V; Y/ d0 z. \) e/ l; v1 T
_16bits proc near
. a l# T5 J$ H$ W7 w ~: O pusha
. ?9 Y2 X# g3 g0 h1 k8 D0 w rol bx,cl k6 y! h! ~* Q- C, X u6 a8 \; {
call print_4_bits
" e. ]% Q3 Z t$ E3 T8 i, t: ? rol bx,cl
. n* z+ {2 s3 m! `) c call print_4_bits- X$ X1 }( @- B9 i
rol bx,cl: f* p+ W& V" v# ]1 g5 e- z
call print_4_bits
5 y* [, |' O' V1 L/ y rol bx,cl
- f* e( r8 `2 l- @0 F3 }; N, ^ call print_4_bits; _" c- ~1 U3 v0 l. B! }) g
popa
4 D- n: K1 J3 ?& B" h& Y2 l: g4 I ret/ D0 K: ]' }: x( i* Q$ p- M
_16bits endp% R7 g' M# s9 `& N
;------------------------------------------------------------------------------------------------
- W" G$ U& R- l& j_8bits proc near
- ]3 n Y3 G$ n2 v+ Z pusha
i4 c, `$ X6 ^( p; a' O4 D; b rol bx,cl
% `/ z5 T2 _7 X- d call print_4_bits
+ x1 ?9 K; r2 z rol bx,cl' t# s4 R5 D# e V# O' M/ k; R
call print_4_bits! W; c ?( o& F* c3 [
popa
- m! u5 A2 ?" I$ ? ret& ?; {3 V! a* p7 a
_8bits endp
6 _$ `* n5 Z0 b2 Y4 g$ s) G;------------------------------------------------------------------------------------------------) X8 U. e }, e1 `
print_4_bits proc near e1 F- }8 u9 W, t+ r- u. S
mov dx,bx
O7 L! L4 w7 w8 H+ U9 y: p2 x$ [/ H$ g and dl,0fh/ w3 E6 ~9 Z' X, f6 U
add dl,30h
2 ]1 f0 u0 I1 U$ B7 L/ C cmp dl,3ah
0 w) B, o# c9 z jb print( W" U, i) e2 Y! S" z
add dl,7
4 q8 y: t& e- H9 Dprint:
7 [( j+ w. e% c$ [- v' j2 H mov ah,22 m: ]! p" |, g s- Z9 O% k& R
int 21h
% G4 y, y+ z9 U- p4 J" t ret
% `0 @) Q% q( Zprint_4_bits endp ; V' S7 P1 e! m" e* C
;------------------------------------------------------------------------------------------------
2 [: B) M# u) uCSEG ends
9 d% g' S* |+ I3 R5 NEND |
|