|
|
各位前輩好,以下的程式為在 big_real_mode 讀取記憶體的值
" g z- L9 @' Z4 ~1 V5 B
# @: f3 A f: y例如: C:\memory.exe(程式檔名) 01000100(Address)
/ b1 p+ _( K6 a' D7 p/ z' [
* G- I: W) y6 y則會顯示01000100位置的值& b5 ~8 D, v( J8 }$ I
! W# v$ g# t6 _' n+ H
但是我另外還有要顯示出字串,但是顯示出來都是亂碼
( O( f! ^: ^$ B- C2 C3 y2 R1 `
麻煩前輩給我一些指導,謝謝 ; n$ V0 v, Z% p5 ~+ X. U- M
1 Z1 `3 l6 _( G# U# x" C& D& I
8 h }9 B, E. J+ Q/ J
.model small
0 z1 ~4 q; g$ L' m.386p
1 h i q# K8 S) A( d;------------------------------------------------------------------------------------------------0 c% ~; J0 \! L5 ^- k, t* t! w8 A% J
DSEG SEGMENT USE16'data'
+ t' L6 ~5 d1 M5 m/ @2 }5 [& b/ f g1 F5 h# C* `: J5 i; r1 b
DESC STRUC
$ `( R* A1 n! I0 C3 U7 H LimitL DW 0 , T: s" s# r: X' w9 @. w+ }$ z
BaseL DW 0 $ {7 B }% o+ Q2 R# |7 ?7 P" k
BaseM DB 0
/ s7 h+ {# x" f. J. V Attributes DB 0
" R% h5 m6 C$ d: P7 i, p5 Z: j4 n0 E! o LimitH DB 0 / n9 S: J' @ _$ l/ W( }: L3 L
BaseH DB 0
9 q8 Z0 Z ~ qDESC ENDS
7 @& L" q$ I! g! E/ ^7 ]
; S% p3 r+ l5 Y8 o mPDesc STRUC9 T7 n- g- d3 D
Limit DW 0 . J2 f: O: X0 n9 @" N$ E8 s
Base DD 0 ) B# d( a) @6 W0 `" Q, B4 v
PDesc ENDS
5 k# l# @0 \: E! `% E' @
% c3 v. f8 W1 N3 X$ eGDT_def Label Fword Y" F `5 p5 | h
Null_Desc DESC < 0h, 0h, 00h, 00h, 000h, 0>
; ^6 p! N8 X0 w" F k. sData_Desc DESC < 0FFFFh, 0h, 00h, 92h, 0CFh, 0>
3 ^( t8 L. Y0 b( ~6 X) X5 pGDT_Addr PDesc <$-GDT_def-1, >
: w3 o) |! o' j9 o* U. ^& ]# K/ J" S: G9 c9 h p' p
msg1 BYTE 'The Input Address is '9 t: i3 [; {7 P
msg2 BYTE 'The Data is:','$'" L. y3 G1 f. T% @ S+ \
2 ^* _+ C1 A% ?DSEG ENDS
) n" c9 j# W3 g/ L6 D ~! |) t9 ?7 q3 [: s
- Z' L, y6 H; H6 e% P, {( ~
;------------------------------------------------------------------------------------------------ + M# r8 w( R! ?3 x7 f( O
+ U2 F* U: }% N' X
ASSUME CS:CSEG,DS SEG. A. R3 f5 S) E# d
; `$ n* `% x w, u1 }( @/ f$ n9 r
CSEG SEGMENT USE16'code'4 n4 F) g6 c6 P" k6 [" I" c
# ^0 H, E. v# v9 p; `+ s/ Q: |$ [ push ds
5 {1 T+ f! m2 i6 J/ o push es
4 X, T) u2 P$ b: J push fs
' O' A! M! {/ g5 @ push gs/ H/ Y4 b+ m9 X% I1 w5 k$ v
6 Q# w# j1 R3 e$ n1 x8 S
call big_real_mode
$ ~- E0 n9 w4 d" D! h6 i
2 V- P) A9 T8 T( Y1 r
c: i0 K2 T* k6 [ mov edx,OFFSET msg1;
, H3 s* a5 _& t8 G$ i mov ah,09h;
! I0 d, s4 k4 ~1 }8 b' h$ ` int 21h;
6 p& `" b1 j( u1 l1 Q$ n6 L2 e mov edx,OFFSET msg2;
+ K) d) g7 C$ D2 h. |3 _% ~ \' d mov ah,09h;' D& P/ v8 e) b" ^: n' t& U
int 21h;
. x+ U5 [! j6 I. m2 L
+ l: K$ E6 l* t7 h6 D call PSP
6 t, h' b3 _ o: w6 x# A9 A1 V
5 r1 b3 r9 H- j call crlf % u6 ]1 X* h6 i2 F" d8 M. j
' Z) Q- T, f3 N( } k4 n( l2 x
mov esi,ebx
1 Z! h2 e0 ~( j N mov eax,fs:[esi]5 p' {4 j$ n8 I4 B0 j" J3 t6 C5 n k
out 80h,eax8 \! H$ y. U9 Q! H% k0 g. x$ ~
mov ebx,eax- X! D1 g! f7 L
call _8bits
4 P$ Z9 w. ~* Q$ p
# ~' ^. y! z8 D) h* e q5 f0 i call real_mode* e! u" B; [' K# T* p
& @4 u Z& C' t% C5 G
pop gs
8 w; O/ e I/ L& i/ l pop fs
* ?0 b! L, M( h# n) T- H pop es
9 g) `6 q8 ]' A0 w$ N. A4 x( @0 N pop ds
3 |1 l* d0 k+ P4 E8 b
' g. P ?+ g( j .exit
9 G9 o% Q* W7 j' d0 p;------------------------------------------------------------------------------------------------
/ ~( }# \' |4 K% o Y- Fbig_real_mode proc near4 Z+ ]- m1 ^' F% O. Y8 S5 S
in al, 92h
) v: J. T7 _0 c" F/ H9 k or al, 0020 c M- ^" {: N9 z5 Q/ \5 V
out 092h, al
" H* O+ E1 p E- p/ `9 v out 0edh, al
/ h) }3 X3 p# S& O8 T cli
7 @3 W- w' n6 p" F! P mov eax,DSEG8 V; d3 e5 \$ o4 t' j; S& `2 o
shl eax, 40 a H" k) H& b6 Y3 a- b5 y3 g4 t
xor ebx, ebx
1 D& k9 e0 A; j$ q! J+ H" [ mov ebx, offset GDT_def
7 c* V7 w5 J( d* v0 @! ^/ t$ W add eax, ebx3 v# x( H# @8 e. H" t; ]% j
mov dword ptr GDT_Addr.Base, eax
/ L' ]3 x- }( `9 d' E- G# ` lgdt fword ptr GDT_Addr
, V( |: `8 _) c mov bx, 8
7 @ x8 o+ g* m0 g( n5 t5 i mov eax, cr0, j6 { w5 J" D( {4 r% F
or al, 1. O3 S! y4 N" K4 [" v
mov cr0, eax5 e- z/ G( q5 V f( m/ }; s/ s
jmp PMod
+ G1 x& g8 Y' cPMod:2 z1 H$ P1 G: e6 p# x% Y d$ I
mov fs, bx
4 Q( x+ L9 m+ W2 ?1 | mov gs, bx
- W5 ~; H5 p N8 A* p8 Q% j4 ] mov eax,cr0
' g$ m4 S \1 A, Q4 @& R and al, 0FEh8 I; V) K5 n9 C8 \7 D' @9 x0 W, p
mov cr0, eax
% \. @% V S* T jmp RMod; _0 H( V5 h/ r. h3 g. a5 w
RMod:
; g) R' Q1 a& I5 f& I) F9 s xor ax, ax
. a) m6 |3 H# |3 r; Q7 ~* ~8 {/ ] mov fs, ax1 E6 { u: g- t: E
mov gs, ax2 t( g+ }& F' o' i' G- g
! E3 w( v" W- M. m1 T% }7 N
sti
! {6 @6 r! C% P3 N# s' K4 y
3 [: E9 n/ v; x5 } ret" v8 w, [$ U* O4 G6 ?( p
big_real_mode ENDP' {" Y( ?6 e5 T- u
;------------------------------------------------------------------------------------------------, K" k. M F5 x" ]" g6 K
real_mode proc near ^7 h" \: ?1 G7 L/ x! m
in al, 92h! y0 k2 U3 O8 P% U- S
and al, 025 G+ j, [! q; C% ^% ~
out 92h, al
$ j. h5 w# [6 U: o3 H8 l ret
. I1 w% A, i# M1 M$ N- R2 K. _real_mode ENDP
2 K3 K: p5 b8 {;------------------------------------------------------------------------------------------------/ N0 y, a/ E7 C0 A s& ]% ^( v
Get_Commandtail PROC near
# ~8 H5 L P _! ?4 p4 M push es
* M' D! h8 p* n2 A( m2 \ pusha
! U9 \8 b8 Q3 w+ {0 J: f2 a$ ~2 A mov ah,62h 5 B X3 u" j4 T# n4 U1 F
int 21h
" b6 A5 M* f* _) p& C8 z mov es,bx
' c8 l2 j. F0 q; h" D! m$ v2 O& _ popa
: {+ G4 \1 X* d | pop es, n. I2 M6 V8 B* p/ @+ w0 K0 U
ret# b( q" f. ]2 r' a, L6 s# p. [
Get_Commandtail ENDP
4 y" i1 R3 P* r; ^- O;------------------------------------------------------------------------------------------------0 `- g% P9 E* e" h: ~% o: ]
PSP proc near
% c9 x9 d. n' t9 t3 B/ F mov ah,62h
0 B( z% n4 _3 d0 S% N4 I int 21h
: X! M3 k+ e5 ~- U5 N; x* I- X mov es,bx
4 p0 v. K; _: t xor ebx,ebx' a* K9 ?& z1 G* p4 S1 P7 y- E0 Z
mov si,82h$ o/ e; F9 x& Q) Q, E0 u
mov al,es:[si]; @, s5 P( _& N0 C, x) D# ^
call Change8 m" y4 K4 J5 N3 G4 m, |
mov cl,4# U0 Z1 X; {; S% ~! U
shl ebx,cl
" s0 X7 p2 ~+ s; G4 o( [4 ] add ebx,eax5 p r9 Z0 u |
mov al,es:[si+1]+ D$ j& b9 k7 \. \% q* w& x+ C
call Change
: N+ I1 j" \0 w9 G/ t/ ` mov cl,4/ h/ ^( ^! C9 u4 D: L
shl ebx,cl
+ F M C& L/ n add ebx,eax
5 _9 F y0 t' d0 F mov al,es:[si+2]: f1 G/ Q2 V/ p. ^8 V) k
call Change0 s1 s, @. |( A$ Y
mov cl,4: H# D$ Z5 Q$ n# B; p1 b) L
shl ebx,cl
4 |/ G: d) Y# q6 T add ebx,eax
! {! s o) y. Q3 { mov al,es:[si+3]
1 A G. C' K q8 D1 \ call Change
5 E5 z8 E! I* C2 V3 B mov cl,4 p% \6 G/ z N2 G9 @
shl ebx,cl
) C. S( C; d( Y8 R a- L add ebx,eax
# j' q5 B# Q, ]5 ] mov al,es:[si+4]! v& [$ a6 M6 u, I3 ^* j% R
call Change
+ ?" l$ J) ^, X: L2 ]) y) r mov cl,4
' p- C6 C- x, @. n6 T shl ebx,cl
% V0 \% _# C. u. P- k$ X add ebx,eax
* S @& d* B0 j; j a& X: ?' Y mov al,es:[si+5]8 m0 m n9 W S) T9 a
call Change! |4 h' i% i. ?9 `
mov cl,4
8 y" G2 l( [1 a+ W6 j9 m$ {/ p, g shl ebx,cl" G% J* o* a0 i% X6 S" @, J
add ebx,eax
# R7 Z- c$ O. e* s4 H mov al,es:[si+6]% x2 Z2 [" D8 m, A% S% z, u& h* h
call Change
8 p9 b# l4 @9 C9 Z7 B3 s) ] mov cl,4
& n7 k5 o; B5 V5 b( R4 t shl ebx,cl, x& h3 H H# v, A) w
add ebx,eax
; M) A* Z0 K3 q. F+ ]7 F mov al,es:[si+7]
+ O2 W; ?8 G+ K+ x4 _ call Change2 R& a0 v# k( d, z; e4 \
mov cl,4
# O$ Y9 r! O8 j( a4 k" z shl ebx,cl1 c" u" L* z: c6 A! I) B
add ebx,eax
2 ~. y, w+ a' e% k! V ret
/ _ t9 ~1 s1 z9 A& [5 kPSP endp5 ?6 v( v) w2 O& F7 N
;------------------------------------------------------------------------------------------------
]) l6 b; V" j) ^) @. G1 X$ w( Y) LChange proc near/ d1 U$ C. L1 T b& y6 H9 ~. L
A:
) d% P- S2 r! F# x& X9 _ j movzx eax,al9 p% `9 m; J& v
mov edx,eax
! Z0 ^7 h; `3 M1 Q6 _ cmp eax,'0'
) G7 T+ t; m, Q- _+ q3 \- T) o jb A
+ b1 l9 S- C5 D1 T& _2 L7 L5 J cmp eax,'9'
* O# L% S1 U0 l+ N8 j ja B& W* d/ a/ ^ H" O
sub eax,'0'+ D/ U' b2 |7 x( ?" e. P, v. `
jmp short E
6 h4 N/ v( K7 @! gB:
3 n1 l, q4 {4 l: z$ g' U8 t and eax,0dfh 2 J) K( {/ R1 J) c9 D8 K. S9 {
mov edx,eax/ J: U! s+ y0 d7 |
sub eax,37h 8 U0 T6 y& W% t# l: G/ j
cmp eax,0ah, c. j2 f6 }1 s0 n* T; Q+ E$ U. @
jb A , d8 r0 D. \) c0 ^. n. u7 |
cmp eax,0fh6 V: h9 b- N/ u3 J ^) L5 J
ja A & _5 X2 Z8 I; w
E:
' S) ^ u3 g" z0 S push eax . | \! r, J2 {7 L/ T
call PRT m8 P/ j9 q3 `4 V8 x6 ~
pop eax
9 J; _" h" t) L8 ?8 w$ iCExit:- _$ P, a m. i$ ]6 Q: Z) w
ret
" J3 O A" _6 A S: E) E. {5 QChange endp: N$ V% Y" y$ w9 `5 j# A% l
;------------------------------------------------------------------------------------------------. U) P; G4 Z" w" {0 ^
PRT proc near
+ C& y. q: _! ^+ R) b! a mov ah,02h
8 V; q* |$ Q y; b; t% U3 d int 21h
% B" K; O* a: j4 k" l0 N ret) ?$ ?" q, w4 ]; C
PRT endp
9 O; r1 k$ m* u# s/ L- p2 };------------------------------------------------------------------------------------------------9 M7 p1 W( `2 k1 U7 z- A3 U
crlf proc near' O' }' I% q! M; D
mov ah,02h
) z- P, B/ e" J7 T mov dl,0dh4 m2 _9 D! r U& M; x1 \+ U/ c7 Y
int 21h
7 S9 h3 M! t0 x) a* N2 ] mov ah,02h* \" q( Q+ t4 f" E: n( A% B
mov dl,0ah
" L: `4 L7 ^$ R) Y, n0 D int 21h
, O3 D- F5 l0 X7 _ ret, W! [4 n4 w) `
crlf endp
. V& t u# m1 T8 y' x; N! G+ J;------------------------------------------------------------------------------------------------
! |1 v/ D5 d* n* [6 Y7 g_32bits proc near
0 @5 N. q) [" Z8 g pushad" W3 h' F: w4 g0 v1 @8 I/ | X
mov cl,49 Z+ U% i9 m1 E# W4 Q r3 i
rol ebx,cl
! j! V _- M% L* Y call print_4_bits
8 G0 R2 L/ v! e. \ rol ebx,cl3 k$ c/ L5 H/ s
call print_4_bits
4 K8 n% Y& a2 K- ] c+ N rol ebx,cl9 K& K( s* e7 K: G8 K( O
call print_4_bits
% T0 H; c5 P: n3 D3 l5 B5 Q2 E0 H# g rol ebx,cl
4 J+ |- j: C. V; Q call print_4_bits/ t6 z) K4 W& s9 H0 ^: H' d' E2 G
rol ebx,cl
) V* @! ~3 A. z# ~3 S call print_4_bits) m Q/ i, u" a2 d
rol ebx,cl
/ g' i9 L. |+ y) h) b/ L) q call print_4_bits
# }7 s' B8 X4 u& L1 R5 |2 y) z rol ebx,cl
' c; ?! _6 F7 J8 ?4 | call print_4_bits
/ J: ~ `1 T3 r& {/ k3 o' w rol ebx,cl: q8 r* J0 i# Z6 @' v
call print_4_bits
* W, T4 N0 R/ D$ L) B7 A- d rol ebx,cl
2 P6 ]8 D$ J: p0 ~0 e4 m& Q5 r popad
) ~) y* \! W, l2 m! R ret
" c% O+ G3 ^2 Y* T4 i_32bits endp0 b/ P7 V% j8 l$ [" e
;------------------------------------------------------------------------------------------------
0 `9 H+ K& X: `$ B4 o8 h_16bits proc near
8 ~) W M% ?8 H" }" f9 |! F8 j7 p pusha - I# u0 z, E* C7 [
rol bx,cl5 c3 x9 g3 z: ~, C
call print_4_bits$ V ^9 [" P# e8 a& [- a
rol bx,cl A* H% |( m2 b, P2 J- r
call print_4_bits
0 ?& |4 z: m% ^3 j" {5 U0 B rol bx,cl
7 K8 N2 l d ?: V9 s call print_4_bits
9 l+ o1 M0 b- x rol bx,cl
o" N: W+ z9 R6 e0 Y4 M# c call print_4_bits% f4 a0 w' {& B6 [
popa8 n( O# }# W0 w) `! f9 ~
ret
8 c6 z% o2 v" P) O2 w7 Y_16bits endp
. R. ?- P" @- r ]3 |6 e;------------------------------------------------------------------------------------------------5 U7 q1 w7 {! v3 O1 s
_8bits proc near
: Y- i. J4 z! Q8 Z pusha * B* w* Y; p, @) @2 @2 N% z! |- j
rol bx,cl
" B- H( |4 x+ m9 g* i call print_4_bits
- I) [6 k1 C0 V4 o& m" | rol bx,cl+ ] s+ R& d! V; H: K# g& b
call print_4_bits
/ L5 U& D3 { F# [$ v) S7 k8 c1 l popa
. O6 _3 b! J1 b ret
/ m4 [7 w5 I+ R' `_8bits endp( V4 A4 ]4 B% B1 \
;------------------------------------------------------------------------------------------------& E* Q1 c( R0 G$ b/ g
print_4_bits proc near4 p. t6 X' b4 Z, |8 [6 z
mov dx,bx
& B# K, }9 C) w0 L5 I; N+ R and dl,0fh9 X8 K, ?; F6 h. L
add dl,30h
7 p; s: w0 E o' ?+ H cmp dl,3ah* ~) [1 O. ~5 h# U5 p
jb print
2 L3 e7 `( i$ x9 A1 j add dl,7
% g0 o( I9 |1 v2 Bprint: ; b- ]( D" g- ` k+ m& m$ G8 T
mov ah,2: L, u2 p4 g3 v( w- u
int 21h. _% O# r" J8 t! z* c
ret
9 |1 W) u! n0 o& }& U+ {: {print_4_bits endp , f- r' d2 C3 g: ]' s9 v$ \: O
;------------------------------------------------------------------------------------------------) L: k/ Q6 m9 }" G" B
CSEG ends% I0 H8 \" U- l4 G3 N3 u b
END |
|