|
|
各位前輩好,以下的程式為在 big_real_mode 讀取記憶體的值
2 Q$ W; m% C' X) g0 B
; k4 C3 w1 f/ U R例如: C:\memory.exe(程式檔名) 01000100(Address)
6 i1 O0 u* Q. o: I3 a; ^$ r. t* l! t/ O" p4 @3 `6 @
則會顯示01000100位置的值! ?, W/ l" o7 k) j0 P% Y
2 p- ]* x- q( b但是我另外還有要顯示出字串,但是顯示出來都是亂碼
) H" B. d& H5 m) C1 [2 S6 d6 ^$ [' N' o+ r% D3 @# }% M- K7 D
麻煩前輩給我一些指導,謝謝 2 x5 R% K: R3 l/ G) V, i5 N V
5 U1 n- P( U' w* \7 P
* b. M" J* }1 Q1 s! q
.model small
! q) H; c" g4 _& \% A- E.386p
$ {% v/ |+ w; V+ l6 Z$ M t;------------------------------------------------------------------------------------------------. }8 J2 l) F5 b4 N6 O1 a# |! \3 a
DSEG SEGMENT USE16'data'
% U" g, b/ s) k: G
: k T: a+ T6 j7 ^! l* ^. |DESC STRUC
. B$ i% ?4 G( B. D$ j2 M8 U LimitL DW 0 # z9 M: h" C9 X z2 B- g8 r
BaseL DW 0
/ l& K4 B, \4 Y- ^ BaseM DB 0 6 W. i( G$ l: y0 R' r; v
Attributes DB 0
- E1 p" m, G" A; H! c0 G LimitH DB 0
, e9 G: Q, {* }1 d( q; d BaseH DB 0
9 x7 q8 M6 r# WDESC ENDS
& ^3 d8 @+ a5 R% X' l6 _
8 C# A( Z/ R a5 U0 ]) ]PDesc STRUC
4 W& y. J% J$ ]% e Limit DW 0 % E% [! q- Z4 K) t, ~+ l
Base DD 0 8 F- N8 y7 l( u
PDesc ENDS
. r4 V- ~0 _: P# k
6 ~4 y3 w3 W8 ^) {$ D gGDT_def Label Fword2 |- s8 K/ @0 ?& A
Null_Desc DESC < 0h, 0h, 00h, 00h, 000h, 0>
7 c, h, _5 Z4 a* U: U9 oData_Desc DESC < 0FFFFh, 0h, 00h, 92h, 0CFh, 0>
' G; d L' X5 P: rGDT_Addr PDesc <$-GDT_def-1, >
8 r* p' ^2 `# {: Z! ^, `# R5 M
7 }7 X! I/ K& C& f( ?msg1 BYTE 'The Input Address is '4 r/ A) _, [% D8 C
msg2 BYTE 'The Data is:','$'
0 ~! }, }9 _& W3 B' B$ G
/ P V2 ~9 V9 v0 K$ [( NDSEG ENDS( ^: H/ q9 E5 v5 m
4 `% T$ g; X' ^6 d
2 ~8 P8 n2 [' j;------------------------------------------------------------------------------------------------ 9 w8 L2 ]$ | l x0 c
4 I9 L4 I2 i3 w- |3 Q5 LASSUME CS:CSEG,DS SEG$ c2 I8 W+ q; ]. f/ |( Z @1 @8 _
& U! @6 Y2 L3 f7 n" f& Z( ]
CSEG SEGMENT USE16'code'" ~1 }0 R3 ]. [- m8 v3 }& W
" z% W/ ?- w3 M) a; U push ds
; Y% D) O. _+ I( t% J- M( q- W* E push es0 l2 V( u0 m4 s" g
push fs ` J5 Z7 x0 j; E$ D( A$ x9 m3 K" |
push gs
" B0 N; ~5 Q( V- l4 M0 o
+ P$ m% `! q8 o, ~$ f9 U& [: u call big_real_mode
% M9 y @) `% l* n; U, K2 ?+ Y' C( L# I+ {. g% T1 H
0 j8 i n$ [8 K' [, Q; Z |: z1 h
mov edx,OFFSET msg1;' u8 Z7 ~$ z5 n, c6 ~0 j, O* p
mov ah,09h;
& S: j Y! L/ Q. F, o% A3 ~% X- V int 21h;. e+ C [9 V# v# C
mov edx,OFFSET msg2;
# }- w# F$ c6 ~$ g mov ah,09h;
# N! P" U& e: e/ y5 @' A1 t( g# g int 21h;
$ r/ ~, X3 Y) s2 ?1 Z, c' b : N) Y* d5 f0 F k9 f4 f2 {
call PSP
/ M; x: ]: E9 ^" B2 o* ]! k . V0 c4 r' x1 \& Z6 ~( U, S, ?
call crlf
7 M8 c% u J0 h! A6 T. j) F0 O
! h$ J/ e9 _- W mov esi,ebx
5 ~5 o9 z2 a- |8 ~ mov eax,fs:[esi]9 v3 C# K7 x5 K/ X
out 80h,eax, `1 x( `6 ^# W+ l
mov ebx,eax7 D7 A& ?* R0 Q* p6 t
call _8bits
+ N7 {" \/ c! D7 c, I+ q
/ T; C/ d# @" K1 A- [6 ~ call real_mode1 S6 L7 r6 X5 Y: g7 y' M
, ]: N" J3 [7 o- _! `: {
pop gs% h: F8 U- D8 E: H
pop fs
5 D7 P) e' T/ q8 m0 G+ Y& l pop es+ s' y3 [. y5 r# R$ {) p% Z3 \
pop ds
1 N( x0 D3 C; ?1 J+ H0 Q 3 \5 k. V. Z6 r( l- P* Y5 y
.exit
4 m" D5 D& s8 z;------------------------------------------------------------------------------------------------
3 b0 M$ Q% \2 F7 ^6 ]+ R9 Y+ vbig_real_mode proc near" A& w0 j' y5 {1 @
in al, 92h, G5 |0 p( P7 g- P9 _) q
or al, 002
1 s* p! S# w" { out 092h, al
' G1 w6 _: X3 n out 0edh, al
$ T/ B0 `; f' g" A* S cli, D( j9 x; `" i, ?" R; f3 u
mov eax,DSEG$ u, X/ ~* m6 \' T- e, E; R, M
shl eax, 47 I F, H& [9 i$ A& J: U3 Y
xor ebx, ebx
v5 h+ \% T' y) w$ E( F mov ebx, offset GDT_def, K6 @8 D/ h! k. h ?$ j
add eax, ebx4 |' i, D1 k" I# |4 o
mov dword ptr GDT_Addr.Base, eax
: _& p, s/ R) y6 ?3 E4 f" [/ k: c lgdt fword ptr GDT_Addr
+ F* N6 D5 t9 q$ @8 R. @ mov bx, 87 `* [' y$ k: x1 w$ t2 b9 _
mov eax, cr0
. D) E, @/ U7 Q/ m g* S or al, 1# [8 t7 |3 n, j) c2 p
mov cr0, eax
4 J7 o1 }% K% V' T6 a jmp PMod
! b3 x1 L. r% wPMod:
9 {8 L. |7 x( U6 d9 M mov fs, bx$ K/ J2 O: C3 }% @/ o% ]( `9 c( C
mov gs, bx
3 Q: S6 F' I: n3 o$ S, @' L mov eax,cr0: f$ u2 F. G+ o- r% } t& I' f
and al, 0FEh
. g( E5 g l0 x: L* f! b6 C mov cr0, eax # F1 |! p! j" p
jmp RMod
- Y/ t4 g' P* F, l: M/ W: n1 iRMod:8 s% D$ i; F c! ]5 e
xor ax, ax* C7 L% T% m4 M1 }4 K
mov fs, ax9 k" M# v$ Q% n; t$ j- ]
mov gs, ax4 V% z7 k( x! H u" V# A
8 s' n0 j6 H ~& A5 c sti7 v3 U3 k- \2 g: _* { @
X. C/ C% ~6 N* x ret' |0 A# \& K, s
big_real_mode ENDP! @$ I+ \# m7 u, v) S* x, l2 d9 ` Q
;------------------------------------------------------------------------------------------------ J" R5 [) Y: S4 ]* r1 Q( j. U
real_mode proc near$ I$ I5 G3 n8 f
in al, 92h
9 |/ C D. j* p and al, 02
7 v. D$ i2 T9 R& U, { out 92h, al
; X, V7 H/ ^+ q- `) ?$ ^2 X ret) x* ]! ^* S8 C0 `0 d. z
real_mode ENDP8 S4 _; _& j/ `
;------------------------------------------------------------------------------------------------% Q( c8 @) o' g
Get_Commandtail PROC near
8 h: T" X8 r5 H: r) ~. W% B2 B push es 4 Q& f3 o3 X# H- @9 n% _) M7 _7 K
pusha
' b6 h ?, B9 s3 C% |: q3 f+ F# a mov ah,62h * a4 i2 J7 C* y% ~- W% P
int 21h
# {3 Q3 N3 e: ] mov es,bx
]! s8 L9 \! V8 V3 ] popa
& ` [/ t0 j+ b! [& A6 Y4 k pop es
5 e& U5 V* A" M; m# Y6 A ret
% ~: ?- W: X! e1 H" k4 b& L9 qGet_Commandtail ENDP
9 T8 J; [$ J+ U* B;------------------------------------------------------------------------------------------------
, B& W1 k# H. p0 {& W f$ T' }# [PSP proc near# U+ V" x% Q p% E) E
mov ah,62h
4 ], ^0 C6 R' ~8 C2 G. Z9 S0 r( Q int 21h
2 x# m. g8 W& S- h8 V mov es,bx 0 J! |! A/ |) v6 ?* ?
xor ebx,ebx
' O6 x- @" @6 p& M mov si,82h
/ ~% g+ l+ D/ @2 b' ~9 O mov al,es:[si]
# w+ S! W# O0 E' Y call Change
`2 T0 o' }# {' T* G! |9 v8 T mov cl,4
, @( n1 J3 |& u- \2 A& I, u" ~1 Q! B shl ebx,cl
* r2 t5 U; A+ w3 n- g5 R& j add ebx,eax
; @/ g+ q/ C, d- u# j; @ mov al,es:[si+1]% _0 x% Y6 G$ u0 J
call Change
. \4 H* U3 j) b# i mov cl,4
7 F, } P' x, w% h shl ebx,cl
9 j7 O! C# o3 u" ~ add ebx,eax* a( S3 R' K8 a, x3 \! | T, R! b
mov al,es:[si+2]
T1 {) \+ B- G( D) R call Change' A8 O+ c9 `3 E! d
mov cl,4/ M1 S8 Y( ^6 U
shl ebx,cl- E( l' E+ L7 f/ n- O! l& `7 t
add ebx,eax
' ?( a) n8 c b mov al,es:[si+3]
9 P3 m) q" f$ s, J call Change1 O$ j/ }# [' [8 B& e# k) [
mov cl,4! q: u, {4 s6 C( E- X7 o- z5 x+ R! T
shl ebx,cl) ]& y% Z+ g5 E9 \: Q; D2 L
add ebx,eax
2 |2 B( z4 @1 {0 b) s# l) z) P9 S mov al,es:[si+4]
/ d9 g# N' d k H( w8 x8 M call Change
/ ^, E( l/ @" u3 E+ _0 B5 e3 L! ^ T mov cl,44 H! D4 u3 I7 r5 U3 W
shl ebx,cl% X h+ ?0 ]/ e9 h! w
add ebx,eax D: }! |( X1 J6 J6 Y* g
mov al,es:[si+5]% Y! k* V. {0 `
call Change- x) W. [6 b. x% F6 e
mov cl,42 ?4 F: T3 e; |- B- n5 i5 [
shl ebx,cl' l" t$ R! ?) }" E9 c
add ebx,eax, A) E$ u# }2 I- R" @6 P
mov al,es:[si+6]* u/ P* q/ C" x
call Change3 O5 F' m! A) g4 }/ c. h; V! V
mov cl,4! `, N% u. s# t/ P, n
shl ebx,cl
: t4 s5 |* g; L4 H1 O3 G& [ add ebx,eax; B* L7 \) p9 x9 p% _ u1 x
mov al,es:[si+7]. V$ ~+ v' ~$ z
call Change0 r: _( |. G9 p( R2 M
mov cl,4* [1 m$ B$ A+ U" ]5 Z
shl ebx,cl
! h) Z/ Z: E7 q8 E. w2 m add ebx,eax: l) y B( f0 |2 _
ret
4 t' \' ^' l$ QPSP endp- C4 [. j3 w3 z3 B
;------------------------------------------------------------------------------------------------
* ?8 W7 \- j C* gChange proc near
5 Z! `' r' G0 T( l e) I! FA: : W+ a8 O! O+ {9 X
movzx eax,al) u2 D0 o5 _8 Q* N3 S \% b6 a- O
mov edx,eax5 m$ f4 [( e& E8 J
cmp eax,'0' 0 z, {2 D& |& X; w
jb A* v5 _1 `2 |% E
cmp eax,'9'
+ Q8 I" M6 [! Z3 j5 n ja B: ?4 n5 j! \8 Y7 j9 q' a, M
sub eax,'0'
$ ^1 Q! I( j7 I jmp short E
2 N: M$ C; v% I1 q# K* ?6 uB:5 U5 A' E* J( C$ c0 B* ~
and eax,0dfh
; |2 q: I; J, [ mov edx,eax
$ A" j/ n- Y5 ?* V0 ~ sub eax,37h , M4 ?5 v" k6 V7 Z. Z) U2 A G
cmp eax,0ah
: E& L, I( s/ @- P' a8 k2 }$ ] jb A 9 x; v2 I# s8 r5 g) t
cmp eax,0fh4 _8 M9 l# H s
ja A
3 T x( {1 O) |5 ?8 Z; z vE:# T' C. ~: G; H2 R9 x
push eax * K% q8 z7 A: k: I
call PRT
5 q( B0 m. L! L+ B- P pop eax
( W% D" R8 k( P* v6 _CExit:* D9 w' n; c- c% R
ret
5 L( n2 d9 `4 Q1 [+ J! ZChange endp) c# j8 u2 k b) P9 G
;------------------------------------------------------------------------------------------------
0 ]0 A% Y S/ B3 K/ Q" Z8 C* T, PPRT proc near# _. L, Y' V+ _' N- T/ U
mov ah,02h
" E8 ~: | f3 x8 i3 Z6 v int 21h) {5 K5 K0 I/ Z4 n
ret; b3 _7 \' u2 g
PRT endp' s0 d; N/ b! l) B7 p
;------------------------------------------------------------------------------------------------) H/ {1 W9 m2 o
crlf proc near0 H: ]4 L7 b- \8 e( {
mov ah,02h8 N1 S4 J: Y8 Q4 s
mov dl,0dh: i* G2 i1 m* X' Y, N6 P7 K. \
int 21h
% i, o, T: H. |3 _ mov ah,02h
/ L" l& j% r$ s mov dl,0ah6 d1 u8 N+ o8 X* Z# j! l
int 21h
, I1 O0 m- C" p$ X) A: N ret
1 }8 b0 T" b4 G$ I( w" a+ Pcrlf endp
4 j% j' q4 F! \) \% k+ _$ I3 b+ M;------------------------------------------------------------------------------------------------
, A9 ^5 p) Z( ~/ ^' I" ~: O. G6 __32bits proc near
6 O8 N3 j& d" D( u pushad
1 {, H4 z( h! M" J8 m$ O mov cl,4
& T; z8 P: H \! a/ C# d rol ebx,cl
$ s( o" {% Z+ v' L call print_4_bits1 Y: C$ S; Q' Z, `; k V2 \
rol ebx,cl: @( G2 d8 ~+ e$ D/ }0 Z* W( O
call print_4_bits
; r. X4 e5 }+ J; M2 c rol ebx,cl. h& Q# S$ ~" L" v
call print_4_bits% e5 i- |+ e, b% V* o
rol ebx,cl/ A* _( s; q8 K5 s" m* G9 M% n# l
call print_4_bits* i, M! z: c2 U' @; p1 O
rol ebx,cl! F5 f( Q/ b0 b7 l" v% ~0 L
call print_4_bits
, h- J* p9 k- Y! s rol ebx,cl4 z, p! ~9 G% w/ L1 N
call print_4_bits6 x0 f! h6 P5 h
rol ebx,cl
9 j3 y2 w3 c* t' T# m call print_4_bits$ ]2 z% L! r9 v# s$ Z
rol ebx,cl
* T, M% m. c( W, Q5 a/ b call print_4_bits3 C/ h( l' a: i4 j d
rol ebx,cl; x; t6 r1 j' g' r
popad, E" h$ d9 v) @( V* c- c* p
ret
& b0 c0 c* b6 P( Q7 C6 T_32bits endp
9 ^: Q, ?' _ T$ H1 t;------------------------------------------------------------------------------------------------/ C: M; z; h7 h( x
_16bits proc near
. S) X# }/ L( u pusha * \9 U* |: f4 e6 B2 \
rol bx,cl
/ A3 W3 ~4 X( |' V call print_4_bits( ?' C4 { N }% g8 C9 Y
rol bx,cl9 ^& H/ [( i. x9 H
call print_4_bits
- T' S; T' e: Q3 W) L; y8 R rol bx,cl
/ h" X& _, J" ]& ~5 I2 u1 j% h call print_4_bits; _% r7 r, f. ^ y, D6 i3 H
rol bx,cl% ]2 D$ ^% o; S) `9 ?7 V4 c
call print_4_bits$ ^. x6 ~3 ~* ^5 `4 E8 }: C1 j4 A
popa
/ x! j1 u* Q4 W) W4 G ret8 u3 r2 A+ T: G* F2 i
_16bits endp
0 @: _' Z+ _) T: P( m;------------------------------------------------------------------------------------------------$ q \+ s5 T* ?% N
_8bits proc near" F+ s* a5 ~& l* s2 T F- x
pusha 8 ?9 C1 v9 s d/ A2 O+ M) _
rol bx,cl3 s% s2 ~" r @4 N% u! C
call print_4_bits6 }7 {/ j) h2 r
rol bx,cl
2 t$ M& c' Q1 H4 s j call print_4_bits
8 S; x/ z& }( G d+ S2 N popa+ b+ I6 S. m. L% @( ^
ret$ r9 j7 b4 g4 J
_8bits endp
4 ~" _* y4 b+ l" ~" d;------------------------------------------------------------------------------------------------
4 l- c! j9 j a; _print_4_bits proc near' D- t' ~' T, E, u$ @6 _
mov dx,bx- J1 A5 E o- m8 Z
and dl,0fh
6 N! ^+ G1 O* I* H. D1 w% ^: P2 ^9 k/ X add dl,30h
$ Z' k9 k! P, r/ A+ H4 R( g' @ cmp dl,3ah- `; y4 @0 R) T, D3 N1 ?" M/ X
jb print
( y, n5 ]2 k& r( G: H; m4 }: f add dl,76 ?! S* ^$ v8 J! j
print:
' j: M( X2 Y0 e mov ah,2
. b8 i/ j0 S( O- |9 E( T/ P9 x int 21h2 T ?2 y7 |9 w4 [' y$ ]$ T% _
ret
. v8 u+ @) p8 k. m' aprint_4_bits endp
& o9 g% g8 T$ s2 [* N( n5 h;------------------------------------------------------------------------------------------------+ y5 G8 B. z+ p6 e, {
CSEG ends
, ]( Y2 h. b$ t9 o: \/ aEND |
|