|
|
各位前輩好,以下的程式為在 big_real_mode 讀取記憶體的值- o: a0 i# U& U! }" h2 W
8 p4 R' q; m0 n! f5 W F1 u例如: C:\memory.exe(程式檔名) 01000100(Address)
k, m! i0 x H, o2 i* ?- E+ J1 }4 ?9 W3 Q' |( J. M7 F$ N5 P6 o# m
則會顯示01000100位置的值. z7 r/ p6 Y5 i' [+ X3 @7 r
5 F: r6 ^. a/ X* R0 E但是我另外還有要顯示出字串,但是顯示出來都是亂碼; _' s- y7 J0 r+ m& R, S' e2 W
' U* x- R4 a$ x1 U8 K
麻煩前輩給我一些指導,謝謝
2 k5 [% @" r, Z# ^2 ~6 n( y% A. k/ `5 `" z$ W
@) M( h- j) a( `7 ?.model small
5 n& e- c! }' G( m' r0 W.386p
. k* F3 Q. J5 C3 P, ^;------------------------------------------------------------------------------------------------
$ Q* M; K- E+ DDSEG SEGMENT USE16'data'
2 e( @% w' c: S* q' n0 \- B. a* E* O2 b6 ?8 Z. r$ f+ m5 p; w
DESC STRUC( Y6 a( y) a7 `- R' [6 `' v
LimitL DW 0 " Y& k8 u6 y5 g/ }' v* p
BaseL DW 0 ( h9 e/ j( ` ^. n# o. w" l7 ~
BaseM DB 0
7 E' L7 |8 Q: v Attributes DB 0 4 `6 e: T6 o, G; L" _' c9 C% y
LimitH DB 0
* `4 Y* g- R* c4 i2 W BaseH DB 0
7 }. E& W5 ^" u# v. N8 |DESC ENDS$ B% [: t( E( h+ J5 Y
+ q! X7 ]* X# d' C! z% N5 ]
PDesc STRUC
" P- t- F0 G$ E- m; u Limit DW 0
5 e, a$ j5 j2 R& I; A5 l Base DD 0
! m( T) {% |* K0 G/ h5 KPDesc ENDS. W/ O1 D' r+ j8 ^1 c+ H: ~
+ _1 Z# j; b3 @6 G& bGDT_def Label Fword0 _6 x( d3 B# `$ X* z
Null_Desc DESC < 0h, 0h, 00h, 00h, 000h, 0>
8 d5 A+ V9 w: a3 v; T/ j5 I% ?% VData_Desc DESC < 0FFFFh, 0h, 00h, 92h, 0CFh, 0>
: v) p' t2 x) Q. g) X9 ~& ^: w+ @' CGDT_Addr PDesc <$-GDT_def-1, >
# t: R& a k& \# a3 _
4 u2 f6 B( F) W, lmsg1 BYTE 'The Input Address is '5 ?$ t) }6 L3 Z6 C: t
msg2 BYTE 'The Data is:','$'/ L) @- I2 `" i
1 U: R q) |, v* D/ hDSEG ENDS
; M) x. D. o' G. h/ t" a" D9 I) a3 M) L: h
0 \! U9 O5 R8 ]0 O7 V- R4 m;------------------------------------------------------------------------------------------------
$ d1 Y1 a7 s9 O0 v# I# B& V3 L
% p* S) \3 B) p, D: SASSUME CS:CSEG,DS SEG w7 `+ u! W# k& t
$ P/ F+ h8 M& q& F0 g7 [1 ^* fCSEG SEGMENT USE16'code'
* H9 z9 ?" E+ x
/ ~" T3 A8 w: T, u push ds, _8 [2 }; C/ m n
push es
% q! [1 T# r4 P4 \2 g push fs
& e6 R e2 U6 f$ A6 H4 _* B push gs
1 ]/ x- s( q0 ~; a. q2 Q
: W0 k' |+ j$ Z' i" Q Y' X, D _ call big_real_mode3 N5 b/ ]: g% _$ z/ y2 G, e6 }
. I- y" h' X* }$ S2 N% \ 6 j5 u) x5 Z' p- c0 j
mov edx,OFFSET msg1;
1 a& C3 x# q. [, c8 o mov ah,09h;
4 V& @& I$ q- |% C& D: w' r int 21h;
^/ p6 J8 z% R7 ]1 ^ mov edx,OFFSET msg2;5 o- T8 J8 g) U+ N5 H( R8 m
mov ah,09h;# ^2 a) U$ H$ g; R8 T, R
int 21h;2 R6 @ \# ^3 }* t
8 ?* M/ M& m: n) y
call PSP + v9 `* [# X9 H L/ T. s' i
5 I: K5 h7 s) s4 M% k5 @: U# U; J call crlf
; E% r, H, E+ T8 `, M" C . g, F) G' f' n0 p; V' B) E; R. y
mov esi,ebx% F( M6 m0 [/ _' @% ~2 O5 R- ?; [% e7 T
mov eax,fs:[esi]
# I! E, T% X$ R3 @$ ?9 X3 O; S out 80h,eax3 c4 ?. m. U, e9 N
mov ebx,eax
( K7 ?$ Q5 ?, f. `$ A; L( N1 ] call _8bits9 @* x% v. y2 O
' H1 M9 Z6 v6 Q$ A
call real_mode
5 ?7 R i7 I) o X; d
% h2 W1 R2 k9 ?" E2 ^9 h pop gs
, g) h9 g& v' [$ y0 r pop fs; K/ ^! `& D! s
pop es2 X5 ~- l# a) R" Y1 k" _
pop ds! B6 W6 s3 ^$ T
5 d7 g) E8 w( f8 R0 n) x+ ~
.exit4 ~& b; @: b1 G' C6 B6 q$ t: g
;------------------------------------------------------------------------------------------------0 t- O- ]. I2 s& N( F8 q
big_real_mode proc near, J V+ T) s' W! o5 P' x
in al, 92h4 O" W2 J [# l1 H
or al, 002
$ h8 w7 f/ h( u4 j/ [' ?, ^9 i7 A0 T out 092h, al
$ A8 Z0 I& [0 p& v: H' v out 0edh, al! F7 @" C. ^5 B& Q2 C# E
cli
: u; W/ X9 g* K- R0 S; p0 ? mov eax,DSEG
. O2 M; | P9 M" d2 ] shl eax, 4' I5 w& Y/ G" y2 y- W! N. a
xor ebx, ebx
; r/ {: ]) Z8 r mov ebx, offset GDT_def0 |$ X# f! R2 B/ ~2 B! @$ A- M
add eax, ebx
' g* Q- A' ^5 o/ Z) }5 a1 M3 w mov dword ptr GDT_Addr.Base, eax2 W5 v% t. t7 p$ V" s) B( c1 U
lgdt fword ptr GDT_Addr" ]4 _6 {$ A9 A6 C
mov bx, 8
2 T. G9 |0 m+ T/ m4 l- u" Q9 j mov eax, cr0
2 ?8 \( a" l1 O3 O+ B4 Q3 u or al, 1
8 W" \- r/ ~. O3 e) } mov cr0, eax/ }% {3 U9 [6 E- Y) ?4 ~! ]
jmp PMod4 J$ ]* l: ^8 g/ @
PMod:
; t1 I, O% e: F; V3 { mov fs, bx
! g0 V; N: B. g' W mov gs, bx
- @% H$ E3 d8 f0 M8 E( _; D% u mov eax,cr0
8 K4 x/ a6 Z6 v, W' F6 ^$ r- ~ and al, 0FEh
! Z8 F' b; d* u# d. t$ F9 e mov cr0, eax + Y3 s9 ~# Y. n9 A7 W
jmp RMod
1 p6 u9 E0 |; P( WRMod:
$ G; m! a5 b6 z) C8 i$ E3 p xor ax, ax1 `. a5 S+ |. G% b/ [! r- |
mov fs, ax; u Y! h5 E& g- ~6 h$ {9 x
mov gs, ax) f* g6 k9 N3 l. Z0 t
; O. O& G3 t2 g9 ?
sti
8 w+ P, M; }: x: F# ~3 { 7 H5 u+ Q% ] Z
ret
# ?! k6 ], N) i) cbig_real_mode ENDP, s9 ?+ }7 I' b! U
;------------------------------------------------------------------------------------------------
3 {/ Z' C( [' G) }1 K8 Jreal_mode proc near
5 @# O; h9 [, Q. N8 D4 z in al, 92h: q( a" O6 x* i5 u. q Q( l. `' I
and al, 02
9 I, ~& N* _, L7 y out 92h, al 6 V' ~5 N3 A5 U3 @6 j, n* `
ret% T0 J0 c1 I: V6 E7 R9 `! W2 t+ R$ e
real_mode ENDP
' {- i: Z( n) _5 n+ y( _* l J;------------------------------------------------------------------------------------------------
0 q, I1 _6 O# [! ?/ d; `) a( f( }Get_Commandtail PROC near% B: g8 N) ]+ _2 e& Z
push es # K& P+ B0 u% ]0 S" j" B8 k, |
pusha. f) B, E% {, U
mov ah,62h
4 j+ ]* r2 V6 }$ X8 c int 21h
# {5 d& f3 W$ p9 h. Z/ m! Q mov es,bx/ l8 ]7 \2 q' U+ h
popa / q5 W! E& U9 e4 V& h: P$ A" H0 F
pop es
7 |1 f4 w- f: z/ p: z. z ret
6 B4 l5 {0 G- R9 H! R$ j( CGet_Commandtail ENDP% H, T$ r/ k+ \8 c
;------------------------------------------------------------------------------------------------/ Y' m7 A% u8 c
PSP proc near
0 T Z3 E; W+ g( u- x/ I9 p+ s mov ah,62h3 ?) _/ t7 C5 U' B* `
int 21h
4 ] n7 G1 Y! ?& o$ B" R% D mov es,bx - x7 e! @9 ]/ b
xor ebx,ebx# p( w! I3 a3 Q- p) }0 L8 p
mov si,82h
: c. e8 ~0 S) }/ u" t3 ~ mov al,es:[si]
3 i2 B: B" b1 E& I# K call Change( [- \$ V: X* p' J: T& N: _- b
mov cl,4
8 T# U% T7 C& ^: v shl ebx,cl' }; T- }9 q. A7 f8 j; v; w
add ebx,eax
/ E6 g% U; X# [& _3 u' B mov al,es:[si+1]8 x0 z0 |$ M8 p% q
call Change: w1 \2 D4 C1 y# w! H6 s
mov cl,4
( f2 C$ Q8 W' u1 x# Y& T$ G8 N: U% S* n shl ebx,cl
$ ^3 B; Y2 ^% ^% ^ add ebx,eax
4 r, R" r: Y8 [3 i mov al,es:[si+2]
% P0 r6 ? r7 o6 ^$ p call Change
" l* B( E- i( { mov cl,4
/ @2 s+ |+ r3 Z! Q9 Q% E3 @7 K shl ebx,cl
1 a4 c5 }. ^& F( m add ebx,eax
* u6 e: S, N& R3 m1 Z3 f mov al,es:[si+3]4 p) e) E! j% b) i$ O' [
call Change
6 N" O5 t- G; v! d mov cl,4
9 c+ Q5 A$ K R3 w; G) G shl ebx,cl% O& m5 ~ Z& Q8 |* W% ]$ E8 X
add ebx,eax8 P2 o4 M$ o: D% }9 g9 l* W- w
mov al,es:[si+4]; `2 A- @4 F/ y- v( f0 ]7 r- |1 u" [: n
call Change9 D1 s- t8 f p( B, X8 N
mov cl,4( h& ^2 B. x$ O- I7 w- l
shl ebx,cl6 r4 Y) l8 f L6 b
add ebx,eax& K5 Z6 T- \" j
mov al,es:[si+5]
3 d, t/ R- g( q- c, B. Z' _2 |% M call Change
) g' F {! [: |+ _ mov cl,4
; [7 r2 H+ @* l' O) Z' V/ J& c/ d) G0 K shl ebx,cl* e5 v0 O* a4 J) L) D# Y
add ebx,eax
: I; @" K) a& y! p& A$ ~- N( M mov al,es:[si+6]
& Z# }+ h; w7 k7 L2 V0 M7 m2 L6 o call Change- j; _, x* Y) [- W
mov cl,41 O1 ^8 S6 ^" m" M
shl ebx,cl$ h+ s% }: Y) N% G: V
add ebx,eax
/ j- X9 I) K' z) S2 @! } mov al,es:[si+7]6 Y4 _2 b3 a6 I$ L! o" S
call Change
) Q* w4 r% r- O. P/ ~1 G mov cl,4
" d! W) W+ T; l: z6 x* y" z shl ebx,cl
; r6 X& C8 z: Q5 O; u add ebx,eax
$ P5 ^' S2 Z0 i: P- Y7 }3 i ret7 l9 w" G, |" n2 s$ `7 f
PSP endp
% k2 r4 P8 J) W( t( W! I( X;------------------------------------------------------------------------------------------------
j0 l5 e( K: _% z' p6 yChange proc near2 l/ j' X& w5 Y d; K4 K1 a: a6 T
A:
& i- C4 ~# `) |! {: p3 A' U movzx eax,al
# R1 d# E! I4 j* n( K# q& e. l mov edx,eax
/ x- e f7 T7 m; j" {2 I, E+ \ cmp eax,'0' * S; A B Q: k; u; ?! p+ D
jb A
/ e# y& |/ K+ j7 D' b2 S" r. v cmp eax,'9' 0 }3 g' L* C" B5 ~) B
ja B
7 }, _$ z) E' x4 A' u sub eax,'0'0 B$ c t7 O1 u$ h: `: [! a
jmp short E
- C* n/ C7 a* g& sB:
X8 {: t$ \0 e1 m! ^ and eax,0dfh ! o1 D0 T( S# C; P4 j& ~6 t
mov edx,eax
& U {1 g! M M* ~! g7 J sub eax,37h ! f6 _1 [, N, o8 y
cmp eax,0ah6 N1 n6 U, M7 a* V- }
jb A
3 ~7 |/ a8 R& z: f: m: B; H cmp eax,0fh
' I0 Q# T: Z& T& t ja A . d! o8 X% E' Z7 s
E:: z8 V9 q" Q, O/ W) r* L
push eax
0 i8 |% M& Z! r+ R: o9 I call PRT
0 r* M' ?) ] [# _3 C pop eax# x- W7 D; \" @, k
CExit:+ r9 u* i$ X# ?! n* N6 _
ret- f$ G8 H6 j! X0 z' N3 {$ w
Change endp9 b; u" j# H1 u( H
;------------------------------------------------------------------------------------------------' b( E; s& J* A+ N4 z0 U( p
PRT proc near
$ Z, G+ i1 b2 @- v mov ah,02h
, g8 ~% t, Z/ p1 G0 @3 E int 21h% Q9 i& i1 G: }
ret
; V7 O0 c6 D5 f4 ePRT endp
- z0 q0 k/ R9 O$ U, N2 y5 M" A8 m$ K;------------------------------------------------------------------------------------------------! D( s* A1 y6 h7 ~ `
crlf proc near
& r* v7 Z9 V; s' a) f# n mov ah,02h
5 d2 v- g/ J& u- _9 L# G mov dl,0dh
' P, M. [! D4 e( d. Q int 21h
" w/ Y3 S. s! Z2 s; I mov ah,02h; G1 \$ \ ?6 ^( c: z( H
mov dl,0ah, I/ e7 O' W8 C% o. j2 n
int 21h
D8 u6 t3 J3 O ret
: [, S, f: o0 L" m7 h8 {crlf endp1 ]/ r* V# u9 V5 }: s* \3 |
;------------------------------------------------------------------------------------------------
6 w/ Z' m) `2 H7 M4 @7 g3 i" y_32bits proc near
* ~4 b8 P e2 l7 z) z1 T% } pushad1 Y! C" s( u5 L' D1 ?4 {6 ^
mov cl,4
: p/ \. h' U9 r5 e) P2 t7 H9 q rol ebx,cl
( M5 R+ w* ^/ J# A: |) H& X* H call print_4_bits
' w, G3 U2 \. c1 O: Y; W U rol ebx,cl
! i# d! x: f' q4 \/ g& G$ a7 O call print_4_bits
l* E, L* L9 K W5 J) k rol ebx,cl U0 C' R m s1 Z, W( I, J X
call print_4_bits. Y8 S3 c* W4 `9 w! z2 v+ W
rol ebx,cl
9 y2 N2 ~: s2 B" ^7 E. ?1 L call print_4_bits
0 Q+ v" ?6 }9 ~" Y2 A rol ebx,cl
$ q6 ^9 o: ^$ b- |- H% T call print_4_bits7 g% f+ q" a @& y$ C
rol ebx,cl5 \9 p* L1 \. b" q2 @% j- z
call print_4_bits
8 D* `" B" U% R rol ebx,cl
0 u* c$ I% m* u" y8 P3 T call print_4_bits
" G, w, x6 J7 Y. y2 [* m7 Z rol ebx,cl
6 N4 w k& R2 _ call print_4_bits
0 N+ b% I" ~2 d- ` rol ebx,cl
5 f( k; t6 J! y6 x6 W popad
, I3 n: B0 j" }7 E ret
: z9 B, H9 s* _. D. ^_32bits endp
2 P: r ?/ C6 y; o" B; ~7 y: v;------------------------------------------------------------------------------------------------
+ |/ h9 } e( z7 @_16bits proc near% q/ ^ G) D/ i- R+ t+ H" {
pusha
8 f# \- t& ], [8 ~" M3 S G( B rol bx,cl
3 Q5 `6 C2 w7 A5 M& X n call print_4_bits
) C1 _! [) w2 e; S( P4 R# }! n rol bx,cl4 u& x5 \0 R) `+ L! X
call print_4_bits0 c& a& y4 L8 D6 X( y: O
rol bx,cl8 T. v$ N P& c
call print_4_bits& `6 {4 k9 A, x0 p
rol bx,cl5 {1 ]# v# _2 c$ z# N Z3 v$ X4 r
call print_4_bits/ T8 ~7 U6 g' w" Q" i3 h4 J' {
popa
1 T5 j1 ^" @$ b! ? ret
! V2 z4 z6 N- b' k_16bits endp7 G' o4 A" z4 V9 B0 l: r8 Q2 `% g
;------------------------------------------------------------------------------------------------# q6 u& H; o z
_8bits proc near% |0 w* P8 J: X# y% k& ?4 ^* q
pusha / y' e) @; x, `. l# t
rol bx,cl
, R _" e8 E( ?+ T6 P) t call print_4_bits
. b2 N( d5 T" X9 [9 A9 c* l5 ? rol bx,cl3 [' d( s9 _: d
call print_4_bits* b: m" N: k/ |2 X/ A+ F& M: e
popa
( z' _" H7 S% O+ g ret: z s) `+ M' y0 t+ V v
_8bits endp
( x. q# X2 H7 |* K;------------------------------------------------------------------------------------------------! T8 S5 f8 k) g g$ D1 _
print_4_bits proc near
2 ~3 z) ^2 Z3 ~9 [. z8 d& v& N mov dx,bx h, ~$ e4 d6 f5 ~' I# `
and dl,0fh
$ G. y7 A& s& x4 ~ add dl,30h
+ `$ d9 ~# A! U$ E" X9 V& B! [ cmp dl,3ah
- z: k3 p+ d2 F3 M jb print
' y! { W! M4 ], b# E add dl,77 i. {# l Q0 B$ o
print: 4 w" q1 U3 w! {3 \
mov ah,2' e+ a# ~" m( u3 j1 g8 g, s
int 21h2 p: x3 g( x; Q+ D( s
ret
8 }9 o& C/ s7 \' y: I" J1 I3 Hprint_4_bits endp
# Q/ ~! A# ^* |. f;------------------------------------------------------------------------------------------------
, \6 ]4 }* b; Y% X- I, W/ m" z' L2 G8 mCSEG ends
9 M+ {& T% F$ Z! xEND |
|