|
|
各位前輩好,以下的程式為在 big_real_mode 讀取記憶體的值! |5 |* J# i* \/ x; m6 h' _3 M
: Y, S1 P/ Q; N例如: C:\memory.exe(程式檔名) 01000100(Address) z6 t- f: o0 U7 y' a Y3 e7 ?0 ?
: d4 Z9 P X* W6 l+ Q. u
則會顯示01000100位置的值
0 ~. G. K0 r, _: v7 o! C; B1 Q
# T! `, n% U5 G但是我另外還有要顯示出字串,但是顯示出來都是亂碼
" ?" n; M* r2 f F# z! Q6 ]5 |" O3 d9 H' A
麻煩前輩給我一些指導,謝謝 + i3 C: |$ T% e0 @* [
: ]( O. ?! x6 j# g9 K! v3 ]6 |" b! e/ `5 K" {
.model small2 a L7 ^0 u3 f* g" d; p5 E! ?2 T/ e
.386p' n5 l5 }2 l5 \8 x! l
;------------------------------------------------------------------------------------------------% S4 E* ^8 z' f" w4 B
DSEG SEGMENT USE16'data'
# m4 R* a' [" G( e7 i. B, _$ L) f1 b. z, ~
DESC STRUC, w; S% `; k% }. _
LimitL DW 0 ) m) N* x) g& V( F3 A
BaseL DW 0 : ?% o& ^) C4 z3 F8 b' N& Y4 Y
BaseM DB 0 $ |, M( e8 ?8 G# D
Attributes DB 0 1 u" D W" ` d
LimitH DB 0
; S: i% h" ]+ j- h# W- t6 Y0 P0 v4 x BaseH DB 0 1 S' J/ }% b* N% [
DESC ENDS8 ^: W0 ^ m3 i
L- I; M5 m' x" p0 t* x5 v
PDesc STRUC+ ~0 S5 R1 k* ]
Limit DW 0
! l9 d# n$ e' Y3 t7 C Base DD 0
8 w7 h- D" X3 B! t6 U9 S T2 {PDesc ENDS
. x" ^( y8 D9 r4 h& D u
4 b1 Z4 e: B7 g: T+ ]GDT_def Label Fword
7 V N1 b5 f! y7 C2 n5 {8 ^2 pNull_Desc DESC < 0h, 0h, 00h, 00h, 000h, 0>1 A" X2 ^5 Y1 z H; z6 O) s% S
Data_Desc DESC < 0FFFFh, 0h, 00h, 92h, 0CFh, 0>5 z5 r7 ?4 b3 K/ [. t/ D( c+ ~7 u* R
GDT_Addr PDesc <$-GDT_def-1, >
3 t s9 V8 `9 H: n: z0 [9 n; N/ s6 J; I# n
msg1 BYTE 'The Input Address is '
1 `' J& f- ?( J, Amsg2 BYTE 'The Data is:','$'- P1 } {# n8 U
9 r1 H G9 _2 U) t `' i" i
DSEG ENDS
& }$ v. n, v d [& i/ l) E, }' X
9 |5 h. s1 m% Y z( L: W
;------------------------------------------------------------------------------------------------
3 J4 I2 d, W; u/ Q L, ?% u0 z2 S% H; ^/ I6 R" h
ASSUME CS:CSEG,DS SEG z7 W) A3 p2 v4 b* r
+ y9 q; W5 i9 [+ v, G& e5 ~
CSEG SEGMENT USE16'code'
) s( ]1 ~) D. D2 W ) S; f1 ?/ C7 o0 j9 p! J- s
push ds5 E# m4 `8 U0 s0 P; i: c" I( }
push es
! C# f: P. [' h, g! o4 U% v push fs: a4 Q, i" `* s# r8 Y
push gs5 k8 ? N) a" \
. ]$ O! \4 I5 o
call big_real_mode# X d5 e5 W# n% M( k/ b
1 T z5 G! `/ t4 W' r8 u
' \) o. {( }) p% t) A mov edx,OFFSET msg1;7 E+ p8 l7 k+ o2 q
mov ah,09h;
( @: {. R% b! u% u7 Y2 v+ e# d9 u) K int 21h;. T9 E! u9 Z/ P/ p* Z
mov edx,OFFSET msg2;
- g" ^" m# n/ Y mov ah,09h;
- d0 _3 q8 _! Z! n# D int 21h;* {: p7 f1 l3 W2 R8 v% w5 j
* g& {, O* T M8 l8 G1 ~ call PSP
4 A0 E. d" B B & e" E4 f/ }4 M! M. e/ k5 b
call crlf
/ u# t- R- y. i' W! d
9 O( p; i/ N& ]' y mov esi,ebx, l; r+ q3 B# n* Q, T
mov eax,fs:[esi]
+ e$ Y; h8 H4 R& T( r( H9 E out 80h,eax+ i$ }% {' }; u4 @
mov ebx,eax
$ Y9 b' k7 Z/ I% S# Y7 l" e) ` call _8bits& i& z' t1 p6 `. q+ s
- _0 i5 L3 ^/ d( P& y: j call real_mode
; ^% K5 ?( q: ~; U+ g; J) _. W1 V) N% N
w% d& \# N' P6 Y; j: W w4 D) }7 U pop gs) ?: k7 i( A% H
pop fs
$ x" c% q) c" l pop es) } f2 v6 Q& G! u) w& z9 E+ e3 ]
pop ds) F+ j. b& u3 \" z! Y( u
5 U5 Q6 E( N& l, q- o1 }2 w
.exit3 L! ]1 P( i8 r& _- l h' g# L% t
;------------------------------------------------------------------------------------------------
9 |) u( F# V) r" P4 l) dbig_real_mode proc near
" y6 z+ j" a" k7 `' j: x: S0 P in al, 92h
! s, f) i' `, j. s or al, 002; J3 r! x5 h7 M' t, a2 \5 S4 f
out 092h, al
' S% p9 x! t& f; X$ ~6 |: ]: V: S6 F out 0edh, al
) S+ B) g( t @% `& A4 s cli
5 m; M0 M/ C) X7 P0 V mov eax,DSEG( T2 Q0 ]8 s4 ^. F' V: {3 D2 z
shl eax, 4
7 J3 G; @ f, H xor ebx, ebx
8 J& e. f8 U' D. m& l; j n( L" v mov ebx, offset GDT_def
3 H6 J% c1 ^, p/ X% s/ S6 [ add eax, ebx+ _% g& ~, }# Q
mov dword ptr GDT_Addr.Base, eax
! Q. d. e7 N0 j( Q7 X+ u lgdt fword ptr GDT_Addr
/ N3 g: }' k% O! n mov bx, 8
& H0 o- ?6 F- {$ \$ s+ B mov eax, cr07 O' [* G( c5 V
or al, 1; H) U: h4 A* y3 J' O7 f8 U
mov cr0, eax# Y2 E. {8 j# i: d; X. q3 ?* V& X
jmp PMod! Z/ x W5 }% X7 u! `
PMod:
5 Y, q3 l( p+ _4 w C9 Z mov fs, bx: D3 e Q6 t$ r( y% B1 z# [- Q( N
mov gs, bx$ C7 ~0 m6 b+ f5 ]7 P- M- G
mov eax,cr0! f' R0 ]. _# a# S3 N# G* K- y
and al, 0FEh8 d M8 t9 U0 s2 @8 ]( [5 t
mov cr0, eax
& f8 U9 g9 d q( a jmp RMod' f' M1 L U# O4 T5 g, |
RMod:
! l0 G. J3 m" n, ]9 m4 s" i xor ax, ax
) ~) i" o, D# k mov fs, ax+ l( x- P0 E' a/ `( z* l
mov gs, ax, s$ I$ j8 q& H% _! G
9 d6 o' X$ r$ `' H& R' r sti
6 z+ c# V$ ?3 [$ N5 [2 U {2 s, ] , ^# R' ^ O' v5 [0 F2 y) f
ret& x6 C& p& H; Z7 t$ J# t3 L
big_real_mode ENDP3 K( K' q" _7 C* f, u2 N: Z
;------------------------------------------------------------------------------------------------
]6 L9 |6 ?& {& R; t- areal_mode proc near7 |8 q( r6 I W0 Z
in al, 92h# |2 i% s8 U' o2 _8 k" _$ i
and al, 02: ^4 e1 k& i9 z1 p9 z/ O: y
out 92h, al j2 `# V" F7 x% @. D; x$ G
ret
& G$ m `) {5 breal_mode ENDP4 I! n7 o. w" l
;------------------------------------------------------------------------------------------------
7 M1 P5 h, W' Q6 XGet_Commandtail PROC near0 b, P1 C+ y4 B9 P" f8 Q
push es
: i; w9 i& ^ e pusha
8 A1 A5 h; O+ ]* U/ k( Y mov ah,62h 0 P$ l6 q! u* t8 H* d8 Y
int 21h0 W$ `# h" i' b/ A# S
mov es,bx
0 P; ~( y1 p6 B3 j% n. U7 }0 l popa
/ _8 x! h" m5 e# y( k pop es% X# D; b p# @, d
ret# D: C" v, a$ E8 S7 p( b
Get_Commandtail ENDP1 e: G# u& i4 @; \" M
;------------------------------------------------------------------------------------------------3 \4 |# H+ r/ \
PSP proc near- U/ m+ s+ @5 \+ l- _: h
mov ah,62h
/ I/ i- ~. X# x/ w/ s! R# b- n$ J4 ` int 21h( }- C7 Z: V: n( P
mov es,bx
$ b1 T- _) E/ }" Z1 R xor ebx,ebx$ O7 o7 i: {. |: b, o: |' ]4 @. f
mov si,82h
# }( z+ k2 r o+ F4 S mov al,es:[si]
+ Z% b7 v5 B4 e! J9 e7 u* c call Change
& {+ v5 C6 q I mov cl,40 S1 A9 l) O& U5 |
shl ebx,cl
* q' u/ B8 ~; ^% h z) F add ebx,eax
: {, T% d# c/ |" B9 I e1 w mov al,es:[si+1]7 A# G2 ^- y" i$ y0 V( {, K8 N( C: S
call Change( ^* Q S, X( ^9 O4 I; Z! ^
mov cl,4 e' ]) M8 C8 i6 }7 v6 j3 ]2 G
shl ebx,cl
8 B; B) ~' r5 H add ebx,eax
E/ C/ Z8 i: ^! O$ G mov al,es:[si+2]' d& ~; o. w7 p
call Change, U+ M1 u% c8 D
mov cl,4
5 G% X% O. z" K. A3 w0 X4 g/ h shl ebx,cl% E: k$ u/ c, O. R$ @6 a$ p2 @
add ebx,eax6 u5 ?/ U9 C) M# z
mov al,es:[si+3]
8 s0 K0 V2 t* X! T1 g2 h* f6 p call Change b" c1 y: A6 j; e& O0 T
mov cl,4
" Q0 l s' I- a5 ^* v9 Z, e shl ebx,cl
* ]( h% i9 p, D2 g add ebx,eax6 j' c& y: E( P' w7 T# s( D/ m
mov al,es:[si+4]
( g6 y- f1 v7 @4 j call Change
5 g1 t9 n$ b% I |+ Q mov cl,4. W, U8 H V& `3 n7 V0 p' p( b
shl ebx,cl
. ^/ R D% n6 Q; T! P) H) V7 Y add ebx,eax
4 n- X1 L% O9 W5 J m mov al,es:[si+5]% |8 }) n0 j3 Q9 o$ \
call Change2 X w# {1 E0 n( s" G
mov cl,42 U$ d: S( y! k% U2 `
shl ebx,cl+ i5 c, j# B2 N- H# J' u0 _
add ebx,eax* t; S) e1 a8 I# Q/ ?, W; `+ t8 }6 X
mov al,es:[si+6]
9 t& g/ R" ^9 j1 u1 L; h) u4 u call Change
" H. G7 F7 @1 o+ j1 i mov cl,4' y6 q& z( ^! l2 s
shl ebx,cl
0 P0 ?7 ?& x5 @; p( e# @ add ebx,eax: i2 {! O: l! T- H& L
mov al,es:[si+7]2 R) o* W- s6 J! V
call Change
4 B: F2 a; H* z8 R mov cl,4
8 }; c7 M4 A) O& i) t shl ebx,cl/ W" @- i3 U, g
add ebx,eax
! }9 V" P3 \' U8 _5 J5 z' {3 L ret
7 Z% }1 C0 V8 B9 B/ d) a5 [PSP endp
4 Z2 O i; U2 B7 [$ p+ H;------------------------------------------------------------------------------------------------
: s% H3 s) s r% C1 n# jChange proc near
2 c1 U: P/ ^5 j4 Y: cA: 9 y8 t( D9 V+ l: ~
movzx eax,al: ~. M& o o6 p
mov edx,eax( n. u/ L# y* d
cmp eax,'0'
% K0 D- I+ c9 [% E8 a* g jb A
8 }7 e1 |6 o9 f0 M% N& S cmp eax,'9'
; P1 o0 H2 e; y& L1 H$ _ ja B
" l& {2 D) W$ d( F sub eax,'0'
6 N/ @/ {" D5 N( D jmp short E
; i v1 p9 e/ bB:# q$ `( O1 P2 N
and eax,0dfh
! q9 y' X0 f1 Q8 ^/ n5 [ mov edx,eax
% D6 Q: c) P; J: X sub eax,37h
6 P0 G* l3 K( [- Z, V& ]; x cmp eax,0ah
" g9 [& R# n1 p& A" p% T jb A 7 K) H: {7 F0 e9 p/ ~9 C" _1 V
cmp eax,0fh+ |- y2 X" o/ ?. X1 @* Y
ja A / l d9 L/ }4 \& _7 A
E:# H- _& m' o# \# ]4 J. I/ ?
push eax % B- P: y* `9 ~* q, u
call PRT
* S6 z1 E0 a4 x* W: R9 ~/ n pop eax
2 K, z' d. p) i3 Q0 M0 FCExit:
% x/ n; b2 j7 W0 o/ i* j ret8 _! J8 x' ?/ j0 I
Change endp8 b4 @7 _! C: _' H% {7 d7 U
;------------------------------------------------------------------------------------------------
% A1 i ?- i! X e: i: x: u& o/ I- y* nPRT proc near# N% K( N1 [4 k7 O1 K3 ]& S
mov ah,02h* J0 B- `1 n2 c4 i9 r; S
int 21h, n6 u3 D0 m# E4 v! x* U
ret
/ d0 P$ G: U1 _! {8 @0 B) kPRT endp6 O. C- @! h, B* f9 O$ G
;------------------------------------------------------------------------------------------------/ D# z: f& M# e5 M' r' t. z8 j8 r; d
crlf proc near
; l5 S5 S" y8 n8 ^; q mov ah,02h
% L# w8 G8 m1 O: B) T mov dl,0dh1 |) J% |; A' k
int 21h' \- P" a& u. E) F7 d
mov ah,02h3 N4 p- ^4 B* R9 ^9 E* T; a4 c" b
mov dl,0ah2 w. \6 D2 l* j- K- r
int 21h3 \0 Q- m. j* e. w$ L* v, ?
ret* d2 ]0 ]& V& E+ L: V
crlf endp3 u) [/ H9 m9 Y4 F& p0 ~
;------------------------------------------------------------------------------------------------
: _* I4 z/ w0 K( {6 b7 O/ I_32bits proc near# v1 g' [7 {2 d+ x9 y# X
pushad
% |5 n0 O8 P/ L2 p mov cl,43 M! q# R5 \* _& P
rol ebx,cl
8 t& h' U1 y' k; y. }4 }: V call print_4_bits
3 r* i2 S' Q+ Y: Q rol ebx,cl
. D" U2 v/ y; w call print_4_bits
; }3 F6 E, [! L# r rol ebx,cl3 E/ X$ C8 u! {$ ^: b h; X. X
call print_4_bits
& h0 q6 @" J+ P) v: {: w( `$ v rol ebx,cl
' j o2 I+ E j call print_4_bits
/ N) [% S; n k9 t1 O/ x8 I rol ebx,cl2 U7 w+ P( R- {8 V+ @9 [: {: D
call print_4_bits
- J% B6 g, a1 r$ B6 {4 o rol ebx,cl/ h* @: ]0 |6 Y% v" q
call print_4_bits
; i' p( o+ y1 }( F1 j0 L* h, l5 L rol ebx,cl
P/ }2 x c6 C8 r, O1 i9 { call print_4_bits2 z: l- u' _: f; U; l) P
rol ebx,cl
5 [5 ?( S' W7 y1 V5 e call print_4_bits
9 v, ?4 B% p v% _ rol ebx,cl D" y6 I2 j! Y( \' G
popad
l& E) e% C/ E* O% p: l2 y ret$ U8 @8 }& O' r3 u0 c4 X' e
_32bits endp1 J% h! u& ?- u7 m/ N# e
;------------------------------------------------------------------------------------------------/ ]+ ~$ v2 I$ a R7 f l v
_16bits proc near
% M$ ~$ A/ M! N) J pusha 9 S8 t3 ^- N6 j5 @ @
rol bx,cl
: [# g) f3 o- d% G: s call print_4_bits
{3 C$ w: z$ i' L rol bx,cl
8 F- Q" ?, S v- s) N call print_4_bits
; q# L( G, Q+ K- f6 N rol bx,cl
/ M, N1 E; K2 L# S0 c/ ^5 i5 l% ] call print_4_bits) c& _! X% F6 ]$ h2 c# e6 U I n
rol bx,cl
+ p+ D w F2 m; F5 Y1 r8 l3 n call print_4_bits4 a* T; n) O6 ~1 u9 @. q
popa+ J' Y [. |3 ^7 S6 `0 ^1 }$ d3 d
ret o8 h$ N+ P4 Q; ]% G) V, K1 I
_16bits endp
9 i; {: Y8 N+ N# n7 a' ~& o1 z;------------------------------------------------------------------------------------------------$ u+ Y; T" ^' ~+ D5 b3 v/ E2 U" p
_8bits proc near) m8 ]2 D4 y/ [( `8 [
pusha
' Z. V4 n8 B* w1 y7 |5 {/ w4 c3 r rol bx,cl
; v* I0 P. A7 T6 J. H" Z call print_4_bits
3 f0 f4 i9 {$ R( G5 t rol bx,cl; v& h* `7 o! t6 o# A% B) {
call print_4_bits
7 ]9 X$ x7 k' Q0 T* g' ?' U+ l popa3 E8 O k: a0 x' E, K- ]+ e
ret& g+ q. R/ c( S" b
_8bits endp3 g4 T f# s! \
;------------------------------------------------------------------------------------------------
9 Q9 s/ q8 L, Z, Q% \print_4_bits proc near( ?% l: z R, A4 F( g0 C( x
mov dx,bx( Z. k6 |$ P6 v! `3 p5 M
and dl,0fh6 J/ m" l o- A( }
add dl,30h8 Z/ Q% p, ~8 W* J
cmp dl,3ah/ | R0 c9 t8 N' Y* l
jb print, V% d% M! }( B* Y- [6 H/ @
add dl,7
) n2 ?6 R% _$ y6 m. J0 Q" g- S0 aprint:
+ L; q: A Z+ t1 F) {/ \ mov ah,2
2 V! J! q7 r4 |6 `* E& N; z3 u) { int 21h
3 M, p' `, U3 }3 T ret
5 | v7 D9 J+ e! r' ^( u9 B/ Vprint_4_bits endp ) W& v1 W# ^" M5 K- Z+ a3 \% |+ Y6 @
;------------------------------------------------------------------------------------------------
; `3 k1 X" |1 n+ U2 z$ z) ~CSEG ends
P1 L3 @2 u3 E7 B% c6 FEND |
|