|
各位前輩好,以下的程式為在 big_real_mode 讀取記憶體的值% Y! c l+ S2 w- E- i7 p
" ]' T$ c3 D& O! R; D q7 e8 x例如: C:\memory.exe(程式檔名) 01000100(Address)! ?/ O) W) }; W- ^4 j5 U
. \6 r" U! E# R$ S& I( P
則會顯示01000100位置的值/ H y; H! h$ A4 {
% @( `: L* G5 b1 y2 R- d7 b( ?但是我另外還有要顯示出字串,但是顯示出來都是亂碼) z8 o6 a' i7 ]9 F, A
: Z1 t' k8 U- z, G, @麻煩前輩給我一些指導,謝謝
5 C, W9 `2 H0 P. m8 S$ S# w" u1 q# z! U8 g
! K5 ]; n/ f3 x. i0 m3 R.model small
$ b6 P. p0 Q& Q.386p2 v- u: \) m* n7 S# s/ Q
;------------------------------------------------------------------------------------------------
5 a" m1 E8 Z, h) v$ M, I" ~/ @DSEG SEGMENT USE16'data' 2 K8 V$ }- s ]# T3 _" s e
: D; G1 i0 I' M; g7 W
DESC STRUC
( [+ u: C, h5 l$ ?. F |: g LimitL DW 0
6 ~+ _- ^6 V3 h6 S7 _4 W* t, Z BaseL DW 0 2 m- n! H, K; E) ^8 F3 {
BaseM DB 0
3 G3 a6 e* i" F0 v3 l9 l Attributes DB 0 + O4 n/ N' v1 O) [9 s6 v) c8 ?& J K
LimitH DB 0
# b% u# E L. [/ q$ [( b BaseH DB 0
. G7 [4 C- x6 g4 B) A, Z. M9 tDESC ENDS
& B" c9 U' z) S+ K1 w7 u$ _8 F e& \2 @3 Z* K5 D+ G( E1 d; g
PDesc STRUC3 g8 A+ p( R5 j, d* l* _
Limit DW 0
( T/ O" t* q; x# r Base DD 0
' i. U# D/ k$ M7 O* @! ?2 T1 W+ zPDesc ENDS
8 x/ J4 V+ }7 o4 K, t2 f' n! ^: e
# x# C: B; X5 y4 |' E: kGDT_def Label Fword
* R9 [5 k4 u4 cNull_Desc DESC < 0h, 0h, 00h, 00h, 000h, 0>
; {! C; ~+ I9 i7 N$ X# z, \Data_Desc DESC < 0FFFFh, 0h, 00h, 92h, 0CFh, 0>
8 r/ X( B) l6 @( `/ QGDT_Addr PDesc <$-GDT_def-1, >
+ D6 ]" L- t$ k) b7 X. o9 M
( b3 {* ?% }2 [) }6 B, Nmsg1 BYTE 'The Input Address is '" o; L- h' i; Q- s0 t7 P4 C
msg2 BYTE 'The Data is:','$'4 R/ t3 ^ i( b+ A+ a
* g( P" _, {7 E/ }DSEG ENDS
$ L V4 V: i Q( w& w) a; @( X! h; d3 ?3 q1 q
3 D: L( u& C% {' q;------------------------------------------------------------------------------------------------ ( o! G) j- O& a8 P* G
; L X7 ^: g5 N0 g. D( ~* N
ASSUME CS:CSEG,DS SEG
6 {) F% x/ h" q9 [+ U! z4 Z1 j0 Z: l! ^ z) ?" p/ L' R
CSEG SEGMENT USE16'code'* j3 X9 Q) N. |
2 f k4 f$ F" H push ds
' W0 ~) g4 ?5 L3 X4 v push es0 I8 l/ e& k% P2 @
push fs
- v. g: B' a: |. [ push gs
) }2 ?% P; y% Z" ?+ z7 X . v8 j. G; m. y) H
call big_real_mode. I6 j' O# E4 F) j
0 F! s c6 w( K# l: O- m1 P$ E 8 ~ \# |4 Y! U& x# k; g6 f
mov edx,OFFSET msg1;; `7 ?2 _ j- ?5 `
mov ah,09h;
, z' I3 L- l) P int 21h;
3 t' P0 Z$ |- | L) _5 s mov edx,OFFSET msg2;: a0 A( q. R; s# l; F
mov ah,09h;
3 \3 H: a# p$ G2 V8 G- m int 21h;2 `+ B8 l2 ~( i
5 ^* Y* g' Q' Y call PSP p' }% \1 a2 B4 a
* L8 S9 s& q7 P8 l9 L
call crlf : I: J3 }. z! h9 H2 {7 k
$ p# B2 x# N$ A0 | w9 U
mov esi,ebx
/ p3 q; N& h1 _ mov eax,fs:[esi]
$ K2 J. T3 h! m+ D2 C out 80h,eax" t* r! ?6 L$ e3 M
mov ebx,eax8 W% j1 O8 y, ]/ J4 K
call _8bits; V! y7 ]# M. f. Q
4 v ?% I3 t% b$ W
call real_mode* ^9 {2 y: K c5 n
9 X, e5 U8 C8 d! y, k
pop gs9 T. |5 Y) Z3 }' i2 o) ]+ j
pop fs; o+ Q8 k! S* x7 X: S4 m& ]% D
pop es. o3 e# U) q7 }4 L7 d
pop ds5 u2 |/ N" a. y, k0 i4 B
' e% } t% Y5 x/ o% z .exit5 Q+ X: n0 S1 y8 C+ {( y
;------------------------------------------------------------------------------------------------1 U/ V- R! Q% L. g
big_real_mode proc near
I9 A4 B4 t. ~0 r, m in al, 92h8 x$ }! C( E/ s, P( ?
or al, 0027 j+ e3 y1 ^( z0 e5 j
out 092h, al
6 ~0 {! `. V, D* T, A( Y out 0edh, al# ^4 Y: Y# m9 Q; R: ?. Y
cli9 Z% J$ @9 d d4 z. x
mov eax,DSEG! o+ T; \# b% ? {
shl eax, 4
8 ]! i7 X0 |- @+ z xor ebx, ebx
1 ?2 R; x; j( x" K mov ebx, offset GDT_def5 F4 S& s: ^5 |/ V
add eax, ebx
% _+ k) f+ R g$ I M mov dword ptr GDT_Addr.Base, eax: x7 B. X" q/ q+ w; u
lgdt fword ptr GDT_Addr
2 N- d; m9 S! f: v! n5 _' [ mov bx, 8
0 i8 ?- G6 m' p mov eax, cr0" t" H* h! _( o0 U2 ?
or al, 1: ? v- a2 Z( H/ x' n6 _/ l; W1 G, _
mov cr0, eax, C* w/ k+ r1 a0 j* g! ^+ F
jmp PMod0 U) a" ^. k7 J7 w% m0 b( F
PMod:3 }0 d0 _0 e% s" F1 K
mov fs, bx" I, ?% z" t' H# X5 X" G5 u; ^" t/ r
mov gs, bx' n# U) r$ v2 W. \4 v
mov eax,cr0
, s- \4 w6 p( p) u and al, 0FEh
+ x \9 ?) w0 U# k" ^3 @' R mov cr0, eax
) y& b; c6 |3 m( q: {5 ^ jmp RMod' ]6 Z# n/ r4 z- w
RMod:
- s& t" H4 ?9 q xor ax, ax" t+ C2 |+ M/ i% h2 c1 e3 [
mov fs, ax8 q8 Z5 ^, N# s9 m+ z$ P
mov gs, ax
$ L5 c* q1 J! W- w # Z q7 `( W n8 j7 }( k7 ^# M
sti
9 h5 |$ z0 w- j7 b4 c4 A! ~3 v( n+ a ! G$ R/ c# s: G9 I; N9 b
ret# Y$ Q4 s" M0 q
big_real_mode ENDP* N/ l1 P4 I" M& ^& C3 c# k
;------------------------------------------------------------------------------------------------' I2 n- H+ A" i6 C) ^) I1 G- [( o
real_mode proc near
; H/ a+ X4 Z" I0 K( ?) ^+ a- Q in al, 92h
# C9 d# \3 q2 L' ? and al, 02
5 O- W/ } ^' q# H+ ` out 92h, al
! A# K/ Z' H$ k3 k ret
0 J) h; P/ r( k, [' t+ I$ w8 nreal_mode ENDP6 X: N3 J( |% C. ~6 V! Z$ ~; j; Y0 V8 N
;------------------------------------------------------------------------------------------------# `2 K& F. a- x H6 t- Y M
Get_Commandtail PROC near3 q' a- `. H; H) E* G' y0 x* l
push es
/ e9 f& y' n: C# Z; G. K pusha
# ]- m, q0 c- h1 L' B mov ah,62h - {. ^* @+ }. |- m
int 21h( N( @1 b# U, y& S
mov es,bx
( I0 z! N9 d+ c7 ` popa
$ R! r3 x( O1 n K/ L" \, [ pop es
6 r8 D! G N9 I5 e8 F) A: F ret9 y9 ]' ~1 @7 K h# X
Get_Commandtail ENDP) h0 I, Q. T5 L7 f* d0 p* N' p( M
;------------------------------------------------------------------------------------------------4 R$ k# F+ I F. @0 j
PSP proc near& D6 R# S& D% h! ?
mov ah,62h
4 Y5 _: J, e9 z }' ]' w int 21h
7 ^$ V9 H0 _) s# x* I mov es,bx / a3 D4 B7 |) O% L Z; ^
xor ebx,ebx! X- W7 T3 z6 Y7 J4 Q: K# F
mov si,82h# A1 A+ v& x! [3 \; I: T- k
mov al,es:[si]
, l3 W Q) e( ^ {4 V' z7 ^ call Change( [. G: k1 S1 _4 b) E5 r! ]
mov cl,4
& V+ M! s6 ~5 C d shl ebx,cl
$ ^. W; q* n7 q add ebx,eax8 T$ |5 T! N+ T4 j6 e2 Y! y
mov al,es:[si+1]
4 |/ X9 w; p; K7 Q/ B# I0 \ call Change
( O& E; f. _4 M5 ?; E; i) _# B: T- k mov cl,4+ L- S& P7 K- ^ x
shl ebx,cl
3 n# L5 y7 y; g add ebx,eax
. i- x( D9 V4 M" v; T2 L, l mov al,es:[si+2]
7 q$ `7 l& E4 r* k K7 v5 N call Change
; @1 S- g, {* m7 q2 e mov cl,4
* Q" N2 e. X/ t! y shl ebx,cl
3 m6 P' }2 z( a add ebx,eax7 e5 e/ P$ Q7 k
mov al,es:[si+3]
8 f, d# v0 F6 }- G# E7 S! L call Change
W# w' Z+ z. b$ q mov cl,4
# K" J" v7 J4 r- S& N; U1 d shl ebx,cl' s6 m7 n) C3 ^
add ebx,eax' Z8 B9 }, Y2 b* J+ ^3 M/ m
mov al,es:[si+4]# W9 `3 t6 R {
call Change
4 l8 j- O- _% M/ T& s, j% b9 ? mov cl,4$ q) P! N8 v8 u" Y- ]
shl ebx,cl
0 B6 w' @2 G# t! K1 m add ebx,eax2 }- T; @- D4 k! @
mov al,es:[si+5], c; P; E8 l" H0 P2 K4 X( e v
call Change) P& z) `7 k, Z' v" U
mov cl,4) T" D N+ E, P0 L8 x0 r
shl ebx,cl
5 b' }5 S) p/ b, W add ebx,eax
! Z" H$ s& P7 x3 a mov al,es:[si+6]" W; ~" e/ x- D) S/ X
call Change
$ }/ v3 k8 r& w$ F3 _9 X mov cl,4: L7 r" t) R$ D/ r; e
shl ebx,cl
; \ Q# J9 X1 h; Z! Y add ebx,eax
) d$ o( F$ z4 Q$ l( O6 I mov al,es:[si+7]/ e7 L' ~1 ~; Z* t
call Change
2 w7 M4 b3 {3 a+ v: o) W6 [7 B mov cl,4
* m1 F1 K: p! t, I shl ebx,cl& F1 R" P* A4 k3 x3 `. a8 I2 Y
add ebx,eax; S; _+ _. _7 l+ s, F7 J
ret
# w5 j. P$ B8 o# Q8 Z: U& ?PSP endp- W* C% V: C6 y
;------------------------------------------------------------------------------------------------
3 n9 K3 Z8 _& ~$ ] WChange proc near
3 [5 X% [3 m1 b! ?* S2 y; [9 Y* gA:
% Q% @& g$ g7 O* u& H& r movzx eax,al
) ]9 @# u: f7 y8 B& ~& d mov edx,eax
' |5 _6 o3 O# u/ r cmp eax,'0'
+ ^$ H9 W# n" E, E C jb A# w7 ]' l/ l$ p: l8 K
cmp eax,'9' 2 U9 {$ i+ P* m1 W) z9 L7 S
ja B/ V& D& U4 p+ \- M( n
sub eax,'0'7 U) [! I6 X8 S" v) ^
jmp short E
7 c8 G* w1 a0 j A+ t* w6 |B:
5 J0 P5 G7 f w4 W% S0 | and eax,0dfh
- T/ z* ~3 m. e. D' T6 h7 ~ mov edx,eax
" W/ r2 d& ^. c$ m+ K4 x sub eax,37h ( m& A L$ L/ z
cmp eax,0ah- {& K% F9 Z% l2 K2 b
jb A . t! X: e# U i0 `9 {* A
cmp eax,0fh4 |& Q) o6 Z. f. E& F% k/ P
ja A & w0 _ K7 ^6 W8 \3 y
E:( U3 j* y6 w# R# i- i( ?$ R4 C% J7 y ]0 W
push eax b# f( x5 @( O8 `
call PRT ) o K, q! e. j' z0 ?" l
pop eax
+ ]5 M& {' p2 {2 t1 q# _CExit: L+ P" J6 p/ K9 X
ret. `* ^. ~/ F. O6 c
Change endp
! }) Z" s* i- l1 [5 t, P;------------------------------------------------------------------------------------------------
/ c8 R3 y9 M4 r. h- N# FPRT proc near
7 t) r% Y/ s+ [3 Z mov ah,02h
/ |6 E" y/ U. N* O int 21h4 Y, w/ X6 j9 T& R- N
ret1 c7 [) {+ S; q) A+ Z B; T
PRT endp' V, t3 n. I+ h+ J) U- j7 L3 X
;------------------------------------------------------------------------------------------------" [: k) i5 d- J. s5 i& X
crlf proc near& j4 t( F. D# J
mov ah,02h( y$ B0 l( [7 n3 L# p
mov dl,0dh
/ C& h4 }2 }3 A' D int 21h
/ O) `* O2 @- j0 U, M( R mov ah,02h" P8 ?- q6 i5 f) a& p
mov dl,0ah) [8 q& o$ I( P: n" Z# ~
int 21h, `0 N- E! ^# o/ N- w
ret t% z6 g' {4 {1 A; s" q( Y
crlf endp
* G* ?, ?3 B2 c/ |1 A5 n;------------------------------------------------------------------------------------------------7 A$ L; ~3 u! f# F7 u* h9 d8 i
_32bits proc near
2 I' {. _6 Y8 p$ { pushad
; t) o/ [! W! v mov cl,4+ F- `6 B: A+ Z1 | d, J9 o o
rol ebx,cl
+ I% I1 [- i6 c7 x7 p1 L* q5 l call print_4_bits- n0 ]+ n: W- A+ t0 x
rol ebx,cl
8 _4 E; `5 K: _7 b call print_4_bits" d9 H2 W$ E+ w" u Q
rol ebx,cl: z! v: C# H0 p, s
call print_4_bits' d( S7 B: B& ~4 E' U6 n
rol ebx,cl# v) O; u4 L2 Q3 }3 n |" P) O' a: ^
call print_4_bits
4 V* w: |% C4 ], }5 |. n+ I% f rol ebx,cl
3 ~( M. i/ x# ~% D7 B call print_4_bits6 s0 a) l+ \2 J/ L1 H
rol ebx,cl- `8 j$ p. Y$ h- _7 E1 Z4 \' N
call print_4_bits8 g3 H3 a& h5 |) w( N+ ~
rol ebx,cl
- [4 n2 a8 y/ [ z+ x call print_4_bits6 t4 ?7 X2 F% i7 t4 S
rol ebx,cl
/ l1 }1 P' a& Y N/ H+ L* T R! j call print_4_bits
4 U @) _& M: [: R1 F$ F rol ebx,cl' H0 c# H. z; Q; I4 z$ \" ~
popad0 @) W$ X' a% U' l5 z9 Y) w/ E
ret6 `, N; ?9 h: _
_32bits endp
# e) q, q5 y- n5 A;------------------------------------------------------------------------------------------------
. \: \$ t0 @8 Z( W& b4 W3 b_16bits proc near
) {8 e4 D& D2 l1 F0 g pusha
& `5 T1 X3 T/ w7 e( d( X% x% o! [ rol bx,cl* y! x y& ?6 C" b% f, g7 J4 u
call print_4_bits
- F4 \! t h) {+ `6 {" L5 d rol bx,cl ]* L, z; v4 `2 t( D, q; J5 Z1 q6 z
call print_4_bits
1 t. v$ ^) }7 z! P rol bx,cl
& _ [; l$ [" S3 t; ?, w) C. { call print_4_bits
- ]6 {5 F( L! m/ V& Y rol bx,cl. R( {7 g. a3 C" |( Z& O
call print_4_bits
$ v& g1 }& `( B* c6 ^8 g+ H popa
, |# {( _7 R f: y- R ret
+ e! }- `5 u7 M$ z3 k* C_16bits endp
9 E+ r* n- j5 X8 V;------------------------------------------------------------------------------------------------$ F$ ]. A( }1 d* e, m5 O* }6 }
_8bits proc near; D' w" [, }8 f/ I) m' K
pusha % ]0 m: d8 H7 ~9 K
rol bx,cl7 W5 p) b$ b; M2 c3 T A
call print_4_bits9 ~1 ?5 G, D% A$ z
rol bx,cl, |4 `- a; k5 \+ x' B# N8 N1 P. k
call print_4_bits. P- T' i" V5 f
popa
$ S3 w/ H' ?0 t4 p ret O) |: C( Y6 q1 X7 s$ f
_8bits endp' E" H' A) W' f2 _6 F
;------------------------------------------------------------------------------------------------2 _# L4 e$ k* g* [1 C3 X% T; i
print_4_bits proc near4 z9 X4 O+ \0 S% C8 g' ^* A: K
mov dx,bx' o3 e! U$ f+ d- x& B0 j N
and dl,0fh
# K9 T2 Y7 t+ u/ F- q0 S add dl,30h
& r# [9 C( J& t5 k) t cmp dl,3ah
9 H. z3 T8 Y9 `/ v) V/ Z& |' R jb print2 K; W- k, B' ~! X+ j
add dl,7, D, l2 i: a& R* q
print:
) b$ E+ U+ Z) G( _ mov ah,2
& [' _; q4 ]! f" R! R int 21h
# |! K7 k8 }* g8 O9 | ret
% j* @" G7 ]0 o9 `% Wprint_4_bits endp
E. _' r# f+ ~$ l7 X. I' Z;------------------------------------------------------------------------------------------------. A* x# Z8 ^8 Y
CSEG ends2 W- t6 ?) c# _4 }( @# \
END |
|