|
各位前輩好,以下的程式為在 big_real_mode 讀取記憶體的值
0 p5 S2 h3 z1 D; W) g# o" D# L: m' c3 R2 r. | E
例如: C:\memory.exe(程式檔名) 01000100(Address)
$ p- }! O/ `# d0 b3 [) w2 V7 d% j- Z, z" b& P
則會顯示01000100位置的值
) N8 I; D, D' ~/ P6 _6 f) s0 X R" O3 I8 i7 |
但是我另外還有要顯示出字串,但是顯示出來都是亂碼
3 v7 x) C( ?! @& n$ [- M( G" t$ l: ^& C1 F/ T
麻煩前輩給我一些指導,謝謝
0 t- G4 e/ p( U& ~3 i9 V3 J+ ~
( t" z- m' {, S& @
7 i2 U9 i- O4 {& W' H6 l2 H.model small
! f x2 h P& V0 p. ^5 N9 u, i.386p0 ^2 t5 v, t5 F
;------------------------------------------------------------------------------------------------' z3 K2 B+ |- l7 d3 e
DSEG SEGMENT USE16'data'
+ B7 R2 k, X2 p2 Z, d5 h9 ~2 b- K1 `1 A6 J% t
DESC STRUC! V5 O9 t4 e& P& l* h* Y- @4 W
LimitL DW 0
) u3 O$ B- e3 {2 Y BaseL DW 0 / j: B1 F& N$ b' H7 }/ T( U
BaseM DB 0
# [0 x+ r4 B r+ b Attributes DB 0
V0 O' g- s7 I9 h8 f LimitH DB 0
' N# F; h# t) y6 p( r7 E q BaseH DB 0
1 w: z0 z8 F4 ]: P! H" |DESC ENDS
( o+ j% ]* u, r9 t& Q: `& Q
# Q1 ` v, \; B& i' ?! Z. h9 gPDesc STRUC
/ T* ]7 T: P& O' K+ i Limit DW 0
$ l9 n1 c# b- }& q0 c/ ] Base DD 0
9 }( ~4 @* D7 q8 K3 IPDesc ENDS1 ] Q8 v4 i' r% C) ]: [
4 ?# Y# w9 ]5 U
GDT_def Label Fword" Q# `' W2 ~8 `( R
Null_Desc DESC < 0h, 0h, 00h, 00h, 000h, 0>( S& M7 Q" j$ l: }- T
Data_Desc DESC < 0FFFFh, 0h, 00h, 92h, 0CFh, 0>
2 ]' W9 h7 q# g. B1 dGDT_Addr PDesc <$-GDT_def-1, >
: E5 _1 ?# e3 R9 o2 m+ ^; O4 }# s) O; W; Z
msg1 BYTE 'The Input Address is '. i& v ]4 j2 o1 M# q
msg2 BYTE 'The Data is:','$'
. ]9 f8 [8 ?8 u
3 w, d* M5 f0 K P5 ]. G" vDSEG ENDS
, e( W: L6 a" P3 U$ ]0 p% Z, L- Q3 u' h
. _) Q- b: d0 g
;------------------------------------------------------------------------------------------------ ) l8 g t/ D$ E
) T' Y+ W8 Y0 K+ X! ^2 ]/ O, jASSUME CS:CSEG,DS SEG
' \: P: S% L' m: G7 e5 r
6 |9 e I* K( G$ lCSEG SEGMENT USE16'code'' m# A; d7 }- ?, K1 z5 M
/ E8 B; O1 k5 ]; ?( |$ |. ]5 ? push ds' U n: v1 u6 L2 W6 `
push es! \! D8 D+ d' [# E
push fs
# c, ^5 y6 P* @! Q3 @ } push gs. v% m, K2 U4 T2 T6 F0 J/ D" E
0 ^- A+ c% j+ a0 x; Z/ Y call big_real_mode$ v; Q- {; h/ @. Y R8 Q
$ Y9 R8 R+ l/ |, j: m I$ Y2 @/ O2 t2 }3 @
mov edx,OFFSET msg1;" M; C1 K/ |6 `6 P
mov ah,09h; " J' Z% R$ E* p8 N& k
int 21h;
0 q) M+ o0 z# _9 i8 n# `0 u! m mov edx,OFFSET msg2;
; h" T& R* R- [9 | mov ah,09h;
; Q/ t- j: h: X) N' B4 {" O7 A% I d int 21h;
' t/ n8 C1 o) |% w" ]
# k3 a/ S* E) V0 f7 m call PSP 2 ]4 p/ z6 p' f) |! Y: G: u- |) W5 L
, o5 V4 a: I& I- i+ T' y5 v call crlf 5 o3 H1 e( s& v( L) s7 I& P- u
- f0 w0 l, z7 P; K mov esi,ebx
$ l0 {! ]6 F' D8 h mov eax,fs:[esi]
! u$ ]4 Q$ c, V1 c+ T$ O out 80h,eax/ P6 x! G T" A2 Q- E, s
mov ebx,eax
0 \' e" N- y! q9 D) @ call _8bits
" B0 U6 o$ l. p; j5 y8 n : l3 w# c6 N0 F6 l T: } {& ~
call real_mode3 b+ X) e. b1 Z# {$ ?
: x7 ~# t/ q' s$ T0 V9 u pop gs
- O+ X' g1 T+ F' { pop fs& h6 W1 V3 N0 Z, O
pop es
$ j- w4 n4 ]3 P$ c8 ~1 } pop ds7 q: O# G. b% Z; O# @. q" @4 X
- {* K9 D# Z5 X( @ .exit
2 ^6 o2 b4 z0 ?2 @8 P8 S% J;------------------------------------------------------------------------------------------------7 K, n8 s/ }5 x) ?/ \. E* u; W
big_real_mode proc near! T! h/ A% j$ I& k! L# Y
in al, 92h
1 c* E* t4 V3 U8 n; A or al, 0027 |( @( i; s( m" r6 h& D9 G
out 092h, al
* u* H: n) h6 t3 \7 g2 X out 0edh, al$ B2 b( }. m8 Z5 C1 N
cli8 [9 [, U6 l7 q$ P! w
mov eax,DSEG
4 ^+ K) A( _( D4 W, `% { shl eax, 4# u0 Y g9 i9 ?6 _# m
xor ebx, ebx
7 M; d9 V7 F. o& K. v mov ebx, offset GDT_def
0 g9 J' ~" W- G6 L. ^ add eax, ebx3 Q W9 M/ [) X s
mov dword ptr GDT_Addr.Base, eax
. ? x: s$ H) G. g/ J; | lgdt fword ptr GDT_Addr
; ?( |- H! S7 ]% K) `7 P mov bx, 88 b X2 i* u9 f" }
mov eax, cr0- ]# ]+ [4 ]: Z5 m$ [- j8 {9 p' v8 ]
or al, 1 r$ q0 x, K: R" B/ Q
mov cr0, eax4 j9 H+ k, N, q9 l) g7 r
jmp PMod" D$ u5 j8 P+ A
PMod:
3 p: d3 [ w. C1 Y mov fs, bx6 S* _0 Z0 v2 S( `+ C
mov gs, bx
+ u' z1 j, N. Y mov eax,cr0
. E! o( M8 ]- |9 ]6 N! W2 v and al, 0FEh% C, }' I' `' K
mov cr0, eax , y; a' j$ W' C a S- u. b' U
jmp RMod% C/ Q5 ]* t" o" f* V2 y
RMod:
& R7 |- U6 Z# G9 p) }" s# m xor ax, ax! P8 z$ O- x5 Y0 R6 D
mov fs, ax
4 {1 j. d! |: Z# G7 Q2 X R mov gs, ax! n" D7 @: i2 e4 B5 v( d6 z
( P, o1 u s9 o6 ?( H sti
% h5 v, X) h; Y % d+ i/ d- _$ _
ret
% G& X9 @& X% i( Y* _' C* ubig_real_mode ENDP
1 m, Q& i' x) {0 I* E7 g+ C, x6 t0 Z: t;------------------------------------------------------------------------------------------------/ I# t9 `6 w2 `5 p" l
real_mode proc near. ?" c9 b: A) L0 u
in al, 92h
4 {3 Y* @6 P) ^$ `4 N and al, 02
. t0 t$ M: K! d) s# E: g out 92h, al
g8 C7 ?. a/ M. J! y# a9 n ret$ R4 _: L& a) ^3 S/ h4 J
real_mode ENDP
& Y& Q# ?+ \" e( o- W! V;------------------------------------------------------------------------------------------------6 w" m- r; l( q( ~% J- J
Get_Commandtail PROC near; Z9 o6 ?/ C+ ^5 C
push es
3 ~% S2 d' b$ ^! B pusha
- B8 z& n1 R; `' @' B. ? mov ah,62h
, R* o4 Y, v' T& E4 y! h( G int 21h
- [4 X9 |2 f9 ~; B/ a mov es,bx
8 u& Y0 b! |2 T. [/ w- r& Y popa 7 `7 ?& t) ]* C( B0 |2 k5 J; R
pop es% R, Q7 q& r$ D6 F
ret
3 O2 t9 u$ j$ f! r4 UGet_Commandtail ENDP
& s; ~$ C R, _9 T;------------------------------------------------------------------------------------------------) l2 V% M; K* ~& a& z' V; z" r
PSP proc near
# G; n1 o, f$ R% L% e mov ah,62h
6 t/ \, b n. P int 21h+ E$ E, l* G% x& D( ]4 U
mov es,bx
8 s; i- c8 ]9 Q ?& X xor ebx,ebx
( V. {5 W5 g& T4 A3 Y/ U mov si,82h7 V! Y3 v( }5 D( n
mov al,es:[si]
2 F. w5 ?2 W3 j4 @5 O& s call Change l, B u/ c8 t) g
mov cl,4
& w1 o. Z& `( K7 K: q3 l6 s shl ebx,cl
& f" u# ^3 x$ N" s add ebx,eax
! T9 m* i# r, \* G3 _# `( K mov al,es:[si+1]8 {7 ~- h+ R- f ?: @' p/ |
call Change- o& j& m( Z6 P% R* o
mov cl,4) h: x, K" Z" V$ P0 J
shl ebx,cl
3 x* O& S5 D# Q) B add ebx,eax
( D! }3 |0 U3 z( H9 K7 @ mov al,es:[si+2]
; J8 u- [& B) Z1 _, {" k call Change
4 `! h$ S' G; X7 s1 o mov cl,4( _' ?$ e# o6 u
shl ebx,cl; z# \ R: w2 e& m- ~* U. p
add ebx,eax
( h; p+ ^4 M* c5 b& \2 R mov al,es:[si+3]
9 A4 {2 e$ I: N3 ` call Change
2 d @6 l5 l' K# P* P6 ] mov cl,4
. T. I1 B4 L1 h3 K7 M shl ebx,cl6 z8 M, l' A1 @; \" G3 s& E
add ebx,eax
% i/ z) V$ \1 h% X mov al,es:[si+4]% p% }: D7 P( i0 s0 i; s
call Change: T* W: k3 c$ ^7 V, w# j& X
mov cl,4
: }; Z0 Z5 J# C) {) Q4 x/ H( n; S shl ebx,cl
. X4 {5 j, @6 Q; z* a, l2 i add ebx,eax- {- R. f. F6 ?7 x. P
mov al,es:[si+5]
; P2 k6 x; C8 V# z call Change9 X7 {+ w3 G5 {% |9 F6 L7 B
mov cl,4
2 i, o6 O( [4 C shl ebx,cl
! ?1 {5 j" o8 T! g) Z add ebx,eax2 j+ f4 d% D' Z& U, m* K
mov al,es:[si+6]$ O: w. U5 c% W' U
call Change) }7 {2 i1 n, C9 ~
mov cl,4
1 V6 W+ U9 C/ G shl ebx,cl
$ _) R9 V" d0 d add ebx,eax
0 Y2 J+ M0 t" v; O mov al,es:[si+7]
/ \% V0 y) g6 K call Change
# H$ D6 J4 w: h- o; l! e mov cl,4: Q4 z( P$ A# B1 S8 V+ f
shl ebx,cl1 x! J3 Z6 X; N! P- f
add ebx,eax
; I7 x. W7 Z8 F0 J* i ret; t% N" v" W3 k' B) T
PSP endp, y8 F. t$ u0 d. z
;------------------------------------------------------------------------------------------------6 a3 f. s) l- c' O( k9 E6 T
Change proc near x+ n. c5 ~7 k, c' Y) Z& K6 ]
A: / C; K5 F/ n/ X8 A8 u
movzx eax,al& R! k+ b: Z& ?+ I
mov edx,eax# q3 b# F& _+ A, q1 S
cmp eax,'0' : f* F0 x% x2 v/ @) ?; l
jb A+ i% t7 I$ v' ~) \ F" u: u2 k" F4 i
cmp eax,'9' 4 p) V' g9 v& A8 K
ja B
- j: t+ Z0 A3 r/ `+ e sub eax,'0'" T+ G& ?3 F) J7 b# ~5 H
jmp short E
/ l5 C- [" C3 K5 N h; |B:
; u: U- j7 l2 l( ~: H* y6 K$ @ and eax,0dfh
! N* \3 T1 b' ]0 B% a; Y7 H mov edx,eax. z7 G* W/ b3 O# y/ |
sub eax,37h $ N7 P6 W7 n1 I0 d) B5 a
cmp eax,0ah
; h2 z. h; X( x# l3 P jb A
$ f2 d G4 \" f9 B cmp eax,0fh' H& d3 h y$ {( E. n; F
ja A / a' s& X: V" X7 w
E:
0 m$ T8 O2 [. W, q$ L push eax 6 t) T5 S# q( I3 c7 G# g4 G
call PRT
] X- C1 k# T A pop eax# _; D% u2 p; M. E: y( C- _
CExit:
2 F3 g4 L3 E& x6 ]% q4 y3 W ret
" d& g p: r. E1 C8 iChange endp# H4 k, \2 ?6 D' c7 `
;------------------------------------------------------------------------------------------------6 S4 r( \8 a- r" T
PRT proc near0 I5 C, _0 @1 u' _9 i) o3 F& w
mov ah,02h
3 X+ q5 J* v) X: p( e int 21h
" J4 c1 I+ r. e, M7 z ret1 W4 l$ f7 U" ?0 A6 h9 A( ?
PRT endp
* l2 h% F# F. D2 y8 A/ q- b) ];------------------------------------------------------------------------------------------------
( b6 m: q# v& e3 G: X! dcrlf proc near
6 g, o; r6 O' H" k- L: L# s mov ah,02h
; @8 R; x. c: T: R; m1 f$ x mov dl,0dh
0 a1 |# O0 g, k& x/ A- O _ int 21h+ l0 H1 Q$ w. G" y: f
mov ah,02h j/ N, L; l1 [6 L
mov dl,0ah! X1 S6 b+ Z' J, b) r1 O) l
int 21h
! s! ?" d! K# R; u" B/ n ret9 }3 v+ Z: ?$ \& r
crlf endp U" E* Z+ Q% l5 S
;------------------------------------------------------------------------------------------------
7 O% Y4 I& S" U: P- F/ v_32bits proc near. R5 E7 P5 ]# c2 C
pushad
9 ~/ R# R) E' v' N* X n mov cl,4: o9 e4 Z- s: z) E# {; N
rol ebx,cl
4 q) K/ U! b# Z call print_4_bits
0 \6 U6 p. z& r" j9 _7 O rol ebx,cl1 ^/ L$ o3 [, h" }5 R% p* g
call print_4_bits
. ~# ?- n3 Z4 y1 z rol ebx,cl7 w1 V% w6 {- t# h8 [- q
call print_4_bits
, }" b0 _% I* u" M rol ebx,cl
0 K& a- v5 [7 I* o6 [4 z( T' Y call print_4_bits
# j W7 B: Q4 n S4 P7 B0 d- ` rol ebx,cl7 |' S- D `: h! S6 K4 z. |
call print_4_bits
) T, ^3 d# n4 ^/ i9 C! @ rol ebx,cl+ X. T8 W& T, x, C) q
call print_4_bits; x* h/ Y& ~5 v% }& x; L9 {
rol ebx,cl
% R6 p, U- Q% m- K, I call print_4_bits
" n: ?( z' U9 Z% ?$ Y rol ebx,cl' x$ m" U2 S% |* m+ ~
call print_4_bits
$ J" N# ?( ~. z [/ j7 ~9 p' v rol ebx,cl
; _. T0 _& R- i+ S popad
% e' d1 n# C2 |( ` ret, r- _5 ~; ~/ Z, d
_32bits endp
' s+ x. }3 G7 o' K;------------------------------------------------------------------------------------------------
9 F+ v8 i& w+ b6 p6 P- e_16bits proc near/ {' [" Q p, X1 U
pusha ( k5 D# ` ^9 R6 x# ]" b
rol bx,cl
( y* y8 E3 {3 s& I: U$ A call print_4_bits* I* _3 F6 `/ y' D7 N' n; y
rol bx,cl
1 Q) @ ~7 d8 g call print_4_bits' T* E$ o$ p/ A
rol bx,cl' N& T0 @( @: o4 ?* F
call print_4_bits
& I2 I) x5 e3 P1 f rol bx,cl
* u+ ?2 o3 z0 I! q$ x' i+ d call print_4_bits
3 Y( i8 i5 m6 [8 k) g6 }0 L; Y popa2 A# @6 c+ ]* l& O
ret
5 V0 A3 Y3 T% G& Q5 X ]! E# x_16bits endp
! y; O9 I+ n4 T. P9 y) K' F3 A;------------------------------------------------------------------------------------------------
8 b; F0 ^2 x9 e( x. D_8bits proc near
0 y6 H, [. Y6 ~ pusha 1 f& P) {! {4 x# u* v8 Q6 Z
rol bx,cl
3 \: h/ L. S9 C3 V; `0 p call print_4_bits& F& J0 Z& P' {7 x* @6 q+ B. ~
rol bx,cl& A$ P- t3 P$ j- X9 v8 @
call print_4_bits
) x0 I1 _3 w4 ~- k9 s. M popa
' D, t# @! ~2 W) b C8 E ret
' V; {8 {5 _( a_8bits endp
( q8 \7 w6 u8 O# i7 `;------------------------------------------------------------------------------------------------
( N, X7 c2 G" n ~ O9 ]8 P5 T5 e- jprint_4_bits proc near
* e; H& E: x0 z mov dx,bx: X4 r$ C+ G/ J k4 G. P
and dl,0fh
a( e# z5 v% \0 H4 H( c add dl,30h
# v' q0 |% ]% P' S" V! T cmp dl,3ah
2 `/ r5 Y4 S8 G9 C' h jb print
/ u; |0 s2 g& y9 w- U! U add dl,7
- R, H! z2 }$ Q4 L) Cprint:
% ]3 ]3 j1 A* h! e$ [ mov ah,2
) @' V! K; X# x! Q! J3 T0 e0 s int 21h3 I: R- M, V" l( C; c8 [& ^- p
ret5 W! z0 \% { N3 j9 C
print_4_bits endp
- z: @3 w) N* {% l;------------------------------------------------------------------------------------------------
$ S1 \9 V c$ ~( k8 a( }( T* mCSEG ends
[' N5 l# J9 ^# TEND |
|