|
|
各位前輩好,以下的程式為在 big_real_mode 讀取記憶體的值6 G4 ]7 t* v6 o# r7 [
7 F3 n& W5 c* [0 p6 C
例如: C:\memory.exe(程式檔名) 01000100(Address)9 F3 t; l2 W9 J& U( Y: u
u1 Z' i; ^) q3 d6 Z# l/ `7 P則會顯示01000100位置的值: v* G; i/ \5 l1 N& M6 s
! z8 s) c* `' s& G* U但是我另外還有要顯示出字串,但是顯示出來都是亂碼4 J4 Y3 ]& `; P* k1 U
! M& o, w) F' x/ K+ t
麻煩前輩給我一些指導,謝謝 3 T S$ D' q& R
$ \9 @( Q( w& z9 |) c( j0 ~7 l4 g9 [. P% P) |
.model small
: ]4 ?) q/ x- \8 N% P.386p& \) R' a" i- ]0 D6 g2 [
;------------------------------------------------------------------------------------------------4 X, T# Q7 h/ ^. }
DSEG SEGMENT USE16'data'
% X% ?2 {& j, d% m# w+ \: ~: W0 Z0 ^% N: o8 R. }0 e
DESC STRUC4 X9 ?, j5 p4 I
LimitL DW 0 5 I# y( y+ z O/ \; ~+ X
BaseL DW 0
% M) ]8 E) e& v( H5 t BaseM DB 0
" W X" S- @( J% S/ O& U Attributes DB 0
9 P: }/ q9 s- M# I6 e! H( O( X LimitH DB 0
( Y& L, S! R% L# K1 \! m BaseH DB 0
+ x5 U+ }1 k) f" B$ q- V; [* EDESC ENDS! j/ R7 S- N C! W! i( D+ t+ _
! E9 J: k- i: z- V: W6 q
PDesc STRUC1 z: n9 }/ n1 ]3 E
Limit DW 0 . y$ E- r' a% g& Q9 q+ l
Base DD 0
( z* g f0 s! ePDesc ENDS
, R1 T9 w, a& w$ v) N. K8 e; P I; `8 s1 @ | i5 _
GDT_def Label Fword
" K5 g) M. s: JNull_Desc DESC < 0h, 0h, 00h, 00h, 000h, 0># E0 M( v. R/ ~- h
Data_Desc DESC < 0FFFFh, 0h, 00h, 92h, 0CFh, 0># w9 G; q9 j9 P2 z0 r2 }7 f* V
GDT_Addr PDesc <$-GDT_def-1, >
: O2 b% a, ^4 T- G" Z! M7 T: b# E2 h7 D% q% s8 S% k3 K9 {
msg1 BYTE 'The Input Address is '# @6 {) f7 p: W) J+ Z0 J
msg2 BYTE 'The Data is:','$'
4 F5 U0 x2 p# h! I
' z, R" n7 A) U! i( w; G+ iDSEG ENDS
: a& k- A+ y$ W4 F
" C4 p; ?1 U3 f8 X/ {. m8 w8 g& W4 l
& f0 V8 u) j. {7 n;------------------------------------------------------------------------------------------------ . l6 s9 |$ L7 q+ [4 [( J" a% c
. o* z, [$ C: R3 U& u0 x+ F |" G
ASSUME CS:CSEG,DS SEG
& i4 J' D; t8 M! D8 x5 k& b/ }( [- B) z
CSEG SEGMENT USE16'code'
! y( G( G8 [, L# C
) d$ ]% r* E/ L; M+ R push ds/ I, A/ x& x6 w( ]: f
push es" s0 ^ g; O; F$ w. r6 ] k3 x; G8 g2 s" R
push fs
2 E' }5 Z3 Z6 K$ q. P. b; N6 h" |! n push gs
/ n$ _9 U/ v( H5 Z7 x/ B+ o. M3 H1 S
, S9 W; x/ T, f& {9 g call big_real_mode/ n# {% L+ Z3 q) H1 z$ F6 t
9 x8 h3 c$ z- @6 c2 n
5 Y4 {9 D# x; T
mov edx,OFFSET msg1;
6 ^ A* t3 x' n; I5 [7 I5 G mov ah,09h; ! t6 x# n, \# ?
int 21h;
- P9 u9 j, M. W6 q$ V4 H0 z. U mov edx,OFFSET msg2;6 e. y9 ~4 ?, e% v
mov ah,09h;
3 D9 D& h1 z) b* A! p8 ?( @, I. | int 21h;
3 v( \) N% |8 r/ O
# ^6 B D$ k5 Q. }, f0 I; E call PSP
5 v/ e% N* V) e8 y4 F9 g/ \6 F
& z" p0 A* k5 L/ I% @ call crlf + }" C1 r, O7 N) Q% b c' `
& E/ ~, m" H! E# B% v5 K0 ^8 Z mov esi,ebx/ `) m6 _. t9 C7 W0 g4 ]8 y
mov eax,fs:[esi]
5 w8 N' q0 e6 S% Y/ ?& N out 80h,eax
. O+ C2 x e0 Z& r5 {8 w mov ebx,eax% b: ] u. ~) ]2 r
call _8bits
0 s/ q/ F) ?& |! c |2 b7 }
- t$ x; m4 g& s& L. G9 }( K call real_mode* A3 S% c& c& g8 }! p0 z# N
' R5 s5 V5 K, X0 Q% K% d. f+ K pop gs( C# ^! Z' F# J% B
pop fs
2 w u, P& S; } pop es7 p) _- h% w1 A! W- b' U
pop ds8 E1 T, d( C8 Z5 Z
8 a9 c' m; e0 C# q0 @7 |
.exit
. ]1 Z# L. @; n% b$ y( S3 e% p) E) p;------------------------------------------------------------------------------------------------ ]. a8 }! E* ]. _
big_real_mode proc near
+ J1 e' K, O. Y$ S( u) {+ x Z$ k# R6 @ in al, 92h% c% B8 e3 n9 O+ ~. U
or al, 002
6 I/ J# _$ `- U/ L! p! O out 092h, al
* P/ z/ y1 p I" e6 J7 q: F out 0edh, al
/ L+ Q3 b( @. R$ r# J- u cli
! f4 O7 g( O. z1 m; T/ v# s mov eax,DSEG
5 i; u- Z6 H6 q6 y$ a$ W shl eax, 4
: {! h% V1 x0 ]' ^ xor ebx, ebx- K$ M2 o; D- K# o# G- ?
mov ebx, offset GDT_def$ c% S8 `/ `' ~% \ M
add eax, ebx
0 D( {9 S% r( q2 @ mov dword ptr GDT_Addr.Base, eax0 o P; `5 b# @7 J# d F
lgdt fword ptr GDT_Addr
O; O5 g Y- \/ b/ p# w mov bx, 8: r+ Y# G J- D! r' f; z, U# |
mov eax, cr0
3 [/ Z" j1 O5 A m or al, 1
. ?# @7 G$ P0 }8 |0 U8 _$ ~7 d mov cr0, eax' b6 v" y4 V& k4 Z" b7 ]- `' ?
jmp PMod
" ~. u* [+ t% w6 s8 `5 p4 XPMod:
. _8 ?. A7 t; S J# f+ t mov fs, bx- T: L; p0 J9 `. z- {9 n# h
mov gs, bx
I5 ~; U* D n3 j$ _$ V2 U% _ mov eax,cr0
- L4 D; S5 j% q5 M0 j8 I M and al, 0FEh4 S& M9 N( l' G0 ?1 Y" f' ]: i
mov cr0, eax
7 ?0 [$ w" x9 a Q/ B jmp RMod
x* X* F2 y) b! }" l* `) q( URMod:& X3 ]. N" `1 A. e. G- l! k7 x
xor ax, ax
' C. m" e& }/ i5 j2 G- G0 G mov fs, ax
' C. ?4 P L! ~! c. r/ P mov gs, ax& c3 g2 D7 ^. I- c6 E) @
1 G2 Y7 b+ X! z% H6 x5 B& S k" N sti
+ {* s. m% J8 W- S0 g ; G( s/ P! j8 ]8 w% C8 u
ret
+ w9 z) R1 A; v8 J& J8 L" l5 n2 \big_real_mode ENDP" n0 _& U9 N1 e1 P0 O" {
;------------------------------------------------------------------------------------------------: _2 U% O: W4 D# K# N1 `+ d
real_mode proc near8 M2 F! H- J0 X1 k0 z% q- h5 a
in al, 92h
# f) K; S: m* X7 O ]2 m and al, 02
- j6 k( `, Z1 g9 g out 92h, al
: u* r+ N8 b1 v: m+ h ret
- m+ }2 _* x* Y- ?& g' N7 Z p$ z/ nreal_mode ENDP
* U- { u3 M- N) F" J7 |;------------------------------------------------------------------------------------------------
/ B7 Y2 Y& S2 M) d7 O% BGet_Commandtail PROC near5 Z, F9 y/ ?, g; \7 N( R4 R# k+ h
push es
" d3 W1 N2 \0 O3 \% C1 S pusha
' g: A/ l. V* M) x8 Y W( W mov ah,62h " k2 h" E/ q& z/ k/ j; Q) G a f
int 21h/ W: x8 T" ~" b( H7 \% b, [; U5 h
mov es,bx. k9 `$ f. a* s/ h7 S0 f/ z
popa
. ^; m6 G( v; u! K. c& A3 Z8 g pop es
9 a! @0 g- ]! d' [" A8 w1 Z ret. ~) _" ?6 M3 V M
Get_Commandtail ENDP
3 `6 g0 o5 k$ q;------------------------------------------------------------------------------------------------
" Z J: ~, G9 A$ ^PSP proc near
1 k) f% } T1 q) L/ V/ s6 J0 x4 O mov ah,62h
9 x, L: x4 m* W8 X; @( u int 21h+ E5 ^/ o) ^0 E+ s2 Y
mov es,bx
6 N' c6 a/ l1 h, E x xor ebx,ebx) K, {8 D/ o5 }" H# x/ P% t, Z- s
mov si,82h' w% b' ?) M. {5 O: X7 `6 Z
mov al,es:[si]
1 q @* S# g; }, p& y9 E" y call Change
* q% K1 d; J. V6 _. A mov cl,4
$ k. C( b2 t7 D, F& L) W; [# j shl ebx,cl
# U7 b, B0 y/ l9 y add ebx,eax
1 t. T9 J- w" J& ^1 j+ q mov al,es:[si+1]' Q* {3 Q0 }9 K" f* r+ L! B w
call Change) [1 s; @# R! K
mov cl,44 A6 Z$ j1 r$ B. \$ e
shl ebx,cl, I" K7 m' l7 L7 ~ [$ h
add ebx,eax
3 H% L6 V j+ V6 X mov al,es:[si+2], b8 P" t$ A c" M& G2 w, _2 L
call Change9 V5 s& S3 A. l M( S) X' {# {
mov cl,4
6 s, ^/ ~ {2 R9 k+ h shl ebx,cl
" s9 y2 Y3 f8 ]7 ?* z add ebx,eax# a! C* y4 O) J0 U
mov al,es:[si+3]2 y m* m1 f5 p" E: p$ z
call Change
, `0 b) m% G0 R# M" c% y# z1 j! I mov cl,4
# }: ^, I/ {. a! U8 g shl ebx,cl# J5 C' M3 u' R' g
add ebx,eax1 o- u: g. E& `9 h
mov al,es:[si+4] A8 c& v7 q" X' n0 M$ M/ x- e
call Change% Q: M' o2 w% {, n; n$ O) h
mov cl,4
; B: T3 v6 E5 T$ U shl ebx,cl7 ^( g2 v. M7 v1 Z R3 ]( ]" G
add ebx,eax
3 V. e: I9 [* Q& V3 m mov al,es:[si+5]+ X) k. n* W D, p$ H
call Change
3 b. L" U8 }) h: r7 F mov cl,4
* ~9 p% Q; T! n9 D% W5 P+ k shl ebx,cl4 n9 O3 t L! r! j! d9 y) ^
add ebx,eax6 L. H8 m3 P! e6 g7 M
mov al,es:[si+6]
8 |2 N% g# T& n" C/ D2 y call Change
( @/ p! ^3 P D mov cl,4
' {4 S5 ?; _9 A shl ebx,cl
$ Y1 e! d" a1 m+ T, e9 M add ebx,eax
- Y c- N' Z3 Q+ {8 T4 a+ Q mov al,es:[si+7]
# Y# g6 Q6 W- Z call Change
3 S: {: z+ s5 W3 T mov cl,4# V) K: g2 y s
shl ebx,cl
% \6 N/ m0 L6 L( u' d add ebx,eax
3 R& }0 T2 ^2 M$ }% N! D ret
, b' B# M K8 ^$ G& m; S. T, H+ Y) @PSP endp4 a$ p) o- O! q$ K4 }6 k% [) X% w
;------------------------------------------------------------------------------------------------% j2 c, s1 F# g4 ~
Change proc near
' g! g- O: C4 b+ aA: f8 j% H- ~7 `2 ~1 L
movzx eax,al
" v+ @5 T: U" @+ N& c mov edx,eax7 @& b J/ X4 [. d2 |! F1 W- B
cmp eax,'0'
: b6 R5 K2 `6 a# E jb A
# ~1 n! w2 I% B' G: j! i cmp eax,'9'
7 d: J. Z! G7 H: d: s ja B
; a7 }' S" R E \1 { sub eax,'0'
0 L; E( u/ L9 V7 { jmp short E2 w- e) V9 E' p1 W( F2 {4 p2 u8 d
B:
! u+ I& ~( ]# R. w% l0 _6 s and eax,0dfh . c4 E0 e+ f+ P. s4 S
mov edx,eax: i/ t) A6 Y0 f7 _; d" N( `4 P
sub eax,37h
( g( `6 I" P [' w cmp eax,0ah
% w; {0 ~$ a1 ^" x! r jb A
9 v1 V ~8 M+ _) J: j6 d cmp eax,0fh* |9 o2 m' w5 ?; L5 O4 ~
ja A P* L: V5 x6 V. f# \* V
E:
6 w W, `9 M- A& X push eax
' a: h+ `6 C% v: o, ~3 H call PRT 7 D, }8 M+ `: _( y' A. p
pop eax
& @, S; k& v( l* V- }CExit:
( J* g/ y" ~6 L7 q9 a3 f ret+ @9 i" `2 i* w2 r8 Q
Change endp, h7 a" U) |# G8 y- f8 ~
;------------------------------------------------------------------------------------------------6 D3 L/ e8 g3 ^0 Y( }: T0 T/ r
PRT proc near' k ` R' Q, i' n4 z
mov ah,02h# o% [6 _0 M; D3 ]6 S9 D) w
int 21h/ v# u* v0 R ?$ O
ret$ g9 n& S+ a C7 Q" n
PRT endp5 ]0 @4 q C. [# s( R8 A8 k; L
;------------------------------------------------------------------------------------------------
! F7 Z4 }4 s0 p, X+ `* ]crlf proc near2 G6 Q! V5 L3 E8 [+ C% o
mov ah,02h; Q# c3 j. P" B& p
mov dl,0dh( O9 \5 ^+ \# v& q
int 21h
' R. O" i6 e% j mov ah,02h3 r# c2 J7 _; O5 L' {& G4 q/ M
mov dl,0ah' v6 V: r; \' B, e2 O$ I
int 21h/ c. O1 q1 W( c0 W5 p
ret
5 c4 a$ A8 m' h3 X* |: Z9 ncrlf endp
; U& k% M# x% G;------------------------------------------------------------------------------------------------
+ `) o' Q+ v3 L8 V3 O- c_32bits proc near/ i2 d) T% K. v3 g6 s- v3 [8 N
pushad0 T0 r" h% k0 K; |% m
mov cl,4
. J: U/ X! f* d" |$ e0 \ a. P rol ebx,cl
: ?0 l4 S2 `. f; r; y call print_4_bits
5 D, D) w7 h2 Y0 c& b2 V rol ebx,cl3 m/ K5 `# I" r' |9 N! l* s. B4 g
call print_4_bits
& k" O& H- _" v# I0 ^; u3 l. ` rol ebx,cl' e( |9 T) x s3 b; |( x
call print_4_bits( @1 E# m4 [# G; `# B
rol ebx,cl6 B( e8 K* x5 I' a# v8 h$ `# p
call print_4_bits
* E! v9 J. b1 C. c$ F; d- u rol ebx,cl
9 i. Z3 x* e, p- L' `% ] call print_4_bits+ R" G' S4 j' Q3 O' k* h3 O
rol ebx,cl
2 V- _1 C0 N9 s call print_4_bits5 x$ B& ^' M* Q8 O3 d
rol ebx,cl2 X8 C% c- v- S k9 A+ R% S
call print_4_bits
( I" A+ e7 t( i/ G) c4 W* T rol ebx,cl
$ ^/ D6 {2 {4 u7 | call print_4_bits
5 |4 M5 _4 U- v6 T. m rol ebx,cl
4 c- b3 e8 l( ^3 p4 b/ D popad. Z$ ?# v3 Y( b5 W) Y
ret8 V* S6 ^* ^* A
_32bits endp2 d( B+ c5 Q2 A @ k
;------------------------------------------------------------------------------------------------
& w7 s2 G9 L( i_16bits proc near
- q, q' H3 [) j/ V0 j" _ pusha
0 _8 j$ K9 O O rol bx,cl
8 r! E! j! j/ r D call print_4_bits2 v# @. |8 U& f" b9 `; [
rol bx,cl; I& g* s- ]3 x3 ~1 r' o l) o. Z
call print_4_bits- u1 E9 U3 V$ ^- ~
rol bx,cl
0 C8 ]- v" e$ t, V1 w call print_4_bits
6 ^" [+ U$ u; E' V4 S rol bx,cl
! q# t! d A& _+ m/ r3 e call print_4_bits
0 P) }4 w8 i# {& i f2 j$ q popa, r/ j- d. M+ e
ret3 J/ n x) R1 M0 F; _" F y
_16bits endp5 k+ b/ W. S& N' j3 F. k
;------------------------------------------------------------------------------------------------8 B/ a; B+ a4 B D J( {
_8bits proc near
9 [: a& g6 M, ? pusha
: x* d8 J1 Y6 J) h5 T, Z7 U" @& Y4 Q rol bx,cl
# \4 w: ?6 e( t5 r call print_4_bits
( A5 n) s- T- @/ k# ]) A rol bx,cl- J3 y) a+ d+ D& n g
call print_4_bits
4 D' n- w/ X" |( X popa7 A6 @9 H3 o! u- }3 A5 N
ret# h6 \8 }2 J0 x* c
_8bits endp6 \) ] k- U, Z; R) X& {
;------------------------------------------------------------------------------------------------
) u' {- W5 p/ B5 j. W J: o$ C% nprint_4_bits proc near( J- G3 D; N& a: D6 a0 W M3 Q. g
mov dx,bx( X0 R( A9 M T. v
and dl,0fh: |" `/ w' c4 F, l+ l
add dl,30h
; D& e; i4 Q( A! q q: e5 C, Y cmp dl,3ah
& j' x8 ^/ [2 x6 X6 g; [0 [ jb print
2 [( b5 j2 C# f$ |& C8 B0 T) l add dl,7
& H2 n- h. b/ hprint: 8 u& A5 l7 f4 O9 C* ?! C2 T8 x
mov ah,2
( K ]+ q$ g* E2 v4 G( E4 ? int 21h* S& g/ t# y7 P2 v; s) |% q, ~
ret/ a8 F& ?0 E d T7 t, b- S
print_4_bits endp 2 X- E5 B c; e) `
;------------------------------------------------------------------------------------------------
( E6 [% r6 }4 C' X+ [% R* wCSEG ends! [8 C g/ Z f4 c4 W; F- `$ \
END |
|