|
|
各位前輩好,以下的程式為在 big_real_mode 讀取記憶體的值. B% B9 G6 O1 K5 x
; Z/ a7 e8 M: B! Z$ Y$ D例如: C:\memory.exe(程式檔名) 01000100(Address)
5 v7 k* f o5 h) M* U% `8 g( n, e! I* T; D& H+ y6 A
則會顯示01000100位置的值
9 v$ m2 |3 D6 L6 u- p# i
& Q+ V5 _3 r1 h+ j' a但是我另外還有要顯示出字串,但是顯示出來都是亂碼
" w% U; T. r) N
: m0 E2 H% d5 ?+ g5 v r麻煩前輩給我一些指導,謝謝 : s: r9 {" r* \2 k5 l0 g, o0 T! ]# q
9 ~2 {/ H- ]; g( J
0 @, [* H9 M2 A6 t.model small. b* B! A6 L2 f
.386p- U/ q9 `9 C" N0 u1 o; S
;------------------------------------------------------------------------------------------------
6 k/ s, T+ N% I. IDSEG SEGMENT USE16'data'
- |4 l/ r4 y$ P# ^0 V4 N d2 s% j* n0 ^
DESC STRUC
b0 {' D+ ~) v LimitL DW 0 7 N; Q( g4 ?4 f
BaseL DW 0
4 q. e2 o' N" i: f9 ~2 p% ~- b BaseM DB 0
. x. u9 _$ H/ C$ D. I" X* v Attributes DB 0 + J- o* a5 Z z
LimitH DB 0
7 F2 o q: v0 G5 t+ A/ H' L BaseH DB 0 & P E$ t5 N7 k) E" B7 w
DESC ENDS
3 f3 F' n8 p+ f5 C; n* }' o7 m9 J; a
4 x' B, z3 v+ M m! y$ r, k" sPDesc STRUC
, ^' K6 i& ]# i Limit DW 0 ( [ l; N: D- e- |3 |' [) i6 V
Base DD 0
6 l0 S9 C+ u' W. ~% E9 k- {" FPDesc ENDS3 ?( S2 S9 ~6 K7 f* P/ o: B
# C! o; z9 ~3 @GDT_def Label Fword
) k# a6 N7 N. w+ h9 e; k! P. m1 ANull_Desc DESC < 0h, 0h, 00h, 00h, 000h, 0>6 E6 i+ T3 u3 J! Q# @ p; L! g
Data_Desc DESC < 0FFFFh, 0h, 00h, 92h, 0CFh, 0>
p: Q. f# H' I) bGDT_Addr PDesc <$-GDT_def-1, >% ?0 p/ A+ E. R( v* E# A" U
% N3 g, J2 o7 K( w" x+ W" [msg1 BYTE 'The Input Address is '
; E) E; v" @2 F gmsg2 BYTE 'The Data is:','$'
& @) I8 u B2 j2 g) d$ @! Q4 m. [7 o3 s* {
DSEG ENDS: y% L0 M6 i% g; Y) u$ T$ W
/ i; H1 j1 M1 d% O0 i5 t) A8 C$ m! B3 n1 S% _: V
;------------------------------------------------------------------------------------------------
, R0 a9 }1 T1 [( N# t- o4 ^* D5 W# Z& v1 ?3 E
ASSUME CS:CSEG,DS SEG6 u' x0 |$ x! i) S
# q+ v* u8 L; i; [ ?* ?CSEG SEGMENT USE16'code'
8 z) l* U5 @9 L9 W9 e% U / {* v) @ q6 K/ c2 w6 T
push ds
; O" v7 X% V0 _ o0 g* f: J push es
+ V5 J. }3 Z$ u push fs$ v; E- w! _. o; A. f
push gs
; d- V$ m8 Q) |+ W# X% `5 v# \/ X 0 d9 Z2 a/ J2 N5 W5 N k0 G
call big_real_mode x% V' K1 H" m6 H1 P! R6 @% B
1 X" U4 o5 }; C M
# ]& `7 N. l5 G
mov edx,OFFSET msg1;
% A2 }7 ~. f8 y/ o' I2 f( K mov ah,09h; 8 G& m9 h0 n: j% R1 _' s' H
int 21h;+ ]3 V$ u6 j7 S4 ^
mov edx,OFFSET msg2;
) ?7 q- T! S# i3 [& { mov ah,09h;
. a0 ^! w" R1 F7 p2 c int 21h;
1 q. Y; B) t7 p1 I, l+ i . B- E9 i/ ] ?& ~( s: H
call PSP ! }. h: U0 W+ B# J
+ x2 p+ }6 s( u% B" T0 }
call crlf
x* n! q8 z: b- I 4 V. N! Z* ?( f/ h% G
mov esi,ebx
9 w- C# y7 B/ \* W7 a! D1 P. N mov eax,fs:[esi]
9 c1 F9 j9 l, a$ h% A out 80h,eax
, G' t' q! a1 E' n mov ebx,eax
3 X5 s( l# e- s8 Z* q call _8bits" W$ ^& E& K# r' P) ]
' ^4 g5 y F: C- J& ~. [ call real_mode
& G* e. X9 B. L; Q" K, s7 s2 A: a; z# ~
5 T/ t. N$ d8 H( {' l# z) @ pop gs, v3 {: m+ }! u' p% z+ {; u, {; Y
pop fs
6 l; Q4 K I6 i o, w6 P pop es( f! \8 E+ J1 j* \* h7 A
pop ds
6 N3 x1 P, R- x , h- c* ]4 D ?$ r& ]/ H
.exit& l# h0 }+ ?& z! `8 ]- _
;------------------------------------------------------------------------------------------------
/ J3 Q1 a# A) Q1 g/ gbig_real_mode proc near
0 G4 Q- u9 T+ q2 A+ K4 r0 ~ in al, 92h
3 F' E4 B! |; K- J- e or al, 002 Z% h8 i0 s. c h
out 092h, al; }' [6 V& C6 U$ l
out 0edh, al
$ h. |1 d8 f! O8 Y( e cli' q Y4 m5 j m
mov eax,DSEG3 A* N" @6 L. r/ y
shl eax, 4' b- I3 A* R' V* H9 Q) P) H
xor ebx, ebx
0 U( r2 d4 I% d" j* J' _ mov ebx, offset GDT_def
: e' K0 D- Y- O# W" l1 a add eax, ebx
2 k" E7 l3 y/ Q" m. e6 D( W mov dword ptr GDT_Addr.Base, eax; @3 n2 o' Z; e" y# D$ h( T) k
lgdt fword ptr GDT_Addr L. n4 ]1 p- @+ V) U; f: E
mov bx, 8
/ w8 v" O+ A$ D E+ {1 R8 E5 [ mov eax, cr0
6 I) W3 [! ]/ ~# p or al, 1- o3 l7 f8 U5 s2 U6 C; F# m
mov cr0, eax/ k7 S7 A7 K8 X, X
jmp PMod5 v7 l/ T# R2 J5 c9 |& G
PMod:& ~ d3 U3 h: G4 a; ~( Z
mov fs, bx
5 ^3 z3 _5 O7 w. E mov gs, bx }. J+ L& a/ x4 R7 |2 i: i, I
mov eax,cr0$ h4 N* N# D' H& k% i, R$ a: W
and al, 0FEh
/ t# D6 Q6 S* ^0 d% U mov cr0, eax : {! W+ X9 @5 q8 F& M
jmp RMod
, L: |3 [6 y: G! g. B0 g$ rRMod:
$ _2 z( H& Z0 Q K xor ax, ax2 ]1 G$ P* T7 D% ?7 a; w
mov fs, ax
1 s8 Z, c4 [6 j% V- c& j) h mov gs, ax: r- R) v4 |3 {2 g# W1 R$ X2 O+ x
8 m m% z/ s; `& j' L sti& n; x- v1 B0 C: L. N! I6 Y
4 ?1 Z# T( `7 Y) ^) R# n, {. R+ L X- B ret7 E$ Z$ c! ^1 W6 K- T% m! e
big_real_mode ENDP
# x. a4 p3 K7 b;------------------------------------------------------------------------------------------------
P1 J* F6 p& V' N5 qreal_mode proc near
X+ u3 j' l- V8 Q in al, 92h
* B& F4 F5 [0 x' _ Y9 d and al, 02, @8 a+ C$ G. |* h$ x
out 92h, al 9 f+ S$ Z) m# J+ y) w- R4 J1 i
ret
' W2 j* [- \; ~; u5 {real_mode ENDP! J& R, S# r1 D6 v2 Y9 |, Z0 j9 O, B
;------------------------------------------------------------------------------------------------
! G& |8 S& _6 Z# g* ~$ KGet_Commandtail PROC near1 l/ F& s# R/ c+ j: T
push es
9 i& P) J; K8 p* T P( U4 z+ P pusha
: u9 v8 h% i$ T* ^# K. g mov ah,62h 2 e4 b& U# E9 V$ ^( P8 i5 K
int 21h! f( o) [6 g! A7 ~
mov es,bx( P. X$ Y! W( J, V5 e8 }
popa - a5 y1 [( b/ z& h
pop es( O+ ?* A" j* p( Z7 }
ret
7 K) o: } |6 G+ V" L- QGet_Commandtail ENDP
; W9 p; _4 t9 K. P( h1 X;------------------------------------------------------------------------------------------------3 E, t9 u& |3 O# Q% _& b' [' N
PSP proc near& G% Q. X+ e/ w- ^ A
mov ah,62h1 G( d( j* F" c z8 u5 h0 @
int 21h' i& x% \7 v6 ]7 c& m% i
mov es,bx
$ o$ j& p! `* j6 I6 L xor ebx,ebx' O4 X4 \/ u3 E p- f/ h
mov si,82h
) l9 ^4 w/ w: S! Q- `! @- q3 [9 J mov al,es:[si]9 T; M! o# V* I$ z9 J
call Change
7 E: |1 _% u) }8 l. J4 K mov cl,4
! D; [0 |2 d' ?4 ? shl ebx,cl
! g& F; j6 A& l* C& o# _1 V add ebx,eax
$ }) |! {1 x8 s mov al,es:[si+1]0 m* o; U0 U. d) Q
call Change
0 t" S: ?9 p9 k2 A) c: K6 P mov cl,4
2 G3 N* [4 U4 V shl ebx,cl
" I9 b$ ^% e8 v0 r% v add ebx,eax
; H$ _' @/ q1 m mov al,es:[si+2]
! g% k9 s9 ^# S7 n7 y0 a; E$ j call Change. v! F- `1 c' o* @5 ^' f
mov cl,4
& h0 } g, F& f H# V0 J( \ shl ebx,cl
! z- M* z9 N# _0 N- A7 P add ebx,eax, }; v- u* A) s0 y" D6 q+ ?/ W8 H
mov al,es:[si+3]
- H5 t- h+ c: M( a1 [" ^ call Change; b$ b/ }1 d9 p l) l
mov cl,4
' q- Z% _2 G3 C! z shl ebx,cl
6 `- L3 Z3 h( K: H7 c7 }! w3 V add ebx,eax
7 n. D& k2 ]% L" Y. V mov al,es:[si+4]
6 Q+ E \1 }0 A( _ e call Change
4 h% g) p+ g' N K mov cl,4* {* z& F( w* h$ n5 x
shl ebx,cl
$ n1 l; _) G2 l# `3 ^3 P add ebx,eax" q6 H; `# O+ ?1 P) W `/ [
mov al,es:[si+5]1 l' r% a/ W/ R% j% c
call Change
4 O0 |2 h" t% n6 Y mov cl,4
) A( V1 \9 N) n# E! a$ d* T shl ebx,cl
! T5 F5 l: X B add ebx,eax
1 N2 W% G4 s& p, H7 @( c3 e1 E+ P mov al,es:[si+6]
3 Q" p H% J7 Y1 O1 p) N8 a: m: G; y call Change* u% G5 E4 C* Q6 q% @1 h
mov cl,47 A; ^5 b. p1 `) F
shl ebx,cl
* m- \4 y/ [! N3 v0 R8 T: U add ebx,eax
; i: E; [0 }/ Q1 o mov al,es:[si+7]
. @$ A! v8 q% \ V call Change% I- a% h$ m( [+ a* V
mov cl,44 r4 V7 m9 i) n h( u' I5 ?
shl ebx,cl3 v9 S/ W1 o( G& T4 q/ e, N: i# k3 z
add ebx,eax. K: r' l* H% s: Y- n
ret) U$ @6 F8 G+ v# X
PSP endp
) M$ ~ P- P) ^) ~% R |! j;------------------------------------------------------------------------------------------------
' E" }* ~3 s( m3 d* {6 zChange proc near1 X5 H( F, p' S
A: , F% \ S8 `% h- n8 G2 `
movzx eax,al
- c, f. T: r G) i8 k `9 f mov edx,eax
8 }# p7 H! p, m7 ^1 {) I1 f4 P cmp eax,'0'
- Y8 u2 N' n$ r0 L- S& n jb A' s( x6 p% V9 [ [ ~) `
cmp eax,'9' % _' E+ @# E) G' ?0 b4 ?% O
ja B( ]% r2 ]" w D* F" q6 a, D
sub eax,'0'$ m# Z5 _2 i+ h* g% F
jmp short E k' m8 c* P7 H0 o3 U7 T4 V- D
B:
- {, T N" A/ c2 }6 ` and eax,0dfh
, s& r9 }: I1 J; `" a2 Q mov edx,eax: s9 a6 z9 @1 A& h0 v5 E8 m, R
sub eax,37h ) l1 [( r @3 b5 S# q
cmp eax,0ah
$ {* ?! B; G6 b$ f! o- V& [" _ jb A
; ~. G. a+ A4 z' {6 `' n3 U- V, g cmp eax,0fh
3 s, [9 O1 ?9 ` ja A
6 w- t+ d5 o! |' T DE:
6 b3 N, O! Q% O% y7 s push eax
" g; }, M1 I" j5 l# L3 U- b! R call PRT 9 T8 y# u' ?7 [* T$ F5 i/ c
pop eax( h# h; {" G! X: c: v5 T' o% @
CExit:
% |: w: I# @" ?! Y3 f. S4 ] ret
5 q3 B( O& g+ ^$ A- A) w% pChange endp
8 A* v+ ?3 e/ U6 i+ G1 M/ L;------------------------------------------------------------------------------------------------ H1 Z& t- m& P+ C: M) x7 n
PRT proc near
3 \: |9 w# E6 B/ [% } mov ah,02h( {4 Y1 t( }3 R9 H7 v
int 21h; |6 p" j; Z' f
ret) w. i$ h5 H5 F( { ^/ w( j
PRT endp
& y3 c0 O( ~8 [" j5 W9 e;------------------------------------------------------------------------------------------------
7 C: J+ {0 ]0 p; `" y4 mcrlf proc near
7 _. C3 l3 Z+ h5 v% K" ?( v mov ah,02h' b# s. Q2 C, ^+ F R: B: U
mov dl,0dh7 x4 Q" k# S \ A
int 21h2 y: } a* ?" k. {' i( ~0 N* F5 C
mov ah,02h( T, A3 e8 D; X5 t' k
mov dl,0ah6 j9 R8 J2 e) S
int 21h& e; ^) U# S' z) B; E9 D# V5 \3 L1 a
ret- {! i0 I! Y& j3 H" k
crlf endp7 X& @/ O: I. C! o6 A i
;------------------------------------------------------------------------------------------------( r: r3 ? ^0 J8 d0 s
_32bits proc near
' H7 _8 x3 g- H, u# ] pushad
3 v0 S. K6 ^" S mov cl,4
5 e/ j, t4 w" m U! Q1 `/ [ rol ebx,cl
' P) v% f) d9 M( E6 I& |, m call print_4_bits
+ z) P0 {6 _0 B/ @5 K# Z: I rol ebx,cl
4 h; z/ ^0 _( n j1 O; U" n# ]+ p call print_4_bits
0 E* ]/ o2 L2 r7 U1 `& s0 |7 i/ ` rol ebx,cl
& d: x9 q& v0 H9 {) [ call print_4_bits
! f4 |4 O9 U3 D7 m9 l rol ebx,cl0 `1 }3 l0 D, U
call print_4_bits: ` i! X* e8 Z0 t% J
rol ebx,cl
$ i% o; v" U3 l% ` ?, ?: J& Q2 U R call print_4_bits6 x; F, u' q7 K" f3 Q
rol ebx,cl
/ q! Q1 w7 ]3 Y* ~% K call print_4_bits
E9 V. J8 b! d rol ebx,cl. v1 Y1 ^/ |3 m! X V& {
call print_4_bits% O4 T& n J1 B9 W
rol ebx,cl5 T8 P- x+ r8 q$ b8 ]
call print_4_bits
7 Q. u. M4 ]. S \ rol ebx,cl
7 @+ H7 E. ]5 c# I1 S" Q popad6 v q& ]! F5 z/ O* n
ret+ U5 @- o3 ^8 U( i) _+ q, n# B' ~
_32bits endp' M q: I6 P8 _8 n8 j7 }7 R0 _% t; L/ Y
;------------------------------------------------------------------------------------------------
) y& I8 |( G! _9 r/ L_16bits proc near- e; ~+ r0 R1 g! P' _. _( ]
pusha 7 s) S9 A6 r4 A6 |0 @5 `
rol bx,cl
+ Z& Z. k H4 Y9 r/ g! {8 L call print_4_bits
& L) z: F! m2 D" v; T rol bx,cl
% B+ w: T% T8 P/ V3 P; @& A2 }! d call print_4_bits) b# ~: ^9 w# i" I# W) Q
rol bx,cl8 k. i; n0 v8 [' \8 \5 o( i# q
call print_4_bits% U6 C4 _ N e8 j3 d1 {$ m- L
rol bx,cl
$ z5 L- r5 f; x |/ y) B call print_4_bits
7 L. w: O, H1 r; k5 | popa8 d) u# d, n1 r0 I/ H1 d, h
ret
' O( Q3 B& K5 f) k$ B7 Y_16bits endp
1 @2 @3 \1 B) K% J& S;------------------------------------------------------------------------------------------------9 } h3 w! }/ Z! J7 E6 R
_8bits proc near7 C' {' O3 [1 F& P' B" P
pusha
& C! j. E: Q, j r' V rol bx,cl# D1 I2 [0 Z& p# b, ^
call print_4_bits
7 D) a2 f" c$ R: |: x, g rol bx,cl
& E. O: V& _' m call print_4_bits
' `, [# L, ?$ t3 t, a popa5 A7 D, j6 f A$ W$ P! ^; j: M' c
ret/ T& W6 p7 M6 m8 M
_8bits endp# Y1 f2 y% u. c! w$ @
;------------------------------------------------------------------------------------------------: v8 r, ]6 a) n8 `+ @$ v6 F0 O
print_4_bits proc near
$ V4 Y; x4 l- u J9 Q% w7 ~ mov dx,bx/ ^, p; K( Z: H. S* f
and dl,0fh
( P' g. r/ f3 Z1 \- Y' p* g add dl,30h4 `: [/ M0 d: P- [7 _ w$ p! f0 M
cmp dl,3ah
$ Z% P" ]2 _ _ k6 p+ `6 y# |, V* \ jb print7 t5 h! {3 _, N( q
add dl,71 W+ t! G4 H7 Z# N8 b& i
print: * q% L7 } p0 D/ ~( k
mov ah,29 H# S p# N5 \4 d p% ]2 T% p
int 21h
i) J* t# R4 Q$ m* ^4 s ret7 E4 x- i+ K; k; w/ j
print_4_bits endp
6 h) ?) h t, M1 |) v: F* F;------------------------------------------------------------------------------------------------+ G0 j F6 K' q* U
CSEG ends
. j# \4 A" p( k6 ^& }. DEND |
|