|
|
各位前輩好,以下的程式為在 big_real_mode 讀取記憶體的值2 E0 [9 U+ O+ S, A1 k9 l H
1 \9 v. l5 @/ E
例如: C:\memory.exe(程式檔名) 01000100(Address)
" b" t1 Y* R" `* Y# G- E4 x: N9 I: u7 K" F. `) M" h
則會顯示01000100位置的值$ @& _4 S7 K- ~3 T( z* D2 z/ t
7 s) A& c( k- {2 V+ {. E. x! y1 D但是我另外還有要顯示出字串,但是顯示出來都是亂碼
9 Z# \0 {+ z0 g' `; T% P. @7 L% [6 s W' H* `! K) [
麻煩前輩給我一些指導,謝謝 ( c; }5 X7 }" ?" I% \
# H) v0 V- m/ O! D6 A! u6 }# r4 s/ u+ _' u2 D
.model small( m% P! s0 Y3 u( X
.386p1 U9 k, C$ m) e; s
;------------------------------------------------------------------------------------------------5 a. W# p% L9 z$ s0 X% ]
DSEG SEGMENT USE16'data'
9 q: G3 P* r+ d! Y) y2 L: g/ T: L/ w7 B0 V& f# A' H! Y
DESC STRUC( h6 o3 x, @/ ^1 z7 l
LimitL DW 0
4 y% q# f) M! g! Q1 x* V+ ] BaseL DW 0
( a6 i: J' R6 b/ E) ~/ K9 A8 C G: T6 k BaseM DB 0
X7 H# \' E6 c" H# i0 q Attributes DB 0 7 }; v; @8 v ?) U3 M# ]6 d: w
LimitH DB 0
5 j" T/ T5 U2 d! \ BaseH DB 0 5 [1 {2 e, y' ?* ?' H; C3 ]
DESC ENDS$ U! k, c2 B" [- X% e
) O: Z* ]% Q/ @" D
PDesc STRUC }) r, R# ^ l' }4 [! {
Limit DW 0 : M. i: Z9 w. D* }3 a' X7 o
Base DD 0 l' D. X9 P. U3 _+ R/ H }
PDesc ENDS4 j1 `3 h- P; b b$ T$ \1 v
5 Q2 s7 l. G8 v o4 iGDT_def Label Fword/ {- I; {) y. T" K
Null_Desc DESC < 0h, 0h, 00h, 00h, 000h, 0>* T. k' ^- }0 z; E# j+ z
Data_Desc DESC < 0FFFFh, 0h, 00h, 92h, 0CFh, 0>
" `! j" W) }3 y( `GDT_Addr PDesc <$-GDT_def-1, >, h/ e! ` _! n3 C* f) O
8 A$ C$ L+ H; y8 umsg1 BYTE 'The Input Address is '* R6 f- F- ]6 p) @# n8 I, w ]
msg2 BYTE 'The Data is:','$') F' | P. V1 E1 D3 t$ s1 v
6 s9 C7 F5 v7 Z* @# B. n. d2 SDSEG ENDS6 l- A3 s! U6 G" n
% b# x% D! N+ R8 j
# ?' J/ T; w- [2 {;------------------------------------------------------------------------------------------------
1 v, P2 |' p: C n$ y* ]" \
% A8 ^$ X: f; s K/ TASSUME CS:CSEG,DS SEG
/ q; s4 C6 R) C! E* p+ Z' Q- R+ V9 z$ {2 U. o% j
CSEG SEGMENT USE16'code'
- w. y& G: g8 }5 ?2 u
$ @4 g+ Z0 C& g1 X8 \ push ds
: V8 W0 ^/ M/ R push es
; J: r( B3 T$ [6 ^/ G# @2 I, }: W5 J9 W push fs
! n# ?: \5 u: e& _3 L+ [ push gs8 k( o4 u) J6 @; u$ f
& J, y* R5 m8 O& L3 z5 c; |
call big_real_mode4 o2 q) d+ s8 Y( C+ C4 P- y3 E' Q
+ W7 ]7 r/ x3 o- n0 t7 {7 n
. ^. O! F4 R& }; R0 { mov edx,OFFSET msg1;1 l4 J, A* G' U0 X5 E
mov ah,09h;
) o7 z) I# g3 u* l- N n int 21h;
: N4 Z! r+ C. e# P mov edx,OFFSET msg2;1 l% C' O+ S# }/ k
mov ah,09h;
& v4 ?8 G$ a0 S% \$ L! \. z int 21h;
3 A' k7 j! C, w+ C* e5 h: g" J0 i- g 7 y7 g v: K4 E* @
call PSP
1 }; f, M/ {3 z/ v' `) F ( u5 Q8 p% h" U; Z
call crlf
+ X: n4 D9 f: g1 S% S: m, | : T# x1 S9 R8 u5 a# P& H R
mov esi,ebx& R! Z. X% @* n; j& R& D
mov eax,fs:[esi]
% X% l5 Z2 `5 s" D: i out 80h,eax
2 x1 F. I* A \+ g4 [ mov ebx,eax
( V4 Z7 m6 ]0 p( I! I8 x4 J call _8bits
" n# G7 F( A3 }7 S ! f& ]# r" u( i$ O8 f# g8 g
call real_mode
j& t$ y5 c' {' r1 i" t9 }
9 O) t/ g, d5 K- d0 x8 l9 m* A5 c) i pop gs, q }$ a. j5 G
pop fs' c7 q* F; j0 W$ b5 a2 m
pop es
- F z6 H( S4 ]7 b0 \ pop ds
8 L1 ~2 Z# x) ~& L: g, x * c" @- M9 q: O8 r( M
.exit
- |% }# F- O M* z2 M;------------------------------------------------------------------------------------------------
8 X' F# n O: B. v! }0 k) |( ] L0 Obig_real_mode proc near
1 Q7 v8 e1 k+ z1 H& ~ C- i4 x' V ]1 u) @ in al, 92h5 `. ]0 q, R4 E2 z2 B
or al, 0026 Q" g9 T: I" C0 B8 C# G
out 092h, al
: P+ i4 S: l3 h2 M out 0edh, al; r" v+ c' @8 i6 d5 f
cli
' c$ n( t) v8 j, o! u% x mov eax,DSEG& n! @' J) a6 [
shl eax, 43 e* ?7 w& v; d. `: Z
xor ebx, ebx
n, Z7 m3 |0 M1 `/ [0 F; B# o mov ebx, offset GDT_def
9 ?. p6 m: P3 w9 o6 J add eax, ebx0 x, C* D* K3 }+ O: `4 }
mov dword ptr GDT_Addr.Base, eax/ \& e# ?, E( m( o7 Y: v/ P7 q
lgdt fword ptr GDT_Addr
" }1 J; I8 n3 z) ?/ ^0 o mov bx, 83 `, @% a& J( V. v% [/ X3 q) W
mov eax, cr0) {6 A; p/ Y# L- l& L
or al, 1
* _6 `% v& b! C0 J, _4 | mov cr0, eax( w6 w! u8 F& v. H9 m; C
jmp PMod
: C$ R! ^/ U3 ~- t3 A9 PPMod:
. k" ^6 Q9 V1 M6 H) F+ V! I mov fs, bx8 X1 W: j' x, U. k% e: V1 D$ n$ l
mov gs, bx7 K+ ?1 A; |* x) F0 M5 @& y- U' h4 I
mov eax,cr0 `0 K, Q# M9 m. l
and al, 0FEh
$ G) G- x, V$ V' t: g mov cr0, eax
$ X) F% e- g& ~3 a; N$ W( g* b) T jmp RMod* G) ^1 O$ X% h7 p3 U7 k7 [5 [7 E; m
RMod:
; E. \9 v9 D5 E& \ xor ax, ax% ]- w# s& X+ M/ T& J. R+ v8 `5 |$ Y2 y
mov fs, ax1 s4 \# Y& o. l4 h2 m
mov gs, ax
1 X& |& t# |( |5 _9 G
) L4 ~9 Y0 U1 |. Q sti
$ {6 [) n( |. {. a- S+ n: ?! J, h" k
, @- h% M0 ~3 g- S0 V% i4 u- w1 ]1 U ret
! ^. ]6 h9 b o8 i( @big_real_mode ENDP9 k& ]4 S; @2 Z5 K7 O; Y( }
;------------------------------------------------------------------------------------------------
( T$ j! U ~7 E" H6 U" Z: ]real_mode proc near' ]- z5 Z M4 G: R; V# g1 v
in al, 92h
0 @- i, g- K" ]! T3 X. p( G3 w and al, 02
d0 o' i$ R( T, Q/ F" e out 92h, al
0 ?# K2 [# T8 A) T ret
% L- `8 K5 B- z. F6 Greal_mode ENDP. G1 p, S; Y2 p, y, J8 j5 D
;------------------------------------------------------------------------------------------------- \' S- j7 M1 l6 ?
Get_Commandtail PROC near, r& Y; k7 D$ ?2 t0 v8 Z
push es
: ]2 i) p% Z' B( M, W pusha
. R4 J$ M; j* E; O mov ah,62h - C& \" `/ ]2 B0 ]
int 21h
8 s J& |) G K" {! a/ v mov es,bx! Z- c" @1 H |
popa
- l1 q, ?- p( w2 N pop es
9 Z/ n: W; n5 Q/ M4 Y ret
2 A; l" c- X- m0 ?Get_Commandtail ENDP
4 x# n8 |+ k C4 f;------------------------------------------------------------------------------------------------
& s, p) |8 Q+ q& r \& w8 MPSP proc near5 ]. w1 C* L4 ~1 }, I1 {6 L' ?
mov ah,62h
/ u0 m. {7 O& a9 ^ int 21h
I; H7 m2 o5 Z' q$ \' |" f4 P mov es,bx
! y# b1 X& D8 K xor ebx,ebx
L" N7 o) c' o' b" t% Y4 j3 q/ g mov si,82h' B4 g% E+ |# ]+ s; h5 W Y
mov al,es:[si]
4 ^& q% u/ x# c2 L7 O" b call Change( g- g3 m0 ~/ l c
mov cl,4
/ b. r, F% [7 x9 R4 P shl ebx,cl4 ]( r+ [8 L! |! ]& f
add ebx,eax: D. O/ j8 |2 K
mov al,es:[si+1]
. F1 k. O4 M2 N. e$ q' F call Change8 U0 [6 w) F0 c, |6 I) T
mov cl,4
7 }$ F( |# P$ ^: Y$ A% K shl ebx,cl
& h0 ~* r: s; z add ebx,eax' N% [& E$ w5 G& b
mov al,es:[si+2]
. y4 Y8 _+ c3 B) j6 j3 j0 Z call Change* H3 f8 u5 n9 `* z7 A- ^" ~
mov cl,40 A0 {8 L' {' Y% s" j
shl ebx,cl
% a' l. l, g3 P add ebx,eax# @% ] b! e9 w% m
mov al,es:[si+3]9 `% f4 W- y! G8 l
call Change% V0 p2 h1 `# H
mov cl,4
- k [4 x& g' i3 [ shl ebx,cl2 A+ h0 A, n# B% [0 p9 A7 S
add ebx,eax
- u! A( O3 W: f! ?# E$ ?5 E. P* o) |. _ mov al,es:[si+4] }! D+ |, \/ J3 T
call Change+ R2 w+ |( a) b" [* f& h3 ]/ w) G$ A
mov cl,4
7 w$ f6 h3 c% \, q* E8 X* I M shl ebx,cl! s7 H" S: g5 W( R- F
add ebx,eax
' g* P% u; P l, p% T- k6 T mov al,es:[si+5]7 c$ r N7 B3 Q M7 t
call Change" E. U5 g7 }, c# k" u+ `' J2 b
mov cl,4
8 O% F r s3 ?; ? shl ebx,cl
; @ k8 Y _2 E+ F7 x add ebx,eax
" E- h0 l' b" r( f! I$ \' o mov al,es:[si+6]
2 @$ l& U n. V9 O; ^& G call Change4 u- D% [; X+ X( n* i7 g. \
mov cl,4
' ?7 G$ L# f& y) V6 M2 h4 v9 e$ w shl ebx,cl
4 s5 f t& N, y3 i1 Y5 [. g0 Z+ t0 x add ebx,eax
. ~) c `7 S4 g" W6 D mov al,es:[si+7]
5 n+ a V5 n7 Z3 c' F% ^ call Change) ]1 y/ L- K- L7 ]* J1 A3 p7 a
mov cl,4
' z* y, b# c0 F5 V7 @) X) S5 G shl ebx,cl' O! Q' F5 D) @$ A4 h0 M
add ebx,eax0 m" M# g, m) Q( Z& U/ M
ret
# A2 h3 R W7 lPSP endp
6 U3 Z4 m$ E$ @% P+ X+ \( x4 N; Y: K. ~1 R;------------------------------------------------------------------------------------------------
$ a7 ^/ \* w, z/ y5 FChange proc near
# g9 Z' d6 _1 @+ b! B U: OA: 4 d. {5 x( G( d6 N. w
movzx eax,al$ L" R) ^! Z) _0 c
mov edx,eax
* f& H. B& t6 R {8 e cmp eax,'0' / g/ i1 t* ?) m5 \% S1 r* A5 Y$ X- ?
jb A
' G4 X: y) ~4 U1 z" C cmp eax,'9' 4 n1 G3 J8 X$ G
ja B
. J: j; _, }, G, n% G' V' h: \ sub eax,'0'! i9 x9 N* B: N! X* `- F! g \
jmp short E
5 O" n; C, p1 mB:
" i: c& t! z: ` and eax,0dfh 4 y+ N4 [0 j7 a$ k. N
mov edx,eax- C" L4 ^' W) J; ^
sub eax,37h
# l' U7 v- a! r3 u7 P& q2 F2 k cmp eax,0ah
* D2 }' E, T' n! k8 e jb A 2 W4 b, N9 k& Q* X
cmp eax,0fh! t# m2 {* B7 `
ja A
+ z* r) V8 f; _2 g, J: t3 l, HE:
. q4 e8 E. i) g" ]6 B9 U! K push eax
l5 V+ b" L& I8 c9 \ call PRT
& c. f" R- K$ q( } pop eax1 M+ o3 }. v4 b" F& m ?- y& p4 x
CExit:
5 o: g! I- k" u& k, F6 H ret! m& Z, }# z7 s/ z, t
Change endp# o3 X6 W! I" O
;------------------------------------------------------------------------------------------------
' [, ]+ ^# ? B a* Z; O8 FPRT proc near+ q/ b+ W) k' E4 ?: W! i3 A: X
mov ah,02h# j9 B7 t) f. r H4 b; s
int 21h
7 w8 e0 }2 N& E9 y7 O ret
' p" M7 V1 i* R2 bPRT endp
; g5 t! C2 D: ]* ?;------------------------------------------------------------------------------------------------
6 v/ L+ B) }, D+ V, ~crlf proc near1 Q, m/ N* ]+ I; Y4 @. |, d E
mov ah,02h- j0 Y5 n8 y# r, W
mov dl,0dh6 m0 p- b, F- ]$ n
int 21h/ ~% F+ a4 a: E7 }/ k
mov ah,02h I0 a2 G" |; ]; E4 @9 Y
mov dl,0ah) i% ^. N6 N7 Z4 N% d) b
int 21h
0 F5 A9 i& m/ e' ^' o7 x ret) L4 z! S: f8 J! i8 O% @0 i! n
crlf endp
& b7 R. |& t3 i$ G, X;------------------------------------------------------------------------------------------------
/ J$ Y" k6 V" @1 Y& c; t( g4 L* v_32bits proc near, @8 L0 M9 X" q+ e! I" W: p
pushad) o E E* q. _
mov cl,4
) q& t$ D5 H. U) }' s6 ] rol ebx,cl
% s* Q/ b) F" |) F call print_4_bits. r% z Z; x. P7 P
rol ebx,cl
. \- Y; p, {" h' \, r1 N/ w( E call print_4_bits& E: }9 s& i6 o1 o
rol ebx,cl
! [1 n) o! X( l8 D call print_4_bits* ?; g2 `* p) c2 V+ i$ {* P" p
rol ebx,cl
; x/ F& ~! q4 E: P' I call print_4_bits e9 v& P, U% B$ a, [! V) V; q
rol ebx,cl
2 h% K& k3 s) z+ w3 k; Y call print_4_bits4 G x, u# R# G8 Q8 m8 K
rol ebx,cl
f/ l* d9 ~' P) b0 F2 U( }) i call print_4_bits
% H+ M+ M: M" s% t1 e rol ebx,cl, b m, H; |; x( ^/ V. v. u3 \
call print_4_bits6 B' e4 Y: h$ |; Y* G
rol ebx,cl T8 H, O! p0 d% S
call print_4_bits* y9 \5 I" T( O/ [$ p
rol ebx,cl! @# p& B$ a/ F3 _) C2 e) U
popad4 @( o4 r) b7 R% S6 K
ret U+ r0 x* ^- k$ {4 n6 y/ D
_32bits endp; f5 C8 V3 \: M4 o+ q
;------------------------------------------------------------------------------------------------
1 P7 H- N5 |9 u: { e8 U_16bits proc near
{9 J' w( Z0 p9 y pusha
9 _4 {3 Q! l# H: R. ^" P rol bx,cl: z7 R# x$ ~' g; h; n
call print_4_bits: k# F$ Y6 f7 y1 O8 ~1 h
rol bx,cl$ q' ]- A( }/ x0 d! Z! K. L
call print_4_bits
j0 \; y3 R9 t% M rol bx,cl3 S, \! {1 U8 l$ S; E
call print_4_bits
: \; o% f6 T& I$ T rol bx,cl( }/ W5 ]; F/ A2 X% `
call print_4_bits$ j8 _$ _6 b* s7 O8 c
popa# f6 y3 l4 ~ \/ P8 }
ret
. [1 j$ Y6 Q% ?; p+ m' m( W& ?3 {& g- a6 h_16bits endp
; }+ F. S9 e& ^! N0 p$ x;------------------------------------------------------------------------------------------------/ x0 [, A! f! p, z0 a
_8bits proc near/ q5 X5 t& Z! L9 i7 Y0 G
pusha
. I! T% ]% {: h6 k$ I8 W& v% i rol bx,cl
/ {( J: \8 Y) |! \, I1 L, K call print_4_bits5 [( ^- w2 Q i1 G) S" U( @
rol bx,cl
% S! x' f+ c. a9 S% c7 a% P [, i call print_4_bits
Y& U l% [3 b6 e, ~ popa
+ n9 e. V4 ^9 H! | ret
6 C( N# A4 V7 Y" ~, s8 S5 ?_8bits endp
' p5 K( F3 I, E" Y) d% ]# e;------------------------------------------------------------------------------------------------
6 o. H+ E# Q2 T2 @print_4_bits proc near
& B: F$ M# x* N! P: [: @" M mov dx,bx
- B) O) e/ s L. j1 I' _* S. X: z and dl,0fh
. S: C, b8 W( q \6 k! L8 `- x. G add dl,30h, o, w* X5 d7 W. I: Q: K
cmp dl,3ah# p$ H$ K6 N! B. t& b
jb print F) G; o9 c/ _0 D5 M3 l
add dl,7
; V# u+ g8 N; xprint: 5 j9 t1 w# l, `1 @$ P
mov ah,2+ m' h* s8 l& r! e R# Q& M
int 21h: M: `, n, j: z f6 Z
ret
~. d* B) _# W" @print_4_bits endp 7 s: a4 L0 G4 R
;------------------------------------------------------------------------------------------------. P1 G5 z3 S0 E& m
CSEG ends
: x2 J9 d; k/ {! ?, h* U9 oEND |
|