|
|
各位前輩好,以下的程式為在 big_real_mode 讀取記憶體的值
( y7 [: C7 u* X6 P
9 l u/ v+ q2 D3 n例如: C:\memory.exe(程式檔名) 01000100(Address)
1 x" N( ]6 U6 `9 W W& a, r$ w6 v$ |( r* {) ~/ Q
則會顯示01000100位置的值0 b5 H5 O' |7 k' i
& h- d8 t4 n& `% q6 |* |8 L/ b3 u但是我另外還有要顯示出字串,但是顯示出來都是亂碼6 P) d: O& r: K( h. ?( I( m+ S3 K) _
- ]/ n/ }: w6 t$ j! _6 M
麻煩前輩給我一些指導,謝謝
' w; s2 C6 Q! S5 C; }
5 x7 C- [' l' ^
( T6 j9 b' ?9 P9 @.model small7 F6 W, {- a* g
.386p
: ^( o; Z& [: O1 ^;------------------------------------------------------------------------------------------------/ ^7 r! v# _& Q \
DSEG SEGMENT USE16'data' 7 z8 L9 ~- ` v+ S2 O& ^% k
) S/ {8 u. z4 i6 B( \) cDESC STRUC
0 e0 m G0 e% I; v! F( b LimitL DW 0
5 E4 i+ e( r1 r- ? BaseL DW 0
" w5 A+ o9 C' \; |; f: K% B BaseM DB 0
/ A3 E! b3 B( `! G Attributes DB 0 1 x. W p4 ^' U
LimitH DB 0 ! ~' h3 Q& ~( y% d( E' {
BaseH DB 0 5 g% l, E; o4 n5 c/ [
DESC ENDS
# b) A+ g5 M4 v
2 Q' f) N' u! B! i( Y" Z4 NPDesc STRUC
) `$ f) E( K$ R( C/ v9 [# c& U Limit DW 0 ( C# b0 h) M0 e8 W0 T
Base DD 0
! W @# E( I FPDesc ENDS; c: [9 r; V8 X+ Z2 I/ ]3 ~
- J% ]9 z& h: cGDT_def Label Fword
$ B6 [6 `# Z) G, mNull_Desc DESC < 0h, 0h, 00h, 00h, 000h, 0>' h7 s) p, t1 T
Data_Desc DESC < 0FFFFh, 0h, 00h, 92h, 0CFh, 0>0 j# D) H, z1 `4 K
GDT_Addr PDesc <$-GDT_def-1, >+ I! q( V6 J ?7 K: K
. b% ~! F' E1 k7 n( ~% T8 p
msg1 BYTE 'The Input Address is ') h' u9 G7 E( |9 e
msg2 BYTE 'The Data is:','$'
* B4 K% s$ a4 ~8 b0 m/ @# h# p, }; G' ~2 d7 c! I
DSEG ENDS
Y, E' w0 a. t7 ~. b) w% ~1 ]. }( @" P, S
9 E; N* c L d; d- H2 R5 l;------------------------------------------------------------------------------------------------ + }6 i5 S* s7 M7 Y6 q5 G
1 V: k3 p0 q7 i6 u: RASSUME CS:CSEG,DS SEG. U$ l. t2 b0 I, \, t+ _
" K9 ]' d6 A s/ k! |CSEG SEGMENT USE16'code'
6 J5 p6 ]& n- g/ C
, C7 H% m8 r# I% J; j! f0 l push ds
) Q6 o5 y5 A( Z push es' M# E( P- y$ _9 c n, ]" E2 y
push fs( |: e& g- z5 G( O8 C ]( J& p
push gs
" x9 L, D5 x' \" w & | P0 A l) w1 X
call big_real_mode: w% m R$ N; K7 w: o9 R
$ o9 G- | e' t4 ^$ j: O) G
3 ^( q' i) m% x2 i mov edx,OFFSET msg1;6 w3 ]! l/ c3 j4 A9 k5 |
mov ah,09h; . M9 M: S* \' v; C6 M$ i* b: S! v& _
int 21h;
) e: k; T$ o7 b( j0 b mov edx,OFFSET msg2;
$ v/ w) R' b2 ] mov ah,09h;$ k; o; [3 F+ U. V" e7 J
int 21h;+ }) A( b2 W, y% m4 i# h
# x& n! k. X& p# b+ }
call PSP ' p! E& Q2 c; s! C q* x
5 M- g* `5 @) S( Y M; t4 S
call crlf 5 f+ i) U# n! X; f$ v1 Q- J
2 \! ^6 g- T; v% }
mov esi,ebx4 y/ O7 x3 u& h+ k z4 D$ w
mov eax,fs:[esi]1 q$ C4 C3 Y8 H+ i! U$ y" u
out 80h,eax
( v) u# K9 H( b5 ] mov ebx,eax
% }' U3 H- l1 R% P call _8bits6 o) X0 a% X' ?4 w: h2 U
: ^) l1 l; j5 y call real_mode0 ]& ]& H, E. @# c& x
( C* I' I' Q# _9 F, e4 s U
pop gs$ d; ?! }, R3 K* ]
pop fs
$ V' d' L: B! `: Q pop es# |. f, C1 S# s# I
pop ds9 M$ b( w4 V- ]& y
+ ?; F( v1 I# L" b- l4 w .exit+ A8 Z3 J& ]$ ^5 k$ x0 k$ J
;------------------------------------------------------------------------------------------------( ?0 g5 y9 i& g$ j0 n% q& D
big_real_mode proc near
: _; y; A. I* \; f8 L in al, 92h5 p: j/ l% m/ t7 L* m
or al, 002 R+ M8 Y- ^! a/ @% z
out 092h, al
; z6 Y' {6 U3 e! Z4 ^3 w: n. F+ Q out 0edh, al! i1 z# q/ h, B" ?
cli
" |) Y, ^8 ]6 x6 ~ mov eax,DSEG
& C4 n9 |& J6 L1 l% l8 r shl eax, 4
2 i+ d9 I9 Y' X* D# g# ~ xor ebx, ebx
0 u6 {& w9 ^) \, n mov ebx, offset GDT_def
* I- k( [& i; i6 O/ W+ b& `0 j add eax, ebx
) `+ j! E0 S% w mov dword ptr GDT_Addr.Base, eax) J! h' K& P" g0 t6 _; }( W, `
lgdt fword ptr GDT_Addr! \; G% K# s) B; y. C1 O- Q
mov bx, 8
" v U$ `7 K: g' z mov eax, cr0
/ R( |/ m( m$ Z or al, 1- [! ~7 E; m! O8 X, E0 E
mov cr0, eax' l: j+ A6 W" G# G- S
jmp PMod9 U+ E ]% {2 V( M5 l7 \
PMod:; p, h, W! p$ S1 S+ q6 j# ?% M0 s) d
mov fs, bx
! U" A% F# S9 P5 r mov gs, bx
. G, n* ^* b4 O' R w, ?& } mov eax,cr06 a# C S) j6 _6 c" U
and al, 0FEh' v/ T0 _* \3 L
mov cr0, eax
* f" X2 Q) b& s& L jmp RMod$ x" _+ b: A* B7 X I c
RMod:6 Z! q9 \5 |) b2 a
xor ax, ax/ {8 M0 Y: D: M$ x
mov fs, ax9 O8 Q6 G, r9 l2 G( a
mov gs, ax7 R d' m, Y. k+ K9 F: j# G8 R
' J& U& x9 Y% M/ x' L: o. w
sti
1 X2 \# C; k3 Z$ l' P : f9 b% d& \6 i/ ~* F
ret
1 P& o( S) ?5 E+ T: abig_real_mode ENDP
$ J( V, h3 v+ e8 u: U3 `. a& o;------------------------------------------------------------------------------------------------
; e+ @' @/ X; H) D& Vreal_mode proc near
3 a! Q+ u0 K& h, w1 B# d1 \ in al, 92h% n0 A' x+ E" b0 G* O) S
and al, 02# f$ ]$ E8 v& z! } \4 p
out 92h, al
. {2 G! ^" E7 O( u ret# h% V2 z1 ^" x1 _; J# c$ ~0 T
real_mode ENDP4 W2 U5 f, N! `) q
;------------------------------------------------------------------------------------------------
: \ J5 O" M9 T* qGet_Commandtail PROC near
0 Z6 u2 O& c" L$ w+ z G7 {2 L push es
% U5 v3 h/ ] G! {" R$ z! _' f' `2 S9 w pusha
2 A9 @1 R8 \9 I# e9 t1 R mov ah,62h
* \/ B4 p/ C; h2 z3 V2 N int 21h
- p! M) q( A2 s mov es,bx+ i0 _/ t& b& _: x; }$ {: `
popa a5 U, w' w8 c
pop es; P7 N+ v" g' X5 j5 g; F) X
ret
5 T" y( j8 |- o0 X$ P( LGet_Commandtail ENDP
" H- _7 W. d! W+ D3 G;------------------------------------------------------------------------------------------------
' j' H3 l# u0 D/ u& i( YPSP proc near
; H7 G: _& ?& Q) ?6 @4 \ N# Z mov ah,62h3 p" v$ F1 t" b" W
int 21h/ q6 N/ z/ s) U7 {- k0 m. `3 q G
mov es,bx 7 X1 K L$ K' {
xor ebx,ebx4 L& k6 M! e( D, @3 i$ @
mov si,82h
7 G) l+ d2 ]' A3 ^5 L5 G3 L mov al,es:[si]& X" n6 q) r0 N" ~
call Change% x/ f/ g6 J& M7 ~7 \
mov cl,4
( L* K+ q* g. L3 c- h shl ebx,cl- E4 ]& E3 w( j& b% q
add ebx,eax
) i6 N* x7 A& N2 ]1 P5 ` mov al,es:[si+1]5 s4 F1 {2 X/ g: R7 u
call Change
- d3 V! [- W4 c8 s, r7 { mov cl,4' x( P* \8 a7 k2 e
shl ebx,cl
, x* c3 D4 z; E% r add ebx,eax# k, ]4 H1 _& @. G; D& C
mov al,es:[si+2]
) c0 C$ _( J6 o. _ call Change
. k& [: {7 A5 L8 a mov cl,4
1 F ~% N5 \9 ?/ [4 F1 P shl ebx,cl5 U0 G% s5 C) g1 Z
add ebx,eax. ~8 _ E" O# R7 X6 U% K7 d
mov al,es:[si+3]- a2 O D( ?, y/ m1 A9 E# u" h4 ^4 A
call Change+ w) y4 g! k7 \# @
mov cl,4
. y: g- Z4 x: g# } shl ebx,cl3 w7 h& h6 D& c) z
add ebx,eax
. y! j6 l2 b/ ^& x mov al,es:[si+4]; N; U u1 {7 Y
call Change
5 f% F: R2 { ?# F- `4 p! U mov cl,4
0 }4 a: x b7 U; j3 T' t9 @ v shl ebx,cl
( v7 E8 O G, b2 G! i add ebx,eax M( _8 T: C4 P5 M# X# y" w
mov al,es:[si+5]0 b+ h. t! ? w" S' ^! J
call Change
x4 A( _" K/ ` mov cl,4
3 ]; }3 z- m @8 d" B. ]7 V0 i shl ebx,cl- H4 ]3 S0 n! z
add ebx,eax
?( c/ `, a3 G' \ U: F" j mov al,es:[si+6]
, m' B" y4 p: ~% A# v: e4 Q9 B call Change2 P U' m- o& d9 x) L
mov cl,4, o. ~: S5 V3 d7 G: F
shl ebx,cl
' `8 p" w: h' r; p P add ebx,eax U3 c" n3 w" S
mov al,es:[si+7]$ ^4 v1 K$ `% P7 o' o% R5 N
call Change
3 d& [( T. x& x9 y* m mov cl,4
d9 B+ Y- M" B& r$ X+ l& |, w# J shl ebx,cl5 M. t/ k$ Y( U' h5 p
add ebx,eax" b0 v. p' R' P( n
ret
" o( ?2 n$ @* j# k8 Z- [5 u/ QPSP endp
! e$ K( x$ T5 X- N* N6 b) c* V9 x8 x; K;------------------------------------------------------------------------------------------------
0 R) \! F! |, O" ~! cChange proc near) E& Q/ v. i& B8 {( J9 y
A:
& D+ R) `) q( ^1 h+ F9 Y8 K' O( d movzx eax,al+ b9 P0 r, k; ^' {: v
mov edx,eax
. b* D5 C, ~# s6 C5 p, u cmp eax,'0' 2 b M8 v# e5 P0 g
jb A
3 W9 v9 O& s: y$ z2 B0 } cmp eax,'9'
7 X1 U1 {8 J. u$ b r ja B
$ S3 [/ ]6 n3 b# \9 y sub eax,'0', P0 v9 h( l0 L8 d3 \: [
jmp short E
0 a# i, {" F; a9 x6 a; w3 EB:) a; O) y8 P! F6 h
and eax,0dfh 9 X2 d6 s# w. A' @$ {
mov edx,eax
. W6 _3 \+ P9 Z- }, U* k$ S sub eax,37h
% A" G; u. I, ?' X# N% Q- a, G. C cmp eax,0ah
( d' v: i V+ ]8 c jb A
! ?, u6 _: c" O! s( _0 v$ E cmp eax,0fh
: ?: r2 d" ?* a. F! t/ d- R ja A
3 v$ H7 W7 k7 M, ~6 fE:+ f$ z+ {$ k. n0 Y$ ?4 _' Y
push eax
# s. p* x+ V$ q$ Z# S$ N1 K: C call PRT
8 I4 U+ s& T3 C0 b6 I pop eax
) g4 h8 t1 n- N) g k5 _0 XCExit:( A. p5 J7 u& n* S" g
ret" K9 r& d# }% L2 Y9 b6 R/ g
Change endp
n0 Z5 {6 L. w) ];------------------------------------------------------------------------------------------------
H( w6 U: ~0 G- rPRT proc near
. V& x6 ]$ a& j4 O# J/ ^ mov ah,02h+ ?% } w* l2 d, K% r8 [' Z
int 21h! [: @( y7 I6 m, b8 f
ret
* b3 u) I4 K( y/ V- kPRT endp
3 W- `2 @( O) z* M2 T7 d;------------------------------------------------------------------------------------------------6 c" ~6 d! m5 p$ u
crlf proc near
; S% T. o$ U2 c2 J0 t mov ah,02h" S, L/ M9 E/ S- n' u8 T1 u( w
mov dl,0dh7 W2 w" v& p1 E9 |8 q! G) d
int 21h. L/ s1 @6 D6 l4 ^2 n
mov ah,02h
& T- h2 | w# `) o( G2 y. C mov dl,0ah
7 M7 R) g W6 |; N) A: d* {! S" a( Y/ O int 21h
) N- h5 |6 y/ f6 [' M& u6 p ret: F4 n- R9 B7 K
crlf endp* \% B8 D& T& d
;------------------------------------------------------------------------------------------------8 Q7 Y9 m4 i; V
_32bits proc near
+ M+ P% L) q4 n" l, o! l( e pushad u% Y5 c# l" K% X$ F
mov cl,4. l& l$ l) w: ]/ i4 \' R
rol ebx,cl
" P+ \! Z2 w: z+ ?4 Q call print_4_bits
* s! P% Z5 Y7 t0 O) G+ G' l3 [ rol ebx,cl
0 v1 C/ R- o8 z- J \ call print_4_bits
" X) q- T5 _4 w3 l | rol ebx,cl+ ~4 |1 s @" ?1 T* z# Q
call print_4_bits
: A( U# G% Z5 M rol ebx,cl
/ ]# c7 X0 i0 F& I- |& J call print_4_bits
& k# ~. f' C) N3 p' j* E5 ?) n- M3 h! c rol ebx,cl
6 k9 u5 p( w8 [% ` call print_4_bits
$ _' Z/ a9 q4 i5 `3 U! v rol ebx,cl- }! q8 G& F6 l+ _# a5 P4 n5 t. {! u
call print_4_bits
: G5 I4 H' C! O9 _ rol ebx,cl0 L' n+ r6 g2 F/ P5 P
call print_4_bits {# I, x5 U1 A
rol ebx,cl. f) S" G# O8 ~3 D5 F: a2 A
call print_4_bits
6 X8 O1 S0 t) _2 @$ ?- `& A rol ebx,cl
- ?( L/ l2 W$ C$ M. Q1 G2 J0 H popad
$ F# B* n6 s# \: n1 N9 ?2 f ret% h/ b/ H. T& j+ F* d9 I; M
_32bits endp& U" {/ Z# i. O f n: B, S6 Z" n
;------------------------------------------------------------------------------------------------; f) M% p$ ~* X
_16bits proc near
+ ^7 V% b" n" S0 G- v pusha 3 c% t, |0 g0 |8 R- T
rol bx,cl
" o2 o+ J2 W0 ? F call print_4_bits& c5 W5 H; E7 U; M. u3 e, H. v3 N. G
rol bx,cl: ^5 i) U: p# \. C5 O
call print_4_bits2 Z3 ~9 T6 T- x4 {% T) x
rol bx,cl
1 L) q$ Z& I' q call print_4_bits7 n& \& l! N0 K# X# y$ L% S
rol bx,cl
+ U' f7 U$ d: u0 N& W7 { call print_4_bits9 M Q; H @# `# u6 W8 e
popa
- i& G1 E7 v% v. H ret2 W- T- V' b! P, M6 r7 j+ g
_16bits endp
- N7 S; c b- `- s;------------------------------------------------------------------------------------------------. f4 e) }+ D# A5 `$ h
_8bits proc near
0 P1 b' c( F; o5 n$ e9 s pusha
" j* m) w( y* n8 D; ^: Z0 u4 @ rol bx,cl
$ v# H5 c1 f+ k/ l call print_4_bits
" }5 ]6 a/ o! g+ i8 P rol bx,cl
6 y6 V4 |* q1 }, L, z! t2 |* d, m call print_4_bits
/ y d. D, X0 ]8 v# L popa
; @0 Y% T2 V3 T" B7 ?' E' y. p9 H ret
, Y4 u* ]# x/ y7 y, X; S4 \_8bits endp
: Z, _2 {, c/ h# t( b* @2 v! R4 P;------------------------------------------------------------------------------------------------" r( N- j; Y' h/ k
print_4_bits proc near
& t3 y/ \& q+ P+ r mov dx,bx! R9 Z' F: c* w5 `
and dl,0fh0 s4 o/ W/ N% n- t5 J5 u
add dl,30h
; t! D, I2 s$ p2 V5 E) V0 ` cmp dl,3ah- s0 K+ i* a2 y, C4 X9 u9 ^$ Z
jb print
) K7 w2 U' ^5 a9 A% W: K) N add dl,78 y# a& a1 r. ~ l
print:
& C5 R2 ] ~: R9 g) _ mov ah,2
2 z. t# T6 m$ G% A7 r int 21h
! A) D3 d/ R6 ^. }2 K ret1 a; z: a* R* n1 ?. A, \
print_4_bits endp
* [9 t8 D' Q! h! z" E. I;------------------------------------------------------------------------------------------------
- c! w% H$ t, ECSEG ends
& m3 A1 m8 I. IEND |
|