|
|
各位前輩好,以下的程式為在 big_real_mode 讀取記憶體的值5 i8 R. p4 k6 r! p& B! ^
! p E; f2 j& k) I4 o, r5 j6 S( Z
例如: C:\memory.exe(程式檔名) 01000100(Address)
! K' ^7 ?" o- D( j. c: t+ D: q5 ^4 G1 _5 O5 J
則會顯示01000100位置的值) G: P8 A! A4 D7 F# O0 L: _
- f8 Z0 n, l% R; Q- H; S
但是我另外還有要顯示出字串,但是顯示出來都是亂碼
8 R. p; ^6 u) e8 N' p S6 F$ c( a% r7 X
麻煩前輩給我一些指導,謝謝 8 K o, Y a- ~3 U6 @" y
- V# M1 e4 `$ O- b1 \- H
6 J3 M0 o+ n7 Z7 `7 {
.model small
+ }; v y5 ~% q/ ?+ b% d6 F.386p
. J* v" v+ d6 g0 T+ b6 H: u4 Q3 U;------------------------------------------------------------------------------------------------1 A* p; y5 d! Y' S/ G# K3 K
DSEG SEGMENT USE16'data'
- M0 w9 X) p4 k1 c: E9 J2 A. ]
2 T) ~# N1 U" `9 }DESC STRUC) ~+ q8 K' j) d6 C e3 O
LimitL DW 0 / N% _: y3 n0 j
BaseL DW 0
3 z" ?4 K6 G$ L BaseM DB 0
" C( d( Z% p( a$ U- l Attributes DB 0
1 x( G1 z% `, M2 K LimitH DB 0 1 v; A5 {" i% `( B+ I+ {
BaseH DB 0
" V7 n# n, V) A0 Z& ?* P7 a# ?7 GDESC ENDS
; A. ^6 n6 r! t
, f7 K! N. c! ~PDesc STRUC1 |3 d& o6 E' B! w+ y, S1 C
Limit DW 0 1 |+ K- q7 Z/ w
Base DD 0
8 j) G' E% x, r: m& TPDesc ENDS
! C0 E4 T$ @6 s8 X5 A/ F& o1 m( ~5 C [% y6 a8 t. T5 `0 H
GDT_def Label Fword }. {# d! \7 g7 G. g n4 c+ c
Null_Desc DESC < 0h, 0h, 00h, 00h, 000h, 0>: o3 e. P5 I. k( a5 a7 z( V. Q
Data_Desc DESC < 0FFFFh, 0h, 00h, 92h, 0CFh, 0>
: c) l$ u+ ~" f/ P% k0 k9 s6 P: TGDT_Addr PDesc <$-GDT_def-1, > b6 k0 R, {' ]5 e4 T/ s
0 f4 R8 b( G7 j, i2 U
msg1 BYTE 'The Input Address is '
0 h3 g% F# B" ?8 ~# n4 umsg2 BYTE 'The Data is:','$'0 }2 u- w: d4 c# t# k- p5 C1 C
Y% W9 q7 k3 Z' e* oDSEG ENDS( O: ^; \$ H: T; P+ R
' t4 c; o+ K) g& o1 K- F, e! f% E2 o8 O
5 g$ B) Q! V* E$ s% ~' I @
;------------------------------------------------------------------------------------------------ 7 c- R7 D' J5 w; F5 @
/ [* s0 ], @) O" Y
ASSUME CS:CSEG,DS SEG6 N% n# V# q; Z+ y' M+ q" v5 D
* z1 v4 @8 e! L) A. r0 O! e
CSEG SEGMENT USE16'code'2 s- x$ f/ r f! F, J: x
" }& E2 P g7 k- h push ds* h# z4 @" e/ O
push es, {0 C# q5 U6 N1 e$ M4 Q
push fs' A, H7 f* y0 ?& s
push gs# D) A) w; l9 L2 Q5 V- `
" z/ p3 w) `( y
call big_real_mode
$ @- S( y' h/ M- W; }
+ e0 l8 n2 k% l2 T z6 y6 w
( Y+ r Q: t1 p- F' i4 g7 D& f mov edx,OFFSET msg1;
3 x' B! t7 Y$ I mov ah,09h; / C4 a; a4 Z1 b3 u3 ?
int 21h;
* {+ [7 y& d- X2 a0 n mov edx,OFFSET msg2;
% s0 P2 n/ s& j mov ah,09h;
4 H+ Y: N8 O# e int 21h;
" s, n! `4 H' {
% ? ^* F1 g8 ?: U. x& c9 }0 |5 ? call PSP 2 j) V# n H3 n
4 |5 k7 ^3 s" } n
call crlf
$ ]/ h1 G$ \/ g1 [5 \ - ?# P" S% D$ x3 B# f
mov esi,ebx
0 N5 t" {7 @: @ mov eax,fs:[esi]
1 h& p% D3 c6 y3 [% y0 t5 I0 A* h3 B9 @ out 80h,eax
x7 D- H% d! N( ~0 O mov ebx,eax
& j6 Z& l0 J v( n5 b' C call _8bits% z6 `$ v; v2 ~9 J8 g8 J
5 t; t8 n# ~- [; w
call real_mode
+ [% S9 i- f5 U
& Q/ f8 W: |: s* ]: a6 U( a: Y pop gs
! v, H9 ]) O% q! n" z, f pop fs7 X; N0 o/ d9 s6 m& }) J7 N6 H+ B7 f
pop es
9 u" B% u- G, y) O pop ds& a: Z% g5 w* b0 e$ r& R' @
% u. f. \- R2 s' F" ~6 L( P
.exit
j+ ^3 a$ c0 `) h, z;------------------------------------------------------------------------------------------------8 D; c3 m9 N8 R E
big_real_mode proc near
$ m8 z6 O, ?* [. H9 f0 }7 _ in al, 92h( o2 M! z( u3 |* L- v$ ^% [
or al, 002
) ]8 Z* `+ [! B out 092h, al7 G5 [' t$ O( _& _* F7 {
out 0edh, al
, f# [* w+ e3 H0 m cli
+ c1 O1 q. ?( |9 u mov eax,DSEG" q5 d7 P' n$ Q
shl eax, 4
8 z& v v) v) J: \( a1 G xor ebx, ebx# ~1 n# [) d4 I: J# M
mov ebx, offset GDT_def
1 D. b9 p0 b( q( J add eax, ebx
% Q* d d* R$ @2 H5 k mov dword ptr GDT_Addr.Base, eax
7 P, O. Z2 H$ T: A9 k' R$ M. A/ l lgdt fword ptr GDT_Addr
- @9 X2 G# n7 V( n- K6 }+ u mov bx, 8 O- D4 Z. U+ _$ e4 y/ S9 e2 J
mov eax, cr0. G8 v% y N% [, H4 e6 q+ g
or al, 12 j. C9 g$ W3 G b
mov cr0, eax
8 Y: y: Z2 T7 T S8 \$ \8 Y. ~1 n jmp PMod! k0 f" @+ h1 ~9 @
PMod:" N: G. z+ g/ k% w/ [9 B
mov fs, bx9 C; Y- f$ Q! L! ~+ H9 m
mov gs, bx
1 n: m; v8 q1 r mov eax,cr0
1 Q: b9 p A/ X9 l and al, 0FEh, r, s: } R% m
mov cr0, eax % R. [* i6 k) s/ I+ K/ T v! ]5 E
jmp RMod" E4 `6 ?8 g/ W! i" p
RMod:
; B% H9 M9 ~& J* _6 q xor ax, ax$ Q4 z3 f; X) h1 o5 s8 d( r5 n6 M
mov fs, ax
7 L9 l k- `1 b! i mov gs, ax5 E7 O$ X7 s6 M; I. }' B1 t
" C4 @( ]0 K- u5 _5 Z sti/ E. K, V' D g4 x
; W1 S, x$ _2 W( c% x
ret
) r( ^: j# U X) `big_real_mode ENDP& r" \+ f5 T H2 P8 }% b$ ], X! v
;------------------------------------------------------------------------------------------------2 m+ z% P1 D/ [( P: W
real_mode proc near
3 r/ r E/ b+ q; P in al, 92h0 X* y8 `) ^! D- H8 Z% V
and al, 02
. O6 N1 j7 U9 ]- t out 92h, al
9 S+ g( y/ ~+ i1 }0 t* a ret
' q1 o& l6 e4 l8 Creal_mode ENDP
1 E8 _% h! C' j, V) i8 u; h;------------------------------------------------------------------------------------------------
% N$ P8 D2 ]; K$ W: G6 L( n% b9 nGet_Commandtail PROC near
3 L6 R1 Q6 Y0 b8 \1 p push es 6 u% i/ v- x' d+ f4 ^ b
pusha2 ]4 r. _. K( S% p5 ~" Q! J
mov ah,62h . _4 h6 o U/ P" D9 F
int 21h
. [3 t" l$ M1 f, o0 h4 g6 L6 D' D mov es,bx- y4 y8 i* d# B1 o) Z; c
popa 5 y$ f& u. {7 T4 B
pop es, F0 B. n3 M. g" D
ret1 l B# c. P! j
Get_Commandtail ENDP
1 j. _1 J+ O8 [! v. v" e+ ]# g' \;------------------------------------------------------------------------------------------------
8 p ^$ p0 O, X# s. gPSP proc near
- K- x% \3 J# J% S7 y( y mov ah,62h( w( R' o9 c9 u+ }9 S3 w( N
int 21h+ }1 _& R$ P$ b3 T x1 p# k
mov es,bx & z$ q1 I7 b: {! C+ D( }% K! h2 N
xor ebx,ebx
4 X" P/ x( T4 Z b* D6 D7 T mov si,82h: E7 F) `- @5 z/ k4 _$ u1 l4 r
mov al,es:[si]
+ P* s Z$ x* T" u call Change3 j( p; Y% y$ j5 E. X
mov cl,4
, T. |7 c& e h2 G. B shl ebx,cl! H; w; M X6 J9 X- S
add ebx,eax
5 t1 D9 C+ \; m/ q/ H mov al,es:[si+1]
) |6 V! O7 o) x9 `4 K call Change0 c; ]- ?" |: |2 j
mov cl,4
- X+ F( h) M6 L shl ebx,cl
( }5 |! b% S2 c% @ add ebx,eax5 L( F- l3 h4 r q2 S
mov al,es:[si+2]
- j( _6 l7 Q, v: |0 G call Change
5 @" p9 z* s0 S0 G9 _ mov cl,4
% q' a: k6 N2 c* u6 J- e shl ebx,cl
8 {4 D) B, o$ i( _ add ebx,eax; x8 M- Z" L- r- q
mov al,es:[si+3]$ |! Q) |3 a O9 e# z7 G
call Change1 R& ~: r. s0 ~# S! f4 W0 i
mov cl,4
0 V8 t" ~4 m( n shl ebx,cl
1 q& a' R% X( i add ebx,eax$ G a0 s y; g5 G3 M6 q
mov al,es:[si+4]4 `- ^9 L: u7 e, W5 N
call Change
4 x/ V' Q, y' q1 e mov cl,4
+ \" Y- R8 l$ C/ | shl ebx,cl. p+ I8 [! q h' O4 z& D
add ebx,eax
" ^& b6 s8 p: H' x mov al,es:[si+5]5 k* ?9 C! L# z3 H
call Change6 O0 n) k! ]) ~) A n( ] c
mov cl,4
, t1 Y' I7 |6 L. ~( u shl ebx,cl
5 v( b; \4 e: i; s! {$ m add ebx,eax" F9 I4 w, F/ s0 V; q/ g' \; ]
mov al,es:[si+6]
% v# F- L9 x3 o+ R call Change
, N: a* b8 R. p2 k. w$ Z* P+ O mov cl,4
2 Q( N( f" \2 H/ U" X shl ebx,cl, @( F# ^) \: S6 f7 b8 n5 W4 X
add ebx,eax
U. i7 a0 C% |! ?! Q mov al,es:[si+7]% K# d5 [ V1 M- U
call Change5 Z& t$ Y7 k7 }) H" m' O8 s- x9 m
mov cl,43 ~+ D1 Q1 A) h$ {" i" l' w. j
shl ebx,cl
3 ?( S4 y" b# j3 A& x add ebx,eax8 ?" l8 b2 f4 S {5 ?$ x; y& I$ M
ret
6 s% x: O C. d4 t& tPSP endp
; u9 j9 f- O# F, C/ s7 g2 B3 J- V;------------------------------------------------------------------------------------------------
( f, @! Q$ y. z9 W+ h! G& c+ aChange proc near
8 L2 C( j% J7 Q! H! JA:
. t" S6 r+ X7 Z4 t! p/ K* N movzx eax,al
; N3 z3 m8 i$ L$ m mov edx,eax
7 X( f2 x. A5 x6 U1 |# c1 V, Q cmp eax,'0' 6 S" W6 g* O+ f% g$ }8 f
jb A; ^/ h6 C+ G1 H! b+ W% n: k
cmp eax,'9' + b( l- M! V6 i- T- e2 S
ja B
' a" H1 Y. q5 k" o9 I, a2 L sub eax,'0'
+ d g4 J$ ~6 B8 V& {( a jmp short E1 Q* A1 b& x' u6 ~3 V
B:
+ W+ i* p& o5 { and eax,0dfh
/ G2 ~% ? i8 Y/ S/ M mov edx,eax
$ D2 \* m* V; r. g7 P sub eax,37h . {4 V3 [, s" T1 s# n! w$ e
cmp eax,0ah" v. l, i! o* F8 e$ E$ ~
jb A
- V0 W6 J7 Z# v9 c# }" H( p cmp eax,0fh/ a2 Y3 L( C5 t- V" d
ja A 0 e( Q ^" X2 H
E:
0 X$ F! q2 e( C; T, U: ? push eax ) E: }) ?$ b9 f1 W" p. W4 e+ P
call PRT
3 `5 L4 u+ g: L+ H4 @ pop eax
( r8 @& k3 M6 N/ s4 p( ], xCExit:
6 [0 @( Z; ^ E% v( T ret% e* A/ V1 t0 `, p" u8 I; X
Change endp
- E/ [$ Z$ n i;------------------------------------------------------------------------------------------------
' s+ u2 c; z( u# Q/ V* IPRT proc near! m! u( K$ m- S9 A* _# N& I
mov ah,02h, @; r- x0 _2 b& t! Z
int 21h9 [$ P- u/ [" m: f
ret0 \& v+ j7 T# l' V
PRT endp
# p7 L; g0 D, j2 X5 w+ b1 f;------------------------------------------------------------------------------------------------6 P" L; R! R3 W% d5 \: ~
crlf proc near
2 o( v( M& D+ e# e% P* S mov ah,02h
' z4 ?0 r9 T' ?; V* J mov dl,0dh
! k6 S3 L7 S( D9 U' H; _ int 21h
% z, B( h" D: {+ h% F mov ah,02h" z% w) ]8 m) F: m h% |
mov dl,0ah4 A; M( L- F! ?- x
int 21h
F( f) M3 q( F& \& G. M0 a% e ret
! R! u4 t6 o, n& ~4 K [ W- M* ~crlf endp
2 H2 q( W' z. w;------------------------------------------------------------------------------------------------ T) _/ z/ {/ {, ~; Z+ g
_32bits proc near" c3 P( E" R# \1 e" i( }& z
pushad
9 \1 F) f" l: i& _4 E7 l9 V, U* _ mov cl,4
& {& p4 P8 @3 a, _ y) r rol ebx,cl
/ u: |5 E _+ v. i3 | call print_4_bits
/ u/ z/ R5 D+ x' s/ [6 j+ R0 J rol ebx,cl
" r& [, B3 v9 ^/ \; d call print_4_bits
5 C! D% o% O$ ~: C3 d rol ebx,cl) Y7 l( M4 A5 c9 q- |% ]
call print_4_bits: E' \* _4 G" x2 S7 C- H5 ?- e7 F- F
rol ebx,cl
A* ~! ~8 M* `: ~9 u. s0 l2 I$ X! O$ K call print_4_bits
4 I4 o- R3 k( S3 \" O: { rol ebx,cl, d, e" S: W% b+ N
call print_4_bits
) k, C: x) l4 h2 b, m8 r: g rol ebx,cl
! K. w) Y. j& } G: e5 g/ l( R4 G* A call print_4_bits2 _" D0 \0 S2 j% ?% W
rol ebx,cl1 t: _1 {% B$ N, O4 @% y
call print_4_bits
4 }8 A! L% w# b; O9 G6 ]" K4 T rol ebx,cl
+ U+ l" F, T# ]" I call print_4_bits6 m5 w. k5 {, d& W9 d
rol ebx,cl0 R% X+ E& \2 O6 s
popad0 |9 n% q" h$ m: C2 T* s0 }: a
ret
5 k5 t% Q2 p. q: R_32bits endp
5 i3 P) z' [; M3 y;------------------------------------------------------------------------------------------------+ O$ ?/ ^& T- U. G
_16bits proc near
+ _" p. D6 J1 L9 F4 e; p# E pusha 3 E- n1 W$ M# D$ e
rol bx,cl
3 F( u# T& E6 y- T. ^( ^5 g& R call print_4_bits4 Q. [- i2 b, O: S
rol bx,cl! T: h5 n# e6 e# ~
call print_4_bits( p* H" L/ Z7 p$ o
rol bx,cl1 j( i6 T1 M6 B& S4 e
call print_4_bits
% T# C0 o0 x" \. ~& J. c rol bx,cl
! r; P) E! @$ g! I5 C& B; y call print_4_bits1 U0 {% [; u/ P2 L! m: K' {
popa) d$ J8 S; N$ _1 L+ a
ret
8 D- T0 b) T, F6 J* z3 k4 X- h7 b_16bits endp
* N0 M( ~0 ^$ u8 _5 f- U. S7 u8 d;------------------------------------------------------------------------------------------------
6 o" j! \ m$ g% K_8bits proc near; V+ i/ X/ ]$ e. B1 P
pusha ! c2 N& A9 ^+ q8 j9 C! D/ O" P5 P# a
rol bx,cl
% y% G2 @/ a( k9 h& H& i call print_4_bits
3 A: k$ W$ T \ rol bx,cl" W- V2 ~; t% r( ]7 [/ l$ H' J
call print_4_bits! m& B* u4 o" n/ p9 x
popa3 m+ k: m! ~0 j7 ~; U
ret
$ }! D$ Z% e1 k) g3 `2 x_8bits endp2 c; |! T5 ^* Q' t, q
;------------------------------------------------------------------------------------------------$ M* F7 `1 k% U2 z
print_4_bits proc near& A- \4 p" ^; }7 ~; U8 Y( E
mov dx,bx! [1 {2 f. w, ?0 F/ o
and dl,0fh
" D& u* _/ f; p7 O7 o+ F, V add dl,30h! E2 d4 @9 I7 c& G& X% e
cmp dl,3ah
3 }, a2 }. _& r5 r: F5 }& C jb print$ r' j$ i) K3 L# M5 w7 U8 {
add dl,7$ i. \8 }& e( b. R C
print:
0 I- K' u7 n# p! K, ]. T mov ah,2
8 ^/ Z8 [. r b! D! N# B int 21h
1 q6 j z; [% A* ~( I3 X! Y( { ret3 n2 V5 Z' c# W
print_4_bits endp
: d& U) D1 { Q! @6 b5 |, y3 i2 V. Z;------------------------------------------------------------------------------------------------- [- a+ t9 f$ o5 }, z+ M! y% J* y
CSEG ends1 M5 N0 d4 d# A+ g" Y. ^7 @( R
END |
|