|
各位前輩好,以下的程式為在 big_real_mode 讀取記憶體的值0 ~! X1 S$ ?# i% _9 `
R) b n; U* l1 J. }& b; X3 V例如: C:\memory.exe(程式檔名) 01000100(Address)
1 M4 G' w, S! P7 j* `0 j/ w" D! g% @
9 H' H# H3 A% k1 A0 n則會顯示01000100位置的值
' G3 Y. E( [4 y, T
: l9 D. L5 O. J: r但是我另外還有要顯示出字串,但是顯示出來都是亂碼
2 ^0 l# q) G D( o
& E: j# G; l( D% l麻煩前輩給我一些指導,謝謝 6 p: a% r, u& ^% `0 B
" ]+ X6 z- f' Y# D' q, x, M
; E* m1 r. M" ^
.model small) t5 L! g o- ^3 Q) x0 |* |
.386p
$ h* P0 |& J2 o- b5 M;------------------------------------------------------------------------------------------------+ y: k' W% Y* ?! J: M' _" }
DSEG SEGMENT USE16'data'
* J, W' @8 ]* V; o% X4 H6 F
4 K4 f: {; f! P5 C( E2 s1 KDESC STRUC/ b. _2 [, w: J1 d: E( ?# z4 A
LimitL DW 0
B K, `, k9 l4 z% t BaseL DW 0 ( T, \2 Q9 V. j* p5 \& k6 D" v9 C7 I
BaseM DB 0 4 v1 u4 N& A/ e1 H
Attributes DB 0 9 B/ X3 y' O5 U1 [) j$ w$ u' v
LimitH DB 0
5 A2 p2 L/ f9 ?# k' P* G. J0 e$ v BaseH DB 0
: @5 J9 }- _3 S @- ~% _1 rDESC ENDS) {/ S" M2 M! D! u, z( B
" e+ ]0 k2 W5 A9 f9 a" P8 w. n$ cPDesc STRUC' Y: N) r* A' a
Limit DW 0 4 c. ^5 i4 @5 T
Base DD 0
' r ?( V+ V- \+ p, @PDesc ENDS
) ~4 {+ @* g1 r' C F) h% d1 J1 C+ U4 [
GDT_def Label Fword! f* S5 Z0 z7 w2 @) a! b
Null_Desc DESC < 0h, 0h, 00h, 00h, 000h, 0>7 T& L9 e1 H' K6 `8 t
Data_Desc DESC < 0FFFFh, 0h, 00h, 92h, 0CFh, 0>
& ^2 N4 G. t2 W/ \GDT_Addr PDesc <$-GDT_def-1, >5 l4 c0 x% H4 q0 r' Q- V. Z3 ]
1 o) H6 I y2 e+ C' {5 C& M
msg1 BYTE 'The Input Address is '
+ o3 z0 b7 b( \( mmsg2 BYTE 'The Data is:','$'2 X0 s4 E O. ]# J2 y$ \/ k
7 F9 h- M4 B B. yDSEG ENDS
^1 s& M4 C) ~- q/ `
1 x' r, A: U8 s1 T
4 _( n& l! J3 u$ z E9 B: A;------------------------------------------------------------------------------------------------ $ R: x$ k3 }5 E. I. {' K1 J# A+ L
4 x; [: K& k8 }% i( OASSUME CS:CSEG,DS SEG# I. `: r, S0 y+ s( O) g
! X: B) Y9 K6 Q/ L, bCSEG SEGMENT USE16'code'+ B) l4 I4 p: I+ o4 x5 t) z
* a0 [+ \9 O: c5 v" R9 } push ds
% L c% j3 q" k1 z. @2 Y push es! T8 ~0 z$ e; d5 I8 ?" M7 ^4 U
push fs
`9 v" T' {4 L8 c0 m8 ]( `, ]/ Q9 i push gs
6 Q+ s% W* `' N- n) d, o 9 s" H& ]7 D- K( [3 @; a
call big_real_mode+ c1 b9 }' k( P; x; j- q
/ ^4 m& ?, U! m9 |* X
# U$ V* T; w0 [* H, H( H. G mov edx,OFFSET msg1;
) j% D0 a( L/ f4 q mov ah,09h; 3 k0 R2 k" N6 M0 B/ N
int 21h;* _8 K. ^2 D* ?, u; C( [
mov edx,OFFSET msg2;
+ N4 L0 Y/ m c5 U8 Q7 G mov ah,09h;
5 n6 ~/ Q6 n' ` int 21h;
+ s, S5 v6 b) h1 s( [5 a8 t# F
" J5 U1 F' o! c/ F! a8 y call PSP " n5 [$ T' B- K8 u
( Y8 Q$ A9 M: V0 \ call crlf . r; V( x+ u# {7 `' P
5 y3 R" Q" X4 ^" J7 I
mov esi,ebx
/ O# r0 m/ Z* h: E1 Y8 E! A" ^2 w mov eax,fs:[esi]
- o3 p9 {5 Q2 C out 80h,eax% G7 A1 _6 s# ?. w0 r. N
mov ebx,eax
; P$ g; f3 r% e, v/ L* u' `4 R9 M call _8bits
" e! d8 v7 _4 t% @5 M3 O
8 x# ~* }! _4 R. b% v6 M+ L call real_mode' A6 x! }) A2 k) C) _
) D: N' ^& X: W% o; k" L I
pop gs( a5 I3 X/ }9 ?
pop fs
# g8 d$ [9 ~# {% R pop es$ f, l0 c$ V' K" C2 Q; U
pop ds
" ?7 z' G; s+ F/ L% }7 V9 S0 S 4 W! A h- i& Q" v) g; f
.exit' [! z2 `7 h. u, v4 ^" H+ W. ]
;------------------------------------------------------------------------------------------------
5 D+ D% l& M4 q- [$ r3 ybig_real_mode proc near( r2 K) j) n9 _3 b# y6 L p2 S" S
in al, 92h: M- ^+ u5 e4 h9 Q& n1 B, N. I
or al, 002* y) A' F! A8 ]4 B
out 092h, al
# l7 ]7 h0 z4 x, A, G" x7 h# b out 0edh, al! P/ \$ Z- [0 H1 p; U
cli, g8 ?1 g8 ^- b. Y$ S! B0 V
mov eax,DSEG0 _: `3 l/ ]4 Z1 O
shl eax, 4/ K o6 _: d7 A: U2 {' O }
xor ebx, ebx
& a" C! e" {8 ^% J, n4 S l. } m mov ebx, offset GDT_def0 o4 i) ^8 Q2 k1 c) X/ @/ u
add eax, ebx. t- S5 S4 y) [# N4 f* c
mov dword ptr GDT_Addr.Base, eax
1 V0 j/ @# F$ J lgdt fword ptr GDT_Addr+ O' L3 {% O1 S5 J( t3 Z% e- t
mov bx, 86 V/ Q# ?; K% O7 R
mov eax, cr0
" A6 l# K" E! V- t4 _2 m" r or al, 1# V ^% r5 |% S7 y. A
mov cr0, eax5 \! Q& m6 f: i0 U; K7 H) C6 j8 f
jmp PMod
4 Z2 U3 ]9 M# U3 \) t" L E! z; N" v. fPMod:% @3 U9 |! t' V1 b, U5 ]
mov fs, bx( z+ f u7 b1 W# D4 F* B& |
mov gs, bx
7 J \' s. }$ g mov eax,cr0
) I0 y0 Q. z* i) f5 K! z and al, 0FEh/ d, ?) n, p1 v8 q6 E! G2 k' l- ?( Y
mov cr0, eax ' e7 X" _/ T2 w- ]
jmp RMod
% C$ O' Q. u# v( ARMod:
7 ~, o- {+ J% @9 ?! l+ M; q" {4 z xor ax, ax
2 `+ [; B' k; R" i2 ?9 w0 t! Q% A mov fs, ax; r5 D9 _% J! a3 K* ~, ^& k7 u
mov gs, ax: A8 c' p& Y( E9 K" H: D9 g
' `9 l' f$ o- J6 X- U$ k2 N+ Z
sti
4 h, b' \" I$ t 0 b) f+ s; J5 a" s
ret
A0 ]3 R$ L5 H( U+ F! q lbig_real_mode ENDP( {$ }: g: C* f, J. f6 R) \1 X) ^
;------------------------------------------------------------------------------------------------
4 ~% L3 q# m" q: m m0 @& yreal_mode proc near
( g, Z7 \: x/ [# R8 c in al, 92h/ g$ h% _ f4 u$ s$ i% A
and al, 02) h) b/ s% C5 t3 g
out 92h, al - T2 p: i1 W) y1 D/ Z
ret
/ C% \) ]3 m7 G. ~8 t% z6 qreal_mode ENDP
5 p8 {- n7 j: z+ c;------------------------------------------------------------------------------------------------
- W& {% X1 Z9 k! ~9 tGet_Commandtail PROC near
) {, z7 v! X n8 a! G push es 9 f3 r- F; v' h' C+ |! c
pusha4 g( k( p$ x: p* @. P4 @" [1 |$ k
mov ah,62h 5 T' k* K! e0 ~, U) y1 e8 z
int 21h
. q t$ u* V. |" I mov es,bx1 a- ]4 s5 P I
popa . a, h& Y" ?7 T. k4 ~# o" ~
pop es6 ~% M. B5 g3 K
ret
; J: y5 e. c1 |7 F$ Y/ y1 TGet_Commandtail ENDP/ l" l& _4 H2 n& N* X/ W
;------------------------------------------------------------------------------------------------# _- h7 q0 k2 Q
PSP proc near, [: e/ X/ e. q3 B( v
mov ah,62h
$ w( u4 h3 U' ?, E int 21h
5 M2 ]& p8 c; a& q mov es,bx 8 M' x. W7 i* L' \: u/ V
xor ebx,ebx
/ Q$ ?& @2 C5 C6 {3 ]/ n {8 ?' p mov si,82h$ {* i/ ?. ^1 {5 B$ T9 S( B1 S
mov al,es:[si]
4 T/ r" W* }# x, a7 Y/ d call Change1 k% ]' S& R& U& V5 a7 M
mov cl,4
; q9 [5 X4 _7 m8 K) o0 \: D- u' \ shl ebx,cl
8 P/ I! \- s- @( \/ u; X add ebx,eax
4 {7 j7 d- Q: z3 M4 N mov al,es:[si+1]
$ f9 `: [1 ~, m% j call Change1 i& \8 x# X' p- f- X' }9 i: l
mov cl,4
2 f7 X; y% @0 h! u3 l shl ebx,cl$ N6 C& t4 N" @
add ebx,eax
$ w z$ u* W( o5 w/ L7 k mov al,es:[si+2]
/ `. s4 W/ s. n' h$ w* s' M call Change- G# g: S0 t5 Q
mov cl,4! o( `5 z( P; W- V/ z+ q
shl ebx,cl# Q9 h6 i) @ ~6 r- [0 ]5 c ^
add ebx,eax
# Q" o# @* I; \% o mov al,es:[si+3]6 U3 ]+ b/ S1 C9 G7 W# L+ b
call Change
' v! ~" E( F7 J1 H! q4 C1 \ mov cl,4
+ ^8 n+ d) w, e shl ebx,cl
0 g& y- i. q9 b& |- P( p3 F4 J add ebx,eax6 g9 Z2 G8 a( p( v/ e
mov al,es:[si+4]
: V7 Y+ d! W x+ J9 K call Change
[* B: P! B3 E$ t( O mov cl,4
6 T1 K- Z" ?0 t6 R shl ebx,cl
2 m2 y( l% l, `- @+ o! Y0 m# K add ebx,eax" S9 ?: ]$ I4 r0 e" Y/ a* ~
mov al,es:[si+5]7 d% S- q4 ~" x! z
call Change
* |; D; l3 [5 V. k, `8 s mov cl,4
$ q5 F8 u6 @/ [3 y( L: s shl ebx,cl
1 b' H, ~' w9 D$ X add ebx,eax9 r0 X+ z$ P8 a6 z
mov al,es:[si+6]: V- o E, g0 E
call Change5 ?/ q8 @" E: l- M
mov cl,4* Q( O8 g* ~! R! \& g$ M/ t
shl ebx,cl
5 V1 b9 W0 o. y* l: _* k% V add ebx,eax
! v" T0 P* D' A- n# x* G mov al,es:[si+7], ]2 |2 u6 c2 q- Y3 ~# M s
call Change
( W7 X+ Q' A" r: h; R( A. X- O mov cl,4
% @; I; a. v; H- x: H7 d( e shl ebx,cl
! k+ X* f) a! g) K add ebx,eax8 ?% A3 i. k# X4 X8 ~& J" d
ret
0 j( F. J7 d8 s6 s0 HPSP endp
4 g+ H, b7 J1 [6 L: t% v- [;------------------------------------------------------------------------------------------------0 s8 K! l7 B0 H) Y, `" C7 ~3 \
Change proc near3 @. T7 N3 S9 y: B' a2 a
A: G; d% @& t7 e/ p
movzx eax,al
! k+ |6 {: l- F; i mov edx,eax
' b4 B4 _7 c& D! n- E cmp eax,'0' ( \% P4 [- H) F) R; @
jb A
" z' b7 m$ o7 r cmp eax,'9'
" S' F8 I( n$ c ja B9 I9 d; j7 W+ W* t
sub eax,'0'5 Y+ d( U$ j* ]% j( z% z
jmp short E3 M) E7 x& q, D+ t0 O9 E) g* z9 A
B:
, D0 P4 d; a0 e$ z: q* h and eax,0dfh 0 O, v& Y2 ~+ A. X3 \, c: h( b
mov edx,eax" y+ x5 }( }+ }) X& r: T, }* O& m
sub eax,37h
( \! C- B/ S1 o4 M. }, { cmp eax,0ah
1 ? R- D3 L/ K/ t# E* w& L- g jb A
* u1 i* ^$ s- Q% I cmp eax,0fh; Q) O7 u- l, l3 S8 \: }, ]
ja A * U. l) z' S4 M
E:$ w% M" p/ K) o" b/ J8 Q
push eax E+ o, ` F6 c( ]6 I- M5 j! T
call PRT $ f% ^4 Q+ P3 {- ~) [
pop eax ]- t; e* b7 G0 b5 u: F$ s s
CExit:
1 c- t: l7 x% X+ a# \ ret
9 M6 u% U" V( SChange endp
% t2 v4 ]; ]8 O# z; d) |9 W( J6 m1 ?0 r- M;------------------------------------------------------------------------------------------------
8 c$ }, B, L6 y; Q% Q! X% O- FPRT proc near0 @. G6 Z! w, v" w. K* e$ F
mov ah,02h
' f8 ~% L2 n, ?- y4 i5 P int 21h! k, d5 [" N/ i* q. K1 ?7 a& O
ret
- C% i; |8 M3 [' APRT endp
1 |- N f- C( v. C( _; R% o) h;------------------------------------------------------------------------------------------------
1 T3 A( Z2 M* B' w% f, @; n( Xcrlf proc near
' _- J# |) r8 }, y mov ah,02h( E: G+ k1 N& u7 Z |3 ~! p
mov dl,0dh
6 C. }1 i: U* h) R* | int 21h
) p7 u: ^1 P: B Z# m mov ah,02h& p! T3 M3 x( a. T9 \$ T
mov dl,0ah
, u+ g8 y y! W5 l6 S t6 d6 A0 m int 21h0 V C/ O$ a" o' h
ret
$ A3 n$ s) T8 P/ q2 [8 Jcrlf endp
n# {/ F& H- k7 k+ d;------------------------------------------------------------------------------------------------
7 g4 L. y2 s: A9 A! D+ z9 D. }- R_32bits proc near R; A$ P: k& y( Q) I
pushad
% }& x5 u m' M. P% [" H0 d/ { mov cl,4
( }) F6 T" Q/ }! k& [. I5 ` rol ebx,cl
/ s! L: U5 `% `% e/ H `( | call print_4_bits* \, `, r- G( Y0 u
rol ebx,cl# Q. K) t+ J& H6 f7 v
call print_4_bits
/ O' h8 U, l8 X0 | rol ebx,cl
8 ]: K3 m$ }" T0 _4 { call print_4_bits4 x- B% `. B9 D( Z8 G
rol ebx,cl
' }. F3 ?* J* k. E" F4 W call print_4_bits5 N* A1 x. |; k! E7 d
rol ebx,cl) K& l; [* p) Q: X7 G! e
call print_4_bits
" T3 e' D& Y8 U3 G( G' D rol ebx,cl
4 o# \( [6 ~/ K8 ~- g6 n4 d8 ^ call print_4_bits8 P. d& j' j/ ?' m7 k
rol ebx,cl1 Z" d' b0 g* i& ]
call print_4_bits
" ~; A5 `) u% |6 c- m" T8 [ rol ebx,cl
4 J) h' f3 i9 [) t call print_4_bits3 P( x v3 w# a% X# y
rol ebx,cl6 Z" X9 ?) R0 ^4 ^! {6 u
popad
* g7 y2 H5 A( P! K5 N, A ret
. y; `- v$ u+ b- \: W_32bits endp
+ e/ S& D+ A2 \' V. r3 m9 v;------------------------------------------------------------------------------------------------
$ @( v/ O$ V: a" x. F_16bits proc near1 ~5 l: C* @- F# Z0 K6 i
pusha - U/ G: W5 n: M" j3 d
rol bx,cl
S1 B* J. j9 }: o call print_4_bits
, L- t" R" {& M rol bx,cl4 H8 a. W, h8 N K6 ~' Z2 h+ u
call print_4_bits; c( Z" Q8 Z- H2 a" C. l h* I
rol bx,cl
1 e- k$ K8 z3 j call print_4_bits* T! k3 I/ P1 b4 X
rol bx,cl
1 d4 k8 p/ B# r: i call print_4_bits
* u4 d3 h+ y$ Z0 f- @ popa# w/ ^' j1 D* A# K
ret
3 @" b) v8 e k4 ^+ {! r_16bits endp
8 I- S: T7 K, M2 v. u- h. H1 A;------------------------------------------------------------------------------------------------
6 H2 Z$ G; U- T3 Y9 h, \8 U0 F_8bits proc near
: p. V9 A! u: i3 j( R B pusha
, k- s8 ]+ Z; ] rol bx,cl( Y3 t% R8 D. u8 J, q
call print_4_bits
9 o& d2 ^$ I+ O0 h rol bx,cl+ Z3 \$ i/ G0 C7 u
call print_4_bits: O, h: U0 J0 n8 x' n
popa- h" {* D$ e1 s( A3 e
ret( |4 \5 C& \" T5 D; p$ R2 a7 S
_8bits endp: G( g. |" _1 H' p- x
;------------------------------------------------------------------------------------------------
* f. I% Y/ Z2 m2 _& G3 }print_4_bits proc near
" ~5 s, w# t/ m: s6 I" e. Y mov dx,bx: F- d' O6 y9 K$ X- z
and dl,0fh. I0 s" \/ W; o# T
add dl,30h
6 @( I/ v3 G7 t7 k9 J8 A$ R% X cmp dl,3ah
5 m1 }' ~% W/ m' b$ Z jb print
- l K! v a6 N+ p- | add dl,7
6 o$ E# O1 d& w, \; C3 {9 u$ }print:
- F3 N6 a+ _2 `8 t1 V& l: d mov ah,2" R. @ a p0 W' s' u7 C
int 21h
( t8 s- V) F1 X1 W) _: o1 I ret& C( \! V& J" D" z, \1 [6 q
print_4_bits endp
/ Q$ p$ r" v% ^8 Y2 A;------------------------------------------------------------------------------------------------. m# q5 u: }* H2 g, {4 e4 k+ a- Y. x
CSEG ends, z: ~7 c Y$ j6 h3 y
END |
|