|
各位前輩好,以下的程式為在 big_real_mode 讀取記憶體的值0 B8 C" D6 N" _. z7 i" D# A
5 \4 Z1 ]+ ]5 e. Y0 L
例如: C:\memory.exe(程式檔名) 01000100(Address)
3 Y0 w7 o- z* X: }8 L8 I
( h, h" J3 c# G# G" D3 w則會顯示01000100位置的值" r: o. s7 c. F6 v7 O
$ ~7 ?+ n# c% [
但是我另外還有要顯示出字串,但是顯示出來都是亂碼) K+ S$ J) ~0 g. M) c" I
3 A* b$ u) t- D! [* }( b
麻煩前輩給我一些指導,謝謝
: p, P8 [8 ?3 B4 P
6 {) r- {8 w2 V9 A
! e( x# `$ v/ D.model small
. n% O/ F J/ y! ]( E) Y# k* M.386p
u) q6 P) [( z7 Y+ ?/ o;------------------------------------------------------------------------------------------------/ |& X2 g" ]) z0 I/ T
DSEG SEGMENT USE16'data' : Z' w: ~& N" O8 j; Y
! l* d9 B1 D5 N8 p; ?
DESC STRUC& M% O0 s: N5 M9 ]) R
LimitL DW 0 4 L$ J" y1 n" Z" X' P- }
BaseL DW 0
% K% ^; A( [2 H0 S8 }( l7 z' j BaseM DB 0
. s4 r* @3 D9 D+ c& h Attributes DB 0 1 W5 R% ?1 j5 ~1 r' H
LimitH DB 0 5 B7 l% Q% X, T- H) X
BaseH DB 0
3 u8 }2 T' U- J- g0 aDESC ENDS
3 V9 e, v, x$ i" \" p+ D c9 v1 b D2 Z7 b2 T
PDesc STRUC9 y0 R+ N; `8 x
Limit DW 0 % s$ c4 G% F2 A$ u3 Q! ^
Base DD 0
) B: l3 e2 K! U" L/ q& W! NPDesc ENDS
- v2 y2 B# r2 g4 } D7 J: r5 `9 V; c W
GDT_def Label Fword
; d4 U. k- A# t% w5 ]Null_Desc DESC < 0h, 0h, 00h, 00h, 000h, 0>
: E1 x* e" g. m6 A# |Data_Desc DESC < 0FFFFh, 0h, 00h, 92h, 0CFh, 0>+ l4 {. _) b. L7 N
GDT_Addr PDesc <$-GDT_def-1, >4 t/ s2 b: D& M1 t$ j; g B8 H
# l% D* x* Y, J- g
msg1 BYTE 'The Input Address is '9 p; b, H. L" `
msg2 BYTE 'The Data is:','$'
; o4 Q, v$ N0 i9 q
0 A; h# d; L4 R, T1 }: h( A$ W4 ]/ DDSEG ENDS
; N2 V) r1 J, v8 X r# W3 S* z, p' ^2 W( o% M
( E7 U4 Z# x3 R( t5 O/ ~* l
;------------------------------------------------------------------------------------------------ : g9 l8 |) q! l s# b
1 n/ ]0 Q7 s7 B4 g7 gASSUME CS:CSEG,DS SEG
/ f+ b6 T8 h6 l- U$ K6 y2 c% ~) D, ~! ]3 K* [
CSEG SEGMENT USE16'code'0 \+ J1 m/ l* [
# n5 t; _, U2 X6 K push ds
1 t" @" ? d, L* @' s. N' C0 { push es; ?' S1 W/ c% J' N3 k4 H6 y
push fs
: K0 H8 m/ _' f$ W push gs& S1 _5 f8 |( Y
" \. F' w, i+ C' h8 V call big_real_mode! v/ ^, V, M) q+ S$ d
- l6 X9 o4 ?, s& Y5 |" ]* A
8 a/ a- P5 A9 ^6 X u& v mov edx,OFFSET msg1;
' G. B8 [: j/ D5 o6 Z mov ah,09h;
5 C# ^$ Z# x4 @* e int 21h;9 p9 _! g- S+ F& |& k- ^2 f
mov edx,OFFSET msg2;7 J7 J2 q- m3 J1 [. o# ^& n
mov ah,09h; K! C& n. L; i* ?
int 21h;
0 E$ S- N& C J: S; m4 ?
, [) J0 v, A- f a+ C call PSP
9 t+ ?# R7 q9 ~* P3 r8 I 2 ~/ l0 M' u1 @7 J3 g6 M7 t
call crlf
" |& l- z+ ]! f9 |# U( W! J
' f: t9 {4 g+ r mov esi,ebx
v3 I0 U; A$ o5 ^9 O9 l: ] mov eax,fs:[esi]) P0 k: p" p( }# z
out 80h,eax
9 b4 ~% N' V2 F mov ebx,eax
`' K- ^) n% u; \; e. G+ d/ F3 ^ M call _8bits5 ^, Q' U, f3 x9 K$ ]
9 w) R8 { Z, T/ l' Y
call real_mode
+ \5 Z/ p* a' }
' G1 R. x& S) }- }( l pop gs$ y( H4 Y* U9 t/ [3 g1 n9 C2 M
pop fs
8 ]4 Y" }" b! B8 M; A pop es
$ ?! Z+ [7 C! k pop ds: o6 J/ _/ w0 m) I
/ k6 ~: j0 h, t: x/ E( n .exit
, ]5 A9 L8 e6 e; y. `) J: k;------------------------------------------------------------------------------------------------
# B& I% F( W* I! p: _/ Obig_real_mode proc near/ p" k. }# f* c) _) ~3 h
in al, 92h4 @0 ]. Y% D) l' V5 `( Z; {; J9 Z
or al, 0020 b# ]3 z0 ^+ t! h0 I* W J
out 092h, al
" \* Z- B4 J$ u3 l2 {" J out 0edh, al
3 S3 g1 P/ M# N* D1 } m7 I2 n' w cli
; J. K$ s c! n: e mov eax,DSEG
0 K1 Q; H7 V% O% ^, i* H, h+ B shl eax, 4
' S- c! ?% [! p* X: V xor ebx, ebx+ [# @8 M' c* i- G
mov ebx, offset GDT_def
( O) a% v6 [; d+ ?: T add eax, ebx( k) M" ]7 Y h+ Z1 L2 @
mov dword ptr GDT_Addr.Base, eax
( y8 A0 H/ |' y$ f lgdt fword ptr GDT_Addr/ o9 C$ d5 X& |, t0 o
mov bx, 8
, z* @. U) n) \# a8 c/ f mov eax, cr09 u8 D& B1 D7 g( H2 S
or al, 1( ^( X: ?7 V! ~/ H8 ?. r
mov cr0, eax
5 k4 z3 @& j9 X9 t. h( K/ M jmp PMod
) R; o) d, P! A* FPMod:4 S* F' a4 l: {5 i2 R) I3 @9 a8 a6 d
mov fs, bx; T" ~* n1 q; z7 y2 f ~$ l8 W* U( ^1 b
mov gs, bx
6 i* ^: S0 Q% ?) r) }) S4 R* K mov eax,cr0# U, V3 G$ Z7 s/ [+ G
and al, 0FEh
T! R' h' j# W. ~$ X |: _7 D mov cr0, eax
3 x! p3 p7 A1 L1 C3 E" ]. V" u jmp RMod
$ o$ C5 o% d; a& r9 A+ pRMod:+ o; R; w* x: o; j7 r: b. T0 c: W* W
xor ax, ax
9 j7 e. R' O: X. L' C1 c mov fs, ax% v' _: c" l: w
mov gs, ax
1 d8 k- b, a# W / @( m$ w# R' k
sti, j6 S: K# o9 s. r- {! q! Q) ?
O& p& H6 z$ b2 F x ret' y& p) K2 D4 B! `7 H# @
big_real_mode ENDP
% p- S, h s, i; X7 g4 |5 Q- [;------------------------------------------------------------------------------------------------% z4 T$ X, u$ L0 ^
real_mode proc near- U: C0 J: ^4 U- P; {
in al, 92h* B3 n, K7 ~* j9 M; h. {$ R& b2 a5 d
and al, 021 Y1 z, f. R, P
out 92h, al
1 V% ^ f; ?1 ~. V ret2 g) Z7 \) v) } g9 C* Y
real_mode ENDP( s2 L9 @8 P6 ]) Q" G
;------------------------------------------------------------------------------------------------
6 S( I7 b+ ~+ l% k; L. H- ]Get_Commandtail PROC near/ t' @1 g$ o, _$ _
push es ) a3 s. P) ]* X. x, e
pusha
) G8 r+ O* H2 A$ c* ? mov ah,62h * U- B$ _7 d" R
int 21h
" x: I4 T. Q* P7 `! p$ x6 q mov es,bx3 L; U% e" a- E& l' u$ |
popa
5 [* P( z1 M% N* Z1 O% a pop es' ~" P6 A+ I! R0 q. i
ret
6 k' v, Z/ D$ {Get_Commandtail ENDP4 j; ?' V2 S4 q$ c# G
;------------------------------------------------------------------------------------------------; U5 }6 c7 r5 U3 q2 u, u
PSP proc near- r& y* B2 V2 u& x% K! z
mov ah,62h" @, t6 ?( f% _* R
int 21h
1 j# c5 ]6 _/ Y" A6 M mov es,bx
9 p4 f' q/ V: t2 d* q3 V/ l xor ebx,ebx
' _' r1 \) x& V4 E8 j4 x mov si,82h+ a( {* J. U+ e6 X: m! ]: D9 F1 I
mov al,es:[si]9 J% p7 V M5 o; I
call Change
) i `& {& k; c& y. R mov cl,4! X, f( g+ z: [( d5 G! O3 ]
shl ebx,cl$ T; L8 h' a7 S' o. R3 q. u$ }
add ebx,eax
( Z7 ^, u- Q1 B: C, z mov al,es:[si+1]
1 |) ^8 s' S6 `. I, k call Change8 o( [5 U) ^8 A
mov cl,4
/ |* `, w3 C3 H1 o a- J shl ebx,cl
+ l) m( b: H: P% F9 ~! U add ebx,eax- @) g |$ C' @
mov al,es:[si+2]0 j- T4 Q- A+ ]$ @+ s
call Change+ s& }4 Y. W% T1 K! w
mov cl,4( {9 `8 s Q5 f# _) H9 d
shl ebx,cl! b& d1 L5 n( L1 e3 }0 }
add ebx,eax/ r6 {2 d; O5 S
mov al,es:[si+3]! w$ k2 K$ Y: S
call Change
/ E# @3 l( i% h3 P mov cl,4+ w* ?; }2 r2 J4 G+ N- L! O
shl ebx,cl
8 x0 Q6 f! a9 J3 _- D* p add ebx,eax
1 W& }) F- X1 n" i/ G- Z: q+ _& W mov al,es:[si+4]& d& K; ]7 \5 j* |
call Change
/ b4 Y7 L! ]4 n8 ^5 {2 g) y- B mov cl,4. u0 K) _! x& U0 O; f) N$ w
shl ebx,cl
5 L% A5 n3 L: ^$ t7 V add ebx,eax! R% A' \# }2 K& q4 Y5 p
mov al,es:[si+5]0 ]% H8 f' k( Z6 H/ _8 P3 m1 O+ g
call Change
5 L& Z" `& Z" H7 k$ I+ f0 c; ?" s9 l mov cl,49 g2 n7 h& n' S
shl ebx,cl
, y* M" M1 C m. {0 s& U& H" D5 P( ] add ebx,eax7 J% ?0 {3 h: B; V- H' l+ G
mov al,es:[si+6]! Q) {1 p4 l7 c* m% i
call Change
0 l$ U2 x q5 w! i+ x mov cl,4
- n# c8 T' N* f& R shl ebx,cl5 U& V9 u, l, ^9 _
add ebx,eax
- M! y z3 }: z, @3 [- I mov al,es:[si+7]0 { `. j% X2 X; m. N
call Change
7 P& N- ?, K! I1 k) C. A mov cl,4
D3 k5 x. Q" w5 Q' G shl ebx,cl
: S; z; M6 Q: A/ b* g# Z2 | add ebx,eax
. i& z/ c3 J4 J; N$ N, P. V% | ret2 B! ~: U/ t0 g% J# H
PSP endp
4 g' a; d* c( q! F) L' k; F6 V;------------------------------------------------------------------------------------------------
8 x6 @; U" k0 w# `" BChange proc near
7 r+ H, Y! ]' u; N$ JA: 7 G1 H. t2 a* _
movzx eax,al
5 r) f& Y* ]6 H/ o mov edx,eax
8 `* r; m9 w2 D" N( K7 K7 S cmp eax,'0' 4 f# a0 N( x- j
jb A
q( ?/ J a: @8 f# a cmp eax,'9' 9 P4 u+ F" f; ^! u' S+ h5 w- A( |
ja B
, _8 m, ^0 p# J1 s& t( k sub eax,'0'* z- M- V6 |; {2 C& q
jmp short E
. q/ b9 d. [/ R2 {. QB:, x0 L! [" a% Y2 P
and eax,0dfh 3 H5 j6 F1 v3 I1 [- ]) y
mov edx,eax) ^" {- O5 U' ]0 [: S# i
sub eax,37h
; E2 G$ }5 m8 W5 N: w cmp eax,0ah; O! b( D: i! D. j; |3 G1 p
jb A 6 G2 n% M$ ~) A% T9 x) ^
cmp eax,0fh, y9 V8 r0 l# f
ja A
* l# `; {. b0 |E:7 X# Q) L# n! U c k
push eax % p% R& p% ?; h0 D/ v2 X8 [, A( B2 l
call PRT
5 |3 ?0 Z T, H5 a) c* H! }6 `. E pop eax
! P7 ]) P5 U! r5 @CExit:( o# [ M4 {6 _# O6 B! u
ret( ] I: P( m& ~& _' E
Change endp
2 P4 C. _: `; {, D7 b% n/ ~;------------------------------------------------------------------------------------------------; P& B( k0 ?; q6 \5 T& l5 T" f* ~# x U
PRT proc near
7 @: x y6 R9 l1 s/ c mov ah,02h/ H1 @, `1 {3 c
int 21h
/ I8 q; q7 I/ Q2 X) @ ret: ^: _: F0 } p# I9 ?; q* K% \ ]
PRT endp
2 ^. y6 v' p& u( h- B+ Q;------------------------------------------------------------------------------------------------
' m; e9 t% P2 C+ \ S4 |/ O( v! Pcrlf proc near
6 z1 a- g5 W# C) k/ t mov ah,02h+ d; M: A. A W/ W. b7 u' p
mov dl,0dh
8 w0 @0 |3 l0 u4 t int 21h" ]' ]' h I3 E: V
mov ah,02h
& A7 i7 P. J5 d7 p0 C% V- Q2 A( [ mov dl,0ah
0 A) R+ V7 H0 E h int 21h
% u# {0 F/ L" I @( o, y7 u ret
' O1 A; L% U* B# ]# Vcrlf endp, ?, S$ F; O4 Y: I
;------------------------------------------------------------------------------------------------
% s w/ l% o. p. K$ u_32bits proc near
* l! l6 p% i" m! S; u* `+ F pushad2 `* `4 Z! b4 V5 E6 I6 Z
mov cl,43 X1 V/ n8 x8 Y p1 G6 T
rol ebx,cl
# W: j. F# u6 [$ C4 i( \ call print_4_bits8 j* j" L, P' p w! f
rol ebx,cl
8 g' E5 m# e @0 z+ X! Y) K) c call print_4_bits8 T' }% U* E6 O; h) f1 P% @5 I
rol ebx,cl
) U' Y4 J% t" n+ ?7 p call print_4_bits
5 M6 G/ b* D/ U5 y4 a4 U rol ebx,cl
! k9 H# T' ?* E call print_4_bits
1 c5 I$ Z% t. E; h8 v2 m rol ebx,cl
) z1 b4 ]4 b+ T7 u2 h7 _) P) ~% A call print_4_bits7 x( G+ f3 _: O& L5 y# a! K
rol ebx,cl; T' Y+ H6 T }# t! S& u( v# ?
call print_4_bits4 ]" V! X; u$ D9 l, e6 Y+ `9 u
rol ebx,cl
5 G: J t7 `: D/ d `7 V call print_4_bits
: R1 t, H' q0 M5 b rol ebx,cl
' Y- C- p( y5 D call print_4_bits% j' p) T* {' E# c! D
rol ebx,cl
( z! V$ T& l8 f+ z7 k popad
1 V0 u9 E5 j3 E5 l ret! [% a; \* o* g; l. Z8 w+ c
_32bits endp
* G1 O0 y3 R2 F' Z1 h* t, `+ H;------------------------------------------------------------------------------------------------
7 s. [* R9 x9 \$ ]. V_16bits proc near9 w' _1 }0 g+ [, L6 {
pusha 4 L/ k: n7 | C& J3 y
rol bx,cl
2 Y6 o3 G& a8 |( J6 { call print_4_bits B2 `1 H# Y' W; }# V! ^
rol bx,cl- |6 g- z# p0 p2 V) [1 R
call print_4_bits. Q' M8 h$ P9 s; h* S3 H7 ?9 ]
rol bx,cl
8 ]3 V+ G$ q. J: S2 v call print_4_bits
' t& f2 z! C! d1 J2 t% V rol bx,cl
6 F! V2 d+ u$ j, e% q7 f9 } call print_4_bits# N& O; a0 i$ g9 F
popa& @2 X, e! M+ C" {0 `% h8 C, u& G
ret$ l2 h9 k3 z4 _
_16bits endp
$ }# }: [( R/ S9 o5 M/ z4 q;------------------------------------------------------------------------------------------------
& }; d% V& r& T. c+ h_8bits proc near. N1 B3 P# U* O0 V7 u% \, C
pusha 9 |- y- I9 l) {
rol bx,cl
% B9 i" y. ~% z- g7 T" P) T call print_4_bits
* l2 C2 p/ [% J" Q9 A" E+ l7 r rol bx,cl
0 R0 y# Z" I$ e& z: n2 r" ~ o call print_4_bits
8 q5 w4 ~. ?1 [, a) L) D5 T/ E& r! v popa+ G+ _) d, N& h1 u- M1 ^% P, C
ret6 ^' s6 ^7 d, T1 v( w1 C# ?
_8bits endp
8 R& t7 `" i. ^. E' O, C;------------------------------------------------------------------------------------------------
7 x; p1 ^3 a( X7 B3 S3 qprint_4_bits proc near/ u, o# z3 W6 _5 p
mov dx,bx
1 U: J; S l+ w6 f and dl,0fh& m! g7 {/ ]& P
add dl,30h; k* }) ]+ D" m3 P
cmp dl,3ah0 D1 L- G2 Y1 G
jb print' L; ~' j3 E% j# R- {
add dl,7
2 u9 O* d: Q" k2 k2 u# X8 }# gprint:
4 u( |! Z- h" u! A mov ah,2$ D D, _( [: r) e) h7 p: d. @
int 21h7 N2 ~/ v, d- `; `
ret" n* m" W8 p# {
print_4_bits endp
* N f( }! G5 G1 g' ];------------------------------------------------------------------------------------------------
0 I! N; l0 y. K4 K+ \CSEG ends
; |+ O- f* R# D' |1 p. I+ LEND |
|