|
各位前輩好,以下的程式為在 big_real_mode 讀取記憶體的值
; P, }& i, C6 C' z0 c; y6 l* I7 n: S8 A; g
例如: C:\memory.exe(程式檔名) 01000100(Address)
( |2 t0 c8 M+ A8 @+ q: e6 h
, ?5 W! i) B2 R1 g3 T則會顯示01000100位置的值
. |" A- v. q: q0 W, }# m+ {4 p8 @3 d' e0 _) B: d
但是我另外還有要顯示出字串,但是顯示出來都是亂碼
" A# m. F5 y' v ^
% {# S s6 M2 W' T1 R& b4 C$ c麻煩前輩給我一些指導,謝謝 7 o% I) P2 v- b2 Z/ U
& X' W. o! I8 |6 n3 ?2 o1 p% M, G; m& o( x& Z
.model small
6 ]* j4 m! Y; k5 {6 V `' o: A.386p
3 f7 S# G: _* T' _& f( x( w) n& \3 b$ s;------------------------------------------------------------------------------------------------
* |8 R. M/ c& G* a0 Y0 I e: C5 ?9 wDSEG SEGMENT USE16'data' & a5 a7 j7 ]5 o* w' Y4 _6 c# _
. O1 F( _5 @* W: |8 C8 d Q: s
DESC STRUC
9 Q u0 I3 p, ^+ C) g LimitL DW 0 9 o5 I% v7 O' z# W1 t9 a
BaseL DW 0 . N/ k0 D' W- K+ c6 x
BaseM DB 0 ( g* {, d0 u3 ^7 v3 d5 Z# C! Q" a# K
Attributes DB 0 & B* ~9 ^9 [+ D" p0 \
LimitH DB 0
" F! p t" X& f0 c, o BaseH DB 0
+ h% n8 Z! R" M5 m1 X+ uDESC ENDS
2 M' _' U4 i \( \/ Z) \3 V6 I- F7 C9 ?7 ~
PDesc STRUC
2 s6 C1 }9 G/ E" m Limit DW 0
# g+ Z: o8 F% r J' ] Base DD 0
4 y& f) ?7 U9 Y' }& tPDesc ENDS
* _: I: M, m" |: A$ T t8 K) l3 C0 f' i
3 I. H, l/ `" U% pGDT_def Label Fword0 |' ~: ^& @1 J4 y6 l+ j$ w
Null_Desc DESC < 0h, 0h, 00h, 00h, 000h, 0>5 x( S6 [. c* r' a- T
Data_Desc DESC < 0FFFFh, 0h, 00h, 92h, 0CFh, 0>' l$ m; s! m/ H* c# \. d2 h* h
GDT_Addr PDesc <$-GDT_def-1, >: n9 K- \: c; O4 G+ f& u
: f+ w3 O, [6 s- i& E
msg1 BYTE 'The Input Address is '
! L3 ~, z# [! a o+ s3 y& Q2 M: nmsg2 BYTE 'The Data is:','$'# g4 v( H% { K9 H- j" r. C
" C) X% L+ k( x7 r3 f! O: j1 aDSEG ENDS4 k& U7 i* w, g
" @9 y! e5 {) ]( k1 ?" N6 F+ J! M4 ` p; n! A- [% ^, @
;------------------------------------------------------------------------------------------------ . Y- d \6 S% }' v+ }3 z' }
# T3 G. c( n8 n; S B% W% F* t
ASSUME CS:CSEG,DS SEG
/ b. K8 I: H, @4 i$ S+ F9 P' e \5 W: y4 ~4 K6 _
CSEG SEGMENT USE16'code'; \3 A% q* b, N' T+ C& ^- w' X
2 Q- K, w9 f$ Z, e8 I push ds
, N0 `+ o/ X6 d0 l: Z4 N" { push es8 o3 z* n# K! H6 s3 ?! c
push fs9 e; t) H( z F$ k0 l6 {
push gs
g- v# o8 D# Q# J& K: R
$ O2 k9 L$ |; R! }1 r6 f8 i8 d% _ call big_real_mode
$ m/ C& @7 l$ M" i6 y. b; T' x e0 M1 n
l( D' z. q# }2 V0 c) o" ^ [; e mov edx,OFFSET msg1;
; n! L( ]" n2 a: H mov ah,09h; 5 F% W; d: C* u5 Q
int 21h;
5 _9 `$ g, m% N6 _+ [" g mov edx,OFFSET msg2;/ M ?/ F6 ]. D* }
mov ah,09h;
5 K& J3 l, k+ C$ O' V+ g# V int 21h;( F& e4 Q1 p! x: V: y
$ A7 S3 o4 O3 G& g, N; J' O& w
call PSP ; c S# a: s. E7 p2 ~. S: g* B
4 m9 T" T* H' C call crlf
7 V* e* T; d5 k: N1 t ' q0 E) m4 n; m; n; @: O: k
mov esi,ebx
0 T) t8 x6 ]$ ^ mov eax,fs:[esi]. C5 d3 I% n0 r' G
out 80h,eax
' ?) i7 b1 H j mov ebx,eax' F% }8 a8 w5 Q
call _8bits8 B6 d% B: u; J/ k
# y3 h" m" X0 w; l" i# [ call real_mode( O2 h7 `$ [* } M9 C, C& b
7 j3 S' J0 u& }* G# e' g# O
pop gs
; P H! P4 m! M4 r/ D pop fs
" Q% z* z8 f: M" l pop es
7 G3 T, A$ C' z/ C& n pop ds3 d) w5 j/ {, Z
% {- J+ M6 y) C% r0 W
.exit1 P: L% x: N; R$ R" N. p
;------------------------------------------------------------------------------------------------
& t; x+ E* Q0 N) p0 [ f* c) }7 ]2 Obig_real_mode proc near
* g( q) U r1 ~: G4 f in al, 92h
1 U9 Q2 Q6 t. J0 o- r9 o! ~$ D or al, 002
, u1 W6 {$ W* A9 m n5 @' N2 C0 U out 092h, al, k; y3 V7 X$ w% t0 S" z" h
out 0edh, al
/ D! z5 m3 m+ g t9 A! d* q! @ cli+ B4 `1 r3 j- h& b3 m+ H. J O# @# h
mov eax,DSEG
L+ ]3 Z/ q" F8 b4 T0 v8 y# x shl eax, 4
' a$ z! w c! [ xor ebx, ebx
8 P4 u; I N% R% N2 r mov ebx, offset GDT_def
: ]8 c0 D6 C, l W add eax, ebx8 R( X* d7 p5 ^, E
mov dword ptr GDT_Addr.Base, eax
1 v, [1 W' z( j8 R- [ lgdt fword ptr GDT_Addr
7 s* s; G( q& u% m F mov bx, 81 }, b: J- j7 c; p5 a
mov eax, cr0% _) S% S5 ?* {3 h- |# c5 }, h
or al, 15 z6 R* `$ s- r2 m& Z6 f. F
mov cr0, eax
: g( s8 b2 e# {( w @ jmp PMod0 ^& k- W8 X) @1 v$ H% B$ y3 p
PMod:4 M' H J/ N5 n
mov fs, bx
, ?/ h: a+ B% S6 b) K mov gs, bx) ]( I7 B P) N0 p& r
mov eax,cr0
5 [# B% _# t3 p# p# a and al, 0FEh. Q6 W$ N! N# ^5 ` R2 w7 {
mov cr0, eax
% w# }0 b% E* {/ ~5 p jmp RMod
6 ] U5 b- h9 oRMod:* X1 U; \5 i4 v+ T9 `% ~5 C) [6 S
xor ax, ax
2 O5 G; @, [$ q( G9 b; m7 l mov fs, ax
* E0 E/ R& j' ~& ~1 q% Z mov gs, ax- G8 d+ a; W& m. V, I0 V3 E
% Y4 e4 W# P, u$ c6 e; P$ N
sti' @* o0 ~" W& h3 o; C
- N8 b- Y, s8 ?" T ret
% u$ K4 S2 I( T8 d- Lbig_real_mode ENDP' F* x1 T+ I2 ~
;------------------------------------------------------------------------------------------------* t: J! X# _5 V- ]
real_mode proc near5 s' r6 b5 S0 p. o4 j3 X
in al, 92h
# H3 `: S$ x) ~* _+ l" y! Z and al, 02! L: t! f1 t0 }# Y
out 92h, al
5 [4 d) h5 N; C8 O; o! }9 H8 L ret
C1 u0 q) L6 b6 Vreal_mode ENDP
P8 K3 b# h% x6 ];------------------------------------------------------------------------------------------------
0 F; ?6 \- \( m8 f$ m+ TGet_Commandtail PROC near
/ g: A. I# c# O! i, L" U push es ) B8 J% n0 g8 \1 V
pusha
s7 R: t; H: M6 E mov ah,62h 8 {+ \0 X2 Y4 K# U
int 21h" h: h6 S) ]5 K y$ T$ e; { f3 \
mov es,bx. h( [( d0 ~9 i* ]3 b
popa 3 h- _( i$ }$ `1 e- N& x
pop es$ M" w. t8 O; x: V/ E4 U# y: l+ Y
ret: ]4 Y7 @/ p [3 j
Get_Commandtail ENDP
4 u/ R! K$ R" Y! {' M! {9 K;------------------------------------------------------------------------------------------------4 M% W g; A0 B$ |6 M4 @
PSP proc near% s5 D( C) Q( a9 S9 f$ h3 O
mov ah,62h
6 c8 ^0 F6 E+ r$ O4 [$ E- i# u) ~ int 21h
) m3 Y; D$ P! |, s3 Z1 m# v- h mov es,bx & m* F4 K+ s4 E: ~! t$ ?" U- S$ O
xor ebx,ebx
$ f% ?0 J/ \* @/ s mov si,82h
1 q4 _4 q/ I% `3 u k% S mov al,es:[si]) d8 s" J, h( R; d2 f7 Z
call Change/ J l2 S6 ?, r) ^# O" a+ Y6 a
mov cl,4
: ]2 ]$ [6 Q7 z) N# v" [ shl ebx,cl; N5 C6 j- @$ A8 i* [: l: e6 j
add ebx,eax
5 _- S' K0 m! Q; r% k mov al,es:[si+1]& U& Q' S4 t2 Q+ t! r
call Change
3 g4 k/ p) T7 Q2 s l mov cl,4+ N S4 [; G1 c
shl ebx,cl
: \3 x8 _# g: z! X add ebx,eax* p; c* t* @4 Y
mov al,es:[si+2]
! t7 L! w d/ g$ g1 I call Change
) N" J, j) @" x1 H7 Q- j mov cl,4
3 x" X2 J- {# O$ w& r9 s9 } shl ebx,cl4 X Y6 c4 T* f
add ebx,eax
% r4 A1 s+ `; q$ g( B, x% u1 e mov al,es:[si+3]
" G* ]8 Q! e0 v2 y6 Y( `. h2 ] call Change
/ v$ |: {: F& J# L4 I0 n mov cl,4
2 G! R4 \. ?) s1 m4 g shl ebx,cl
+ {% j2 @0 N. q0 O4 A3 m add ebx,eax) {( d: V' c- O4 U9 m+ g. P8 r- A
mov al,es:[si+4]
. k0 p+ R, W: l- T# |5 a/ S call Change+ T* U# I, ^4 |- _
mov cl,4
' u4 ?$ m& ~$ U shl ebx,cl
. z+ ~' m2 e. Y9 M* p, T add ebx,eax/ e, l7 S# ~* f+ N/ R9 S" V
mov al,es:[si+5]5 ]/ Q( ~8 {( ~2 A! M2 H! B
call Change
" V' o$ }2 ?0 {) ~1 @) ] mov cl,4" q8 d# {) `% J/ P- ^) {. f
shl ebx,cl
7 p1 d$ E. G0 Y" p( `: o" h add ebx,eax, U" t: t* g& v
mov al,es:[si+6]
- n& @/ g/ _6 P) K# h" b8 c call Change
* \/ C0 k+ n0 Z6 V* b. H mov cl,4
7 n% s0 P- D) V8 w3 P shl ebx,cl, t, s9 V" G8 g$ h9 Q0 i
add ebx,eax
3 r) P1 {, X2 x/ s mov al,es:[si+7]
) p, C3 P' J4 N# Y" P% i8 x call Change
& D/ R' m$ y! j$ u- |* V mov cl,4
1 @. I* T% ^ @/ ` shl ebx,cl
5 F* S" w$ i: L' {. g1 H. P add ebx,eax7 P+ D9 |( R7 C, I2 O* q- p8 Q( {
ret, u) o A8 p$ K, Z7 G7 c+ j
PSP endp7 Q# b6 E: z/ T+ I, I2 A$ q
;------------------------------------------------------------------------------------------------
2 g: s ~; I, T3 ?7 _. AChange proc near N& t' C: \/ {! \0 q, E7 o% ^
A: 7 i/ H. k3 ` v+ [/ ^' [
movzx eax,al! J+ U. u% V4 [; B2 ^
mov edx,eax2 |4 l7 {* q/ e e" O( v
cmp eax,'0'
* i, k: ?3 Y/ T0 { jb A' O/ }, z9 d) B0 r
cmp eax,'9' # g8 E" Z+ H- X" @
ja B6 P4 G. U4 G I9 t6 A" T+ S
sub eax,'0'
8 h- O7 t) n- ]" E- N3 k/ a jmp short E# G. N9 H3 N" X+ P2 k; ?
B:. M. t% N! J* x; C) h( k" _
and eax,0dfh
5 `- ^. e2 |% `0 n mov edx,eax
: l+ G8 r5 }. s sub eax,37h ; a" O+ K2 {! i
cmp eax,0ah
( ?( `' A' g' @ jb A
3 O9 e& c+ i+ N# n cmp eax,0fh
) |. z# I6 L- a" A/ s! Q ja A % C" s! i, m r6 c% U
E:2 i0 _+ @ s; ~' I5 W0 X/ W; i
push eax $ K" U$ B. c4 k2 r0 `
call PRT
) t, s- B6 a" c2 ^) n* \1 k+ J pop eax
' |7 }7 _" T. @' U/ KCExit:
; ~' E$ ] N1 A ret
- Z5 i3 v) Q/ AChange endp
@5 N! Z( _( F2 h& d9 k;------------------------------------------------------------------------------------------------$ v( l' y8 \3 Q R) o. d
PRT proc near" x, q$ x5 c1 ?' O8 ~2 u0 t
mov ah,02h
8 {! R% D. T7 F& S; G! w int 21h
/ D! x0 M& a; z- c ret
8 g4 ^7 b" d7 L' LPRT endp
: A& d* w( J" t* y% t;------------------------------------------------------------------------------------------------
& R G" J) [% V0 G; A- a) |8 Dcrlf proc near
# K. k+ M/ ]( o) h4 v' |1 _' d mov ah,02h
4 j& {! \$ M. x, O Q% N5 `+ j mov dl,0dh, x# J- M. A: C7 ?3 e9 ^, ]
int 21h
6 q7 [: z, M: U8 r6 m mov ah,02h. a+ e0 u& c5 y0 Y$ Z4 _. M
mov dl,0ah( o: _- N& p+ i: R+ `8 X% k: D, `
int 21h
9 g% t$ ?. @, D7 w( L+ G; n! P ret; t2 q1 J$ \8 O# X0 G9 e2 Z
crlf endp' \: L: P( S6 v: O3 K% x: {
;------------------------------------------------------------------------------------------------$ M# ^. u0 w/ i4 q5 H
_32bits proc near
* e1 K3 U P+ h+ Z pushad* t" w. O/ d' x9 j
mov cl,4' B! w! f7 P- E0 R, E( S
rol ebx,cl1 A% Q! j. d( G5 F c# m7 S
call print_4_bits
/ p. i* n: P+ t9 V8 X$ p$ \% Y rol ebx,cl% c+ S* ~% u T. T4 k8 t9 J" ^0 t# }
call print_4_bits3 V6 Q; [" [2 k+ g' G* H+ J! D
rol ebx,cl& x' m H# w4 }8 c5 n$ q# m
call print_4_bits! C$ N3 t( C$ r4 J, f
rol ebx,cl" b# T: q2 v4 H! `0 R8 b
call print_4_bits
0 g6 R1 h/ `. r2 _ rol ebx,cl
& u0 g2 J- a0 G call print_4_bits
: d/ {. J- X9 Y! Y rol ebx,cl! O# y& j, ^/ @) `+ r* m% W5 \
call print_4_bits; n5 V2 L: E' S. H1 q# X
rol ebx,cl3 z7 B0 |6 m3 p& ^* J
call print_4_bits1 E2 Z. \# Z# H: h& P$ v
rol ebx,cl E) L! l/ v B+ m
call print_4_bits% J9 [# M- Y$ Y F4 R. j
rol ebx,cl# g0 I: Y# |. w. E) q& I; I
popad/ z. z) v& m: z r4 n( x
ret! ` B# m5 r' E4 S% w1 }
_32bits endp7 s% D! V4 m( k; D, c- i
;------------------------------------------------------------------------------------------------* i( ^ h; ` f0 `: a$ y
_16bits proc near
0 {2 K+ M6 |$ D! T pusha
# [, W( I/ C! W/ `7 w rol bx,cl
. w0 r6 a+ L$ s. J$ m call print_4_bits
. U1 L+ C5 P" Y$ C; D9 B( E5 `$ Y rol bx,cl$ J! Y3 z2 W( u$ O6 ?% X$ a
call print_4_bits
; b3 ~, o% A' w) Y4 s rol bx,cl
+ X% a* V. G) Z- H' e' g call print_4_bits
! U# P' U5 Y8 l: R3 ^$ u" c rol bx,cl8 L, s, M7 ^3 K( p
call print_4_bits
4 G( l: m4 ]2 W; b" d popa
7 x7 u6 z% B( j$ p ret
1 S% V. n2 `/ m) h. ~" j_16bits endp
' o4 w- O( R) d1 O0 V$ R2 j;------------------------------------------------------------------------------------------------
2 S; o/ x) S% a_8bits proc near7 n& d; m' ~9 a2 a5 K: S- ?
pusha
D! i0 g# Q2 H4 d) \ rol bx,cl9 G; P1 b2 W, a# v/ q' J
call print_4_bits
* V: d: v9 o7 R3 `& ^; X9 H3 W' s rol bx,cl! d+ t! i2 A; T" j$ u a$ E
call print_4_bits) D6 }5 m- \' L1 c) B L
popa
8 o; t/ N1 t" o6 y9 u/ j ret
; g0 M2 ~! b. y+ X, H2 m_8bits endp
r7 B2 f8 [% l1 y;------------------------------------------------------------------------------------------------0 z* @# A9 V5 J6 @6 z
print_4_bits proc near
4 {. O5 J1 k* \ mov dx,bx
( m) k: c5 u3 h6 I5 v and dl,0fh
4 b% J$ ^# Q9 X1 ] N( M! w add dl,30h
% J, t+ [5 \/ G# m. n" t* z cmp dl,3ah/ I. {9 C u$ S& x- `8 g
jb print
& Y6 z7 p) _1 P5 X" Q6 l+ x add dl,7
1 w9 _$ N3 {+ ]- mprint:
+ t' `. M2 r9 D$ ~! C5 J mov ah,2
, u- X, Q9 ` `# N, O5 d- b int 21h \; v: [! u1 l
ret8 o4 S4 O7 N5 ^1 z
print_4_bits endp - h! l7 E! r. u: K& u7 B# \
;------------------------------------------------------------------------------------------------. w3 P% L1 K" F; X6 R, c
CSEG ends6 \! g7 y1 k! E/ e% [
END |
|