|
|
各位前輩好,以下的程式為在 big_real_mode 讀取記憶體的值) ?/ Z5 }6 K$ x( \' `1 F
. s1 l9 z0 N$ y5 Z) U" l例如: C:\memory.exe(程式檔名) 01000100(Address)
6 L H# L" x2 Q# u+ R1 {4 n; U# L5 ]+ ]; p% z
則會顯示01000100位置的值
; c- l9 \: b Z, Q
+ e+ X% K9 \& {但是我另外還有要顯示出字串,但是顯示出來都是亂碼
) |1 ~% o! m* c: x% t$ s
, E3 v- P ]3 m/ v麻煩前輩給我一些指導,謝謝 ; Y# l7 y% y- k; n
8 ^5 n( s9 l: v( G4 Y# g$ x; |3 Q" n9 \ d0 j2 A" b9 m
.model small; w$ {; F8 N ~0 A A
.386p
; Z+ \8 |* Q# q' ?/ m& Q- [;------------------------------------------------------------------------------------------------
0 U" t4 b" G; c7 D& a* GDSEG SEGMENT USE16'data' 4 L& [) Q9 o; l( w
( X! V2 v' [6 p5 J, o: C" jDESC STRUC0 ^' D; }( i2 Q; w" @% c
LimitL DW 0
/ O! S, b- d1 x# f9 ]3 w$ U BaseL DW 0 8 e7 r( j( I2 A4 a
BaseM DB 0 0 A: O% K) m0 a9 ^4 u
Attributes DB 0 / ~, G& f) \ Y( y! ~
LimitH DB 0
. n) p7 q# D7 E BaseH DB 0
1 \- @8 ^. P# H( j5 J* n+ GDESC ENDS! K5 Q1 p( N$ k* f: {# d
. L# n" ^. P/ q% g% g3 z0 i1 q! |% s
PDesc STRUC
; z; h6 u2 v' F, C- v; O) Z+ y5 a Limit DW 0 1 f9 Q5 N+ W3 [$ i( o% f7 B
Base DD 0 + g! Q- T! U% H
PDesc ENDS
( s, A2 [( R; b* `. Z# {7 _
( M. \" V- M% \/ AGDT_def Label Fword$ f7 w1 A0 S+ _" M) ~% D; J2 R
Null_Desc DESC < 0h, 0h, 00h, 00h, 000h, 0>/ ]1 A0 [% S2 W& \* Y. a* ]
Data_Desc DESC < 0FFFFh, 0h, 00h, 92h, 0CFh, 0>: x3 a- l0 L* @. p) U" x; q
GDT_Addr PDesc <$-GDT_def-1, >5 \# u4 d1 W4 {) M: r1 I7 d
`; T* m9 j( V1 amsg1 BYTE 'The Input Address is '
8 j2 d8 b [ `3 H1 k; P$ S: q; Bmsg2 BYTE 'The Data is:','$'
1 t! S- s) [* k7 H
2 x* [4 ^1 W* E1 c, G1 h! ^, B Q7 t3 QDSEG ENDS; }4 g2 y: ?1 h# L
: F9 L1 `: i$ {2 U5 i; a/ y
% g2 Q* c2 C! L4 H9 p
;------------------------------------------------------------------------------------------------
# B( J& I4 @+ V2 T: P1 M7 l* E% E D& H
ASSUME CS:CSEG,DS SEG
5 ?3 j& t0 k/ c0 G; G* ]0 `! [4 J1 R1 x1 b7 U
CSEG SEGMENT USE16'code'
" b0 [. p& y( U2 L. @
; H" p# `. b: \7 k6 S; H push ds, ?/ B3 t7 o# a, J5 s! b6 W
push es
' o% |" B5 X; h8 }5 `2 q/ D- \! ^" L push fs; v6 z# y6 L1 o5 N8 T$ K8 _: M
push gs, `) p& S- l" ?0 X) g# Y
# i+ p+ T4 V# J0 [, X call big_real_mode
) I4 [- [7 P! [" W
6 ~- z6 E# F. u" H
b# ~" i! c/ G' {% x7 _. }: i mov edx,OFFSET msg1; W5 \2 w0 e# K
mov ah,09h;
$ P5 d; j5 K0 t, P int 21h;
5 q- j M5 m2 T% K$ K: I mov edx,OFFSET msg2;
5 a4 c" B% L/ y% O/ N- c8 r mov ah,09h;
1 W7 J* w8 D6 q, n& t: l' v7 e int 21h;
w+ p; F. O, l$ |. H/ S7 y, _7 Y
/ U9 K+ T- E$ ?/ K7 e/ N call PSP
" }7 z. I) S( P8 k. _ 8 M# {& H6 h: P0 \4 Y1 q# l- c
call crlf
1 D/ y2 i6 G* d& ~+ y) Z
* m7 A9 o# j0 s3 K- J1 Q mov esi,ebx
- ~% J& E- b# A. T- @+ ?9 H+ g mov eax,fs:[esi]
7 {1 L% L1 Q, U }+ K out 80h,eax& t! W5 |5 Y8 b# o f6 t
mov ebx,eax, s9 j- \6 P. x4 o& y( H
call _8bits
3 W$ S% z) o& |' ]3 p, t+ f
6 C0 t! M4 O9 x) Y- V& g3 s call real_mode
$ L) F1 b8 c" u( |8 P; e% W
3 i& X, L- o k% f8 M pop gs
5 h& n2 Q0 E( A: O! S8 L" }% L& M pop fs# U% e, A& g+ @
pop es
2 J W( Q0 N# N* _ pop ds
8 ?# q0 U7 t- U. }8 X `! w/ }* G: Y' P# t( f
.exit
3 F: a1 _8 V3 x& f( h7 X6 `;------------------------------------------------------------------------------------------------0 ^" {# ?6 I1 z
big_real_mode proc near$ j9 X! m1 O; X5 Y( [5 m
in al, 92h& S; A ^: K& |) Y" V% U+ |
or al, 002
5 ^/ G4 A* T" E; Q; a, P9 D out 092h, al7 M( b3 i1 j" `. H+ V& `( G0 {
out 0edh, al
* I0 T' o, J# G1 l5 v cli
2 c. \; b* F, O+ Q mov eax,DSEG
* ~) D& T: @6 J3 T$ W3 O" m5 v7 P* N, m shl eax, 4
" L) @8 s" K; L9 s& G xor ebx, ebx
$ O! k* l. ]' p' Q+ I mov ebx, offset GDT_def
$ R( G! e6 P1 H! Z8 w+ Y3 Z add eax, ebx/ Z: g3 o# O E' L" l
mov dword ptr GDT_Addr.Base, eax6 e: k/ n' i8 Z5 {
lgdt fword ptr GDT_Addr s# v4 X3 K( T$ l9 r' S
mov bx, 82 z2 O; w2 m9 `1 I
mov eax, cr0: n7 a) ]! ]6 ^0 O/ ~
or al, 11 L# v: @; z8 q; n0 z
mov cr0, eax
* G- p! \+ n. N! q# i( v jmp PMod
8 Z2 `8 [# D* ^$ W4 pPMod:. S2 l% K4 C0 A0 h8 u: Z$ V2 H( q
mov fs, bx
1 r7 |/ F; e* {' V mov gs, bx6 V2 f5 q1 I" g& \6 y
mov eax,cr0
J1 y3 u; m5 c9 H( w and al, 0FEh
; S4 i, c' Y J& x3 x" J: _ mov cr0, eax 5 T/ B9 G% G$ w
jmp RMod, d+ {0 K0 U$ F: Q P) s+ N6 |1 l; O
RMod:" l& v) E1 e; F- e+ j- b4 P
xor ax, ax
3 ^8 I% ?; J9 L5 u" N- ^ mov fs, ax
O6 G0 x9 @# L* }" {5 M; V3 f mov gs, ax
G% a5 Z& {8 u. n
3 Z0 g V8 P% Q" ]8 R sti& M& C/ h: q$ L+ k$ J( c
~8 f+ H% Q4 G ret3 ?" X/ E8 ^4 o
big_real_mode ENDP
5 E9 m* L- m8 P4 r1 A;------------------------------------------------------------------------------------------------, b, s1 w. s1 J3 } x5 y% ?
real_mode proc near
$ m7 D/ F' r5 q k: M7 x$ A7 n in al, 92h( Z5 k; |" x9 ^1 G+ x6 F. j
and al, 024 a' T6 l: p! V7 n$ w
out 92h, al * t- ^; L) ]% J W% r$ L
ret
2 h- A) [2 k N. _$ s# e% xreal_mode ENDP
2 n, J8 I) W1 Y;------------------------------------------------------------------------------------------------
" b! f/ P& B0 VGet_Commandtail PROC near; M+ J* O5 w0 G* r
push es
# M$ Q9 ~; w j$ H pusha& V' x% @# s5 V! o! T
mov ah,62h
/ O: c9 F |# v5 b+ F int 21h+ _/ ~( q0 E& c, V' [/ v
mov es,bx5 R% S. s; E# P# P: Q
popa - F7 U) G2 ]$ U' v" A! O/ ]! @' x
pop es9 m) s c. T( [6 E* x6 A
ret7 F) [% C H9 @1 y% z8 k
Get_Commandtail ENDP' R" C6 |# `# o& s3 V( }6 V2 E
;------------------------------------------------------------------------------------------------ y& d! Y' r. H1 L* @
PSP proc near
. _3 x# Q0 E+ v; @2 x6 T mov ah,62h
; }0 F. o( b k. S; k6 ?: b1 @ int 21h7 ?% |/ L9 L% l! H
mov es,bx
& X. ]$ v3 o" _' {& I) m+ i( G) O xor ebx,ebx+ P+ D/ M2 `+ x1 ~1 ^! I9 A
mov si,82h/ p/ ]8 Q; {* `2 ?1 n; I
mov al,es:[si]
- v9 Y# U- q, e call Change
4 c \4 H. E+ e G mov cl,4
" v" C3 Y3 W3 { shl ebx,cl
3 Z2 f* b7 ^ n$ {4 a add ebx,eax" k0 W/ h( ~, r# {, O, ^8 a
mov al,es:[si+1]0 Y% Q0 \+ F$ F1 Q
call Change: D2 E5 U4 a+ ]: ~, T0 `
mov cl,4
) [# ~ L+ Q3 ^( W9 c5 C shl ebx,cl& c+ a; P) p% V0 `6 @# m
add ebx,eax% c" }: @6 @' ?* I* y; U- I
mov al,es:[si+2]
. I' F0 V/ C2 g. I r6 t call Change0 ~5 |% a F3 y+ L" [
mov cl,4% R8 {! L& C- Z; z$ }8 Q
shl ebx,cl
H- s5 [6 N/ b9 C$ {* Q) h v; X add ebx,eax0 D% J9 g7 f2 Y
mov al,es:[si+3]) m9 s: }+ D8 S4 a# o) M
call Change
: B+ g0 F$ U4 c- `1 T4 f mov cl,41 c: _8 F3 |; C' o; ]+ v
shl ebx,cl3 t# x& A, C: \4 J# v
add ebx,eax
1 T4 r1 v: f9 `+ r0 S C mov al,es:[si+4]) h& z2 b8 Z, d0 Q
call Change
+ _" M5 s" n @6 I mov cl,4
8 u5 v: `$ G6 V( o shl ebx,cl
/ V1 _% @- |$ { K1 G0 f add ebx,eax
+ B! k8 v" B# T( |. l; ^! n4 ] mov al,es:[si+5]8 j0 A7 u( _( e8 \! w
call Change
* b; k1 b% I" s& u. ~ mov cl,46 h/ `& b2 u7 w
shl ebx,cl. @8 _* ]+ b7 u5 \# y! U, {9 l
add ebx,eax
3 i% [; o& k: a1 H" f mov al,es:[si+6]
6 ^5 [& M' X/ O call Change9 V) P# `) `- S. e5 }! b
mov cl,4
: A8 z3 n( x( C# z shl ebx,cl
( C/ }7 A7 P u add ebx,eax2 h; i) p7 \ S% r% k3 v
mov al,es:[si+7]
7 u, X3 V8 x$ K( K# W call Change4 H) u9 d% V' j5 T$ O' z
mov cl,4
; \* B2 I9 e+ O3 r5 d; O3 h; N1 ~( n- H shl ebx,cl
! j: ~: ]1 t* m, v7 U add ebx,eax
$ x% D* {+ Z6 o0 w* P4 ` ret
$ f' E* r7 A+ O; ePSP endp
3 p& T8 X. [3 H6 p& O;------------------------------------------------------------------------------------------------
9 ~9 }8 p5 F* iChange proc near# c9 c2 p9 i/ A: u
A:
' }7 e& o3 n/ H$ [* ~- y6 R3 a+ O movzx eax,al
. Q6 U- w9 k0 N( t) E, X& k! r) t9 t mov edx,eax9 {9 ?" a: o- B" e: p
cmp eax,'0' ( Z2 O. Q8 I2 J9 a, l6 N0 o
jb A
7 r2 y; f% Y+ g) i* } cmp eax,'9'
# E1 p' ?! ?. Z# A& t ja B
. O2 m0 a: ]# S O- }2 t+ ] sub eax,'0'
7 j3 O$ x& z, n# Q/ K3 \6 B0 R jmp short E) M3 V9 ^9 x( g, ^) K
B:! y! |! \2 _5 V( r% {$ I
and eax,0dfh
. n) X' j& F; N; K mov edx,eax$ Q7 ?0 s8 h) H9 B
sub eax,37h $ [0 q2 r. Y- j, ~' D' \/ f( S
cmp eax,0ah
- B1 J, T" |1 b- @1 e jb A
% Z9 R# {3 ~ x$ l8 c cmp eax,0fh
$ j. I: E+ B( H, e ja A
! D- k6 @" A# _. z! [E:
; J# n; z" D' ` push eax
8 d. |- |8 G# t4 d) F @ call PRT
: A) D7 Z2 r/ n7 S( R. Y1 K, u pop eax
' g% ^: Q+ Q$ W* {, ?. X% NCExit:* n1 D/ Y* c. b& W0 J+ q) G
ret
- N: Q( i* N8 v' E' |2 w OChange endp
( Z, w% X) M3 x;------------------------------------------------------------------------------------------------
% d& D" U; u8 |4 ^9 V9 n9 RPRT proc near4 M" U0 w8 Y( z' d @+ d
mov ah,02h
1 L& V- C) ?0 u: R) x) C int 21h$ Q7 o4 R# A/ G6 G* R
ret: x/ y, g* Z% t# ~( P6 T
PRT endp
% ]* p2 l5 C" Z' B, R( A;------------------------------------------------------------------------------------------------( l: |7 o. J( n4 }# B7 g
crlf proc near! u0 }& n7 x+ D! `5 H. ~
mov ah,02h4 y$ V0 P r' I! p+ z" ^! i" U
mov dl,0dh
9 P* R* X5 y3 a9 p! t* } int 21h
3 B( D7 B1 y% X8 n% T7 C! U5 L mov ah,02h- c) F* I. R! ? {1 U( J+ r
mov dl,0ah1 b" E- R( p h2 u! u# V
int 21h
2 [9 a4 q* f( D8 n# T5 ?, X4 T ret
7 r; ]& i! t1 y2 P+ V/ @* Lcrlf endp6 g4 s! j/ U6 j6 O% E% k; w; @
;------------------------------------------------------------------------------------------------
g) L5 \& o$ d2 P) D( r7 m_32bits proc near1 U, [# }! [3 Z( {. e) { v
pushad
8 W: V' |1 D2 B7 G: Q) c1 l mov cl,4- W0 H* `, e* K! R- R
rol ebx,cl
% F& B% i: b- g/ e# K/ m/ c call print_4_bits1 d( ?% @ C: d4 ]1 {
rol ebx,cl
) g( S& Y8 h5 L" J9 _7 m1 K; w call print_4_bits
* i& n% C& \$ Q# U6 z# c rol ebx,cl2 @% J" x: a; G' T* H0 e
call print_4_bits
7 ^! f( Y! n4 I0 z8 ~ rol ebx,cl
( _+ ]9 ^1 x2 L6 I) r9 j, v7 F call print_4_bits0 Z. o7 `7 [2 ]3 x T& _
rol ebx,cl
" p7 G z* X4 x5 \& P* l. g( N call print_4_bits
2 a" I9 X2 _6 L( `. D! e2 y rol ebx,cl' m2 X8 O- u/ D d9 Z2 Z
call print_4_bits
( y' ]1 b1 F, f: n! d! u4 H$ x rol ebx,cl. T& x% R2 V- D+ x9 H
call print_4_bits
6 `3 n) }; A4 a% { rol ebx,cl
, } ^& G& O6 o O; m' L call print_4_bits: C# A* n+ O; f
rol ebx,cl
. ?. ~! h! e/ H( O3 m popad
8 N" j* X1 @2 ?$ _" b ret2 G. w, X' C( ?# j. R4 i5 X
_32bits endp
" i2 X" m2 {5 k: l. }$ y1 D1 x;------------------------------------------------------------------------------------------------
9 v. A0 U% ~* J! H% F* {_16bits proc near" V! M# L1 j- Q) V1 D6 k
pusha @. p& D" h% L% f) L( D" t6 C
rol bx,cl
$ @: K% v/ M+ h call print_4_bits" j* R- ?/ M8 _) {+ i/ g7 H' ^
rol bx,cl
- w; ]- Q1 S' V6 j& }0 N call print_4_bits
) _4 q- F& b; t; y rol bx,cl
h# W* F- Q& _9 M6 d call print_4_bits
" Z6 I$ E: d. o/ V1 C9 J rol bx,cl
! r8 O4 {9 n1 a) y3 h. T call print_4_bits
# k" U* G% E3 s( J popa: Q, p( k- e7 o9 A
ret: M7 i5 C* e$ d8 ~: I7 t! l
_16bits endp' z6 I& h, x% r* y; E
;------------------------------------------------------------------------------------------------
( x" C u& D2 F7 G_8bits proc near' K, ?' E3 ^! U5 r) m4 r. K
pusha 9 b. Z8 F+ b& q, w# R7 } k, {
rol bx,cl) M* [% Z3 o* M# s" X2 m6 _
call print_4_bits
: i2 G2 d2 G* t5 _, `' h3 }+ U) E rol bx,cl+ m+ i' N6 i: ?: x
call print_4_bits4 v. ~2 ^( i. R4 N6 i0 l
popa
3 C( a6 o6 _& N: U8 Y$ u9 V ret, V( }2 r8 V4 R% M8 P$ [9 h
_8bits endp
+ D5 j9 _$ o. x9 Y% v7 d+ F' Y;------------------------------------------------------------------------------------------------2 P y( N- F$ b/ c8 V% F
print_4_bits proc near
% g1 U! u' Y+ x6 b9 m+ q mov dx,bx s4 K- y7 ~9 @0 W( R
and dl,0fh8 i& X$ l% p8 B! k% d9 r9 N! I
add dl,30h8 j' L$ q3 u; f4 y. I
cmp dl,3ah
. a3 z* I3 z$ o! x2 B( w jb print
, C8 d" [& v& \$ d% M: x- L7 N add dl,70 p Y2 i9 w0 o9 |
print:
# @ {' t) |3 k- U( x' @! [ mov ah,2( E* q; p }* p% S
int 21h6 J# u/ [+ U% F- C5 E
ret
. A9 E7 s/ L2 m! p: B; aprint_4_bits endp 9 x+ U- I: r) K0 Z$ O: J/ _% @
;------------------------------------------------------------------------------------------------
; A. J5 N0 }- r7 w' I% z) g6 @ MCSEG ends
4 h% S) z" y: b) r8 H x; zEND |
|