|
各位前輩好,以下的程式為在 big_real_mode 讀取記憶體的值
) b3 ]2 t2 g! J% K' X; j" W9 V9 N9 c: B! M. ]7 j) s
例如: C:\memory.exe(程式檔名) 01000100(Address)
# I* N6 J$ t; u) a2 o
/ v" q% h* ?4 [: ^. [+ K& s則會顯示01000100位置的值; x g+ N! K1 b2 V6 F z
/ _# f9 h4 [9 W. P
但是我另外還有要顯示出字串,但是顯示出來都是亂碼
* y4 k/ s- y/ X* ~. T
4 x2 F; C$ H N% m ~7 K0 P4 }: u; n麻煩前輩給我一些指導,謝謝 , l( t5 T* S7 G i5 D% z3 [! o
4 V5 h i: `1 _" Y
$ [! {# O, G1 p0 M2 F4 Q+ i.model small
6 ]; K6 h* D |" q) A' k) O' q5 f4 c.386p
7 Q6 w" S# k2 m5 F- U;------------------------------------------------------------------------------------------------1 i4 q3 c S6 T( r* F7 }5 ^6 O
DSEG SEGMENT USE16'data'
6 e$ P- A, F' r8 u4 x8 C8 t
/ Z9 V+ L; B. L @& @DESC STRUC9 j( n; v+ Q5 K6 `( ^2 n H
LimitL DW 0 " o7 {$ p8 b7 l1 \$ d1 G! U
BaseL DW 0 8 @) G3 Z) ~, q5 n
BaseM DB 0 * A7 {' } C! {; q) d0 d7 N6 Y3 |
Attributes DB 0 7 l1 b4 w5 R" L7 ~# ]$ f( W
LimitH DB 0
0 L: K- R" \4 v" T x7 w- G: P BaseH DB 0
( l5 `( m% A6 w2 |DESC ENDS
# W* |8 d* N7 h6 d6 ~# X
2 }. h) ^. z8 b4 j6 yPDesc STRUC, h$ A& k) o9 \
Limit DW 0
5 u+ k5 G0 Q! c6 s7 ?' g" z" Y: k/ F Base DD 0
8 ^: ]- t" w, mPDesc ENDS a2 f5 D! @" l2 o% \
( W) s/ y; z% H4 @; I6 i+ ?GDT_def Label Fword" p" `& {7 _& ~
Null_Desc DESC < 0h, 0h, 00h, 00h, 000h, 0>& ^5 h+ l8 w5 c. I' J$ @
Data_Desc DESC < 0FFFFh, 0h, 00h, 92h, 0CFh, 0>2 J4 i: x" |0 u
GDT_Addr PDesc <$-GDT_def-1, > q& M# X, l# e5 [& e$ X1 L& F
6 u3 u9 o7 B# Q: I
msg1 BYTE 'The Input Address is '
, R% Y+ O6 i% P: x e$ s* ]msg2 BYTE 'The Data is:','$'
4 z4 p* ?( Z* q& C8 i" Z! U5 s! A3 G: E4 X& |
DSEG ENDS
0 j. J4 p L8 S: F' z# R6 k# g* ]* ^* k- s$ z+ x2 J& p' |
: y- A# j- e8 {: O0 J* ?6 w;------------------------------------------------------------------------------------------------ * y" e2 P3 c3 f H0 w# y% r' H
+ v$ |; {# k' m' WASSUME CS:CSEG,DS SEG
}( B' G W I5 t, G& H* b
8 u( b- f3 k" vCSEG SEGMENT USE16'code'
8 ~4 W: B' f9 ]; Z- Z' W5 F- B ' C) J& y3 [/ E& I' \
push ds
) q5 I- k8 m0 z' E0 ] push es
( H: f$ l9 y9 { Z" B7 ~3 E4 s& S push fs
* l" K, G+ F6 t push gs
6 F* B# |' E: m4 u( H8 H* O' `5 c & b8 I1 }/ N+ k# q3 y* N
call big_real_mode6 _3 l! B1 G7 { n; H
2 @1 t; D y. _9 ^9 f" N. O x4 _4 t& A) [$ u
mov edx,OFFSET msg1;
; O/ @! Q3 R3 S( c) @; D @5 M mov ah,09h;
) a- o! l$ f5 P% M int 21h;
, W2 v# P& \+ S; z/ k4 l mov edx,OFFSET msg2;
$ k$ H' q+ i- Q# I+ \ mov ah,09h; E- C& M" A! W, _" m% L4 p5 r
int 21h;+ I* N0 \7 h# g1 ?7 ^% e
1 n: a7 D7 m+ Y% l: U
call PSP
( o# @4 A- J4 l4 }) ?- o2 k9 @+ {
& [! { l4 N. G9 T* B% X7 ?. b call crlf * h+ X& R& ~ }5 f; y! U
9 |3 _) c) w1 C, p9 X
mov esi,ebx2 `- \) S( V }% v* Z
mov eax,fs:[esi]/ B- h& n; P% Z# J9 K
out 80h,eax( L0 x4 E" o0 x. P$ b( G% A; P8 i9 x
mov ebx,eax
" C7 [0 P/ K5 G( A( f$ | call _8bits
3 J W: Z3 i5 w& q9 y/ } % \% B7 W& O/ V
call real_mode
7 Z8 N: W% K- B- F# T
8 C9 ^+ ?) i& N/ B& ?2 g9 i pop gs4 d. p. E$ ?4 H$ Y* `' u; X* y
pop fs) \1 D% H2 \ m" N& D
pop es0 H' K6 j+ @3 X" p
pop ds
1 Z/ T4 g9 `9 D3 p0 p: ]$ t
7 p: {: s# Z2 a" n' J+ C" @2 L; _ .exit+ r, E+ n. e) N6 C- I$ X
;------------------------------------------------------------------------------------------------6 P P# W1 i$ ~0 ?
big_real_mode proc near
7 l4 f H2 F% n3 B5 [ in al, 92h
& Y8 h' t% |1 O- c2 v or al, 002
- w& h* }! ?. U& b' |8 w' Y# q1 P: V- } out 092h, al* z& i" v. v) Y n$ @
out 0edh, al- |- k9 s+ o& Q: S/ f
cli
* p- E8 V5 L1 d% X mov eax,DSEG; f) n& |& H* `6 ^; p$ [
shl eax, 4" d: `2 y$ [5 ^3 l" |) @+ \- j! Q" a9 }
xor ebx, ebx! j* y' ?, O* `4 d
mov ebx, offset GDT_def9 {' A2 b& J- ^' L. B+ ^# C
add eax, ebx
V5 B$ L1 ^8 a" U/ s) W mov dword ptr GDT_Addr.Base, eax5 g1 w7 |0 u- r" B a
lgdt fword ptr GDT_Addr
4 Q' b( T1 U3 S' F4 D/ G mov bx, 8
1 n5 y3 C% h. @ mov eax, cr0
$ F; t1 I: V6 a, G+ V l1 Q or al, 1
1 w4 V- A V# z0 H( N* E mov cr0, eax% d3 Z5 T7 U- Q
jmp PMod
9 \. ?$ P0 ?, c6 s& P5 YPMod:% ~0 i1 R$ o' p$ b f! h3 K [% v
mov fs, bx
4 q- {" u8 {8 \$ d. A1 C mov gs, bx { V3 A* ^1 C4 Q# q
mov eax,cr0
% |/ R1 ]: g5 I' o% H9 E7 s9 Z and al, 0FEh. t6 _+ P4 r# r. I7 `
mov cr0, eax
/ h8 w5 x4 x1 I Y3 j' I7 m jmp RMod1 ?; {4 R$ L* ~0 S7 G/ M
RMod:
4 Q3 \6 \/ W1 z* S! G6 l xor ax, ax
P' u+ N! q9 i: e6 m+ u- p3 g mov fs, ax
/ [* q& L& w) g- {) I( `6 I mov gs, ax& T. K' Y( ]& E
! d& a" @6 c& X sti) O# K8 ?& T1 S# ]( d1 }7 _( \
2 ?4 c) s% _3 a. z
ret5 _' E& v4 u R& L! q
big_real_mode ENDP) `1 r" l( o; n: e9 Q+ R1 m
;------------------------------------------------------------------------------------------------
9 }5 z# P" R; {1 }- Z' }real_mode proc near
5 i+ `6 y$ Q- u( ~ in al, 92h
% P" m; O+ B/ h( |5 a4 f/ A# F and al, 02, S7 Q; v' m' ]- Z5 f2 f N
out 92h, al H3 B" Z6 N7 w5 K) |
ret L4 A9 R; c6 }8 J0 [. L% I
real_mode ENDP b& x q+ a. m" w% f# U2 G; l
;------------------------------------------------------------------------------------------------
4 C" T: F1 V1 `: \! v* GGet_Commandtail PROC near
! o: d5 T# O) o, L U push es 4 u; A0 i& m6 H9 {, E7 D f' @( u1 @
pusha, }4 D5 y4 L4 Y5 B2 i" o+ k
mov ah,62h
2 f! N" K+ N, Z% _ int 21h
0 |: P' B8 m6 [ mov es,bx
! ^: V h& p; j+ U popa
# Z T7 a+ O# C- P4 v pop es! \# J6 Y7 z: w- z
ret' i7 b: y% T0 A. S" g# u4 ^
Get_Commandtail ENDP2 N" r @9 Q( U% Z. Q
;------------------------------------------------------------------------------------------------' q0 P" o$ O* f7 N
PSP proc near
$ C9 ~) |2 H+ J2 u w mov ah,62h
4 S5 y5 W) ~# u/ L- H4 y" C! g5 V int 21h
& k) u# K& ~) l& W6 F mov es,bx
2 _5 L* `& I* r$ N3 x! M: _# C xor ebx,ebx
: G( J4 V# z/ v' ?1 Q) T mov si,82h0 x+ [+ ]. k d; c; a Q
mov al,es:[si]
8 t8 ^; U# v% K call Change- x( M% V# p$ `& ^
mov cl,4+ f6 l4 R) T5 x
shl ebx,cl5 _$ F; M( O K* g, x$ B
add ebx,eax# B, b5 a! n: V
mov al,es:[si+1]
) S+ ]5 p& p U$ Q call Change
3 D' S' Z& u4 A mov cl,4 x) f# e5 Y' u: u
shl ebx,cl
" H/ l* e) o( O. C8 ?6 ? add ebx,eax. K+ S8 q# W1 V6 K4 F- X
mov al,es:[si+2]2 [2 N, L2 J6 t/ [) s$ x( N2 e) e
call Change
2 u4 i% }$ |$ L d/ I) y% u+ |5 h mov cl,4
4 i# }1 E: _# [: ~1 w1 a: ? shl ebx,cl
1 A1 f1 o5 T. h$ g) B% t/ ~/ r add ebx,eax
( e2 F4 i6 l2 `0 |1 ~ mov al,es:[si+3]
2 b" F' a+ d1 ]) X2 D- U call Change
% ?2 W! i1 h, Y, Y mov cl,4
! ]9 G6 K; {* v7 i/ E. [5 t. a J; H shl ebx,cl
" h( e% I6 Q9 t- e add ebx,eax* s, t/ l8 f$ z& N
mov al,es:[si+4]
( F$ q6 u" c% C7 Z call Change
7 n' O# k; P( K2 \ mov cl,4
0 s. w. Z& o3 Y! x shl ebx,cl
3 T! ]' m& {, ? add ebx,eax& g i5 w9 m6 o
mov al,es:[si+5]9 `1 c5 I4 O8 i6 G* y1 c
call Change
' P1 p% |, O7 _! E, B1 R% Q# u2 { mov cl,4
: @% Y* G4 |1 u$ [+ q: ~; p. \ shl ebx,cl
8 {9 K4 W1 U) O4 o6 o4 S) t$ \: i add ebx,eax
) J* @9 s' w3 Q! R% f mov al,es:[si+6]& z& k: K) E9 h, u* a" }
call Change
5 ]% W @; T. k* ` A& [. h- U5 b mov cl,4
$ I, O4 J0 ~* }8 H& B0 O7 p shl ebx,cl
6 w! [9 @( y. b# T, \2 W8 y! h add ebx,eax7 A3 t) g' c! P5 D# \. ~
mov al,es:[si+7]8 G$ `, e0 {6 L
call Change
; z$ f; E9 |6 R9 o3 ]5 R) t mov cl,4
) T: t. s5 B. i, w' W* Y4 M shl ebx,cl* l Y; K: E `6 E' f
add ebx,eax. z& i- `& X1 y) v1 X3 A
ret
6 R" } H0 i7 W; |4 K6 lPSP endp8 h' o+ k; V* B$ o
;------------------------------------------------------------------------------------------------! j; G2 I; S7 ?
Change proc near
& V$ D& `( t M- U. y! W) Y; aA: ' D- U% w( z, e5 x: q$ `0 o. }3 i1 Z
movzx eax,al; z0 ]6 w/ t8 D* |* W6 f! q/ w
mov edx,eax
- c( n9 K! k- E. `+ y7 o4 b2 o9 _ cmp eax,'0'
0 I9 S$ f2 l: q K jb A& z6 @/ O9 M- L! _( M6 J/ _2 T5 B8 x
cmp eax,'9' ' w* G* I2 y' H. y s& {: I; L0 {( \/ I
ja B2 \) t2 e! Q4 X1 S5 E( t
sub eax,'0'
" A' T# `# [5 C! ]& `, e$ @) J jmp short E
. X; z, M5 V$ Q; J; oB:$ { Z6 E* A6 n& [' b. x7 z
and eax,0dfh
! x6 F3 ~+ q: J5 u' Q% B: G: U mov edx,eax
" U. h3 K1 z! c z" I! u9 E! { sub eax,37h
2 E9 I2 _& R, G( z5 J cmp eax,0ah
, F" ~# A1 Y$ g4 [& O! W jb A $ C8 k v9 K+ a( z+ Y n
cmp eax,0fh
( _4 [6 Y$ `, b( I ja A $ r5 {9 a; F, N! p; W/ v, c: M* _, x
E:
8 U' x# l' y% i' U- ^1 W- `+ y1 n% n! v push eax 6 ]4 N2 H J+ g& r; \. G
call PRT
% D! y1 q! |/ ~* S& H pop eax
. C1 |( s0 X' h! r' c! W jCExit:6 V% n- C) w- A) d: x1 L: @8 t3 U
ret
+ k* t- T7 b% GChange endp: d9 k8 u: Q" o0 [3 W
;------------------------------------------------------------------------------------------------
0 N( ?$ `. e% v6 r/ D- CPRT proc near" ?1 n8 b& u b ~1 b* @
mov ah,02h
$ }: L( l1 t X5 a; t# Q int 21h
) ^/ s* z) ^) e9 f# e& f ret
6 ?) }1 h. h9 Q ?% C- V+ t" h: b/ YPRT endp# P/ a- ~1 \6 S) }/ d1 _! T; c
;------------------------------------------------------------------------------------------------
2 e% J H6 d( w' N# a0 kcrlf proc near7 f, _5 ?! ~2 B9 d" E0 I
mov ah,02h( o! A+ x1 F* W
mov dl,0dh
! R) C3 R& e% b# y% t int 21h5 S. L7 \& r7 K9 e/ z# S" D
mov ah,02h
; E0 p f9 e: m6 g+ T mov dl,0ah4 d; N; {0 @) r% E- c5 X/ U
int 21h
' V9 l5 _5 l5 S ret
( J7 y' U/ d4 \1 s, U% c3 H# Vcrlf endp' a. ^; U6 @6 ~' Y
;------------------------------------------------------------------------------------------------
% B, a# T7 O! o" Y! P, v$ _' H- N_32bits proc near. e7 c: r, k( Z0 J1 d
pushad
) Y+ s9 ~- T. Z) _" C mov cl,4
; c* n1 n) O+ }1 W rol ebx,cl
' X: o4 g( Z' Z5 a: r& a( H5 Y call print_4_bits
' ~8 G( n3 }0 k8 I" ^ g# n! G rol ebx,cl
. g# p6 @# h; ]1 V( c1 j call print_4_bits. t5 S' c8 s0 b: Q& }: U3 L' X3 Z- ?
rol ebx,cl
; J4 G9 h! e; ^ call print_4_bits V0 |4 E8 u8 e9 `/ S
rol ebx,cl9 z% o N. L' u: ^6 L- E# ^
call print_4_bits9 q. X3 ?6 P* ]9 C# g8 [
rol ebx,cl" K0 M8 A) | x# g" k/ J$ C
call print_4_bits
% u9 I) d0 ~. x% ~6 D# [ rol ebx,cl
. |+ O# V, ]& t, R% u6 A) A call print_4_bits7 W' @: t* R" i7 P+ `1 D1 _
rol ebx,cl
J* b) d$ M4 E' J call print_4_bits1 j! I: H" D* r1 t: N4 ]5 T
rol ebx,cl
! I1 g) M2 t6 S# e$ `- e call print_4_bits/ C+ u/ e( V' a5 ?" r- K, C, v7 R
rol ebx,cl
# h5 ]! Z. j+ l6 \4 c1 D1 `3 ]+ T popad/ D8 a4 t: q0 ~7 `+ _
ret
* e5 }. g% K9 i1 S_32bits endp
3 \1 W! h* e9 T9 X2 \9 S;------------------------------------------------------------------------------------------------1 y1 I9 ~( @' e; S x, A2 s
_16bits proc near! C, V4 m% U: ~7 [! V
pusha # Q9 x( z4 D0 N9 v: x; p6 A7 J; F
rol bx,cl, t# R3 @ {. o+ Q2 A
call print_4_bits8 q- {% v6 s6 n& U' Q1 ?
rol bx,cl
+ F! Z% x+ s3 x call print_4_bits7 _; F9 b. W% ]( X4 Q2 y; h7 Q
rol bx,cl
y6 Y/ [3 |* c8 W8 R call print_4_bits
) F" J0 w4 H h4 k+ ] rol bx,cl6 {7 g" T: }0 f$ X! B
call print_4_bits* D4 X& O1 U. C: }. P
popa
5 b; S: J/ h& `/ S8 o ret
$ c' n, r) `' D4 h_16bits endp0 G- |" m3 Z- U+ r* D8 O: C
;------------------------------------------------------------------------------------------------: P, h' s, k0 U
_8bits proc near1 K% R# ?2 G" [* o5 C( J
pusha : W8 z, X8 T2 V6 l$ t, k8 L! G
rol bx,cl
( F% Z! ]2 F( D) n1 \ call print_4_bits
s Q* G: G8 x( l9 ~( p; S rol bx,cl
* f1 j- v( }' E9 Q' |: H9 q7 X call print_4_bits: P$ y* D- E) O0 S: W; c
popa/ k: e( e& x P$ ]
ret6 p$ b" Z: q' t# D W. E0 I6 n, t
_8bits endp0 W y' \. `/ [& g, K" v) Y
;------------------------------------------------------------------------------------------------
/ K* ]! R1 Q$ n. D' ^print_4_bits proc near
! _9 w, u8 q1 x9 [& m) G( v mov dx,bx& t! e8 K( B+ w. N- g
and dl,0fh
2 ^- v% P9 @" H7 s add dl,30h" H: h& j2 D# y+ ~6 M
cmp dl,3ah1 A1 k _! k: f& ^6 T
jb print
3 t; N' ~' n% [ add dl,7 d4 [* j1 R0 S$ ]& `
print: ; s: p. h. D$ i0 E/ s& a2 i
mov ah,2
- B) }: Y! e7 Z8 r int 21h
5 g3 ^0 w! { X6 p; M ret+ [# O% _2 i, x6 M' V+ x
print_4_bits endp
3 l! R: U& v" s `1 {7 [ i( A5 f;------------------------------------------------------------------------------------------------
) @1 _5 p8 ^# Q$ U: DCSEG ends+ l6 `! t/ G0 H9 q6 a9 e
END |
|