|
|
各位前輩好,以下的程式為在 big_real_mode 讀取記憶體的值; E( b5 M. o9 D0 |) q$ `: B3 @$ h ?
; L( p: K) x- J$ V, U% P例如: C:\memory.exe(程式檔名) 01000100(Address)
, P7 M) P3 s. d& K7 _3 p* r W5 d* ]8 Z+ P9 V& T
則會顯示01000100位置的值% x7 @6 J! [9 | Z6 Y
% i, U( s5 F/ P7 ?# H" Z# y
但是我另外還有要顯示出字串,但是顯示出來都是亂碼
* V% Q* n% Q* Q6 F! s
( `) j1 J! J( w( s麻煩前輩給我一些指導,謝謝 2 [* y2 s i3 B% ` A
8 s+ j- \! m8 i: e. M4 p3 O& A7 t) [' _; {
.model small8 i, @" {3 _2 n, u# Z# ^0 L
.386p
; M- f( s: f, p3 J' _;------------------------------------------------------------------------------------------------% p8 {% r! ~( P2 o+ A
DSEG SEGMENT USE16'data'
5 X6 C; T8 w" U# Q, A' ]6 l% P/ u6 }% v# v0 _) f; n
DESC STRUC
$ Z- ~! |0 n: J" p$ k LimitL DW 0 . C# t6 ?4 g; f( S8 u- M; C
BaseL DW 0
/ H0 ?9 o9 K$ N8 A% d6 R BaseM DB 0 ' n7 ]- O! o* V4 g: S
Attributes DB 0 3 x7 ^& p( E8 s
LimitH DB 0 ! f/ T; O4 z m1 X g ^* o: M
BaseH DB 0
- s5 f4 {: l/ k6 ADESC ENDS
. t9 p! F7 ]1 u
5 Y& x% A" ?: k; w* K4 [PDesc STRUC: l/ K h, N, z* r. D! A$ n
Limit DW 0
, S+ C( \4 G/ M; M" v) s Base DD 0 2 ^3 Q3 r# z o6 C, M- t7 i. o
PDesc ENDS
1 K2 g1 O7 s1 u9 w2 r
t* o! W+ _% f1 { [- {GDT_def Label Fword
1 Q8 m! @) ]& GNull_Desc DESC < 0h, 0h, 00h, 00h, 000h, 0>5 ^. W* m. D& @5 i% w. M
Data_Desc DESC < 0FFFFh, 0h, 00h, 92h, 0CFh, 0>
& n' u" v5 G! i5 t# Z4 g* j# zGDT_Addr PDesc <$-GDT_def-1, >* w, _* d5 M) R7 z) p
2 ]2 c' y8 I; G- E. w
msg1 BYTE 'The Input Address is '4 F6 B( \: @1 F; O( N( @& c
msg2 BYTE 'The Data is:','$'
( E4 p8 E& l! c4 K4 r% O- w. j6 H; e: j6 ?5 y
DSEG ENDS
/ U5 v: x. w" `$ d. ]
: S: v. S0 n; B* x$ V& U; t/ I8 H" ]" m4 k/ U9 P
;------------------------------------------------------------------------------------------------ 1 a& J q1 ~: W6 P- W) F# S% |
6 d5 O/ y! g6 Y6 [, j+ ^ASSUME CS:CSEG,DS SEG
! k: r: x. m2 @: b
) |/ }, w* m* O9 JCSEG SEGMENT USE16'code'
' f3 m! O8 s: ^" @7 m: V / x( X- J( F9 ]; j, r2 X6 ^( o
push ds
( x6 M7 d% v: C, O4 y6 P% t- H& a push es0 j3 ~) _8 Q$ e& T0 }
push fs8 d6 b3 A* Q6 H3 |+ {* x
push gs
& I1 i- N- [- n0 a/ \
- E# ]7 \, G+ a0 V: [ call big_real_mode' T& x1 L: a8 s5 _' K) A/ k
0 A2 L8 y2 n6 h- d0 i2 f4 r$ T* y5 }
7 p0 A. {) T- A/ ~
mov edx,OFFSET msg1;
; e+ E5 t) I" a: I7 h; Q& y4 W mov ah,09h; 6 ?9 _$ L/ z8 Y5 G( y+ r3 o. b
int 21h;6 w1 }3 r0 I4 n1 W, Q) A0 m/ @
mov edx,OFFSET msg2;
$ V$ L) Z" P4 o+ @0 x mov ah,09h;
" q. _6 }. ?7 \! J% w) K$ [ int 21h;2 K% Z. Q! I- r/ D7 f' [+ k
; M4 k9 m% Y/ v& [+ u( v call PSP . ` t2 B6 Y1 O8 Z3 O; b
^( d5 x3 N3 U- L- d: w0 R2 m call crlf
' I2 I {5 G4 q/ V) {2 G2 e # h# U) r3 z* i E' b5 u. s
mov esi,ebx
7 J2 z" q1 z2 t g3 w5 o mov eax,fs:[esi]
- _7 ]. v; A6 { out 80h,eax
. Q& m V4 x( N6 k5 U' H) z" n mov ebx,eax, O( N( F7 V. Z/ Q0 x w
call _8bits _' r% R/ p1 N# J9 I
) r' ~+ B! K* ]0 Z" J) d
call real_mode9 S8 b; F# L; ?7 S. O
% R1 D4 `3 q$ N; F
pop gs
7 h: x# W* R9 U2 l0 N pop fs4 Q Q/ [8 m1 k0 U! Y8 {& A6 d
pop es
" y$ S5 d0 q% l) h1 `; X' q! S" { pop ds
% x3 Q0 J) I5 u3 P# T
& E& }8 t3 u5 a .exit! w8 I! I! Q+ g4 a! T& d/ x
;------------------------------------------------------------------------------------------------
, k2 z! {: `" C+ V7 z- U9 Z+ [big_real_mode proc near% t- D9 h* ~2 ]) L
in al, 92h
0 p9 m) o% ]" G; g or al, 0029 R8 R6 C! \" I3 ^
out 092h, al0 x: ^. t' V5 U( [" W6 S& i" |0 w
out 0edh, al! M( z$ y4 V) ^$ I/ g
cli
$ q! @# B o+ i mov eax,DSEG
2 B! H' J3 o8 \" M8 D6 C) c shl eax, 4
6 N. W. x& b; O1 z) S5 |7 h) J1 ] xor ebx, ebx
m; u( H( m/ Q: _* b) H) N, B mov ebx, offset GDT_def1 N9 W- m4 v: i: h- s
add eax, ebx- v7 g% z0 n# c3 f. U! X, Y
mov dword ptr GDT_Addr.Base, eax/ s V) Y5 U. G3 K+ g" Z
lgdt fword ptr GDT_Addr' }+ p- s# j5 X8 X3 z
mov bx, 8! v( c- h' e! T+ ^. W# X
mov eax, cr09 H2 S6 p z7 }
or al, 1" l( o1 n6 o! z( e3 g" ?
mov cr0, eax
% \, ~# H& Y) ^6 _5 c% m( T jmp PMod
( X; s: @1 k1 f8 h! z/ @PMod:* x8 A, y) H- a) s9 k/ {
mov fs, bx
v6 o" D% o1 ] mov gs, bx
3 B1 m3 K6 M1 w7 C. @0 l, L3 o mov eax,cr0
# D5 q ~$ p9 t w* V and al, 0FEh
$ B4 t9 u5 r; `/ g8 W3 a8 Y2 I0 C mov cr0, eax ' i% f0 j* ?% d
jmp RMod
/ l2 X* S5 b6 D6 r2 I% hRMod:
2 i* Q. R+ @* a" |- d; p xor ax, ax- g- o( s6 k) v
mov fs, ax
: w' I0 c _- [0 o mov gs, ax
( z4 c* V! S- i) ? ?7 U; @. {, _ H; W# Q
sti
. A1 E X$ Z$ C & {/ l, B6 _: y2 F
ret
i! P6 f7 `5 n$ ]$ H4 _: Obig_real_mode ENDP
" Q6 ]- f. q: T2 t$ @;------------------------------------------------------------------------------------------------
* T! @* Y9 ]5 I6 I' Z3 o/ {2 X! Qreal_mode proc near5 w+ j `% J0 I! P1 o5 v
in al, 92h
. D- u5 k7 H5 P6 @% \8 v& s and al, 024 B" ?1 _7 J9 [) O% o S* \' U" b, v
out 92h, al 5 `# ~7 D0 i+ }! o$ M# e3 u
ret9 N* q7 w$ |( @% Z/ q
real_mode ENDP% J, n* G0 |0 y% N+ Q
;------------------------------------------------------------------------------------------------
$ |4 m; h' [. d& J( CGet_Commandtail PROC near
6 Q% p0 G- J4 x push es
$ h# k( k* M9 ^. M* ]! P4 x pusha5 @ R1 ]! Z5 Y0 \
mov ah,62h
* h( g5 n+ B* n7 G int 21h) s; j4 ^( H* _
mov es,bx
3 P' o, c- l9 ^( k( [ popa
2 n" A) H* l* h8 M! z- B! Z3 V pop es
6 R4 u6 S1 L( d5 u$ \, N ret
w% x' p: c+ p; X% U$ d1 TGet_Commandtail ENDP) y5 G* \- R! y2 A1 N
;------------------------------------------------------------------------------------------------
% Z4 k$ s/ u& Z, `, V- zPSP proc near0 s) W( A1 g. Y
mov ah,62h
' D9 }2 e$ E; t! ^ int 21h b* u+ l2 q, G. u. X8 k: ~
mov es,bx 7 i# X1 x; Z' X6 ~. F9 y- s8 S+ [
xor ebx,ebx
h/ } Z. D- N9 q7 ? x% a. O- e3 L mov si,82h
5 }$ g* v. [, L' c6 l6 T* `$ [/ L mov al,es:[si]
5 A# H4 C+ }+ t) Z5 o call Change
$ ~ Q+ x% L; T# O ]- r mov cl,4
% w W5 d6 o7 W) Z$ q, _ shl ebx,cl' d U2 Y$ u& x, b" A( Y
add ebx,eax
: L$ j$ F( ^, X- \ E z; q mov al,es:[si+1]. |( K" n: J7 W. q. ?$ c2 h5 S
call Change# r8 A3 k; e- g
mov cl,44 ?9 B" v+ l: t" t
shl ebx,cl5 I) ?" z- J* `( Q
add ebx,eax" [) y0 B P6 k5 Q! L4 b! J
mov al,es:[si+2]3 d2 {& X e& ^. {
call Change
( C Q8 Q7 `& O0 g" U: v" O mov cl,4 N N2 w. O( A, Y0 ?
shl ebx,cl
# h8 {8 t7 r" d add ebx,eax
! w2 G1 J5 P4 K5 I; w" i mov al,es:[si+3] C0 n( a$ n; `/ W/ x( n( @
call Change
/ I/ J4 B) ^( F* K+ a' t% ] mov cl,4- z. z* q* j* i3 x
shl ebx,cl
! I/ T( \; }+ d0 s0 ~# l2 v add ebx,eax
- c5 E' p; X) y/ l8 z mov al,es:[si+4]: Z# c) P) p2 X# d% [+ o
call Change, G) @: w+ I( f
mov cl,4% l% A; O& {* ?3 K2 C0 h+ m9 b6 c
shl ebx,cl
; p/ h6 Z; K( y* e" r add ebx,eax
0 _. \6 B/ C: g2 B7 P mov al,es:[si+5]
[, H% w6 Q0 U( \ call Change
6 @# A8 a- k! n. P$ w mov cl,4/ d) B z1 I3 F
shl ebx,cl
: o! W, `8 |( Q. S$ R$ w0 y& L add ebx,eax# b1 B( N' B2 G7 Q- R
mov al,es:[si+6]
# c/ L5 S8 ]$ l# z) y call Change) ]2 z, T5 c2 k/ \, X! Q$ \
mov cl,4
& V' e; {: D& D/ v* G shl ebx,cl) m$ C8 u9 U: _3 y6 k% G
add ebx,eax
. R; a2 R2 V4 e! S mov al,es:[si+7]
. }4 I2 P5 P* O$ r call Change
# F, M! C: S' K0 y/ z mov cl,4
* ^: M- u& J/ q \' c, b9 C6 t5 O$ t shl ebx,cl0 K4 c& W# G; h2 h8 u( h
add ebx,eax
8 z3 n, Z' }0 R, ] ret" C! }' e: b9 y% _0 F
PSP endp9 L0 }7 \; g; L1 x4 g
;------------------------------------------------------------------------------------------------
. B" [. F+ r0 _3 Z" [: VChange proc near
5 x. B* x1 A4 E/ ]A:
2 S. P$ J& }; C% d0 K, \1 Y/ B movzx eax,al
+ Q- O/ g( _' o* S* p! Y" r% R mov edx,eax+ I. a1 H1 ~0 p H
cmp eax,'0'
( u- w! E5 Z& _3 \7 j( X- Y jb A
) w2 @+ Q. ]( q3 E( z% M cmp eax,'9'
. N1 Z% }( L. y3 O) P" I ja B7 x% I: ]2 X; R; P' _6 W' Y, T
sub eax,'0'
7 \7 g- u. ]6 ]$ D, | jmp short E9 r9 Q' q9 n7 W6 g5 W+ V. C9 R4 n
B:
/ b9 C; }5 Y6 { and eax,0dfh
6 O6 m1 r+ ?5 I* | mov edx,eax
9 J+ w) N2 S$ y c sub eax,37h
' `1 Z- A" a' C, Z# K, ~" T2 { cmp eax,0ah
7 X* K" Y9 j5 b8 r; q5 p) F: J jb A : s' F% Q5 q, c- c" h% E a
cmp eax,0fh) }6 y( y u1 i7 z
ja A 2 c5 y- g/ J( y) X, k5 _
E:
3 @1 d/ O' z) l, f push eax
+ n. ]! b* `0 k call PRT
3 C9 N+ D8 J2 p8 ^0 h2 { pop eax
2 D& y- i; ^. O5 u% ?7 DCExit:
/ O M: B1 r$ I ? ret
& b' J ?% O' |Change endp# l" w9 ^, t, a0 e- B! H
;------------------------------------------------------------------------------------------------
, O) O# \4 N: f4 n, K7 c `PRT proc near) J1 @+ G/ `% i( r
mov ah,02h% S7 ^6 H& Q- I- ^) \
int 21h
* X; R% _/ r% g1 X9 A ret
7 E- v" P7 [# m" D/ k4 ^$ X. wPRT endp
. T f$ _0 E; m6 R;------------------------------------------------------------------------------------------------
6 [, X) U* \/ }crlf proc near; r' D( Q/ ]# U2 G
mov ah,02h( `* }0 L3 R! u4 J: Q
mov dl,0dh
0 i6 [1 m! k" ~6 L" R int 21h' ^8 }5 D6 p7 ] [+ n
mov ah,02h
6 Y w$ U7 p% U5 F mov dl,0ah
2 _( G( R4 U1 Q3 U2 Q% ?" X int 21h
+ ?) p, c% n5 P. ]1 @2 S ret5 w& A# i+ n8 ], K* x" D$ F
crlf endp8 ]! r3 r; C( e `5 R
;------------------------------------------------------------------------------------------------
2 f1 }3 J4 @$ S_32bits proc near
$ y! [3 O( c9 L4 V6 }% | pushad
$ _' i% ^# y3 ]3 c mov cl,48 Z |2 |- m) I- j$ B* a7 m0 q, {: ?
rol ebx,cl
: S0 d. p* r& m& _8 ^, C' t3 O call print_4_bits3 k# A1 `- k) z7 l6 E
rol ebx,cl8 W' ~6 p% h# ]
call print_4_bits
/ o8 L J Q: i; b9 e rol ebx,cl- Y2 d1 H7 T X5 r
call print_4_bits! h* U5 J" _$ h8 R+ r
rol ebx,cl4 F9 y/ a) }' C
call print_4_bits
\) ~: P! `# r- D( [ rol ebx,cl
: D( \/ s& |# y9 y call print_4_bits
. P9 \2 c% T* S4 q& x8 Y. ]4 g rol ebx,cl9 [8 Y+ b( @2 L
call print_4_bits
# q2 c% k* [( G# c8 g# r rol ebx,cl- A' q8 |6 l* ?
call print_4_bits: |8 V5 o9 e: p/ Y
rol ebx,cl
) E( X: r; _5 l* i k7 ` call print_4_bits0 w& s& o7 _) V
rol ebx,cl' Y- Z M8 z& B: x+ D
popad
2 n2 c" ?/ u) t8 Z ret
5 Q7 K0 u2 Z6 f7 }+ M% r3 r_32bits endp3 ?# O5 ~6 U7 F+ @5 d. ^7 u
;------------------------------------------------------------------------------------------------
* C9 g( Z8 }8 P& ^_16bits proc near
9 w( k R: s: p+ C) h pusha
3 m8 v9 o6 e5 L+ t" [4 _5 U4 R rol bx,cl( r% n4 p) K0 H! v9 n0 L
call print_4_bits# u) ]6 M) q$ e
rol bx,cl
# e K6 `) I x! S- M; l call print_4_bits# z# G0 B. M6 g1 E
rol bx,cl
, \7 Z" |. O7 \ k call print_4_bits) H1 l3 d2 R3 f' r: @
rol bx,cl
& a& o9 k/ i/ o4 r' Q- }% W call print_4_bits5 g: @* z; V. o
popa
' c1 _* n& y8 F# e: r0 h# l ret# ^, z, t$ E- G. b+ f- e+ x
_16bits endp' q$ y" p! n1 Q
;------------------------------------------------------------------------------------------------
2 p4 s- M, [# v) e! \_8bits proc near9 J. w& t9 k0 c4 N
pusha # ]1 W3 j' }( j4 D
rol bx,cl( N" E% M6 O) y0 `$ g
call print_4_bits
5 N" I' ]- A1 @7 @' S8 [% F. P rol bx,cl
% y3 p8 C) p' o J) y% L call print_4_bits
8 q1 O8 d+ T0 _( u8 y. _ popa6 M; [$ C* r; l. K9 H6 K% Z) K
ret
* p0 R+ Q, o# f# w- b# G9 x& u_8bits endp
7 M$ ~& ]5 P. }: K;------------------------------------------------------------------------------------------------5 ]8 o, N4 R1 N4 ?
print_4_bits proc near+ @" i" X$ i$ f9 V% C
mov dx,bx
" b5 i! a8 ~9 p% n and dl,0fh" s& B, `2 n) a* \) r
add dl,30h
' Z" T& L5 u* T9 W ^+ ? cmp dl,3ah4 ?* k( ~6 B2 P
jb print
! S+ T& ]3 J0 Z8 ] add dl,7
4 d9 Z/ c7 z$ h& I1 tprint:
& E& P, l6 Y3 Q9 Q6 N! h mov ah,23 }: l/ F/ }1 Z- n1 ^- G, a2 J
int 21h
+ m5 l, |7 W" \" ~ ret9 T$ @4 t2 R2 F
print_4_bits endp + r- U: Y6 g, `
;------------------------------------------------------------------------------------------------$ ?2 D" Y/ s, v+ b m" [
CSEG ends
, G) X+ m5 b, A' ^, ]8 zEND |
|