|
|
各位前輩好,以下的程式為在 big_real_mode 讀取記憶體的值; k$ h) c- e- I( {+ E8 N
+ x; {, E4 ]7 m- l* z/ V/ G
例如: C:\memory.exe(程式檔名) 01000100(Address)
( L) A4 z+ }2 e9 Q$ B& B9 a
# P# ?3 F' e2 ?, C) \則會顯示01000100位置的值4 D0 q! ?) b/ k8 j! h7 s
3 _; N& o% z2 h4 U
但是我另外還有要顯示出字串,但是顯示出來都是亂碼( s- u+ B3 C5 M: Z9 S: D% u/ o
7 I# r7 T$ B) z7 L+ [" B0 o
麻煩前輩給我一些指導,謝謝
' p5 [& ^9 q9 k3 y L: f) Z: M1 ?0 L- \" s1 {9 I" l8 T
7 h8 }6 _: K% E7 i7 H% ~.model small0 ^9 Q A' j. @( W/ W0 q
.386p
' @8 B1 V6 i- M. }! w;------------------------------------------------------------------------------------------------$ n& O' A# z" j$ r! I5 J
DSEG SEGMENT USE16'data'
. J' F+ Z0 j" Q3 I5 p
+ Z ^; z8 B" z9 cDESC STRUC
7 M' I& {. y% @" {& |) D* f( P- S; d6 } LimitL DW 0 & H' z+ w% P, l4 ^4 _* S6 r! {
BaseL DW 0
3 C# x+ V' c% y6 \, } BaseM DB 0 8 Q" g) K4 `" j* |5 A0 c# m
Attributes DB 0
X7 i; L) w B! i( v& ~3 U LimitH DB 0 , W& J$ ^6 C3 y
BaseH DB 0
5 {! l( X; W2 N+ a3 z3 V& dDESC ENDS5 f0 P O' P$ ^6 x# d
6 ^4 D8 |7 X4 F* n( o z# a( o
PDesc STRUC7 Q$ N+ H& r7 F% q7 J
Limit DW 0
3 G' V# m# G) ~0 j) U Base DD 0
( u* w' V8 [4 iPDesc ENDS
3 L4 q$ u, i6 \' Q* F+ X8 |8 g* g
GDT_def Label Fword
+ B/ \" s( f% q# U( ~Null_Desc DESC < 0h, 0h, 00h, 00h, 000h, 0>
* r3 O" |% w9 p4 DData_Desc DESC < 0FFFFh, 0h, 00h, 92h, 0CFh, 0>. M/ v% c; ~, G7 i4 G4 K2 }
GDT_Addr PDesc <$-GDT_def-1, >& \" e) T) H. I3 u
4 G0 V$ v3 d' }1 g: `
msg1 BYTE 'The Input Address is '# \9 l! E+ o. j/ A8 L
msg2 BYTE 'The Data is:','$'7 R6 O8 p O" d. I$ n; r( L
# R9 W, Y! _9 R
DSEG ENDS$ N: f! J+ X0 I* }7 N
( _. C* K0 x: d! M2 r
1 y/ _9 G) y# f. M, S/ _
;------------------------------------------------------------------------------------------------
, N0 e# D' W0 T2 C. g3 j' L# R' q N
ASSUME CS:CSEG,DS SEG
+ m* S5 S! V6 ^$ g0 _% {9 j9 [/ t0 J- T: l
CSEG SEGMENT USE16'code'
5 E2 }1 M r7 f7 V' d
( f# V' f6 T0 X push ds- \- r1 z; M; Y: c6 {# q, J( ?
push es& ^3 P% Q5 v- d; g5 U+ d
push fs
* W: X5 ^! \% j' b, E4 }4 ` push gs/ k2 t! }( m! K1 H" S
' N, U+ A# K; ]* p
call big_real_mode
# ^! w7 o8 `7 V! O4 L' e
8 a9 w4 ?. L8 g5 b6 c 0 S1 q! w) q- x
mov edx,OFFSET msg1;' B, C& F; f& E# K$ \# m5 \
mov ah,09h;
3 m/ r( I# d+ g8 ^5 V int 21h;
2 h; M$ H2 x8 _9 `2 ?) n4 \- `, K mov edx,OFFSET msg2;
/ ^/ t$ V) i0 F7 S1 f mov ah,09h;
/ S' |0 F" D9 z6 M& E( |& ` int 21h;4 a. }6 H8 `# A ~ O2 O, S, {: d
% [9 Y! o% `1 ?8 D+ E call PSP - B+ \6 h" |- `
: O! O. w: p( [- ^& p" [ call crlf
4 A& Z! a6 o/ m/ h / L+ H; t+ p3 O+ _
mov esi,ebx( ^% ~# e. |( {& J- f* s. y
mov eax,fs:[esi] d% |" X. [7 w8 ^. S+ w
out 80h,eax
" q4 e! h* n1 ^) ~& [ mov ebx,eax
$ {9 U; U/ i* c+ P4 v: n: X, o call _8bits+ b) _7 h) t5 O! O' x4 K
0 _1 ? g0 e/ r& r w
call real_mode
: n; \0 r& k$ D6 x$ d) Y0 ]
7 E6 ^5 n3 v5 u6 ^* l5 U' h9 v' P pop gs
& _9 w6 v' b& a9 V" g5 g* ? pop fs9 {7 M, d& V4 ~$ F+ Z
pop es
$ y9 `6 v* v. ^ pop ds3 ^6 [, z# k3 ?. }
0 e% J6 G4 _- B
.exit2 G! k3 G6 U. K) h& U
;------------------------------------------------------------------------------------------------
4 f2 o9 `& B( n, J" L Wbig_real_mode proc near9 B- V: _8 p! d6 ~
in al, 92h
9 G5 `1 N3 }' F or al, 002: V8 L! I& f5 Q& c- w
out 092h, al. B% N( g% B* D
out 0edh, al# V* K _: y, U+ I
cli
1 y; E6 @) k& E: i8 g# N mov eax,DSEG
! G) B# h3 k5 y$ }+ q8 w, J shl eax, 41 E- Z* }8 p; ?/ h
xor ebx, ebx0 I2 U+ c$ ], a7 j# n3 u
mov ebx, offset GDT_def
- f B, b7 T0 N; I5 v0 [0 C: `% w add eax, ebx. s" H5 b2 I5 c
mov dword ptr GDT_Addr.Base, eax: N; T% _! W+ F' Y, M
lgdt fword ptr GDT_Addr* g9 \4 X$ l* A1 w* A
mov bx, 8
- z7 W4 \& a/ B1 {% e9 W- T) k6 P mov eax, cr0
+ |8 K0 R b6 `& R" J) b, b or al, 1
6 V$ \2 H f3 Y6 E* j mov cr0, eax0 w; f- [# N- i
jmp PMod
+ r8 Q. G0 b1 [+ SPMod: l! Y4 H% Q' N1 w
mov fs, bx
" O. Q6 ^2 W3 s3 Q5 ^ mov gs, bx
0 T% U/ \; ^9 E0 p; m" P+ a mov eax,cr0' m( P& |. B4 _5 w# F" N4 T, H
and al, 0FEh
2 k' G$ L) ]: D- \$ z5 ] mov cr0, eax
3 y) |* k& s3 y6 R& N! O. c jmp RMod( z/ |/ E# w7 O9 r( Y
RMod:
: h* h2 P: r/ e xor ax, ax
, j( ^, _: c+ A5 u( ^& Z" S; u5 e7 Y mov fs, ax
4 `2 z ^1 s$ q( p! \3 }6 q mov gs, ax. L3 `2 {6 e; F: Q
, }3 I; h$ F% T2 R; q sti
" ~, d) K( r; E9 @9 `% j3 F 2 y5 e3 Y! T8 G
ret
+ |2 i# G: o8 Z; [; a3 Abig_real_mode ENDP
t5 a% Q* \! h;------------------------------------------------------------------------------------------------9 F4 V8 J* V& ^- n$ F4 j& J
real_mode proc near
5 _) K4 K* V, B% ^4 Z1 B/ Z in al, 92h: I+ R$ u% \) c3 m9 P3 x0 y, T
and al, 02
) W2 H1 W2 f M3 K3 d out 92h, al 8 ~4 W7 p2 u, S2 T3 Y
ret! z$ {0 S$ t( ]; a! N+ S
real_mode ENDP/ H. w F! |9 y+ }/ p
;------------------------------------------------------------------------------------------------
; ]' w2 n9 T4 k- o9 x& AGet_Commandtail PROC near
5 _# [) s2 h4 c* H push es 1 a$ R; }0 x1 N# P5 L- }) w& H @
pusha
0 F( c$ ~0 _+ A3 m mov ah,62h
3 w9 G, U! d: u- v int 21h
" _% V3 x# [. ~ D mov es,bx
/ E7 x3 G1 j! O$ Y# U5 C& Y& D popa
" O6 }) L) _" V' E8 W- y pop es7 o; _6 V7 J, S6 N W
ret
' I1 P7 i6 i3 y: DGet_Commandtail ENDP x! w4 Q" D5 j
;------------------------------------------------------------------------------------------------
; [) |% J5 J9 X( fPSP proc near# v5 g" s, e) c/ F _9 d9 b2 X
mov ah,62h
; ~# E% e0 J3 N+ t/ |$ T int 21h( S h3 W) d' n& @
mov es,bx
7 I1 ]5 [/ U% `! e xor ebx,ebx3 S# _8 {$ c: {5 @% S! L0 x
mov si,82h: i) G/ \ t% r0 ~1 E! ^
mov al,es:[si]
- D9 j* C$ s5 g, M; T7 e call Change
: l/ {1 C8 z0 q" h& d mov cl,4( X' U( O6 Z; W4 a" x
shl ebx,cl! }' ~6 i9 N, S. f' {7 h8 w
add ebx,eax) U1 P, n9 k2 Q9 H/ [
mov al,es:[si+1]
8 r% ?! |, V! B call Change& m' `/ X( M6 l4 ?8 u. Y
mov cl,4
& Z6 L8 L9 ^/ i( v+ W# N shl ebx,cl
& z7 P' \" ?0 U* s) T y add ebx,eax! i C3 _7 ]' V4 \' i
mov al,es:[si+2]: n" Q! _* I" g- c- P! p K4 I0 m
call Change
0 G* g# {, w4 t mov cl,47 b# x) {. g0 S5 b# v6 a2 c
shl ebx,cl$ m- r; E! P, s! K8 x
add ebx,eax- j5 \( ~+ {' ^$ g7 Q
mov al,es:[si+3]
. ` d+ x* t/ N7 ~/ ]5 A call Change0 |, C3 @! j3 n1 M
mov cl,4/ P! B; ^4 q9 g0 U D) p
shl ebx,cl
5 y9 h; h& H0 `2 i7 y+ J add ebx,eax) X6 z* j% F" \ ]3 ]& F: x/ C
mov al,es:[si+4]! ?; N- w) y' w( _
call Change
3 K. w6 P) X R1 M* m4 h* P mov cl,4
4 P% z: h9 K% |+ k shl ebx,cl
' f* x4 `8 ~! p4 z+ y3 i add ebx,eax( l% x( g3 C: f
mov al,es:[si+5]( {! s* O- ~: M' ]9 G
call Change
# l3 j6 M. F6 `3 n0 V& y5 S mov cl,4; {9 d- {2 L" L6 j
shl ebx,cl' m) W$ S' u- T9 T
add ebx,eax
( L/ y" R" I$ l& {* s0 n6 ^0 | mov al,es:[si+6]. O4 s" k: _! U0 l4 e, @" c
call Change# j7 ?$ H1 J1 m( s% _
mov cl,4
2 O; H% ~/ f- Y shl ebx,cl
3 y% j7 i+ d" s, \! R9 [2 e add ebx,eax0 |( Q" }, P6 l& }
mov al,es:[si+7]. m- y# P# E6 y5 V* ^4 {
call Change
# n5 U2 c# [6 Q, T! z, I mov cl,4
+ b0 T4 |2 x; ^" { shl ebx,cl+ }( a% k+ c u! b) b* |$ B3 q3 \ G* D
add ebx,eax
" q% s& i$ g$ y7 P% S) x. O ret
, B; @" v* i& X6 e$ {; j& {) |PSP endp
7 h" z* S! z, g- O2 y; h: \3 Y;------------------------------------------------------------------------------------------------
' S$ y% Q1 q7 | V: h5 MChange proc near: R, e5 M9 W" B, D) V( J
A:
$ O6 J: X8 b6 u0 \( S0 I: J movzx eax,al
: E h Z( Z6 C1 z( \8 _ mov edx,eax0 W, J' x$ t0 H$ E6 W
cmp eax,'0' 0 D4 a5 n& _ a# R
jb A( H# V9 l" i- g- F
cmp eax,'9'
( A& G4 ?* ]7 B1 I$ c ja B
' M8 G9 _/ N* u. u6 E- c$ J3 Z5 @ sub eax,'0'
# a1 @9 k( F1 |! C jmp short E+ _% O1 j1 \0 P* {% H: ~
B:
5 M* v; ^& y$ F2 A; s& u and eax,0dfh ( X" f0 m! ^9 S% v5 e% W. d
mov edx,eax
# t# M1 R, Z! z) h sub eax,37h
- t: U5 z& W* E* x2 E cmp eax,0ah# ~1 g2 g" c9 v2 w, ^9 p7 }6 q
jb A
: c3 _: O' ?3 h- `- U cmp eax,0fh
3 z+ @2 E4 H: u* g ja A
9 P. f$ V7 q- kE:
( K2 T+ L1 u% a0 I* O8 d2 v push eax
7 J# ~7 U& t0 n: W. `( g call PRT 1 `8 { E2 c: M# u0 Z$ A$ f
pop eax0 P9 V @: w, h1 i0 m
CExit:
6 u! D* H+ `1 G8 B& [ ret, k1 t1 H! d2 p0 b5 [8 @6 B+ [
Change endp5 n9 S' {7 C V, L2 a( i( b
;------------------------------------------------------------------------------------------------
$ ]( l7 w" w6 B7 P; T! ?& p, VPRT proc near, R1 s7 E( H& Z' `2 p; _& W4 Y
mov ah,02h
: S+ u1 h, U N U. A. E+ ~ int 21h1 \& F: M r4 E4 h4 E$ w- D
ret
* V/ W/ k, c. H! I( q/ q6 BPRT endp- V; f5 Q% T0 u$ z
;------------------------------------------------------------------------------------------------
. Y3 k( c5 A2 Q7 g6 i) Acrlf proc near
" O: u _$ f; P6 G: B mov ah,02h' w5 D% \0 V3 u! ~- O
mov dl,0dh1 o. `9 \' Q( ^% A
int 21h
e8 ^$ q; \+ q$ J" M: p mov ah,02h5 l! V0 B% Q' m4 f
mov dl,0ah1 N8 ~" C; v9 R( L1 x
int 21h
6 e. o8 J7 s% E% x1 L& h: C ret
|3 G! M% F8 h6 @ P/ g, @1 ccrlf endp* M4 ^, t: h' Y4 c6 l7 R7 n
;------------------------------------------------------------------------------------------------4 }2 N4 @2 k; `- v# l4 p n
_32bits proc near
P5 j/ N$ X8 z- R: G' i pushad# y: |! ?4 T* z! e; S
mov cl,4# x; }% W3 [1 Q. Y
rol ebx,cl' X# a2 [7 m: p% `
call print_4_bits
* C& n- W# x! c! ]9 i rol ebx,cl
* \- q8 |, f8 ^8 F& b" I5 s call print_4_bits: `2 Y5 Z; [3 G6 t9 _
rol ebx,cl
) \* V* o$ m% m6 c" C& H call print_4_bits7 B) H% c9 B9 [* P$ @
rol ebx,cl9 j5 {" ^( D; j1 Y( t) ^6 g
call print_4_bits* x/ V+ b2 l, z+ |8 f
rol ebx,cl
i7 y( a6 ^; Q$ O( R, F call print_4_bits
0 N5 n+ D+ y7 Y4 V* n' P rol ebx,cl' ?- J' v! S8 F9 W- I# N" _
call print_4_bits
# u l; A" v* ]/ B0 n rol ebx,cl
, @2 q$ `& f" F: R0 D call print_4_bits, {5 _5 f' T4 e6 C o" ~8 z
rol ebx,cl' w: z; y! t" o5 }
call print_4_bits2 M' C" }2 j# U `- k& W$ ]% o
rol ebx,cl7 G% G/ a) W9 T: E* F
popad. ~/ ]! K% ?% U6 K# U
ret) s+ E" L6 t: o4 I8 A/ ~
_32bits endp
1 \2 I: w0 t7 j& H+ T; t8 ^;------------------------------------------------------------------------------------------------4 T* L! \4 T9 c- R
_16bits proc near6 x7 x) J$ _3 e
pusha . x* j) r& Y# D
rol bx,cl
& n2 Y( r/ H. j, h8 s1 Z call print_4_bits) \6 q6 \8 \# m+ ^
rol bx,cl) S% T# ^# T4 O. H
call print_4_bits5 S! S- o, ~& @% N
rol bx,cl7 k0 k( K- ]; ]3 @2 U( n j
call print_4_bits* U% A+ n C1 P) v
rol bx,cl
, d+ K8 h* n2 z7 N" t call print_4_bits
+ t d! S8 X9 p7 M4 F popa! a2 e; ?0 T9 w6 }7 j! _
ret [, s& c/ d2 D
_16bits endp
0 p0 L$ l* P8 S* _* d% d6 n;------------------------------------------------------------------------------------------------
. ] E( B% l+ z& o( T8 A_8bits proc near
, w0 z: A) Y: v pusha + W- X0 v+ v2 U/ q1 \7 Z
rol bx,cl
. h( t D. d9 ^) R call print_4_bits; q5 V* m, g3 c. F1 U
rol bx,cl
7 d, Q1 B6 o% v* N# B call print_4_bits
6 c! }6 s8 }6 s6 T- I0 y6 _ popa( f1 ~( D8 @2 C2 Q2 i: J1 M
ret) f$ k" \( d, h0 e* h7 T
_8bits endp
+ C/ t, X$ L& F9 q9 [# H( {. R$ [;------------------------------------------------------------------------------------------------4 n5 S9 ~7 h+ {' W* w$ p
print_4_bits proc near: G, ~4 w$ e& x
mov dx,bx' `/ I. N; ~7 h( ?+ [0 Q
and dl,0fh/ W; p; t7 D& D+ F$ t& U
add dl,30h
/ m) W3 ]9 T( L( i) [5 p( p d cmp dl,3ah5 i/ s0 ?( T& X$ j- S- i. J6 V0 U
jb print
0 `: S E: {8 F4 }* U9 {* p add dl,7& e+ q" D% B- _2 e: ?
print:
- u* d$ A: p9 R: p+ U; r mov ah,2, h, `9 a6 j6 H. k
int 21h
7 @/ R9 g$ x# ~8 ]" C P ret k" Q6 P9 g& u9 O4 i
print_4_bits endp ; J& b8 o& k( I
;------------------------------------------------------------------------------------------------
9 @, Q" h( L8 b4 wCSEG ends0 h% j7 q8 }+ W! |7 `7 q, ~
END |
|