|
|
各位前輩好,以下的程式為在 big_real_mode 讀取記憶體的值- _: v7 {- e( u: }6 z
8 J# K: D& e6 k- a1 c例如: C:\memory.exe(程式檔名) 01000100(Address)
0 a, i! r& d; a1 l% L7 {
) J; `5 ^+ u4 f* F7 t5 U則會顯示01000100位置的值+ ~3 m2 ^3 b) s( n
& ~- r4 T) @" n$ m/ E6 ~( Y但是我另外還有要顯示出字串,但是顯示出來都是亂碼
0 |; K* W4 }$ G, F# ~ W; d/ y3 p( Q4 o( r
麻煩前輩給我一些指導,謝謝
}' p8 f+ w6 j/ h. Q/ A& {0 d0 x3 H3 Q$ _
4 F+ L D% ~2 S$ \/ ^.model small
8 A8 }5 v# r+ \, b4 J5 s2 K% Z.386p
# ^' w! T3 u, f;------------------------------------------------------------------------------------------------
5 \' K. v7 n9 O( VDSEG SEGMENT USE16'data'
U; I+ [) A5 J$ S
- \8 F9 c) ^8 H8 FDESC STRUC% }5 u" W* f' J1 i
LimitL DW 0 ; [& Z1 L7 V" H% n* O. y K4 F) T+ e
BaseL DW 0 ; r4 A( y5 ~0 o+ U" @. \
BaseM DB 0 * |2 N4 x, X0 y# L9 X" n
Attributes DB 0 . y# m! ], X E3 H0 {; a# e
LimitH DB 0 9 N3 j/ a3 y; q7 P
BaseH DB 0
1 X5 E, G9 g4 [$ KDESC ENDS
* W' L6 w# b. O# l" S4 E6 c# r3 X
& V) j+ d/ s# m3 w/ UPDesc STRUC
4 U; x: y, W7 m1 C' ~ Limit DW 0
; F& b6 z& n F# V Base DD 0 8 V1 Y# k! I2 _" D( f* F
PDesc ENDS$ | t: H9 ^/ |; G+ Y
/ Y( U. u5 n9 f! B6 V
GDT_def Label Fword
% [7 {. O- C$ w1 i" YNull_Desc DESC < 0h, 0h, 00h, 00h, 000h, 0>
' h+ H; V# W4 z# F) v, A* DData_Desc DESC < 0FFFFh, 0h, 00h, 92h, 0CFh, 0>
# \# }: i# p5 s) B! _2 W, cGDT_Addr PDesc <$-GDT_def-1, >
) {$ _; q! M) W
& B$ s8 D( I- lmsg1 BYTE 'The Input Address is '
) l# o0 Y, L/ v; dmsg2 BYTE 'The Data is:','$'4 q; z9 @) a$ U# {4 ^1 Q
( w/ p# U% P1 \6 V8 i8 f$ \6 |
DSEG ENDS3 \0 K9 B: [* F( ]
; a0 a+ S. A+ M1 V% _2 O* m d
% P# q6 X% V1 y7 P) X# U3 L;------------------------------------------------------------------------------------------------ ) @# c' Q& _" }, J3 |2 v
0 N' D$ s4 J, e% [- X
ASSUME CS:CSEG,DS SEG
( I; D) J( y4 ?- y6 } e9 t2 ^2 }( H# `# r* {2 ^2 }
CSEG SEGMENT USE16'code'1 { n' W8 c, V+ X h9 U
9 r) ]) h7 L7 ] push ds* @* H. } T+ r3 I
push es
- d9 {* W% i# O, S/ [ push fs8 I( e6 _$ m+ p3 D- m4 {
push gs# [ Y! T8 x' A2 |
& I* m, H% R6 i, a9 [, z5 E
call big_real_mode
2 r8 \- w5 N2 z/ q0 s7 f' V J) Z/ a4 z! H
; w& W; U0 p4 H
mov edx,OFFSET msg1;& n+ ^9 n% f& r) j. A J# w" n
mov ah,09h;
0 x; v! W9 X% Y( O9 t! o) T4 H. Z int 21h;
$ j0 e* e; W5 p8 B- u mov edx,OFFSET msg2;# N9 C) y3 c d& m( Y: K( I1 \
mov ah,09h;8 Q3 N2 h$ W+ F6 P( I3 o- c
int 21h;% U2 D6 I/ N9 W- Y# y: d
2 u$ H. G: r7 B/ r call PSP
6 }7 f( j0 B4 E# q6 E' Z
_) y( z% ~0 s2 [4 ` call crlf 3 X7 n2 v3 W( M4 N
; ]* A& z1 ~! L mov esi,ebx
/ |# Y# r1 Y% B( y* k mov eax,fs:[esi]
4 f" F. R! V1 K1 n) V2 E x: U out 80h,eax1 ~3 z7 u! g/ z. D c
mov ebx,eax
' [% o! U' r, P* V. [3 z call _8bits& I% {. K& y+ e: o" ~
4 ~# b$ B, J8 Y7 h' z) w1 U( T$ B0 h call real_mode
1 ?5 i d2 c; g6 z" t0 e
& q' f* f$ y1 [1 e pop gs
9 @* a! O0 j. V$ G$ g7 o pop fs' T+ X# n; V4 K/ g
pop es
: g3 s/ B# `' l* i' O pop ds& J' m) s0 S! V" Z0 Y3 o
. m! ?0 A3 T) ^3 j3 V- d .exit, c! n5 Q$ Z }" q" o: }' R; j
;------------------------------------------------------------------------------------------------
4 K$ w7 p' A4 m- }: ~5 @! [/ Y% Nbig_real_mode proc near$ u, x! R& o0 \) O, |5 R0 G# R
in al, 92h
$ K# p/ o; h5 h7 w: q" I) O& ~ or al, 002
# E. i2 s2 {: O9 \5 t/ h* i3 Y7 E2 A out 092h, al) |0 C3 U! U/ h5 v: O9 @
out 0edh, al( p" f. Y! q7 g" W% J: B
cli. Y! X, F4 v: ]2 v/ [2 X0 G
mov eax,DSEG
" g1 t; M' Q: o, o shl eax, 4
9 z/ u, m+ W/ p2 ` ~# F xor ebx, ebx
' q0 }1 E5 n+ w mov ebx, offset GDT_def
. ?9 L' U @6 l" i7 \4 |3 e add eax, ebx
* V8 ^. V5 S' M4 Z mov dword ptr GDT_Addr.Base, eax
0 F% g8 q! ? S/ z5 V4 {) O lgdt fword ptr GDT_Addr8 N7 H6 m1 F7 B2 ^/ [
mov bx, 8
: o3 N; B. d) r1 j6 _ mov eax, cr03 d) h" a* f: p" h+ S. P) x
or al, 1
$ V7 a& a4 C( a) y" J mov cr0, eax# z: N" T3 j3 V& ]) d! ], H- x9 y
jmp PMod9 g( s* z4 e u$ M) q, K* a
PMod:
: C8 m9 @' H. f+ b8 i mov fs, bx( t5 B/ k# d0 C3 S# U
mov gs, bx5 t5 a% k$ r0 ^: E
mov eax,cr0) k0 D8 y q" c+ }2 v
and al, 0FEh
' J, C. D, P/ v2 T, { mov cr0, eax 9 g" d u/ ]2 @9 a% c0 z$ r
jmp RMod
$ y9 l1 w! ]9 v' m7 Q2 S4 M' jRMod:2 I+ Y# o' M/ I7 j. L$ _
xor ax, ax
8 L! m3 i9 z: O mov fs, ax
# s) E3 Q% Z6 E" I mov gs, ax5 m2 f& p* p7 S1 ? N( X/ ]2 o
/ o4 ]: \! z5 ^1 J1 l, H6 m/ t sti
$ g0 v3 F- s$ S2 c) ^& m! X 5 q3 S8 C0 h* Z7 y( j5 V# z
ret9 G( t- X9 e4 S) t8 b! k$ X% I$ W+ a: J
big_real_mode ENDP3 b) l$ q& l! e7 L3 o9 K7 O" f
;------------------------------------------------------------------------------------------------2 ~! x; t+ F! x* x
real_mode proc near/ G' k; l; Z( v. R# a0 ~2 i: B
in al, 92h* e; D: e5 C- T, O* o3 D* b
and al, 02
. M4 g1 ^" p* f) ~ out 92h, al
# Q! B/ `4 g! K; u1 ?: I# N( ? ret
: a, l2 T# M; I2 {- _real_mode ENDP+ R* R; c4 L8 a: c% z
;------------------------------------------------------------------------------------------------1 X) m7 u k! s% z
Get_Commandtail PROC near: G/ V5 ^) u0 Z/ Y6 Y7 a
push es ' X' f1 M5 U$ ?
pusha
: U3 H6 Y+ z, T7 X& i mov ah,62h
3 c& P' J! T: X* ~6 O- } int 21h
! s% {3 y4 {3 [6 z" P+ s1 M3 ] mov es,bx. r9 J% w4 m: l! h
popa 7 a' U+ b6 D2 j* s) H
pop es
7 t) k* ?5 k) X& ~* V ret
/ O7 z/ E# @8 K$ a% bGet_Commandtail ENDP
# ]$ \( N0 A. B$ W;------------------------------------------------------------------------------------------------7 j; S$ ~0 ~7 s8 I# U
PSP proc near$ ~2 q2 ~! W9 O' X6 a
mov ah,62h& U2 k, M% Q, d8 F, R P$ @
int 21h E( P; b# h t, N( S& W# [2 ~
mov es,bx / E# T, \% O$ T2 i, o; F" u: F
xor ebx,ebx
. [% M) Z Q$ } \: L. k/ ` mov si,82h9 n% K1 d% c- m: a. W& E
mov al,es:[si] \' e/ J7 P, g, d6 F# I7 `2 j) W6 B
call Change& [# E0 ~ U2 a
mov cl,4
& i. ~% s4 l8 `; e+ g shl ebx,cl
9 @: _$ w5 x" j9 ~ add ebx,eax6 w* `4 C4 n3 I+ Q! B& H/ l1 [
mov al,es:[si+1]
# {. t8 i# a0 q( L& E& Q call Change
+ h2 U& Z8 t* L p( P) ]6 | mov cl,4
# J0 R- `( l2 A X1 `3 N! K2 N+ n shl ebx,cl
8 {' l4 r2 F. F { add ebx,eax& b, a8 n6 q+ _" [+ h! x" L
mov al,es:[si+2]( U( X- J% i9 j+ p n0 p1 _$ g
call Change0 j. d: G X- u( m# B! P8 C- e
mov cl,4
) N2 L1 v+ L' x7 e shl ebx,cl: A" R" B) L: L% L9 q! u/ b8 n& M9 R
add ebx,eax
- j& E7 L B5 y' [4 b+ G+ p- W- r mov al,es:[si+3]
$ B6 v1 s! B0 E- L; K4 g call Change# j0 \, R+ I# m9 G8 s) Q
mov cl,4) i- r" m; v1 m6 V/ Q, E
shl ebx,cl
) V( `3 i m; A6 ^% r- z' d add ebx,eax
+ F' U5 ]9 F+ w+ B mov al,es:[si+4]# C) q! Z, T: v, N$ r
call Change1 \% D$ n9 Z! ~+ N6 J) G9 `
mov cl,4
+ W0 i b4 B7 `; @1 v shl ebx,cl
" x5 n$ v% m- W$ }; r add ebx,eax( n5 _- u% f# j% U4 h
mov al,es:[si+5]( I' x* G5 U3 h' J e* W
call Change ?5 X- ?" J, S e, V
mov cl,4
8 J' J, ?) u) b( I- W shl ebx,cl
. e8 g1 Z" w. {0 Y; R- y add ebx,eax
0 e7 Y7 M9 {- q! W" u0 w' h mov al,es:[si+6]
8 U% r/ ]% J c call Change3 j7 V! ^$ a: I3 O
mov cl,4% O& `/ G h5 H8 Z
shl ebx,cl
9 r3 Q+ s! H- j- l add ebx,eax0 k% {/ i. z$ j( s1 u& @' y$ ~) J
mov al,es:[si+7]
5 ~: m7 d/ ^6 _ call Change
4 W3 B5 h& u$ V# j0 P mov cl,4, V k* R9 ?7 C7 q0 B4 k
shl ebx,cl" U( \" D5 C7 l3 f: k) G
add ebx,eax
- s' K! z, ^2 n% e/ v. B ret
+ j! r% j) x; }5 I' I% Q# NPSP endp
3 p0 u6 d/ u3 L' r# F9 C;------------------------------------------------------------------------------------------------7 |- H8 ~8 ^/ S& |0 _) g; D$ m
Change proc near
. A; C2 x- F) L* k4 sA:
s: B! s; u Q& [$ p; C movzx eax,al) n& `( z( J9 j2 `3 `, `6 T
mov edx,eax j" D( P/ Y. R/ _
cmp eax,'0'
$ d8 \' v$ u* o2 ~ jb A
* P" L, D, [/ V7 ?& j cmp eax,'9' , O3 a* ?+ e1 |* n- F
ja B
4 \) A7 m _5 o! \- l5 E7 o8 k sub eax,'0'- y: |7 J' ^* i: S" S: q* |/ H7 D
jmp short E
" w( }, i `& d- w" xB:
# L' P2 `" z! e' |5 J2 E+ ]7 n and eax,0dfh ; R$ h; p ?9 A& h6 O
mov edx,eax
% B5 K! a8 B0 s/ k% r5 _# r sub eax,37h
5 i6 c9 B. c0 @( D$ q/ H# X cmp eax,0ah
: A7 d: V% z W+ }, [: b+ } jb A
/ u' z ^( A2 o1 K cmp eax,0fh5 s; _# Z e$ p2 r# G9 u$ s" h
ja A
b8 ]2 h5 i/ B' R8 eE:4 Z; ~5 {8 U& \% B+ o$ g
push eax
% b' P0 R% ~% F) \7 @" R call PRT
g" S2 _, Z, n; Q8 F& y6 d$ \ pop eax
* D1 |$ V) C I/ K' KCExit:8 ?& `4 F" v* n3 b# v2 Y
ret6 W! |3 |2 @% A5 K* ^
Change endp" R5 u$ P$ |* W
;------------------------------------------------------------------------------------------------
' a& z* N* n; i2 G" |PRT proc near. e- g% s* J; g- S# t
mov ah,02h
# h) o0 M0 Z0 i6 @ int 21h3 O6 B* L/ s" G: }
ret
7 m# s1 G4 C! q- dPRT endp
! t/ F5 e. i, R6 m;------------------------------------------------------------------------------------------------. \9 u0 n0 ]$ v3 Q
crlf proc near c# s9 t0 }$ ~) s+ Z* u- }
mov ah,02h4 U+ {7 j) @: ?' x7 }
mov dl,0dh
2 j* }" x8 V6 P$ Z% j6 v int 21h, L m6 Z! h6 s' f
mov ah,02h
8 N! }6 z5 w' r$ I- x mov dl,0ah1 o; V) v6 F& @
int 21h
4 N! |2 ]) I2 r( H1 v0 { ret
) w; E8 p4 s. M' m9 Ecrlf endp3 b: W* D8 k& M9 g# y. e
;------------------------------------------------------------------------------------------------ ^: B3 Z6 ]: x0 O
_32bits proc near( r+ Z; i2 ^% ]! \
pushad8 Q& e7 N8 z% N1 P, x
mov cl,45 } L+ e1 g" L* z- ^! Z
rol ebx,cl
0 i8 Z" h+ t" Z( c, a4 x call print_4_bits
% e$ L: k' K; \) y: _( _+ z8 w rol ebx,cl
$ l; u& j: t# b/ Y1 V, w call print_4_bits6 u* g. w6 s/ ]
rol ebx,cl4 G# R6 I0 Z" g! `! ^
call print_4_bits& R. \ z& b- M: u
rol ebx,cl! u) _( m4 z6 u
call print_4_bits6 ^* b9 H' P; j: g
rol ebx,cl$ G4 g% v# o) [8 V
call print_4_bits: `) m# q* ` E* T. Q6 z) h( q
rol ebx,cl& T+ A! G4 q: x3 `+ P" ~& b
call print_4_bits
' g/ S0 ^7 u+ { rol ebx,cl
0 o" S; u! Q6 z: F- U/ f call print_4_bits5 F3 `! c$ u4 \5 i$ h) h9 j
rol ebx,cl
5 @' H% y* g3 N& r9 ^8 ^ call print_4_bits
* \- S/ [6 D# ^& p! r$ v' { rol ebx,cl# D/ V1 j, m: N, N W$ N
popad
# Q) l5 o) k5 Z. n" S# \ ret8 X$ N% U- n% m
_32bits endp
. p5 g u) I: g8 a7 O8 y4 l, ];------------------------------------------------------------------------------------------------
) Z" p; a" q X* L7 }' ?_16bits proc near. G! P3 [( t7 d" z
pusha 0 q6 ?0 X9 c) j, M
rol bx,cl4 J$ d; x& i6 q7 Q4 h
call print_4_bits: X* q C* u: U) S( D7 J
rol bx,cl e3 }( d$ n/ J% G' G) r, q
call print_4_bits
! C* z/ s3 n m8 Y8 @8 V. y rol bx,cl' i. \4 x7 Z- f) B3 ]
call print_4_bits g4 \& _% c( P$ e; v' l" u* `
rol bx,cl: V5 M; g6 G3 o2 ~0 |
call print_4_bits' Q; m. V5 j& g
popa
/ ^3 D% @; k% ?% \5 z$ i& c6 D/ [# t ret9 {7 Z& T. A( ?! i0 B3 j
_16bits endp6 `" g) N: [- x0 t- E: R
;------------------------------------------------------------------------------------------------5 _* S a; I- b4 [' g' M
_8bits proc near
+ o# @' o% b1 m+ b. ^ pusha & D/ X- W, A9 E7 G, x
rol bx,cl
5 V4 Y1 e6 e. z7 l! A call print_4_bits
; K- w9 O# P2 z' P5 c f rol bx,cl
3 E: C v! [' J% f; R call print_4_bits
- J- Y1 \+ H* T/ v+ q5 F popa
" d( z5 G& @: F ret5 ]% t3 b' S1 c9 C( G
_8bits endp
- _0 h- a: `, E, y3 G- B5 _;------------------------------------------------------------------------------------------------/ Q+ }) J/ X' F! A
print_4_bits proc near* R+ X- w7 n. \8 g; a# Z* D
mov dx,bx$ l% Z e* Z; h e& g
and dl,0fh
1 k9 j8 H S" q; L9 c3 } add dl,30h
: ^9 [/ P! `4 ^2 Y- Y cmp dl,3ah
, W5 ^) C. c; a! ] T jb print; H. U# r1 z* H% x C! B7 Y' t# Q6 z
add dl,70 J; N' i/ ~8 t; G2 j7 d# K
print: : J/ I$ x6 y! i* O+ N9 T
mov ah,20 M; F. N ?: x" ^
int 21h# _" ?, r4 X) D9 N1 e
ret! S P; y- H) Q+ F/ Z7 y/ V+ U. L* f' E
print_4_bits endp
( C& R9 }. L" ^;------------------------------------------------------------------------------------------------
/ t# H0 ]. `; m8 J" bCSEG ends$ V: @/ i- i4 g% A6 t
END |
|