|
各位前輩好,以下的程式為在 big_real_mode 讀取記憶體的值
0 g& }$ [+ P9 \, f
5 L# H/ X T( A3 y- q# E例如: C:\memory.exe(程式檔名) 01000100(Address). @) ^+ ^9 q' v! {3 L! a. V
* t7 \6 c l) l. b U& ~! c3 F" c
則會顯示01000100位置的值# T: B9 J2 ]# |! o* O' }
7 \+ c4 r1 t' `4 {7 w: O
但是我另外還有要顯示出字串,但是顯示出來都是亂碼$ G- M( y" B" s* \
6 _% b# C1 S* H( G' T0 M; n麻煩前輩給我一些指導,謝謝 5 U) x( r- X$ F/ H m9 Q
4 N, r \& y* ~% d5 a
$ n( z4 i& }3 B; S+ O
.model small
% O5 w. R R; f. W) X2 }.386p0 L9 u3 g- g( c2 b
;------------------------------------------------------------------------------------------------9 h& M2 X% C6 _! A
DSEG SEGMENT USE16'data'
k/ @3 V) E3 N! [( X' B( A) d* u6 i* d: x% k
DESC STRUC
8 y8 z; _6 v3 V; a4 @! S3 ~+ U2 W LimitL DW 0
1 Y( v' ^. N, W% s. T: A% {2 e BaseL DW 0 % h x$ B7 ^' [& n
BaseM DB 0 9 a7 O3 m. p2 [5 d6 K ~& ^
Attributes DB 0
" y7 c3 O$ o8 C& b; t9 g" Z LimitH DB 0 7 k K4 L$ `+ L8 u
BaseH DB 0 7 d* W2 \' K& }' z) B: p
DESC ENDS
I- y' ?6 T; w8 R$ w' l8 e1 o
" @9 k( @+ z i% d3 w& Y/ b5 \PDesc STRUC- L* b$ `9 V |: C
Limit DW 0
4 H9 g2 K2 [* ~4 I, \1 @9 \8 ]* t Base DD 0 3 \) J) y) l# h; P0 e, V: G
PDesc ENDS
3 a' v; [0 Y' E3 t/ R# k/ P3 s v) \1 d6 G: X" ]7 A3 b
GDT_def Label Fword
1 u5 T4 G d% R. f# \- V% ?Null_Desc DESC < 0h, 0h, 00h, 00h, 000h, 0>( u3 G: ~! S) ^$ J1 S8 C
Data_Desc DESC < 0FFFFh, 0h, 00h, 92h, 0CFh, 0>
3 ^' m& N% x) k8 {, z2 z; c. OGDT_Addr PDesc <$-GDT_def-1, >
8 T/ p6 U% p8 C: J$ ]/ ]8 X1 c4 k
7 }" Z6 h) i0 O& q% Nmsg1 BYTE 'The Input Address is '
s: |: T" q/ d0 C U! T$ ymsg2 BYTE 'The Data is:','$'+ x+ P( q& r6 ]2 k& ~. i
, B" J6 { R7 n2 GDSEG ENDS7 ?( ~) w" X) I) T
z+ M$ V+ I$ k$ f
, y3 p* j0 I0 m: };------------------------------------------------------------------------------------------------
# J( \6 c! L* N0 _0 ^) X7 ?9 A, P. g2 x1 ^
ASSUME CS:CSEG,DS SEG
1 f8 e2 ~& p5 }( Q! R1 j2 t* G$ E, L, K6 j; e
CSEG SEGMENT USE16'code'
+ q7 F2 U5 k" I W+ V
, a6 }' J% w, ]7 } push ds; j9 u, n! g* t0 c5 p
push es
3 O k2 M( T* G9 W+ P push fs5 w: X* j. e5 l4 d/ Z6 |- E1 w
push gs. Z% k8 g4 m1 e8 V' {# p$ ~; q
3 y0 r( y; v! [6 M
call big_real_mode! N3 b) `2 E5 n
6 V; e) a4 X* R/ Z" X9 r/ J
- c/ [( `# p- ]/ Q0 Y6 U5 s mov edx,OFFSET msg1;
. e6 H; J+ ^- {2 m$ }" w# Z mov ah,09h;
( L1 x6 V, p3 @% D# k& G int 21h;
+ I3 Y+ r' L& m* J- n7 S$ u mov edx,OFFSET msg2; B# k" F6 H% ] @
mov ah,09h;1 T# _; m* }5 ?/ P& h) e! ]
int 21h;( l$ T; u, ?5 P' O; a
" _$ T4 A p7 x% ^- X8 X; q call PSP 7 E$ Y/ Q2 w* N1 k+ T# t1 ], h+ \
" f& g! H3 m, V) k' X3 Y9 @! m G7 Y3 _1 e
call crlf 0 U' k' k' T% m5 d3 U
' M# O2 T% [+ k1 H/ U4 Q mov esi,ebx9 |5 M) D% x b' J3 a) P, Q6 D
mov eax,fs:[esi]
E5 M1 _6 F; r1 B" q, x) t% p# v4 J out 80h,eax" L- ^9 M( ^" l. ~4 \' x0 {) O
mov ebx,eax
9 Y0 y5 J& v/ y, s# Z# Y& ^ call _8bits
2 @9 b) @6 O$ w* o: o. V+ [
/ \* A! m; l' z' f& L call real_mode
2 U/ Q; q% f$ R: S% T) R( q0 \( x# l# U
2 Q+ [7 w& o; m) L pop gs
( p- O3 Q2 t- l pop fs
, I$ ^. h( }6 \+ |& I. Q5 z5 n pop es
1 k6 `+ p* i% R: |( D pop ds+ Y/ y- \; k/ J5 \2 I. U% `% P" I
4 g1 h |; I7 f! f& d$ A8 I3 Q) ]
.exit+ n# B; R- ? p
;------------------------------------------------------------------------------------------------
# H: f: M' o: s8 ~2 U, m; ]big_real_mode proc near' H6 j6 W; E7 K( a
in al, 92h
8 \8 M, E: j" _: S0 \2 N2 s or al, 002$ G c* t9 `6 V% ^/ n K ?# X
out 092h, al0 C' l9 W) Z- M4 H/ e% A, T0 Q) Q
out 0edh, al; T* G0 `8 ^2 C' q+ M! U9 x
cli; r" b' O j- ~$ j4 W* n. g; w
mov eax,DSEG
* H T7 f+ r$ A5 I$ [( s; e5 ?& k shl eax, 43 K s, R& T# s
xor ebx, ebx
Y& z& u0 Z" b; Z mov ebx, offset GDT_def
: @/ a; ?% @6 { m4 U& U( h add eax, ebx
6 d' \9 w2 e+ B( C- C E5 ? mov dword ptr GDT_Addr.Base, eax
; @2 d% K; Z: z* D% C lgdt fword ptr GDT_Addr5 u' J" R, B7 u, v
mov bx, 8* M4 m. q/ f3 j4 ]; W
mov eax, cr0( u' L8 [4 b. [9 K y, S l! i
or al, 1
3 }0 Q9 a* W) z7 n mov cr0, eax' H M% _" T; ]
jmp PMod
' o% m. }. B% C1 ] P1 {9 U& iPMod:
. d% C, I; {& @3 z( y% i9 l' O mov fs, bx1 ]$ A8 A0 k' a0 E# E$ n- P' s! U( k
mov gs, bx
! K% D& D, o- [$ m5 O$ @ mov eax,cr0
: F+ A" ]( N% j) D3 }% a r and al, 0FEh
/ S" @: q! H5 k mov cr0, eax 9 t0 z: `) ^3 ~" N, A- F% @) I% f
jmp RMod+ |& A/ A6 _% }1 k' o2 W
RMod:
- f; h/ p9 K+ Y# R. Y5 ^ d xor ax, ax, a6 Y4 O# M4 ?8 i$ y- P
mov fs, ax6 G3 n' O, U7 T/ I2 u
mov gs, ax
2 I. e7 [, [! S2 Y3 k ( P- A- W0 t8 E- v7 o
sti
; [* d3 d- B7 j! }, h
2 l+ Z+ n3 F/ G; R; I ret
( [1 e3 q% [+ jbig_real_mode ENDP+ j( k3 ]7 p0 y- f2 s
;------------------------------------------------------------------------------------------------8 C& E% l4 z$ @- I8 p- K
real_mode proc near
$ i6 C& v0 Q" ]7 O/ w5 ` in al, 92h
& }1 r6 a8 v- v$ E6 P5 Q6 O and al, 024 H/ }* n% b/ S/ r+ t" i" m8 |
out 92h, al 5 X6 |0 ]+ m# b2 R6 Q3 c* T
ret
( @& \; X/ _" l7 Y3 f preal_mode ENDP# R3 V3 ^7 u) B/ ^5 h
;------------------------------------------------------------------------------------------------- M# Y, w9 [5 o* J# w$ {
Get_Commandtail PROC near& X: c \9 k: B1 X. d* l4 h9 r
push es
# A6 \. B A7 J0 u pusha
9 }; s' x8 v% ^. D6 K mov ah,62h : j5 m* B9 I3 W/ v Z4 V. z2 a8 Z) w" [
int 21h
$ i, u1 H$ L4 w2 { K mov es,bx
" t& w/ U* ?8 f2 g& X: F popa
i* K& I1 O+ N# @, ?' T ^) n/ q8 t$ y pop es
9 {3 U3 w! X, J7 x, D* i. Q ret
7 E0 y1 s0 \( `( f! y; k7 t& YGet_Commandtail ENDP
+ b4 D# M1 ^" {" G: i# ~1 U;------------------------------------------------------------------------------------------------
9 X1 i4 }. h* P' XPSP proc near
/ A' g2 p M, R+ ]5 j$ y# A) C mov ah,62h
$ y4 o5 n+ X; m int 21h
; \5 U( T4 S# C( G7 d1 U, P/ X mov es,bx 3 s0 ]; F% W3 W" M! _) g) R
xor ebx,ebx
P8 Q% i% @/ M9 G, ^! a% r/ y mov si,82h
2 E9 B s+ M" H @ mov al,es:[si]
3 z: t+ F$ M V9 C& F call Change" W* r- q' t8 F% m2 M" s
mov cl,4
. B) a1 O+ M' A! v1 j* O& M0 t shl ebx,cl4 w0 K6 Q& c6 O8 l0 o
add ebx,eax
$ S* m% a$ o6 k/ ]1 k1 l4 p mov al,es:[si+1], w# S! J. b, k/ O
call Change1 P" h) @' @7 i q) I' S
mov cl,4" @/ B t/ {# K' s6 n) q
shl ebx,cl3 B) V% E( e5 r/ L6 Y6 ?+ ~! X2 t
add ebx,eax
1 D; Y& P, e! b6 I6 z' W8 x mov al,es:[si+2]
Q, k& S" j# a" W, v- _" _ call Change
( w, }# M3 |7 z3 F mov cl,4
4 T6 Q8 t5 K& \8 V' b shl ebx,cl0 @/ r0 ~8 `' a$ H: g) ^
add ebx,eax
( M% _! ^! w5 ]5 e* L) s mov al,es:[si+3]6 R8 Q, i4 }% E7 c: I7 N) n
call Change! O8 J' h0 l" \- m( c8 c0 f4 }
mov cl,45 w5 r3 r' N; t
shl ebx,cl
: Z# a+ R4 _' ?+ K) [ add ebx,eax) {6 j A* z: |" S# m; q
mov al,es:[si+4]- ` e+ c' Q$ s' {( b2 K
call Change, z- p7 [' z* m6 c
mov cl,4
6 ]+ P5 J$ ?1 W shl ebx,cl s7 y. @7 B: p3 D! K' t# b1 P
add ebx,eax3 b) T( I6 B; |% u1 {$ o
mov al,es:[si+5]
% b/ h9 E8 T* `7 E* ]) k+ [ call Change# f/ i. T' n: Q; j* {
mov cl,4
" R% Y4 Q6 R$ v7 U5 g. {* a9 q* z) K shl ebx,cl, O1 E: |* P! X
add ebx,eax
& r8 S, H7 O8 u; d: } mov al,es:[si+6]
/ v5 T6 z+ l* k8 x9 u% l8 k' V call Change$ \) t, I3 K" d( J9 ~1 l
mov cl,47 z" D! l4 C, J: j1 U
shl ebx,cl7 _/ M& h, g& ^
add ebx,eax& z: Y; S4 f h/ Q
mov al,es:[si+7]
+ K% E% T! s/ r! s call Change+ U$ \: l: w' x
mov cl,4
. m" O+ i5 i# P; M shl ebx,cl: x& E, S& V$ h, t
add ebx,eax
6 R3 ?! [1 Z H+ { ret
1 z# w5 g! j2 v2 L4 S9 IPSP endp9 e4 ` g0 y! T8 U: q: R) j+ B
;------------------------------------------------------------------------------------------------
/ ?$ |' x% E v) _) ^ s4 AChange proc near" F! B: e, a$ D7 G
A: 6 ~; _/ m0 W2 {
movzx eax,al
( x' e/ @& R# c mov edx,eax% X; h% f0 X" A: P+ \" l
cmp eax,'0'
: G5 V0 M& H" ?% E2 T6 ` jb A$ Y6 \) P8 m0 ]9 s# X- z; A
cmp eax,'9' $ v. y; f- l2 W6 X' a
ja B
6 J i, [! }/ [7 E: Q4 [2 w sub eax,'0'
" }5 q3 z# |( ~# @ jmp short E
8 h% a* h9 D+ r/ T8 ^) U P8 V4 x; y' EB:
5 @* [4 n! d# V9 U and eax,0dfh 5 h+ k9 j2 W6 y2 N6 @6 m/ ]& @
mov edx,eax
# x& q: Y& d* o/ M& w sub eax,37h
0 R7 ~4 v8 `5 B' y/ N cmp eax,0ah& C9 b2 Q8 C3 c# b3 r$ l& u
jb A / r' Q, U$ T+ I$ N' z, s
cmp eax,0fh
* p, P! y+ T9 i" ~4 P ja A
& k, z0 @% k( [! W+ L1 UE:
' H: d4 s: Y. s push eax ) J) U3 Y/ E; ?/ a6 o' g% s
call PRT
5 y+ `5 d3 X. E; m# f7 @ pop eax
( f' S5 c0 {5 w0 M F1 xCExit:
# |) n* [ O5 J( J, F ret' n8 p7 o* M1 v6 M- f0 f4 s
Change endp# N+ N! A+ K1 Y1 v- h
;------------------------------------------------------------------------------------------------( j( o: g. t/ ^% O$ ~# Y5 {
PRT proc near
. v2 G9 H" j( A' q7 W5 Z/ i7 g mov ah,02h
6 k/ e Y, r+ b: l int 21h
- ?: N' F5 q) z m9 p9 }( h$ F( H4 S ret
; w: n5 s0 f7 H3 IPRT endp* j$ i9 T; n. h: y1 x i
;------------------------------------------------------------------------------------------------
1 o5 q5 Y/ n: I+ z3 X+ zcrlf proc near
8 J- U( l- o2 I1 Q- @1 @ mov ah,02h# B! t" M; {9 s* W! {
mov dl,0dh7 O: Y+ U: }" f4 J5 A: S: L
int 21h5 l$ h- B' _) t" a/ X e
mov ah,02h
9 M# s5 x' Z; V! Y& I H mov dl,0ah( M8 Q A6 [* p- ^# ~ a V, ?
int 21h
& c& k/ R1 R! a2 l8 l ret
' b) h# g$ l2 B: E( `crlf endp0 u3 O9 I( l2 u( h) Z% w; H
;------------------------------------------------------------------------------------------------0 k" w" V) \$ L' s( }: N' y, E; \
_32bits proc near6 ?/ V) V! c! ~
pushad
7 y! U9 k/ d" ^4 m; @ mov cl,4
: R0 m8 s4 Q- X c( r, ]" i3 K rol ebx,cl
9 P: x6 a" b% d9 E# k" v call print_4_bits( l& ?% Y; c, N8 x0 K9 J# n# b
rol ebx,cl+ G. z, d }6 M
call print_4_bits
; A0 e4 Y5 p4 x" l+ b) n rol ebx,cl! A$ k7 m4 s- f- b$ ?; ?- O
call print_4_bits
1 X' [4 o( U ~4 K rol ebx,cl( ~ }* D) j9 q) Q7 K& {5 f
call print_4_bits
- R0 w' q) A9 `( t% O7 p: G rol ebx,cl" Z) a2 @% P- o
call print_4_bits
, y: i1 j# o' k- J rol ebx,cl
, V+ M; w" C, s% n. x call print_4_bits
, x2 g2 K3 Z! ?; L9 M+ M rol ebx,cl
/ g! K* y, X- W2 q) Y call print_4_bits) [" U) Q# r' x, b
rol ebx,cl
. _( Q1 I% a, S: J/ g2 \7 ^ call print_4_bits
4 C8 \2 w) A5 _. R5 z, Z1 @* H$ X1 T rol ebx,cl
- l# w& n: J6 ]' s! F$ I8 W3 h4 k; i popad
6 y( _+ Q1 C# F l' H/ A ret9 n# ]$ Z/ F1 R' t: [, O
_32bits endp" \4 J r$ |" J1 X' k
;------------------------------------------------------------------------------------------------* z7 C8 F& V) W+ l3 z8 y9 d. p
_16bits proc near6 D `, \* r. Q& ~
pusha ) V1 `6 X" p: D) c9 y
rol bx,cl
0 i. {! Y1 z+ Q call print_4_bits$ j4 X7 v! N3 ~1 ?. Z- O9 @) Y" a7 w W5 F
rol bx,cl
- f/ c, A4 y) d- n o8 \ call print_4_bits
k% U5 o6 C& ]; h; s9 c rol bx,cl
6 T4 R1 W* a8 p: }& {+ w' Z, y call print_4_bits: e$ q2 |0 ^8 R
rol bx,cl
$ H3 [8 K( F- ]! A) ? call print_4_bits2 k- d" a+ D+ T; O0 ~: V. M
popa
, n/ T+ @7 }% ]7 u2 G0 U8 i ret
/ _' I* o. L6 Y& {: ?_16bits endp1 Q2 m5 ~ w5 J% l- [' M. y
;------------------------------------------------------------------------------------------------$ P: m8 s R5 t# h. {4 m2 ?
_8bits proc near
& p! T: T+ F% H- L/ j2 U; }' b pusha
& i3 k$ n2 J* q( P. O rol bx,cl
. S8 X2 `' Y0 U! C call print_4_bits
7 {. z- P/ M3 H9 G7 H/ ^9 e" B rol bx,cl/ }2 ]5 x5 M1 ~+ c' h( L! m [
call print_4_bits+ n) o2 u" e' d$ _4 n
popa
& E' [6 f @1 L4 k$ r- k1 n ret
6 Y$ x" [, K: C) S( l5 O5 o/ e_8bits endp
3 m# q/ m6 |5 l;------------------------------------------------------------------------------------------------# a5 V1 l+ c: |/ @& a [: K+ J
print_4_bits proc near, D+ ~$ ^$ z# A# L% t- h: b1 S( l( z
mov dx,bx( a2 b+ x1 C& Y- y$ {5 ^3 x
and dl,0fh' ?4 |; }; q- g5 |5 C/ x
add dl,30h
& L* a Q: q2 `! H' M$ L A* P cmp dl,3ah
& x7 [: [1 S( O1 s jb print* o% n: H9 @' {8 H) V! I @
add dl,7
- N j9 N- [/ w& D+ w! c8 P! ^/ Tprint: 6 G3 j- }3 s7 |
mov ah,2
& Z9 [4 u9 e0 X. I' K int 21h
# |# ^! Z! l9 Y8 W/ X* e9 N0 ] ret7 n$ R* e( f) l) N D
print_4_bits endp
+ j9 ^6 L" \" ^( o1 `9 y; a3 P( Z. R;------------------------------------------------------------------------------------------------
+ `4 P- r! q6 A& kCSEG ends$ V$ y. L7 [/ u) [6 s' h! Y% W
END |
|