|
各位前輩好,以下的程式為在 big_real_mode 讀取記憶體的值
6 Z# V7 K& @7 Z: x) s& o
. o2 [7 p X V! F, w" q9 s例如: C:\memory.exe(程式檔名) 01000100(Address)
. P4 T/ k; y& ]5 [1 ], B, j' G- W+ T
, U9 Q/ D" I6 D- ^* P% @" L1 E- _2 l' D則會顯示01000100位置的值
# Z/ v+ @3 i7 u- i1 [. G8 C% W: h+ x1 ?3 Y: H
但是我另外還有要顯示出字串,但是顯示出來都是亂碼2 y- G3 `5 z: N: p$ }, T
6 V: ~' S% y7 F3 [) u b麻煩前輩給我一些指導,謝謝 5 i/ |' p- R V/ I$ P
. O* g" [- Q+ E
0 n+ Z+ H! C" A* a5 O K0 {. s$ A- E.model small: s, c; ~( e( j8 @- l' R b
.386p
9 Z9 X/ c9 Q- e0 ^+ h/ Q;------------------------------------------------------------------------------------------------
. u) T5 n& E/ K/ Z0 `$ MDSEG SEGMENT USE16'data' 6 X! J3 o1 K% z1 t6 ~' _4 f
1 s: j/ @$ n, N. g$ T
DESC STRUC/ d" H# x) s, r6 }
LimitL DW 0
5 r, Z+ w, e$ R) z. e BaseL DW 0 7 Q, x" ?- x$ l- c
BaseM DB 0 % J' y {9 d0 z1 L; s1 O6 o4 X
Attributes DB 0 * O7 ^" m+ f; o- B- Z. r" \
LimitH DB 0
# Q, z) C. z" T( Z% \0 J1 u+ n BaseH DB 0 ( w* r8 D! F3 i9 K2 T! }
DESC ENDS2 ^" F a* _0 l, f7 S0 ]
! \: _& E# z9 {' X, n4 _8 ~8 r0 D
PDesc STRUC
+ u6 U- v& z/ F- v: w Limit DW 0 ! m; ^' o% N1 c" K* O2 I! }
Base DD 0 ' z$ b+ a/ W& w3 q
PDesc ENDS
" b! A2 a: l1 h+ { e
9 V; x8 h+ K8 tGDT_def Label Fword
/ w5 Y- q7 D9 t* N8 MNull_Desc DESC < 0h, 0h, 00h, 00h, 000h, 0>
6 b6 \2 i$ N) p" @* F/ dData_Desc DESC < 0FFFFh, 0h, 00h, 92h, 0CFh, 0>
; ^2 T: c" j8 i- ?5 \' a, c- OGDT_Addr PDesc <$-GDT_def-1, ># M; w" I5 {8 v; Q; N. O3 Q/ r: T
9 Q& ~3 ]/ t9 T5 P+ `1 j
msg1 BYTE 'The Input Address is'. n9 M) q/ C; F) P( A+ F) V
msg2 BYTE 'The Data is:','$'
: F: T8 s, V. o( I
0 m7 e. I2 y1 f4 v9 rDSEG ENDS9 H( i5 K: U2 E' K7 C
9 f/ m' N4 ^1 V% f" m0 M
1 x& g1 V9 X$ N/ o( v& p' E9 h;------------------------------------------------------------------------------------------------ . X, ^: S. \9 h- Y' \
# O! ?& \1 V5 p+ w7 t4 G1 U3 n2 XASSUME CS:CSEG,DSSEG( m7 V0 G; \" a: a% r& B) S
& I; {- }. I" y! ~4 @5 W6 rCSEG SEGMENT USE16'code'
9 L- H' ?% L7 N) |' B5 b( F% x
- D& L( j: i z2 [# P push ds
1 M6 I8 S& G \7 V6 [" W" E push es
3 M5 b. W3 f8 G& s; ?9 ? push fs6 L+ i7 g; g8 M# ?$ j) o3 J7 F" i o
push gs9 `9 ^% L( G" r! a
) F4 [0 x C1 X3 d- o% N call big_real_mode" R5 u- U0 x/ H& P) H: {) ~- x+ C
, _" z: {' T u; K# u
3 n0 n6 G* B! a3 e
mov edx,OFFSET msg1;/ t3 a( B: p6 e6 y% d
mov ah,09h; $ n8 M8 s) {" t$ ^4 p
int 21h;$ L2 z- E' P- u$ Q0 x
mov edx,OFFSET msg2;
7 r" _- b# E2 S2 n mov ah,09h;
4 f% i- f" @% F5 a; Z2 T int 21h;
3 H: f, C* f' i5 C* u% L8 J: z) P) h 2 _! `# ^) p8 ?6 L2 C
call PSP : ~; {1 K2 i, f0 @; t3 e$ N. r6 b
5 ]% P& i8 R6 v9 E6 g. I9 ] call crlf 3 j8 p& x* N% m
, k H2 F( u. C mov esi,ebx; N0 u; \1 `1 f5 @, e% O
mov eax,fs:[esi]
" u/ o* I; v/ J( |! a. l+ B out 80h,eax
9 W, K4 K: y" D% \5 { mov ebx,eax
; b! W6 d) m% i0 J$ X call _8bits% V' t8 v" q' ?3 m, d, C9 Z
# g8 q+ u/ \- @: ]! H/ | call real_mode
* K" _" ?, U, i9 d6 T' |
; |. |" g; L( \3 g6 I: N3 w3 e pop gs0 H c* Z! w( v# s6 j' O6 D
pop fs9 G) V( v) X: A- I
pop es5 i. [! }' x( X) M0 U4 B' l$ T9 m+ b- b
pop ds$ V$ B( O. d- L8 p
4 y; D# p3 }+ |1 U4 u. T .exit* `% E* b/ u' b' o3 z+ ^+ G
;------------------------------------------------------------------------------------------------
5 Y1 }7 P. j6 _4 ^big_real_mode proc near
) K. Y, {3 w: l) M0 Q1 `- r in al, 92h
8 V& y; [% t$ d; F; h+ w or al, 002
: j) |& ~& _( D K; K% h out 092h, al( t9 X/ l: S3 ^. j
out 0edh, al2 ]/ Q& f( Q; E! E1 m
cli6 }8 H [+ z' K
mov eax,DSEG( }4 V! h- i0 b1 y- U2 x
shl eax, 4
" |; O) h- e M% T+ _ xor ebx, ebx
7 Z0 q1 M' h* Q0 Q, J& s& g: ^: m mov ebx, offset GDT_def! v, m' c+ `& d2 }9 t- ?
add eax, ebx; K! f$ I( x* c6 Q7 i ?4 ]8 A
mov dword ptr GDT_Addr.Base, eax7 L3 _0 x% J/ S+ G& }
lgdt fword ptr GDT_Addr
. K* p4 _1 r( ?6 h. V7 h$ Q! I" J mov bx, 8% c i* P; Y. v" @' }
mov eax, cr0- Y$ u# T2 x7 M/ |) e; A" g4 j
or al, 1+ I2 f) K& q8 w1 W
mov cr0, eax' ]0 t! }; |8 v/ G8 E z$ R }
jmp PMod
Y. v7 y- q4 S6 bPMod:0 i/ G! c" i6 l( @8 t% f
mov fs, bx/ q D: r; Y" G. `2 I. o
mov gs, bx
% C) U. p! z+ z$ B3 s" C8 X mov eax,cr0
) O; ?/ l2 @$ K' x and al, 0FEh. F+ _ Z% M. z
mov cr0, eax . K+ b- C T5 @1 O7 O) k& q
jmp RMod( Q( V# Z; Q9 K; _
RMod:
6 ?4 T2 `: x2 P2 \: L' Q- _+ L xor ax, ax0 n, W% _8 R' a; |3 p& m, ?
mov fs, ax2 ?! x9 c3 i; c: i8 m5 N
mov gs, ax
. e: g2 V V% F3 W2 @/ i+ l/ {0 H' ~
) r1 w" d/ c Z2 }# z sti) _: f/ Q9 i# N1 d& f
$ S5 c% d1 u" {1 ~) \+ n ret6 }+ s5 Y! V1 Q( l" N& C) d
big_real_mode ENDP w1 K! n$ v2 M7 n1 U$ V6 Q! t
;------------------------------------------------------------------------------------------------
7 O4 P P3 }0 W" h1 Lreal_mode proc near
7 e5 M7 u1 n( c in al, 92h
9 T! \' ]9 G0 ^0 L: f) ?) B2 N and al, 02
) I7 P. p. Z9 N2 L1 j% | out 92h, al
* t L- L& p1 N, E. E9 B: r8 H9 r ret& c# L; l* Q' e7 O- \
real_mode ENDP
9 x( m. v* s. m$ D;------------------------------------------------------------------------------------------------8 N0 E j: b* K5 m1 z
Get_Commandtail PROC near. `4 b' [3 a! |$ z+ e" c6 E
push es ! ^. A( ~( Q# d0 g k
pusha
$ [+ S" Z/ o2 C. d! Z mov ah,62h
7 G7 v4 A% `# t% A! U int 21h
( H v* O. C' i+ S mov es,bx4 y! z4 o5 g$ ^/ p
popa
& o& F5 x# l* ~4 m$ w+ G; ?/ B pop es
5 @' r, Q( E2 W: @8 v ret
+ w& d1 d/ l0 p$ w( O7 X' TGet_Commandtail ENDP
6 S! X6 C3 I- x$ X;------------------------------------------------------------------------------------------------# m" u- U- `: C; @
PSP proc near
5 d4 U9 V9 c6 j mov ah,62h0 _. z6 t# c9 A* O5 v4 i# E6 k+ k
int 21h4 F# E3 ]- F" z8 Y. o& \/ K
mov es,bx + {0 W1 l4 j' |" R) B
xor ebx,ebx: `- C. h; J( X. G5 k" f
mov si,82h' J7 O5 h$ U/ `7 W
mov al,es:[si]
2 H! S# D& c8 _7 g4 d call Change
, F/ S7 I7 J c+ n2 G mov cl,4. C9 \& L% ~# v: o8 t [& l
shl ebx,cl
' _! Q3 O) k! }% R add ebx,eax, O; G7 _7 y$ i$ u; P8 }8 K9 ^3 @
mov al,es:[si+1]
% _& v/ I* N) ^2 V! [ call Change- R; {8 Y- Q. I/ w
mov cl,42 h% a5 b8 d& e/ q- x l. Q' d
shl ebx,cl
- Q4 g' v/ ` P$ {: }4 g! U( p% Y add ebx,eax5 s) d4 J. V4 [4 ^' }( Z% W( _
mov al,es:[si+2]) R: L* ]% J/ u; P& S2 u
call Change
; n; V$ x, W+ S$ R* y0 F mov cl,4
1 B) F3 l i$ W/ p& l2 s: S; w shl ebx,cl7 N6 `& e7 V( U+ X2 _* K
add ebx,eax
2 m- N* Q4 a7 m0 a mov al,es:[si+3]
6 ^& `3 E+ p) G' z call Change( d1 Z/ x& ]* _7 A% t9 C
mov cl,4
* [- k6 i O# d2 c V$ q" J shl ebx,cl
3 s. r u6 ?* E4 C8 F add ebx,eax, v; g& m& o' u+ P
mov al,es:[si+4]
9 v7 @1 `( A) E4 E( g call Change: D# U$ G+ ^& O
mov cl,4
" S2 i7 ^0 d {0 [8 E9 H& j shl ebx,cl& u- G$ x' P& ~9 Q0 l* q5 V/ P5 w
add ebx,eax1 p7 K8 W+ i& n" D% Z5 ~! k1 g: ]
mov al,es:[si+5]
# ]: ]. q# u( p0 ^. R) V call Change) M8 t; {6 ?0 G
mov cl,4+ c7 y- h& F! G1 Z
shl ebx,cl$ e& Z; @2 S6 H
add ebx,eax, E* G5 U* g: y8 W$ \$ C5 k& |
mov al,es:[si+6]. ~8 f( H# h1 \- ^2 A6 K6 |) e
call Change
/ X2 Q/ k2 a g0 m; \6 W mov cl,4
" e# P$ H: `8 j& C8 O shl ebx,cl
; }) k! b- D9 B' q T add ebx,eax- s* M( Q4 A/ R- ]+ Y
mov al,es:[si+7]
8 }2 R+ T; ~. C7 I call Change* O. h6 v) i" x0 ^! U
mov cl,4! F! F$ J3 X# g- G
shl ebx,cl
! ]; U- K0 \7 q add ebx,eax
' e: ?+ I& z$ p) t0 G! |/ l ret
9 ^: j& }4 Q+ s% i, G* O9 K* ~PSP endp
( r- b: F* |/ M! h! A;------------------------------------------------------------------------------------------------5 M$ y5 J' ^* E* J
Change proc near
" J: z" L& K$ H9 A- \4 }* iA:
; D$ t$ p' d7 k; b6 X3 E$ j! J7 r movzx eax,al, o' Q& d9 \2 ^2 f* x' Z1 G
mov edx,eax
- F7 b; ~8 i' X6 k cmp eax,'0'
# [$ n# v, O8 z- q) \7 U B jb A
3 ^4 ~/ {/ @* j: i% k cmp eax,'9'
/ y- ?5 D$ c ?& S ja B6 i; t6 S! |0 q( P2 H. `' n; z* b
sub eax,'0'5 a# _3 ]+ g H, E1 c) E; `8 R
jmp short E
% ?4 m6 L4 e5 A% {1 V+ pB:
9 w* @ G8 i- F. E1 m: H and eax,0dfh 8 \: V( T% u/ `! L: S) p! h6 M
mov edx,eax6 I# ?" n% b- E
sub eax,37h
& K( r# v% c: x" E cmp eax,0ah
) W/ O2 A# t: b: Z4 d! E' u jb A 4 q8 M5 U6 o$ d
cmp eax,0fh
* F; f6 r: z9 _0 X2 A' a9 K ja A + c! ~5 f3 s4 R. i) `9 t$ o, Z% _# I
E:* ^$ p. B8 U. } c9 l- _8 e
push eax ! N1 J" o w7 ]# ~5 P9 q( ^
call PRT
6 ?& ~ I) j) v2 ~ pop eax
7 w8 x* ^ K1 u% Z% Q+ t$ cCExit:
$ M* H4 A7 ~9 M ret
% W. u+ T# \4 ~' gChange endp
* l/ Q. p* v; O;------------------------------------------------------------------------------------------------
/ s, A# `; N* V1 a# ?& g4 vPRT proc near
- a b: X @: o: @1 G mov ah,02h: O' ?6 A8 P* `* T0 O3 X
int 21h% @# M4 w# M0 X* }1 s5 E- @
ret
- J7 R {1 `4 YPRT endp# H- r' q* B- L1 p( Y5 @3 E# f
;------------------------------------------------------------------------------------------------+ H; J' Q. P, ^
crlf proc near4 i" t2 ~ D9 e# e
mov ah,02h
& Z+ v0 S- K% X8 |+ D9 T mov dl,0dh. g9 v& v2 v' M. y0 N
int 21h L. [' E- M7 K5 p
mov ah,02h
7 r/ j6 |/ C* y% E mov dl,0ah
! w3 J# i1 G- k; w0 d int 21h7 L: W: L1 L* p) |
ret; a1 R- g( W+ O
crlf endp7 _( A5 t7 C* z$ u! E3 k& ~8 d
;------------------------------------------------------------------------------------------------
2 B8 X2 P9 Q% V* T$ k" ]+ p_32bits proc near
) a$ \9 f/ Q1 O pushad& B4 m$ y: m& Y" I' T5 Q7 l- ~3 ^
mov cl,4
+ w! }6 `/ ^0 d rol ebx,cl3 }/ }. c0 e4 D1 F
call print_4_bits
9 U2 A3 ~- A# ^' x rol ebx,cl
$ @- P. s4 Y& I% Y! F; w( ~6 } call print_4_bits: G/ z& L; w! ~6 f2 M, b
rol ebx,cl
( Z+ r7 @( G* J call print_4_bits/ s- }9 K* H* F+ d; i
rol ebx,cl& H4 j( I6 K6 u
call print_4_bits
; Q/ y' V% M% ]# j rol ebx,cl L' a* B& b0 z, C
call print_4_bits: ^( o1 e8 L4 @9 n( l# F s0 i
rol ebx,cl3 C0 f c( q" e! R9 i3 A- e
call print_4_bits
! ?" b: A+ H, B2 Q rol ebx,cl
h' C9 O+ U4 e8 b; t call print_4_bits8 x8 ~, \+ X7 q" u
rol ebx,cl
# @% T! [3 a" e& @4 _ call print_4_bits
& j! z) a4 k$ e( d8 M" | rol ebx,cl7 c' m& J# b7 k" z, S% x U
popad+ c4 `/ Z. C1 u, Z/ T1 ~
ret
8 ]. S- S: h% W, @ u_32bits endp' q; ?# m9 Y4 t6 r5 E. t
;------------------------------------------------------------------------------------------------
; j J: t: k: m' \, p_16bits proc near
8 z- }& r. N- V0 ~2 S2 @# z pusha 2 A8 W" f6 T: d$ }$ k; {
rol bx,cl
9 K1 \& _6 W6 y. q8 |- H0 j5 \ call print_4_bits
/ A2 _1 n' r9 u rol bx,cl* [. h, i/ d: |6 D4 Q+ v4 V
call print_4_bits+ t: J" X0 j# Q' q; M3 E$ I
rol bx,cl" r0 n4 [+ F4 b; C' c
call print_4_bits
5 Z" I4 t4 ?. [1 s& |. |3 G rol bx,cl) E6 M' R0 u5 |9 T( l# n# ^
call print_4_bits
0 g, _# B& W4 ~ popa
8 ~4 w" _3 C' G7 R9 w ret" e& a7 d# I. @& L' ]% n* ^$ S
_16bits endp$ G8 O# I2 u3 H! D4 m2 T
;------------------------------------------------------------------------------------------------
% t! G; o, F2 z1 t# c_8bits proc near w3 _5 K* x5 X( ^' K6 R5 x4 L
pusha % P' t9 {3 Q% z: J4 n
rol bx,cl. n8 j; z5 F2 w% D/ `
call print_4_bits
6 ]0 y0 Z# ^6 l8 N rol bx,cl q7 m; Z( E. y: \9 ~0 Q
call print_4_bits) R2 W; e# {2 Q- z9 Z. `8 ?6 n
popa
+ _) y: V" P. f7 | ret
# R% G- J/ l- b0 U' N" Q_8bits endp1 ~& r4 p: B+ n6 M4 u& q) q
;------------------------------------------------------------------------------------------------' y& r3 u" B3 b. X& r& h! v0 R4 q0 Z
print_4_bits proc near% T( k; s* {/ U- H8 s) t
mov dx,bx
6 c" ~- f! L, i* c and dl,0fh
" `4 i; f6 L% h3 v; N add dl,30h7 c5 S5 s& l9 c1 x: p/ G- f" Q
cmp dl,3ah) H8 V6 s0 ?6 s0 `
jb print
2 U @. y$ g' T7 o7 l- } add dl,71 L1 n) D/ ^# Y7 ]) R
print: ( p3 {' n+ `% l, C! j( K! v( Z
mov ah,2
) c7 m8 @! ?: _. P* s- m int 21h0 Q6 e9 i/ r) T1 d
ret% ^# q9 \; |1 r% o" ]) A: q
print_4_bits endp 3 _6 y. z/ h5 y: z( P
;------------------------------------------------------------------------------------------------7 T' K0 J+ `" c1 U
CSEG ends
, D; D+ F- E( z# K( vEND |
|