|
|
各位前輩好,以下的程式為在 big_real_mode 讀取記憶體的值8 f6 s% B, D; t6 J" O
( v4 U4 l' o/ w( v* f例如: C:\memory.exe(程式檔名) 01000100(Address)- t0 X4 u2 k2 s6 ]; `
: P. ~0 x. s: K7 Q h' P
則會顯示01000100位置的值
& m8 q( |6 B; [5 F, T- W+ Y, n7 |9 P3 c& l0 ^( u6 l$ }
但是我另外還有要顯示出字串,但是顯示出來都是亂碼
" I9 N0 F6 A1 d& Q' }
& _5 r) D) L: X% @; w0 P; j8 _麻煩前輩給我一些指導,謝謝 0 t2 i& S( S- ]: w. v
. N. ]2 ? D9 n
" ?! i, h4 R- K0 K.model small0 j) M8 f* a" u
.386p3 D& c9 j3 ^& X7 H0 e0 f
;------------------------------------------------------------------------------------------------
. F( B t) n) F& \6 pDSEG SEGMENT USE16'data' 5 N% d1 w: \* Y! m' d' `
: a! q( `: _/ U0 a( G+ W& A+ kDESC STRUC& G1 V% v" U; j2 H9 d
LimitL DW 0
+ c) x U, z4 d6 s0 ?7 u BaseL DW 0
! {- v0 a( \' ]6 X, s BaseM DB 0
5 h$ I' _( A9 N% w! V9 W Attributes DB 0 7 k( o7 d/ [4 i( w3 X
LimitH DB 0
; x% w0 |$ r% F' H BaseH DB 0
0 _1 ^; S2 z6 jDESC ENDS0 h6 W* h, t5 o5 ^. {, p: T3 V
# n. @- \& q7 t9 G' W
PDesc STRUC7 a6 | ~$ \+ ?. \
Limit DW 0
' `+ r6 @1 v1 Q, X Base DD 0 9 N, T8 }4 h% _
PDesc ENDS% V, ~& @4 N. d
* H# O: ~! `5 g& W$ _
GDT_def Label Fword
9 [& F) X5 P$ c- ^# I0 hNull_Desc DESC < 0h, 0h, 00h, 00h, 000h, 0>0 G0 m$ a+ T% B
Data_Desc DESC < 0FFFFh, 0h, 00h, 92h, 0CFh, 0>% b3 b+ K: S8 ]; c9 h: S0 H t; U
GDT_Addr PDesc <$-GDT_def-1, >
+ h! R. D& [0 p
" @ M1 L- ~1 c! Z [/ Umsg1 BYTE 'The Input Address is '
8 A4 ]- F- c9 J5 d* O0 Tmsg2 BYTE 'The Data is:','$'
5 r- J1 m* m# _1 c- M6 _( Y) u/ M3 T7 @! E8 U7 h( ?* r
DSEG ENDS
/ c" e6 R+ q5 M1 ^, u5 h% v7 v0 D8 D5 ]& q
; M% S1 g& g: Z, \% z
;------------------------------------------------------------------------------------------------ 3 z [/ y, n# M6 n6 H) N) l% @4 h; @
: e$ M: I# Z2 V) ]' f$ CASSUME CS:CSEG,DS SEG
; G# k A9 }2 O6 S4 p; H5 y' L# q& A- \* t( r' Q- H
CSEG SEGMENT USE16'code': L' N- A' u/ j+ G
0 U; s6 x: N: P g& W1 `% ^2 g
push ds
% E4 a- }+ H: M% c+ Y* a; Y' o push es
( L" }4 d1 ]2 ]5 H7 i: a: X" L push fs; p! g7 {$ n8 r- \ l4 C8 E( W6 z
push gs
" D) z, `5 ]9 R6 G! W$ \' O ! t! ^9 ^# D- q3 Z
call big_real_mode
+ J) ]8 H' _% [4 Q3 f6 d& _; _. |) b2 y( u! n: z$ [
) }) c ` E' X# E
mov edx,OFFSET msg1;* @5 t5 }7 T" i8 O, W j
mov ah,09h; ) S, i. ~ M. L, {; Y
int 21h;( }; T' N3 F/ K8 t0 W! O
mov edx,OFFSET msg2;
) f0 R* |7 d! V3 x" S$ h( I mov ah,09h;- [' d: ^' u+ h* a$ x
int 21h;
) E; P4 E4 I* |8 s I+ }+ Z
! N3 x' O0 t$ I! {* ? call PSP
% u1 G( A- K5 C3 _" U ' j) c% }1 y$ k, z; b* t/ {& s y9 S
call crlf
' @; B3 p9 w& { ) y3 o7 u9 |$ G- ?' `
mov esi,ebx
0 ]6 U0 }/ S7 c% ^% A! s9 J mov eax,fs:[esi]
! f6 w) n) V) A; }( r out 80h,eax$ } {! W8 E! U9 c
mov ebx,eax# N7 ^' q+ J* o' V* Z" l
call _8bits# v( M2 k: W3 e) m9 a& O
! s" ~, h: ^+ ^9 r5 g call real_mode6 r1 T1 h1 t5 _3 y! e4 @
0 P: N8 V4 U, v- T# Q
pop gs
1 z* m$ ?& R1 j$ y pop fs
) J2 ^+ @* k, s% T6 V pop es
, M! f2 a8 R; h) o8 [1 S pop ds
# T) d) z" E6 U# [8 i
- c& S! w6 T( Y( @5 c) o1 @1 V5 Q1 G .exit
7 V3 U4 c0 O( M6 R3 f;------------------------------------------------------------------------------------------------6 P, C) [. D( E9 p7 G
big_real_mode proc near6 ~! P; l t/ K; c, Q
in al, 92h) N3 X+ w* `0 s* n* \* b. {$ }/ m
or al, 002/ f+ d# z3 s5 @9 i: N
out 092h, al% ?4 Z3 E& B1 Q6 L+ j$ ~6 S
out 0edh, al
" s1 ]2 R4 k) W) R$ m e" y1 s cli, q' ?% r3 ^2 p% m. ^
mov eax,DSEG7 M6 {4 y( Y# G7 T) G
shl eax, 4
9 [8 l0 a: p, b6 a0 b xor ebx, ebx. `; @3 V4 e- E, f$ j h/ y7 N
mov ebx, offset GDT_def8 ~2 p& J4 K4 ]
add eax, ebx
7 V7 G4 _) U `7 S: w) v mov dword ptr GDT_Addr.Base, eax9 a$ X4 ?9 c& [* r1 F. F
lgdt fword ptr GDT_Addr6 R9 H% g2 k6 j6 [4 x9 N# t, k4 ^
mov bx, 8
0 x3 q8 L% E% K4 s/ G! H* ?. b' C mov eax, cr0
4 M2 m7 n% P' u9 Q& d or al, 15 {. }# M' @$ z# i& b. d9 r5 Z3 u
mov cr0, eax" K% i, F; }: `
jmp PMod4 L7 u; T2 ?( k9 b) L; f; r
PMod:
$ O. I: i: _, N" v) U* i v mov fs, bx
, n; U- P& r% Z3 B& g _4 a+ P mov gs, bx! N; F ?% [( K
mov eax,cr0+ Z8 u% {" q4 N
and al, 0FEh
( N& A( {; E- o mov cr0, eax ( A8 x9 l3 u+ }7 m1 s* n
jmp RMod+ G1 [. @" d+ n; v+ j% j
RMod:
8 l9 G+ m. i2 X1 e5 L2 J0 n xor ax, ax: F, n/ S) {5 M( Q9 O8 A
mov fs, ax
6 Y; \7 w8 d1 z7 U7 X$ F4 d mov gs, ax
0 F; D0 r% h3 _. I; B% D! F
9 ?+ C& J7 u+ y. S sti" @" z# m) r3 B
" p& o; @1 ^ P6 B+ D4 k5 o; V9 Q+ {2 A
ret
( b7 D* ~! r" t1 obig_real_mode ENDP! I) T2 N6 H0 \6 c1 ^: w1 t6 C
;------------------------------------------------------------------------------------------------
. ^' O! z8 A+ Hreal_mode proc near
$ W/ [- G6 ~. F2 ^0 {5 M, X in al, 92h
6 \7 D; W- _+ c& H. p5 H and al, 02 H* b4 j( H% Q( J$ C- e9 R/ c& t
out 92h, al % }! I! ^# t0 A9 R2 z/ A& i1 H+ M
ret
/ ~8 B% m- C! y9 Creal_mode ENDP
, c5 Q! K4 }# ?! o8 [9 s4 B;------------------------------------------------------------------------------------------------, W0 _: \# Y" G* X1 N2 l
Get_Commandtail PROC near
7 v- b- ]- t. a. T" g push es
2 U" J# r. D3 L" t pusha0 U9 A' z& U) ]: d
mov ah,62h 1 V) p1 ^7 e' {' Q
int 21h2 P: B3 _ I! M d" D, o
mov es,bx- ?% _0 N/ r8 R+ ^- m
popa 6 z) x8 ~8 B) |2 H
pop es
4 n& |& t0 D5 d/ ?6 i# P" ~ ret6 C7 A- D0 u y0 v4 ]0 Y, `# D
Get_Commandtail ENDP. |/ I4 T* h2 C$ z3 O
;------------------------------------------------------------------------------------------------' w3 [4 @. `$ H. W, u# t" N6 C& _
PSP proc near( ?! S) i9 X1 Y! P& i! y
mov ah,62h
6 G$ B: r6 C; n int 21h4 h4 O% z% d# z7 y" ?: O* Z0 R7 s# k
mov es,bx , h, K: W2 z ?4 I& m5 b. @& I
xor ebx,ebx
! F9 U, J2 r/ Q+ V mov si,82h
, i' p5 n4 g# L& y) O mov al,es:[si]( |! J6 u }# ?+ V% P% u% x! H' l
call Change0 d* J+ ]1 `! F0 { A2 a* p
mov cl,4( I* u6 ^9 q1 U& K
shl ebx,cl8 {0 @- Y* q3 K# m
add ebx,eax
" m- d$ U8 S9 a3 l5 d% [; g3 d3 k mov al,es:[si+1] ?9 u. X3 t& F
call Change
, w+ M" h" P( l) ^/ k mov cl,4; \, z$ u2 H I9 r6 d7 [
shl ebx,cl7 ?# h% [1 \: _, _2 L
add ebx,eax! M1 h7 Q; H/ n; _; n
mov al,es:[si+2]
2 O ~3 |5 ^, U2 \% X call Change+ C2 ]. K8 ~) D. k1 L% m
mov cl,42 Q: L4 \& S$ P; i
shl ebx,cl
. w+ Y* F! K8 t6 `6 {( T( A add ebx,eax
# K7 M# K8 T. V% N/ n$ p mov al,es:[si+3]
( B3 x) l' n. ~ call Change. N( R2 M" Y1 X! C# p; R( H
mov cl,4
; Y2 G# R# e+ t7 v/ g# M; K* e. l shl ebx,cl
3 k2 W7 u, O( ^/ m8 h7 z- T. Z add ebx,eax
9 g" ~! Q* I: O8 |) s mov al,es:[si+4]
6 G {' j1 o+ q call Change
1 a$ T' P) g4 O0 X- l$ F. `' V mov cl,4
0 }4 W) l. \! U7 [. G shl ebx,cl
3 l4 v. `& `0 F& J. v, s" H0 S add ebx,eax; I$ u6 r, e9 T
mov al,es:[si+5]$ R* ?5 \ L4 Y" e+ o! t
call Change
, \; [/ S0 ^9 {3 i( d: _3 D+ u mov cl,48 c; b- H2 i2 L H
shl ebx,cl; M* P2 r/ r5 C' }: z5 V
add ebx,eax
0 D) n5 n' x- G mov al,es:[si+6]' U; H8 C1 p+ r" Y. a
call Change6 g. Y0 n, k3 @6 ~
mov cl,4. L" U5 |2 T/ _ v/ v I
shl ebx,cl
) x* p+ U6 S# B add ebx,eax
3 S) _* d' H5 C" t mov al,es:[si+7]" B3 P7 K# ]' S8 p3 P- g
call Change
, y, ^* F! j( `8 E4 v3 X$ b# i4 @ mov cl,4
8 t) ?8 W" p, {) _ shl ebx,cl
) b8 F5 g) @; I5 k! e! E8 \+ ^1 v add ebx,eax9 s: L' p/ a/ T( D; ]0 ]
ret2 P+ w: b3 O7 }, H
PSP endp
( T. D1 j9 Z0 T7 L1 T0 U& l;------------------------------------------------------------------------------------------------
5 `& g6 \. |9 z+ UChange proc near/ @% ^! |- g( [& _" }
A:
8 M2 n2 h7 q8 V5 I1 a( ~ movzx eax,al: y3 s: s- S) d
mov edx,eax7 h) J' }+ ^$ f/ u
cmp eax,'0'
* H9 z9 |0 ^0 ^" B- f jb A
A( x, x- [, A R6 ]0 g* r cmp eax,'9'
8 N- \; j( B# W; e ja B
/ ~/ r( u' ^. p2 W sub eax,'0'. ]; m! X' E, ^7 X ^- c. ?( d0 L
jmp short E
$ c6 l# [+ u3 h3 d% i6 i/ N. X8 yB:
7 W- J1 g1 @ e! C/ y% }, q and eax,0dfh 6 B$ n" V& J+ L! E* N
mov edx,eax
$ m+ I! C4 Y2 n% k+ Y8 [+ L sub eax,37h 5 E* H- D9 {2 d/ s& ?5 g
cmp eax,0ah2 t+ k1 I# L# D8 h
jb A 8 I! l" H' @; a% e7 N* i
cmp eax,0fh2 r! r8 R1 ~( y! _" c
ja A # W! q% _/ [8 R& i+ k
E:! d. u& S8 d8 }/ `$ J
push eax 9 v" A8 R* ?+ }# K7 [. `) g7 x
call PRT * q# {# `$ L' R# [8 z/ t
pop eax' A, N& x( g/ k8 B3 v8 g) Y
CExit:; k( Q8 C4 S" T9 i
ret
% y8 q4 w6 H$ [1 G- P; ^' t5 i4 vChange endp0 M; f8 N0 P2 i5 D, B* k% X
;------------------------------------------------------------------------------------------------& ]8 J1 \$ }7 M
PRT proc near1 i; I9 M7 Q8 }% F' q' w
mov ah,02h# I* {4 }* F( Z# x
int 21h8 ^; d J4 s: f v. h
ret
; F7 A: `& X! \" P( w' oPRT endp) ~0 b. K0 `& P6 h/ d& ? A3 ]
;------------------------------------------------------------------------------------------------# {/ f% l! t/ b( H
crlf proc near: E" x- V+ p" U% L" E$ d; T
mov ah,02h6 G. a& \5 y2 _) Z
mov dl,0dh
9 ]' R% [3 g2 k7 c9 e3 K$ ` int 21h/ y+ F* X- P) B1 q" m
mov ah,02h
3 t8 c x* q4 u mov dl,0ah4 v/ ^& D7 G! P
int 21h
, v: P& [5 e( p. Y1 _ ret
* p8 w, O% G* y% icrlf endp
0 p0 ]0 q& V: g2 e* j;------------------------------------------------------------------------------------------------
4 @, C) @- T1 W, \2 o! ~_32bits proc near$ O; \& ]+ v& ?* v n' A
pushad$ x6 m0 w# i# u9 u) i" r1 {
mov cl,4
+ k, u; [2 ` e2 r* y( m' T4 Y" H* A p rol ebx,cl7 y1 K# s: w. f# ^5 [
call print_4_bits8 S' F2 Z' B) r* T! Q% n
rol ebx,cl
, W" m! q; L) f0 b5 D0 q; J call print_4_bits
$ W+ Z' x) i9 J B rol ebx,cl( }! K/ F4 C+ X
call print_4_bits
+ {$ E! s. B. k' ]0 u. h( t rol ebx,cl( V) d F: W# [; X
call print_4_bits
; @& d9 |: o2 O rol ebx,cl* x( i( D0 ?/ i" l2 r7 e
call print_4_bits
, w* s! s+ Y* k7 v rol ebx,cl
) f+ Q, d/ e5 H2 P call print_4_bits# ?7 u( g! K, z5 u) W0 m" [7 O
rol ebx,cl: a7 P n* T& x4 C6 s; \0 K
call print_4_bits
* ~. f0 u. M( t: R% |# N rol ebx,cl
$ v/ H. M8 d O; I K call print_4_bits8 G! ], `6 `" T6 m4 W
rol ebx,cl
4 f6 b- z# i' l# x; O2 E! O popad$ `. B4 Q1 k1 P- V# M& q+ N4 ]) h
ret, y- ^3 n) K& P3 S. [
_32bits endp
8 x# j/ i4 k& J/ I;------------------------------------------------------------------------------------------------
: J; |2 f5 F3 K3 ?8 K ^" g_16bits proc near' `- E! O" i. x
pusha
B d4 [ U+ p: o, A rol bx,cl
3 ^& x# F% q% l L$ A call print_4_bits5 {; u& i) q5 }! B( H h1 ?
rol bx,cl
" _0 u; ~3 g: r6 p7 {, ^ call print_4_bits
& Q/ c9 i' ?2 \0 O" [& j rol bx,cl2 m# t9 S7 B, r+ x
call print_4_bits
; P! I" X2 A) i, \$ g3 R1 [$ j% s rol bx,cl
; a" |" G s4 a! }9 ] X/ F call print_4_bits/ Z4 p4 G( [1 ^ m
popa
^3 S, K' C, B ret
) b# N6 A7 f( L; e9 L* J, l_16bits endp
* Q! t3 r$ h1 g6 L3 d- _;------------------------------------------------------------------------------------------------
% m7 {. J9 q. V* n5 U_8bits proc near1 H2 Y( G; W4 z _. O
pusha
" K+ }8 p$ X0 J6 w: V# r+ Q1 X( j rol bx,cl8 ^5 s6 [6 n( r4 M; `
call print_4_bits. ?8 h0 F9 y3 l. b
rol bx,cl
; R+ k0 c7 R" v0 c; i call print_4_bits
" B* u8 G, d0 b; j" k; v1 m popa
6 y# V; m% j0 L$ t ret
6 k A/ t% U3 y5 x_8bits endp
1 S$ F5 |; K+ L& ^;------------------------------------------------------------------------------------------------
" {% t% g# y" |print_4_bits proc near( P5 D( B7 e" l# x
mov dx,bx4 ~3 ~1 G( i. |0 @ y! N2 Z
and dl,0fh7 w$ u( s% N/ j( w
add dl,30h& n) `; }$ R" {% l. }% S
cmp dl,3ah/ K' u' w' K" `" b8 R+ o# Y, v
jb print
8 F! L( K2 T1 z" T; J add dl,7
/ R0 L) m6 {6 i5 m$ \print:
6 l& x# D, _! H' H mov ah,2" S7 `( k6 V. ]) ^) Y
int 21h: M# G S" I8 ^+ p* m3 i/ k: T& X) W
ret
1 z( I e1 v. K6 m% Uprint_4_bits endp
8 a2 U4 k) V8 m8 s;------------------------------------------------------------------------------------------------% p/ _' F, l0 J# e7 [, T" s
CSEG ends
$ ^& c7 i! T9 g' C( O, MEND |
|