|
|
各位前輩好,以下的程式為在 big_real_mode 讀取記憶體的值
( q5 _! @2 T, f8 E+ H7 c3 r
$ }, d6 w/ \/ ]5 ?' e例如: C:\memory.exe(程式檔名) 01000100(Address). _7 x4 T5 m9 o, ]" C! K6 X
" h1 a" t# h' E- K則會顯示01000100位置的值) a$ d ^7 d3 d" C2 A$ B1 E( }6 d
: Z% x& [0 {( b& T! s6 }
但是我另外還有要顯示出字串,但是顯示出來都是亂碼+ n5 c: r, B7 I, I% a4 _1 o
. f0 N: O! I$ B" }3 H4 s% ?
麻煩前輩給我一些指導,謝謝 ( K: A; p9 o- K& |
' f* p3 h- [; s( T' U6 R& Y/ l
7 K' f: g1 \$ x" \.model small
- J0 m- a/ v" z.386p* O" b; ]2 M8 H2 T* p; G5 d8 O
;------------------------------------------------------------------------------------------------
6 x; i8 y7 Y5 }1 e) K4 c& }DSEG SEGMENT USE16'data'
' i2 _3 Y4 a( [9 P' ^6 M/ z; `) p% F d8 F* j
DESC STRUC q7 E; M# A7 n. y& F0 q
LimitL DW 0 0 G$ V3 Z9 }: `% w: D
BaseL DW 0
" s6 m. P; a( O6 U) o# A BaseM DB 0
+ i' z, _! Q1 @# u3 r Attributes DB 0
6 N7 F8 r; @% F7 `0 v7 r LimitH DB 0 & ?' M& K6 w. u: S* m! r- `
BaseH DB 0
* Q* j; B7 y/ ]# Z: W3 IDESC ENDS. U3 H6 j/ Q" \7 M( L' @
' W! r& J) }, y! P6 |& X
PDesc STRUC6 m: A* Z3 Y& A8 R
Limit DW 0 3 m1 ^& R( W8 X* e3 l; ^ h' S
Base DD 0 ; [9 G$ P* r' I* y8 g) j
PDesc ENDS4 T n6 }; n5 d8 E2 Q3 o
: v# o5 y6 e2 c HGDT_def Label Fword3 ?1 s( S* o4 D8 p: @
Null_Desc DESC < 0h, 0h, 00h, 00h, 000h, 0>
" Z5 z0 X) q+ w+ S J5 z5 O6 k) {Data_Desc DESC < 0FFFFh, 0h, 00h, 92h, 0CFh, 0>
) n% i+ F1 _/ o8 _2 A, YGDT_Addr PDesc <$-GDT_def-1, >5 t( g$ }5 J1 w( K! W ^
; f/ C- K# z6 N+ R4 y
msg1 BYTE 'The Input Address is '
/ b {0 M+ R3 U1 b8 s: imsg2 BYTE 'The Data is:','$'9 t \0 l# Y, [3 p" `* r0 b
Y- \" s% O, p- vDSEG ENDS
4 o- b0 j% g! t$ E0 ~
3 g5 q7 H( w2 R. t$ a" v0 b( N( K9 {4 p T r* p
;------------------------------------------------------------------------------------------------ 6 }2 d$ d F) X
( l$ K5 p8 d3 n% {8 s" q1 n+ M
ASSUME CS:CSEG,DS SEG
1 w" _+ f) i! b" T9 p
; z, U- i# H6 s( n. mCSEG SEGMENT USE16'code'
: O: W$ N* T- h, h . [' u) P9 d" T
push ds
8 v. V: ?7 I' @ push es1 ` g. }( z- P; I5 {, P
push fs
4 o" J5 r5 d6 j4 V push gs5 x# w' m7 r7 R* C3 \
5 T+ m E. \9 l/ y/ M2 q* ] call big_real_mode7 _/ C) V. w6 z& ^
$ k4 }& l+ T; \' R- {9 s5 m/ L
J, S: A* D3 r$ T7 [' e) J mov edx,OFFSET msg1;
+ x- ^* t& Q4 `4 Z" d7 w( O mov ah,09h; 2 U7 ~7 |; w) {" K7 K% }7 |
int 21h;
/ ?! u$ S+ j, i0 T/ Y2 S( Z mov edx,OFFSET msg2;
; N& X# x7 s2 u+ T mov ah,09h;
1 h5 a+ `4 L [ int 21h;
( f6 B3 H, G5 p# A( A/ u1 L0 w 9 R$ {, a2 C( A: T2 U; ~
call PSP ' j8 @6 u0 P9 D0 e! d" q
" M9 h0 a& L1 { call crlf
) i/ u' F) o3 j$ R! P @
" w7 \- Z6 H0 @( s- x1 ?* ~ mov esi,ebx6 F7 J7 {. N& v# p/ c2 q% j. {
mov eax,fs:[esi]
1 t1 F/ o4 ]5 d6 j$ }' V) U/ W out 80h,eax% Y' N* ^! Y7 @6 c2 \) n
mov ebx,eax8 l3 o$ A7 l; q D Q
call _8bits
+ W- f# w0 [4 j! g' ]
; M/ G' {! N$ }$ { call real_mode$ Z# g7 P( O. T( e1 t, ~: [7 a
: p8 p2 ~ H1 Z, P! o) p+ H pop gs
( d" b& r, t) N; l. ~ pop fs8 u+ g- X' h" O5 h4 {8 K' w9 g
pop es
& o# x; x$ q2 S7 \7 c }$ x! u pop ds
8 _( g% U- s& W& {; _& r! e4 ~
9 k, {0 }; i: b .exit
5 t S- A0 @9 C6 |) }( r3 ?: X5 p;------------------------------------------------------------------------------------------------0 }1 |* x, a5 y' y/ q& m
big_real_mode proc near
# c5 ?- Q8 s* ^; V# X7 Z in al, 92h9 E1 h/ O3 W7 u1 j9 ?* _! C" M
or al, 002
& X3 T# O$ F9 g+ O: i9 \$ B$ A _ out 092h, al
' A; _0 P0 x' K! f: |+ b out 0edh, al
7 ~9 R g( u1 Y cli+ D0 _+ x3 s% D
mov eax,DSEG7 [/ ~0 @ ~1 }5 o
shl eax, 4
C3 K+ z; p# _ xor ebx, ebx& U5 @' ]) f/ T9 S6 ^
mov ebx, offset GDT_def
$ h, M v" o6 ?$ ?8 O" S, n add eax, ebx% D4 D4 D7 ^! c1 w( b- a2 [
mov dword ptr GDT_Addr.Base, eax2 m6 c' j8 z% X L) t1 A- B, o v
lgdt fword ptr GDT_Addr
3 i$ n# I+ ~% X9 x1 G/ S mov bx, 8
. p8 \; b" d( c9 d( n2 S0 `' a mov eax, cr04 w. k# i. t+ ~! E: k
or al, 1
. r1 {; a. p0 R5 j% J. C) Z$ \' y mov cr0, eax" K, V. D3 n& u$ c
jmp PMod, F2 A' E: O2 @4 ?& y% m% `) Z
PMod:
; n% K. m: e! [* |- l/ J mov fs, bx
6 A/ l& f3 D* O; v6 t7 h" R* o mov gs, bx) u _9 z) U3 p; }" n) o2 d
mov eax,cr0
' y5 S" ]: X& k5 m/ E" t and al, 0FEh5 ^ O( S0 }# G2 i" p& \: n. L+ P" A `
mov cr0, eax % ]3 ]0 f N! z$ [' v; N2 W
jmp RMod
) Y% F% Q# L9 Y+ U9 yRMod:
4 S; U) p6 x( p3 W xor ax, ax' o" l+ a- l/ r
mov fs, ax' e' p* u! ]7 |$ V
mov gs, ax
! S- \+ {9 }1 I, g6 I: A. j
+ F, G% u; B* {5 A1 N" V4 m' } sti
4 t- G; b$ N. Z! E8 J' b
0 `. p( u; Q* V r* b0 D ret
* \* Z6 T1 g C2 L% Rbig_real_mode ENDP @& J9 s) T6 k& y U( W( M' g
;------------------------------------------------------------------------------------------------
6 s+ w2 b5 \" v" I5 breal_mode proc near7 D9 b5 s5 F2 [% o- i$ M
in al, 92h
v _& ?, j: a% E* Z! r* u' | and al, 02
: x$ z0 \$ c4 X: R out 92h, al
# `1 V( I+ @# h0 f0 \* Z/ }( I- N ret9 J/ r9 C8 C j5 W5 K. C% X
real_mode ENDP
2 ^" V1 P& k4 c7 l9 k;------------------------------------------------------------------------------------------------, {' t6 s# e# S
Get_Commandtail PROC near1 Q) c# p/ ~4 _6 ^
push es
" Q9 i. B+ C- M" U7 I ]9 W t pusha
/ ]/ z [* V G9 f9 [ r mov ah,62h
% l: q# a2 N7 v int 21h- k* i0 ^8 F& Q1 u) Z( Y* [
mov es,bx. V' x/ L- R& S# v; U: S
popa - z/ t7 o. d$ e3 s0 r+ \ u
pop es
' J9 H, h1 x# Z1 P' c ret
2 C( y# k& v" }6 M" _- SGet_Commandtail ENDP
) t0 l7 _2 c* E2 m1 L9 V1 T' y;------------------------------------------------------------------------------------------------
' T$ z6 U* F9 m% |9 K& C# _PSP proc near
( I8 {. \5 ^% M' A2 M g mov ah,62h
1 }$ ?+ e2 T( ~* t4 w: [$ n H int 21h
. Z: D p7 |1 B: J' N% j1 I mov es,bx % c: L! g/ h8 d* b/ y6 ^( I
xor ebx,ebx
! z( ?% y8 |0 ~ mov si,82h; }2 b% ?/ f7 M" ^6 q
mov al,es:[si]$ k$ ^; `$ u2 d$ B9 h
call Change$ R' E$ W2 q; a6 o& m. N O
mov cl,4
! v; i! F! ?' A, K shl ebx,cl j. F+ ?; x6 q, ^1 @) }" ?
add ebx,eax+ L ?; U& N* D5 Z! b& I
mov al,es:[si+1]
3 H1 `4 u4 K9 c- i6 `! l r call Change4 M: E% J! M( f) K( r b7 V
mov cl,4
2 `+ }, E) y& ~2 _ shl ebx,cl3 S, w ]; a) _ d& X+ ~# {
add ebx,eax
5 |+ W2 Q& p, p/ _) G: ~ mov al,es:[si+2]7 K- T$ S( B6 l* B4 }" L5 h; ]
call Change
9 C* C) p/ X: _, C6 \ mov cl,41 v9 i6 O t5 s$ K: i5 v0 l5 t% w
shl ebx,cl& `! Y" ~# t5 _- S
add ebx,eax9 V R3 p' O2 r
mov al,es:[si+3]
2 R/ D3 c1 O* }/ a" d# v3 U" A call Change
9 x) E, d- v2 [. U6 V) Z6 ]5 N mov cl,4
; H9 U+ J; K9 a- v. D4 z. ~" k- _ shl ebx,cl
; u: d( y2 k( S& i add ebx,eax* w, M6 Z: q" O- F, z) o" z
mov al,es:[si+4]
4 h1 F9 K. z m6 b N* `2 M% p$ R5 J1 H call Change
, X# X, T$ ]* ^ mov cl,4% w* F( }" g9 t x7 y1 \7 I" X
shl ebx,cl! Z- r7 v1 w* z: h t; G$ ~* W: @, Z X
add ebx,eax
* O* |+ k0 o. J. ?8 n2 q h8 W mov al,es:[si+5]
, d L2 J; a7 t5 M$ l* a2 g call Change9 N7 X& C' x% t, {
mov cl,4- I& p$ n3 X/ B2 v: O% E! u
shl ebx,cl
' K V$ F$ W" e$ ^3 m add ebx,eax
/ m( ^+ B3 [5 ~& k4 ~2 p) a mov al,es:[si+6]
$ Z1 | E; w0 |$ u: l) | call Change
$ g- ?* S1 _" V mov cl,4" c3 \4 Q6 p6 c8 I
shl ebx,cl
; s2 P( |& P: r" p add ebx,eax
+ Y0 f% Q6 s% f1 r( H mov al,es:[si+7]
. h2 u4 B% U2 ?, O call Change. W8 o, a! p0 {. A6 `; A2 t
mov cl,4
! P; Q4 Y3 n! b5 ` shl ebx,cl
* c! y9 D+ \3 P% \* ~5 g add ebx,eax) p0 I9 G) G6 B3 P7 Y% @
ret
+ U7 D# j+ G, [7 R8 QPSP endp/ n/ y3 L/ E5 _
;------------------------------------------------------------------------------------------------6 g4 m/ F7 ~+ S
Change proc near9 I v9 H$ `, L2 r8 m
A: . W+ l' ]4 K O: o; r1 x# x+ ~) K- Y
movzx eax,al; |% ]! F$ u6 R0 L' c9 ~1 Q2 y
mov edx,eax, A" ]0 u) X4 [1 D! `
cmp eax,'0' 6 e3 g& T& J; o
jb A
" D2 |+ Q6 F3 A' b$ e cmp eax,'9' ( C$ [$ w6 E5 X& \$ z
ja B
8 @. q4 y# `& R* K3 Z0 d7 s7 S sub eax,'0'1 E5 w6 m; `( e5 F8 Q: b+ O9 _
jmp short E3 y3 e3 N) k/ F1 `' o5 ?! H
B:
9 s P8 h9 n( P) k( @* [ and eax,0dfh
! I% ?: j- K8 C mov edx,eax
$ Z$ q% I9 J6 R+ ? \- y sub eax,37h
! ~) `- D/ O8 Z2 s ]" m6 Q cmp eax,0ah2 ~" F3 Z: x2 s' @ K
jb A
" |& \5 |, `" v- `0 T cmp eax,0fh
" T* I% Z N6 m( s5 T7 m# J ja A 3 w0 Z5 q5 t5 c( r+ e/ {
E:
& P+ U4 J1 z1 W- z push eax
t# B+ z, n6 L4 F t call PRT $ j! [9 [$ O! @. \7 q5 p
pop eax. P; k# S# d7 U# k
CExit:# ^* _2 U' a; C% @( J0 |6 q$ `' h, E
ret3 [! i1 B( E9 O- L! G' r
Change endp( |7 ?5 H: `$ v& V
;------------------------------------------------------------------------------------------------
8 ^ ^) C0 _. P, ^2 cPRT proc near- V/ ?; `* M" S3 I9 V/ S. J/ ]
mov ah,02h
# X& R4 n, s3 _9 z, G0 n/ z0 `' s int 21h
2 c7 k% C; D5 w ret
; [$ }8 C" @8 kPRT endp
/ v5 [! c2 e" ^' I8 i8 ^' b;------------------------------------------------------------------------------------------------
. h- a0 y; u9 G* J7 Scrlf proc near
0 E2 N, [. g+ f3 x+ ^) a; k mov ah,02h- O3 {$ r/ x8 _
mov dl,0dh
5 v- l" H" S. [7 P int 21h
3 r% ~; M: N: h8 d- x% v& M. W! A mov ah,02h& M% {* d7 M( Q, H
mov dl,0ah
; R% k3 b9 ^8 j6 |& e int 21h
+ x$ d, E& I1 m$ j; E$ [% |1 j# x- I ret) T5 W X5 b, B! k1 V2 i7 @
crlf endp
8 F' i$ _% z: v2 B q;------------------------------------------------------------------------------------------------; ]% s+ n$ l. m0 m
_32bits proc near
* K: k: n8 v M! ~1 z pushad7 {" `3 S0 |% o- z N# c
mov cl,4# H+ }5 W! z M. k M' `
rol ebx,cl
' `5 O' M, B2 f) t7 \2 G call print_4_bits
G$ g/ T0 J2 T) a/ m/ v rol ebx,cl
' S% m5 U# p+ U( j5 d! v3 x3 _ call print_4_bits h, K' x# Q# S- k$ B
rol ebx,cl1 W+ d* e/ ~+ p9 F5 q: `% J
call print_4_bits$ v. b, B, Z" I* V2 c- [- x- i( J
rol ebx,cl
2 ^; e. E) z, M- K/ ^+ ? call print_4_bits
) G% h: n/ I9 R( n rol ebx,cl
" ?# b: r3 M: K call print_4_bits% b. B/ J/ S& p& j4 k9 f
rol ebx,cl
k' U" C+ T. b2 n" [3 q9 D call print_4_bits
4 E. t3 l. e2 S1 D rol ebx,cl
& n' |& u% T2 m: L- C call print_4_bits: S# A3 d. y" ]" N" Y/ J
rol ebx,cl8 z& l, v X+ T" G C6 ~( B
call print_4_bits
+ |+ S# A. d7 ~& f# m rol ebx,cl
) q$ G3 q) R8 s4 G1 x; d popad, e% V* ]' `9 G0 }! a
ret2 O; d* f/ r( `% [
_32bits endp
5 L# Q! K; w2 y# L;------------------------------------------------------------------------------------------------6 t& W8 r! H& b( A' r2 w2 F/ s0 m% }
_16bits proc near7 u' e9 x/ {) b7 i3 a7 e( Y4 N, Y
pusha # w* }% N+ q# E
rol bx,cl' h; i0 y3 `* ^" r; P( Y
call print_4_bits
: r, A# { s* F% z/ W _ rol bx,cl
* L7 ?' l0 v3 ?2 H6 ]8 a call print_4_bits) V1 ~5 E- T5 Q7 s
rol bx,cl4 L5 v% s4 V: S, r( R) x) c
call print_4_bits: A7 X0 `* _1 e0 l( L, G
rol bx,cl& C8 w. x: h/ O, c+ r! e
call print_4_bits# p" \5 B4 U' j: a
popa0 z) {2 Y2 R" J- M, R3 G( E
ret3 B& _3 ~# m9 q6 D$ _( m
_16bits endp/ a* j3 ~% g, S( L6 {7 V4 V
;------------------------------------------------------------------------------------------------
' v/ {. C% l( g5 I2 F! t_8bits proc near' A. J b6 F8 K) [
pusha 3 n+ g1 R% H/ O8 I9 a
rol bx,cl
6 U7 Y& ~4 ~& e8 j, h$ U' } call print_4_bits
2 I0 d8 e4 @ k1 X% V, M rol bx,cl8 @# W" y8 I$ j
call print_4_bits" W- k* \4 e( N* @+ C) |
popa
- E; S+ c3 K0 s5 X3 x+ V ret- D- u3 G+ T3 w) A: Y5 _7 j
_8bits endp Q0 X q4 P$ X% s/ O
;------------------------------------------------------------------------------------------------2 s# _ u" x: Y/ }# m, _+ M
print_4_bits proc near
; ]3 J/ n8 T7 O6 d mov dx,bx! l7 m- P( S; q
and dl,0fh
[7 N* H" z% v* u add dl,30h
3 c$ ?5 W1 P0 s cmp dl,3ah
; P0 m! W$ A# l" ` A+ _' f jb print" M. o7 l, d) I
add dl,7
" N' u( m+ v) Tprint:
: C! B2 b# \& B/ k mov ah,2
4 D. R' h" H o' X0 G int 21h& z2 X* |0 g; P" Y
ret8 U& |9 |% I; `+ G4 P) I
print_4_bits endp 3 l9 h" Q4 j x( q
;------------------------------------------------------------------------------------------------7 ?9 _ {/ B2 i& J
CSEG ends
8 b; z1 U. h3 k9 F; Q" R: X& b+ a) DEND |
|