|
|
各位前輩好,以下的程式為在 big_real_mode 讀取記憶體的值9 q, @7 s7 B# r; D3 Z+ l
: f/ {) M7 D. a: R6 X1 }
例如: C:\memory.exe(程式檔名) 01000100(Address); b5 b9 `2 ^* b# ~
) }* W3 `2 s+ g: x則會顯示01000100位置的值
; s! R5 d/ V) B( C+ C# h! o7 f- ^7 n) r, d9 `
但是我另外還有要顯示出字串,但是顯示出來都是亂碼
; q' b6 q- B6 r9 m) v' M l; I/ r% G$ C+ |0 _: X
麻煩前輩給我一些指導,謝謝 % p! ^ m3 X, ]. P
' b* z7 n3 U2 q: ?% R; U% d! T
L- v8 P+ s& w9 A& u h/ H8 |3 E.model small
9 a) T; @4 U! `.386p
" M5 s( B1 \7 e;------------------------------------------------------------------------------------------------. L* x0 q8 L8 X
DSEG SEGMENT USE16'data' ! z. D J' u( l
. w: ?: m. P4 C7 E% Y5 VDESC STRUC$ M1 n+ R+ k9 |1 s: t' J
LimitL DW 0
7 j1 Y; ]2 c, ~6 K6 H) r* c BaseL DW 0 # p+ @% y9 ?& Q" q
BaseM DB 0 4 J: f" |; D2 W7 A) W
Attributes DB 0 - O+ H. x& D& h; B) B
LimitH DB 0
* D2 C, ]' ?3 |" E& G BaseH DB 0
% I$ l% W& r- L% \2 P5 WDESC ENDS
# u# [& _/ O, l$ H/ |: ^" A c' R0 Q# F* I% J3 o; A5 D5 I
PDesc STRUC- `0 ?: e5 K& ~0 x8 j; g
Limit DW 0 & t* }/ P; w! m) a
Base DD 0 , o: ^& A, a1 F% Y) N4 F
PDesc ENDS; v1 f' Y% P2 B& ~
5 h$ D, w$ O' M& j
GDT_def Label Fword
0 u; v8 ~; b, W) |Null_Desc DESC < 0h, 0h, 00h, 00h, 000h, 0>
6 \: V. g& U* b- d9 hData_Desc DESC < 0FFFFh, 0h, 00h, 92h, 0CFh, 0>" K- H/ A: s ?1 W0 g
GDT_Addr PDesc <$-GDT_def-1, >
9 q% M4 u6 m5 J8 R$ q _/ K3 k- P0 ]; ~* K* i
msg1 BYTE 'The Input Address is '
% O) b2 M7 a1 m9 I8 h8 N0 K* qmsg2 BYTE 'The Data is:','$'
9 l+ r8 e$ g" U7 n
# u& N9 N" |7 Y6 i6 L- [* ^6 a3 R" PDSEG ENDS
5 e# M- S; V1 |( L& z, h" U6 O1 b5 c- f: } _% M& v
8 y! s! K5 t: T+ G; X- |;------------------------------------------------------------------------------------------------ 8 G6 Z' [( ?2 ^8 d, f; ~+ P& n% A$ A
) L- @( Q2 ~$ r4 |5 O" l5 i! i: c$ RASSUME CS:CSEG,DS SEG; C2 _- K- I+ ?2 N2 n# Z# u
% I- p! o( N, a- y
CSEG SEGMENT USE16'code'. ?; D# a$ D! v# j
+ J3 U4 ]7 A9 u push ds
: W* O$ {* G# h2 O& l push es) H0 R+ `1 P+ N0 {9 u
push fs; w! W8 i7 e# S. J( Y
push gs
! Y' H% d, d' f0 v
f& {" n! R" ~7 ^ call big_real_mode
9 G) F, _! |, s& D+ r3 ]* H/ ?( L0 `. p: ?1 k3 a1 \
$ o( d& A6 `5 \8 Q$ b1 _ mov edx,OFFSET msg1;# l% c" a7 d: ^4 V* Y- y- c
mov ah,09h; ! u7 X; z. {7 k. ~, R
int 21h;3 f: Z$ K) H7 C9 d# g( @
mov edx,OFFSET msg2;: T" N, u. n0 Q% v
mov ah,09h;
' d: W# ^$ d% {0 `, w int 21h;2 u: C$ w# L) n+ Y; w* M
9 D0 U% z3 o Q+ N
call PSP # B' ^0 b! h) t: V( u
8 w+ Q3 C' K& W' H% S+ ~
call crlf ! q- z* E. a9 T
! V' f% K/ d% k( ~
mov esi,ebx
; f, ^! J" A# K3 B1 a( J. M& X3 W mov eax,fs:[esi]
* x9 k$ Z \ |! J; i7 S$ V/ \& C out 80h,eax
& e- d) q" V8 A* s mov ebx,eax
+ n4 h6 e! U! z. n. H# G7 `+ @0 r' u call _8bits# n) M8 H7 z" ]0 l% _/ G- n" J+ X: l
. O+ b1 x8 L( I9 f2 _( X. x/ \* v2 z call real_mode- b, E7 h! ]8 f: C9 M2 G0 C
1 e- S* R6 ~$ {! O, L' ~
pop gs
! q3 j( @) E4 q" j5 u pop fs: D! Q& H# }# X
pop es/ ^* K9 U) A9 i% z% I
pop ds& I. V( c( ?6 R+ c D: P9 N7 f
* J1 a5 u5 L- w$ [- K$ [4 x
.exit1 V7 {9 }- C0 @. x8 C' y
;------------------------------------------------------------------------------------------------
' O, T; h7 {; i! X# \" }big_real_mode proc near+ Z3 v1 J2 |% V! p4 Q( }
in al, 92h$ \2 ~, N5 S% S0 z
or al, 002
$ ^# Y1 k/ H6 T out 092h, al
" X- g% c0 o& q2 i8 c% s% H out 0edh, al
. A4 G9 d- z' i% X cli x: ^- u' U5 g* C6 ^6 g+ ~
mov eax,DSEG
6 @3 s# U& f: F6 p; ?( ^6 w shl eax, 4
; Y- @ k# @* U- I1 x1 g- d xor ebx, ebx
2 s8 ]6 l p' B9 d mov ebx, offset GDT_def+ h- w1 X1 {) G) p* Y
add eax, ebx
+ H7 t6 H& b# s mov dword ptr GDT_Addr.Base, eax
0 v" L2 O+ d2 `" t N" ~# T. N+ H lgdt fword ptr GDT_Addr
! t/ Y$ o) n4 d- d, d- n/ c- r mov bx, 8
& E9 L i2 O% |' ]- f3 @ mov eax, cr0
9 g4 K0 r1 M& |" V or al, 1
; t# A" ?! `2 c& H5 b) S" G mov cr0, eax" P6 F* O$ _& P/ I. p" \
jmp PMod/ C. f1 k. b! L7 ~
PMod:( F& `6 j: `( M) y! s: m
mov fs, bx$ p! ^* ]1 h y- w. T; B* m
mov gs, bx
# U5 J1 X y' f7 @, t mov eax,cr0. R }* C8 {* H
and al, 0FEh* U; O; F! _2 E' P
mov cr0, eax
" P4 E$ a0 ]+ u5 x jmp RMod# u6 A. x1 ~& @3 |$ I
RMod:( K8 l' Q' B" X0 P! j: t/ E
xor ax, ax
/ |# {( |8 i6 l0 l; _% W7 T mov fs, ax& ~% c# l+ F; o( N& e3 W
mov gs, ax. {3 w# E6 \: l1 `7 W* I; S
$ d( j2 r/ l$ d3 C t* [' w8 ~9 S* O sti# [" G& r" E) J: { ]1 u& [
4 t+ `- r. {: Y# K" J) G" j ret# [$ m3 q" [' Z; N
big_real_mode ENDP
" Y' d' b; d$ i: O* k4 K;------------------------------------------------------------------------------------------------
$ W' Q- v2 E4 M6 `$ c$ kreal_mode proc near/ M! _0 r8 K& w$ K! `4 t
in al, 92h+ q6 K ?- J" f2 h6 x
and al, 02
2 L# O( j3 ~. D out 92h, al ) a6 O+ j# g" @& U: N7 y
ret7 p. u. k! V8 X' ^
real_mode ENDP* S/ ~5 C2 k* n- [$ M' L" d
;------------------------------------------------------------------------------------------------
6 w* D6 J2 }/ I* FGet_Commandtail PROC near" P# _6 @: s1 |4 D2 S# |
push es
1 v5 B2 G$ y Z% p# i pusha/ O6 E" K% A6 T
mov ah,62h # @* w# V$ I0 ^0 i6 ?3 R' l
int 21h; o1 M% h/ }1 M& A0 | e
mov es,bx
" M6 I8 Q" C# a* o s popa % t6 T* l% I" K
pop es o# ?/ M' n, x
ret$ _% T) }" I) j5 z. v, m
Get_Commandtail ENDP
9 U6 U& k z* m;------------------------------------------------------------------------------------------------
' `% L# K" a |4 APSP proc near- T3 d( i, J1 `5 I: ~- T
mov ah,62h
% V9 [1 F1 ]6 M; |* A int 21h" G' E% s* Y" r9 s, M
mov es,bx
' C8 f3 y7 K1 M/ g3 U; X xor ebx,ebx2 y$ C0 B; ?' \ H
mov si,82h
2 a3 u" a1 b% a" C$ E mov al,es:[si]
f# X8 e% P" N6 p4 ` call Change7 M( e/ Y7 l! G
mov cl,4
" n& ~; p* N: Y shl ebx,cl/ `" z* q$ u P8 @5 |
add ebx,eax, |4 U8 z" L* n3 n% Y
mov al,es:[si+1]# u+ Y% a1 v( K; P9 m
call Change
, V! T- {3 R k( V) R; M4 i mov cl,4
4 w! S0 X+ n& Q shl ebx,cl# F) n5 y( l/ Q2 c
add ebx,eax
3 z& D5 q Q( N3 U2 f9 I mov al,es:[si+2]5 P; ^, ` A4 u3 M
call Change
* a: X% Q$ j: V mov cl,4( @; l$ n7 n6 j1 D6 D
shl ebx,cl. ~/ F0 n& O) k+ A. s) M, `/ u2 T
add ebx,eax: t; ]4 H9 T5 q
mov al,es:[si+3]2 Y; t$ x. j, L7 N8 b3 `
call Change X+ S+ ? {% R: u6 ~* }5 B X, E
mov cl,4
5 ^/ W, F. s3 v2 C/ C- b shl ebx,cl
1 i5 a3 Q% {% {2 c8 F: X# n! h add ebx,eax, W. b: ?& N. N
mov al,es:[si+4]
% S; L3 ?, O1 J% w+ m call Change
8 F* y9 t7 _* { mov cl,46 D# {& E1 y c, c/ B2 `$ f1 y7 m9 o
shl ebx,cl
6 u5 {; @2 M7 {- L: H! i add ebx,eax; z/ K# \) _" ]. ~& N+ N: T
mov al,es:[si+5]6 H4 s* I( F- q! d% z7 ?
call Change, C8 s& j1 ~" i+ Q* U2 H4 T
mov cl,4
. \/ L+ x3 T- G7 L4 t shl ebx,cl
3 m# C2 v3 D S; |9 w3 |5 \ add ebx,eax
) l, q: w' p0 j mov al,es:[si+6]
% A% C+ Z5 _' Y+ Q- T: g call Change) l' E! T* q" `3 N. m) I
mov cl,4: V6 o2 l' U% f6 ?
shl ebx,cl+ u; l! x6 q; P- y# e
add ebx,eax
+ u8 ~& z* d9 q7 f: m' `. d; O mov al,es:[si+7]
7 l3 X7 l( C8 s2 F4 C9 D; K2 W9 O call Change1 l( u7 t3 w6 j8 U" Q3 T
mov cl,4
9 M7 D8 T, J6 e shl ebx,cl- k- |+ L6 {) `
add ebx,eax& }2 `* B" x2 x- C! R
ret
3 S/ |8 f o0 V0 A5 h0 lPSP endp
( a* m) N6 w' Y) ~2 A( a6 E3 Y; m;------------------------------------------------------------------------------------------------
' [$ T# T! F' R: j6 rChange proc near, }% ^( f4 K6 }
A:
; H1 d! b0 U7 C# K, t2 I R/ @8 p movzx eax,al
) n" I3 I& D) @% m mov edx,eax% O. {$ l2 i, G% s
cmp eax,'0' 3 H, [- h* d1 M' h" O3 ]8 M
jb A5 `/ `, C& ?0 @* b$ \* ]
cmp eax,'9'
+ X1 k' [# F9 B( j; ^ ja B
( v" ^8 y6 W- k1 h% r& r2 z3 H sub eax,'0'* M# K1 M; _* h, W. N# e- g
jmp short E
/ t2 C! b7 S' j" |B:1 T" w; |7 U7 a. E
and eax,0dfh
' p% O) D3 I& v2 e; c' \5 e* P; t mov edx,eax0 d; j( j3 `+ \. Q W, f4 g! n
sub eax,37h
% i% h9 J6 c4 [ }+ ], K cmp eax,0ah F, ^5 b4 r* m: q9 g0 M6 L. `
jb A
' n9 s& N" i) a* R+ u( M2 W cmp eax,0fh1 P) O4 u3 ^- c/ u/ t
ja A
' a; o$ B V: l/ sE: C/ {5 f# t0 u
push eax ! [4 z4 D. k9 y( I$ `
call PRT
6 A5 E- o9 G% _. x. x1 f! p0 x pop eax( g X# N2 N V, {, Q, ?
CExit:
9 e9 s V; U8 ~, D9 t6 D% l ret
$ X4 A/ X" y7 ^8 K1 PChange endp; U* a0 }6 e, K
;------------------------------------------------------------------------------------------------
* Z3 z$ I7 ?) f+ s) h& E; Y) n* pPRT proc near7 g& j5 W5 ^, |/ ^. H% {# [
mov ah,02h( u7 |5 g# ~) Y
int 21h
9 Y" k4 Y u# \ ret Z5 u* G% z0 ]9 J! ?7 k
PRT endp
% O* t; G3 ^/ Q5 A;------------------------------------------------------------------------------------------------
( Z7 ?8 E# t& ^6 c* ?( ecrlf proc near
7 I0 j5 W7 f5 y mov ah,02h; o1 |; w! F5 ?/ u) _+ ^ L
mov dl,0dh% w( X" S3 O0 T& Q( L! \
int 21h6 W4 Q$ V) I: j% ]! E6 P
mov ah,02h8 T" e# g' F1 e6 F. G3 T
mov dl,0ah7 b& q% f8 @, ~9 h, W0 @5 j
int 21h, |- |! m8 ]& }# V( v4 k: n2 X7 X
ret" @6 X7 S# E! m) \$ O
crlf endp2 ~ ]6 h. S" V3 C
;------------------------------------------------------------------------------------------------
( O* ]5 n' c' }7 R R9 i* a_32bits proc near M% u. T$ d. o. G+ r& X. l
pushad
, h" X* ?; ?( T# H) y' T5 ~; g0 J mov cl,43 t& c7 d) b& y' l) I
rol ebx,cl( B8 Q: D! a0 u4 `6 k
call print_4_bits
- B0 I+ H& q! U/ R rol ebx,cl/ p$ {+ @ H3 d% d* Y/ o6 G
call print_4_bits, `2 s( v; X9 a, e4 g& c3 a3 C
rol ebx,cl5 o9 z; n3 U" |
call print_4_bits0 q; b, R/ H4 d" \' u, y
rol ebx,cl- R% L/ [) m; r7 p
call print_4_bits
, u; k) v( O5 O! d' l# E6 R rol ebx,cl4 W. x" `# u! m. w" P1 h
call print_4_bits- K7 r: c5 H6 s; O m8 a
rol ebx,cl i! m: p2 H m+ `# y9 ]" w
call print_4_bits
. Y; y, v( |6 I ^2 E# \8 O rol ebx,cl+ `2 V( {4 D4 |+ k: {; h8 S" O
call print_4_bits
" S) m& y3 b: b' }6 @! u+ U9 y rol ebx,cl
' e6 }% L }& e* K$ @$ n call print_4_bits
$ N6 Z4 g9 @1 `4 r1 q rol ebx,cl( }; o' I) B- p$ U8 `
popad
# J% v# b4 Y) d% L$ c ret# F1 d& W( H" ~$ Z- B
_32bits endp
5 f9 N* s; J/ D2 \7 M; S;------------------------------------------------------------------------------------------------8 G& Q9 x: N, i! x3 |
_16bits proc near1 u: X% h) E2 ^: d4 I
pusha 6 {" l! D, G1 D$ x% d% D
rol bx,cl* k) G4 ?+ o' x- H+ h0 r* B* W- [ Z4 a
call print_4_bits
. L: u x" u9 ?3 ~4 G F; r rol bx,cl% h& v) m0 W1 M8 K
call print_4_bits
, F+ u9 u7 `0 G8 y# k+ |: w9 _5 a rol bx,cl
9 C2 n( s% b& _5 p call print_4_bits8 x5 g9 y1 @* J% k
rol bx,cl
+ T$ |2 }5 b3 ?' X call print_4_bits/ M" @6 {# T; S2 Z
popa
; `3 b5 B: j: O, u0 }; A ret
8 v/ F1 r$ D, R, T9 Z; |# I_16bits endp8 o7 ^% Q/ O5 T# B+ x0 ^9 s5 G' |
;------------------------------------------------------------------------------------------------
. @# f% l1 A O3 X, `/ L( x# e8 o_8bits proc near
+ ^/ b4 V$ |: o$ s$ J* | pusha
0 o; ~6 k1 s+ y6 v) ?" P( B- P rol bx,cl# u# f9 t D* j/ z& H* f
call print_4_bits
: D* F( ?) A- d- f3 _& r rol bx,cl
% L1 v& e6 q2 F8 b& P call print_4_bits
/ i" p/ P5 @' H m: t, Z0 T popa
- u) N0 @! r- N ret
|; Y& Z- L) ]- ~1 o4 d4 ]# S2 [- }_8bits endp
0 g) c( T# p6 G;------------------------------------------------------------------------------------------------
0 J8 A/ O! g" s0 Q5 C- s5 |7 k1 U' v; nprint_4_bits proc near* h' F9 G9 @7 s7 G3 r! J* D( j! _" }
mov dx,bx
& \" x+ l- m* U! \8 u: ]1 m and dl,0fh F: @' q+ A: U! n
add dl,30h
3 S; _7 X/ ~+ t cmp dl,3ah
, ^+ Q s/ V- X+ y+ i jb print
* }4 V1 e) ^9 O @/ D. Y3 x add dl,7# i6 N# [/ H2 W, f! Z, _
print: ' W# I" X% F4 O4 B9 e9 L
mov ah,2
3 B2 Z! z# I( b4 W! Z8 R int 21h0 {) F9 n4 w) g) T
ret# p# o* d6 {7 g1 r
print_4_bits endp ! E Y7 T. Z6 G0 ?5 H
;------------------------------------------------------------------------------------------------
) E. x6 _1 P% M L7 }% |& XCSEG ends% k3 s" B! O& N& ?! g2 o
END |
|