|
|
各位前輩好,以下的程式為在 big_real_mode 讀取記憶體的值4 `! ~0 r8 a; i" {' E/ u2 L* B
# p2 o. I. ]( F' Z, |' n) a
例如: C:\memory.exe(程式檔名) 01000100(Address)
; \. c, ]& L- c4 `, {6 f3 j* a; n' C2 Y3 S* b3 f1 d
則會顯示01000100位置的值0 ]- H/ m. Q) {8 A- @: S
- E2 `+ `) B( S& s: j
但是我另外還有要顯示出字串,但是顯示出來都是亂碼3 s0 z* T! _+ b6 J
3 f& p7 y/ b; ^9 }% O( l4 K c麻煩前輩給我一些指導,謝謝
! |/ Q5 J) _ m6 N( Z" k
0 w/ k6 E8 Q n5 U' x$ C7 ]. X& u
2 y0 D. f* x V.model small
& b9 Z- R }( ? b5 }2 Y7 B.386p& O! e2 F0 q4 B
;------------------------------------------------------------------------------------------------
4 ]- D& }8 K k% m1 kDSEG SEGMENT USE16'data' & k# q2 m5 [) j$ q0 Q- K% Y) @! I
& c& c1 \* p- v7 P& ^$ l+ Y* K( FDESC STRUC$ l0 T e. T1 k7 N. R
LimitL DW 0
6 t4 t! v& K9 g3 s# l5 ?; d BaseL DW 0
1 P9 t, A& |# O7 H$ I BaseM DB 0
8 Z' r8 P [! L8 W/ t% H. ] Z+ I Attributes DB 0
: z: L. n( x3 T2 { LimitH DB 0 % k8 g3 J0 r$ o. G5 I1 v5 y
BaseH DB 0
- E1 |- j9 K: e$ v; J, w+ RDESC ENDS
g2 {6 D" U- ^) M4 F, }3 i' w+ a Y0 Y7 ^
PDesc STRUC5 [; @6 {8 Y' K. f" T
Limit DW 0
+ K/ S' ?8 F2 N# y! U' s Base DD 0 ( r& h) a# `: a" r, F8 ^ O
PDesc ENDS
: Y& ]2 ~) F# }9 i0 P" I) a/ x, O/ \
GDT_def Label Fword7 W- n( M9 E8 \) h T' s+ A0 ]: n+ `
Null_Desc DESC < 0h, 0h, 00h, 00h, 000h, 0>) N# V6 _5 M, ^5 l! h" c$ `
Data_Desc DESC < 0FFFFh, 0h, 00h, 92h, 0CFh, 0>
, R6 i4 m4 I5 b0 }3 e! `8 BGDT_Addr PDesc <$-GDT_def-1, >4 s( U$ M& c: e7 x! O6 j7 r0 Z
' R) J8 f' a( {6 K) ~ p3 u
msg1 BYTE 'The Input Address is '
B# w1 X; p5 d: k* f/ K+ mmsg2 BYTE 'The Data is:','$'1 _, q9 M8 W5 E) D+ e* Y7 W
) J- L( V8 g7 s. TDSEG ENDS' z) G- r* U) m+ M: E" [2 P& o
* C ^( j; M- U) A8 {. O6 T; T
9 q6 E5 e# ~1 C2 L7 \0 I% y' N;------------------------------------------------------------------------------------------------
( F6 s9 e4 n, j$ _/ L
- K) C0 j/ b) K+ k6 c( WASSUME CS:CSEG,DS SEG2 R. A C e- Y; p6 V9 i
4 C+ E: Q8 v1 o) {, bCSEG SEGMENT USE16'code'
& }& T' S) t! Y. k7 I) H
$ E$ M, ?7 o; t2 Q$ ?( @( D push ds
9 G( s* a, ]' L, e3 U8 M0 ]: a w$ A! L push es( G4 V! ]) K1 o e3 V; w
push fs0 `. d% z% j" Q; J
push gs8 s+ l2 r& I& C6 ]
, K; Y2 A3 M- s9 o/ F l: b# j
call big_real_mode6 h1 T: e- B8 _' c
; [4 o) L/ e# Y0 n/ P( A 1 |+ |' |: B, U3 }2 n ?7 \+ k
mov edx,OFFSET msg1;( }& i; K1 q: e0 T% F
mov ah,09h;
: [9 A2 j" H% ~# J int 21h;: M$ s1 \7 o$ Y% |' l+ L7 w
mov edx,OFFSET msg2;' Q: M3 g% W- s4 k( m6 N8 ]( q
mov ah,09h;
q- Z3 G2 x6 b; { ? int 21h;
7 _! w k) ?! b% C: E6 B + Y+ |1 d& p: ?' W# h
call PSP
! L+ J: a$ y. M* V } ! l/ s" ?4 I- W6 E2 q% T0 u
call crlf 7 \5 ], N# {+ C5 M
" d+ j) B$ P3 X: L8 `+ V+ u- y
mov esi,ebx$ L/ r0 b! e0 m2 X, o
mov eax,fs:[esi]
1 p( }9 j" q2 V out 80h,eax
: H2 i- q. X; {: B mov ebx,eax
" ]% u6 f) O- @8 S* v call _8bits
! B3 @) P* u* ~+ D
' y- k# A: |6 j. R% V2 d1 S call real_mode
$ g5 T6 f% O6 u6 V 0 K2 a( P* A0 c# \
pop gs
5 s8 h7 B1 ^& J* z7 B' j" u pop fs7 e0 p8 T0 M4 f4 x( p8 J& g: X2 m
pop es
+ z2 u4 P$ Y) p9 v F pop ds
8 N' F" [9 @; ?1 F. r* Q ; |" P/ s* @8 m; ^' E+ i# c% Q
.exit
% `6 j& n' w! `% S8 Z4 Z! A;------------------------------------------------------------------------------------------------
* q' z7 A* t7 Y5 J! E7 Xbig_real_mode proc near' ?+ d: B( e0 x( D
in al, 92h- G0 I) b. S+ [' K3 y" R
or al, 0026 q; ^2 p/ B) c/ H) }" y8 f; V
out 092h, al% T z8 I- F3 |0 W' ~- A
out 0edh, al# e% [' J t; z4 E9 f( t
cli
4 I9 Y+ E- q2 J$ ?. k" M mov eax,DSEG3 p& x( C! X% ?# X4 V- g
shl eax, 4. I7 L6 X% g' |4 Q( J) j9 G9 U
xor ebx, ebx
3 R, Z* W6 P& u, A$ F5 s( G mov ebx, offset GDT_def
0 B1 y8 W" p& C2 x add eax, ebx$ U2 |) V# g3 R
mov dword ptr GDT_Addr.Base, eax/ H, u8 B1 l i7 F
lgdt fword ptr GDT_Addr
! A! u W& G; x' m( K% i mov bx, 8! ?# o2 ?7 s9 R! m) V: M; U
mov eax, cr0
5 ^. j5 q9 C: l$ I or al, 1 _, T2 K3 o! D4 {' E9 S! r
mov cr0, eax" r* Q# ~9 c. a0 i
jmp PMod
4 c! E/ U( A: x1 s2 h# n* {PMod:+ }6 q0 i3 Q. Q9 T; Y
mov fs, bx
' ]# K8 M; c$ ~* B3 T( t$ p mov gs, bx
: R* E. r& H% a; D- d9 H+ \ mov eax,cr0& j& v) s7 W+ W# Q4 Y
and al, 0FEh
* t) t% g# c8 @% K: w4 |9 w mov cr0, eax 6 w& N( M$ N/ f$ z6 }+ I0 f: M
jmp RMod1 I; }6 n, {6 h! c6 [" z$ s
RMod: z& j* ~/ e q# a+ ~
xor ax, ax b+ |- x% x( \
mov fs, ax
8 e+ p; Y7 D0 h$ S mov gs, ax
# h: E7 R1 z5 W / ?. ^ N) Y1 z/ T+ [
sti% @3 c k2 o# A; o X4 A. _9 E
0 t& r$ L7 O6 E+ j6 g
ret
5 r5 N! R4 w0 N; H# P2 ?, ]big_real_mode ENDP# [ l6 V2 y" c, I. s
;------------------------------------------------------------------------------------------------6 b* I. | I# f9 d% ?' L' |
real_mode proc near( X1 u6 v# Y( x" t7 H$ V4 e5 N
in al, 92h6 {& P" p& q5 g+ S8 y! Y
and al, 02+ k1 K6 a' ]/ G& {' e- K2 v
out 92h, al
: f3 S0 q; S& i' t( G ret
& D n' ?* t/ G: |* Ereal_mode ENDP6 c9 y6 A8 c) F3 X+ d; v
;------------------------------------------------------------------------------------------------& \/ M" h# O: j8 i6 W1 D& s% J% Y
Get_Commandtail PROC near3 e- B' n/ ~; m0 |- M+ U3 Y
push es % g, @3 v- @ ?0 l" f
pusha, C4 s( x% k4 n4 @* f
mov ah,62h
4 L$ W# F# ]! ^( C( E int 21h9 j$ J" S ?% N; T& Z/ B
mov es,bx0 m2 \9 H) O( P9 o0 Z7 r
popa
! Y/ q s" D7 Q6 x, o J pop es
- O% m, I1 E, a ret, r' [# h3 k; U: M
Get_Commandtail ENDP
) l0 s6 T, O! [( D;------------------------------------------------------------------------------------------------
" j1 v% q8 p- V0 P: l* tPSP proc near) k6 b3 n8 |, B2 R1 q. j- h7 ?
mov ah,62h
- f) t( B' J3 |0 C8 v$ z- ^ int 21h
) r4 P& @0 y3 X mov es,bx 9 _/ h8 ~: i& Y* r; \8 O4 X {- t
xor ebx,ebx
# G8 v' m" }6 `5 x2 K1 G3 z# U mov si,82h
9 V5 s3 ~" x/ c2 t$ S; M7 g4 U7 K- M mov al,es:[si]
3 f$ T/ {* u$ b+ \" t) @ call Change" c4 l0 T$ x- z* g: Z( o
mov cl,4
+ l; H* J1 R: E0 f& [5 R ^ shl ebx,cl* D8 ~3 `$ f+ |4 c
add ebx,eax
3 w1 J1 [. Q( I. S z mov al,es:[si+1]" g) r* X$ r [* W+ {
call Change/ C: s8 z4 m0 c
mov cl,4
& [# q- ]' D" H; {9 S5 F* M+ m shl ebx,cl
% e6 h4 H8 ~ c$ M: v! Y add ebx,eax4 M8 f* j) ^" q- p) M
mov al,es:[si+2]( C6 t" ?5 d9 ~" L3 ~. ^ U9 m
call Change
' ~: ? L) C: x: _ mov cl,42 l2 S1 J8 F: L. B; L) `% Z6 }
shl ebx,cl
+ t" z$ E7 h* j/ B add ebx,eax" C- X, Q7 Y3 F
mov al,es:[si+3]
. C1 B" c. ~! g% W call Change
* r9 |/ V1 v% T1 @6 X- @ mov cl,4
6 k. T; y2 b) A- F ^- w shl ebx,cl2 `9 m, t7 ~' s# L# j- x
add ebx,eax
/ {3 X0 f) p- s8 m% V mov al,es:[si+4]- Q# {$ v0 W# C1 }- Q
call Change( G9 k9 u3 L6 R* n7 U, ?
mov cl,4
+ M# ]! W& K% z: h$ W$ H shl ebx,cl! M/ a5 ^5 R0 e% j
add ebx,eax
' n; B- d' X: x$ |/ ^ mov al,es:[si+5]
" q# U9 r( J* G6 Q) ` call Change {, W8 D' a# n
mov cl,4
! X" @/ R" S, H! L- S: c shl ebx,cl
0 V# k' |) w; A6 M1 `7 e add ebx,eax: Z5 H/ j" Y2 P% T- k/ P
mov al,es:[si+6]9 t) |7 A8 [5 _, x
call Change
/ J4 C" y- ^' N% \; m( S, | mov cl,4
% S* } S* y- ]7 l shl ebx,cl
' g l, U/ M1 |. E+ [4 q; H! E9 W0 ~ add ebx,eax5 Q1 v3 s( G1 W! C# }7 N- Y6 P9 ~
mov al,es:[si+7]: J+ E8 [- c) B* z7 L
call Change& s+ p3 d1 ]/ E& f2 ~1 {
mov cl,4
+ m! ^6 n% S% E; Z* B* \ shl ebx,cl
3 O" Z* C0 O1 f add ebx,eax
: C5 y ?$ ~6 F, F/ C# o ret
3 Z8 P' Q* j3 ^& K; y" ~+ ePSP endp
, P; _* O& W4 v1 V( n& ^;------------------------------------------------------------------------------------------------
: y# u# j7 P7 w6 s6 M$ mChange proc near, D4 b2 i) ]6 {5 ?% g" G+ u- h% l
A:
" U! H$ u) R8 H' B/ z) i. } movzx eax,al
- D; E9 H+ V& t0 D+ T mov edx,eax
: n8 ?: _( w+ w8 M* W cmp eax,'0'
; K7 g) E3 c* e3 h5 ` d jb A8 ~. D3 g" z" l. r# w
cmp eax,'9' . s! g5 \7 b1 D2 @' _
ja B) E- H |0 J. f, @% e
sub eax,'0'
- Q6 ^+ N& @9 T$ f' a; b3 X+ z( @6 P jmp short E& O: J- ]( H. Z
B:+ B5 O, i; m$ b2 D+ |1 k% J+ {
and eax,0dfh - B' a# m4 S4 Q, n0 h
mov edx,eax# Q; A9 G n# |2 }" n) f
sub eax,37h 7 h% }+ r' V8 p# A3 {% u9 D
cmp eax,0ah
8 [5 r4 j$ g. \; G* C jb A
" l+ g f1 H1 c8 @6 C% i cmp eax,0fh' ^( L1 w7 N. L( ]# `
ja A - ^# y" m" t X% l
E:9 F5 ]2 k) _' t4 p
push eax 6 S6 F# y( b/ X
call PRT 7 G; j! K, M6 |
pop eax
- D0 e3 j" y" y. |. p1 ]: e+ Y$ Y, k% OCExit:
2 \0 \- i, w6 G! J. F' k( \ ret; g d2 t8 Z$ Y4 b" e6 @
Change endp2 \# @. h5 @" r
;------------------------------------------------------------------------------------------------$ ], X. ]. j7 F Y6 ~" w+ ?
PRT proc near
$ l* H6 P; [" |4 t( ~3 b mov ah,02h" o3 J% E9 N6 q; x2 t1 k
int 21h& `* ], ? u" J$ O8 o8 P
ret0 ?# d5 `$ I, n
PRT endp4 L5 I, o) l, ]5 u
;------------------------------------------------------------------------------------------------" b N% d! o$ @& c0 a( _4 _/ L
crlf proc near
4 V* p& X$ E" [' n! ]! k mov ah,02h
6 f. ~* q! O; \- @) B- ` mov dl,0dh
; J. ?1 M7 U* \3 {( w ? int 21h
3 `+ ]5 H& i9 g: K. \% O( v mov ah,02h
" p/ R- K O* o8 L! y' Y mov dl,0ah5 j5 E) Q! E' ]! E) O/ ?
int 21h" {; d3 }2 K5 m5 z( Y
ret! P2 {" B( |5 D8 e* C! [ K
crlf endp8 U9 T& u+ x# `/ {- [4 z( ?! \
;------------------------------------------------------------------------------------------------; g# F! w( D1 T/ u9 F
_32bits proc near5 B5 J, r) Y6 s
pushad
0 t7 m% n7 T: U- t- h G: @ mov cl,42 H! B* q) H0 I; ~" C
rol ebx,cl
" | ?$ M) M8 _: r call print_4_bits
2 F( x5 o" k S$ e rol ebx,cl
4 }; p7 S A9 }1 C8 o7 H$ Y: @ call print_4_bits% O4 u" n9 d' D& W+ _' d2 C
rol ebx,cl% r7 c2 Q( o- J- d) d6 ~
call print_4_bits
. [& p5 x5 S1 \0 v/ Z rol ebx,cl
! Y& v2 Z! g+ [4 t3 l! Q call print_4_bits% U' z1 O7 r- f% m: |
rol ebx,cl+ N! @6 r9 J8 q; g8 T, Q2 R( y
call print_4_bits7 Y: |# Y* V9 ]! h
rol ebx,cl
2 K4 {9 i/ J; y0 {% I. r/ c call print_4_bits
2 J; d( Q) c: A- I rol ebx,cl
# ?6 y* B3 [9 G7 I call print_4_bits8 m$ c* F1 e) Y \
rol ebx,cl
- T0 b$ e, @# {: f5 ^ call print_4_bits
. F. m) G8 D" `& E, y w$ T* U0 ^ rol ebx,cl
D) {0 ]2 E: I- ^2 r popad
|: P& X6 y9 f2 L ret
# Y6 o& Q" i. {3 z& f# f8 ~_32bits endp+ j6 A Z$ y9 S( }2 n- u: n
;------------------------------------------------------------------------------------------------
$ d$ T0 ]* c' }5 a$ L; T. L% M( s" r_16bits proc near; p8 Z0 V7 Y- ]& _7 y- K
pusha
; {- q- s, C; T. {8 m2 v. n rol bx,cl8 B7 Q; c6 Q& p6 H2 T$ _
call print_4_bits
+ O4 k( e9 y2 n0 K rol bx,cl
5 Q3 |7 U6 z2 U" C call print_4_bits
' q2 z% Y, k: c rol bx,cl
; E. {' `8 h* Z3 B6 [1 t% o2 f call print_4_bits
! b) Z9 V4 Q/ x2 { rol bx,cl
/ B D3 [/ A! z call print_4_bits; F5 h4 q) d* K" J* n$ {
popa
& R: v, e1 w: _ ret1 C! M( M) ?: C& U: w: E5 a( t4 y
_16bits endp5 `) X3 q2 }1 \5 r) M: O' e1 O
;------------------------------------------------------------------------------------------------% w% \- k! [6 W
_8bits proc near
& k5 e z+ ]9 |7 ^3 s7 Y pusha 6 }5 a- v/ X8 m" w" ?1 w* f
rol bx,cl& ]# } L7 t" ~# y x; J6 m
call print_4_bits* U( C- Q: u" L- {2 [
rol bx,cl
! c, z7 ]9 c1 \+ ]2 M call print_4_bits
: X7 D$ y; Y' N6 i8 z. x. ^ popa
/ ?% @% \# K* U, R& Z4 t" u: p ret
5 `9 t1 `- O. I' v3 A_8bits endp
7 |. T1 z; s2 m+ Q: K. l$ ^1 c;------------------------------------------------------------------------------------------------0 t* n/ [1 W4 I; G N
print_4_bits proc near& L: _! F+ v( O! N l
mov dx,bx* u+ g3 ?, @$ L# M0 r
and dl,0fh
6 f) F' Z3 {+ D5 Y2 f) m, X add dl,30h! O/ [$ ?7 v7 `
cmp dl,3ah
/ k+ h, y6 Y: ]3 w jb print
5 t) x7 Q4 R' C7 y" J2 P& p, h add dl,7
9 }5 _' a7 W K% i0 z) A* p0 t' T( Rprint: 9 `% [9 u& z5 o( |! k0 g
mov ah,2
5 w2 d- ]3 n- A* u! F6 ? int 21h
- C% i3 t% n$ \; p1 k ret
7 L4 R4 o/ ?- |3 i3 |: Lprint_4_bits endp
5 k# D- |4 o2 H4 q;------------------------------------------------------------------------------------------------* P3 b w7 C; t2 _5 \
CSEG ends$ p+ |5 [1 f% m w6 @: _* c& |' n
END |
|