|
|
各位前輩好,以下的程式為在 big_real_mode 讀取記憶體的值
3 K+ t2 B8 O6 s& }( A) N1 `0 @2 [
. L2 u0 T' m4 c' l/ S9 Y! G例如: C:\memory.exe(程式檔名) 01000100(Address)
& O# P4 E: M' o* Y- k( d' J4 M; G6 }6 `* v
則會顯示01000100位置的值
5 [/ i* k) l7 Y% f! M. Z3 ~; B) n$ H* [" o
但是我另外還有要顯示出字串,但是顯示出來都是亂碼1 A# B! @9 X# ?8 f
; b& U9 s$ V! m/ J: k3 x* g3 u B麻煩前輩給我一些指導,謝謝 0 w# Y- ] Z1 N: A1 r
# }$ [; @, T b0 _3 K( N3 B/ B2 F; E3 O( s7 z) u- k. P) F
.model small- V0 u8 V6 a6 @" D
.386p
0 \/ G. N) A0 m0 F' }; j;------------------------------------------------------------------------------------------------
& F! p( ]/ T; s; fDSEG SEGMENT USE16'data' 7 n, X, U8 W" M, I/ j+ }1 B
! A# B. t" n- W+ _9 z; @. s% A
DESC STRUC5 m+ s4 b- t% S( S4 x8 l
LimitL DW 0 * T1 T/ m7 y' ]" I% B
BaseL DW 0
" [8 H# T# ~" \+ c1 [" L* [ BaseM DB 0 ! `1 E. ?; m0 m6 X8 n9 u
Attributes DB 0 ! T" y. r) s# v4 L. s9 c+ Q5 C( D
LimitH DB 0
7 |% t" h+ }6 l7 F BaseH DB 0
3 Z2 Y3 U6 i0 S# x# eDESC ENDS
# u+ t: ^1 W2 Q# z8 l: ? O' N# z) L" o: q
PDesc STRUC2 ^2 b; W9 ]8 D/ I" f7 j: ^( j
Limit DW 0 9 T* K$ }+ F- \+ E/ E0 {+ O2 b+ H
Base DD 0 % r. E$ Y* B v: f1 A7 R- i
PDesc ENDS7 J/ b' t) U; |' Q4 r( p% r+ x
$ `- j p" L! |GDT_def Label Fword9 {- f4 o( m/ `3 L, o4 C
Null_Desc DESC < 0h, 0h, 00h, 00h, 000h, 0>0 {$ `; A0 p+ o* J8 l, n, K+ ?
Data_Desc DESC < 0FFFFh, 0h, 00h, 92h, 0CFh, 0>
% V1 j k. {! q8 xGDT_Addr PDesc <$-GDT_def-1, >
% B; U2 h# h& J1 ^
n& w5 F4 p( @" h1 N' H$ Emsg1 BYTE 'The Input Address is '
2 u+ i( H$ o6 R5 j9 N% mmsg2 BYTE 'The Data is:','$'
+ {. s, V5 Y% H( x: i4 K0 A/ G9 l. h
DSEG ENDS
- ` q* P3 O+ p7 }# H
8 c% }4 L9 j) W' C0 b2 Z+ \9 a' b+ ?8 f& B8 m
;------------------------------------------------------------------------------------------------
1 Q* l2 ]% h0 f( A4 u/ L T
- R7 j. k) P6 t2 L- N/ E. @ASSUME CS:CSEG,DS SEG
5 e- m8 t% s3 w/ U+ O- U) t* ? r( h6 A# R, y9 C; H
CSEG SEGMENT USE16'code'
" H# H8 `$ V; D. S
' H" T( r! }. v& p push ds! {0 `3 z* F3 p) e/ L8 v* y7 x
push es5 m5 g5 n/ s: N) s* ` r1 X
push fs/ X- z8 T5 s$ Q1 i6 T0 c* s
push gs9 w' m v; v- T# s
_3 O$ V' g: U2 o2 S0 B8 @ call big_real_mode
4 f7 ^2 W" w# {4 k. f+ y, W$ |9 U, I: X8 Z, h/ s
4 r( r& ~/ V" g; b$ j
mov edx,OFFSET msg1;; r& q! w% S7 T+ v( ^- c
mov ah,09h; 2 _; E4 L% |- ?+ B8 G2 y) c+ ]
int 21h;
8 a; T" H4 H4 r# m. e) X- X. { mov edx,OFFSET msg2;) H! l# Z# n3 N
mov ah,09h;
4 {. r( Z' y+ Q! ]5 F1 s5 L" [) W2 n int 21h;
" a7 ?# |/ ^1 J Y+ |4 @9 i % ~, ?8 }7 E: r9 z0 k
call PSP & V$ {6 o9 c& p+ x; r" B7 v
( J& f. }- G2 _7 U E/ }' Q# {- i call crlf
" C! f2 d0 R0 \! I! K
4 F( k6 {) T b mov esi,ebx+ n" a5 K# M. ^) [
mov eax,fs:[esi]
% |( p+ i; C; c: {/ X out 80h,eax) d# P( j9 |- _/ v
mov ebx,eax
9 E9 k0 z0 B" V! b call _8bits
- H$ c4 R* E! G2 w" x9 b
/ e3 m% z& x; ^ call real_mode
2 a$ k" C% J: Z5 d ! M7 Y' W* Z6 c0 j
pop gs
, w. Z' p6 l: Q5 l* F( _ pop fs
0 {6 u% P. @- W& U* Q! C- J pop es6 f) z5 U5 Y9 \- p/ X2 Z
pop ds
3 m4 U# l, i) p: w) P7 D 0 L3 t$ G A0 S. A6 g# {
.exit
- x, }4 m7 b* ]" i; S# }4 W;------------------------------------------------------------------------------------------------: \! u2 b# ^: O4 l
big_real_mode proc near
9 x+ q+ B, \' e$ Q$ O in al, 92h4 a' s) e0 {! ~# `$ |
or al, 002
8 l% ]' t# ~% q0 W3 [ out 092h, al" |* j9 Y. L+ l9 ]4 ]8 Q
out 0edh, al5 w e9 F6 m+ J7 s" H
cli
3 p/ w+ X2 k1 h' J6 O7 T mov eax,DSEG$ I. l7 ] n: |! u' V6 X& |: r' |
shl eax, 4
6 z$ q0 B2 H" ]8 D8 T xor ebx, ebx
; q( {& H, ?$ @ mov ebx, offset GDT_def3 g: k- ^* q, F+ z9 d; ]
add eax, ebx
9 l* q* a N8 x3 i) A mov dword ptr GDT_Addr.Base, eax
0 H5 f4 y; m5 b- j5 Y lgdt fword ptr GDT_Addr- V( ]( s, \% z) B& q3 L8 U
mov bx, 8
& ~4 H$ X- ^( _4 `2 Q+ m* O mov eax, cr0
0 v5 ~( a3 c- O5 O or al, 1
# U$ y x% _3 @1 ?! g1 \; ?2 w mov cr0, eax6 v6 i0 D8 d' o- V. H
jmp PMod
/ C- {3 ~# r5 xPMod:' Q+ b1 z0 ?/ p
mov fs, bx
" U( k* ~5 t* }3 n7 {3 B f2 v% | mov gs, bx
/ q8 P1 v7 B, v+ @$ |0 J mov eax,cr0
8 b. z S6 o1 \6 c! x: |8 M: j and al, 0FEh) ~, l9 k! z( f; G6 h
mov cr0, eax 4 j- e" w4 O2 N8 f* m0 C
jmp RMod& K" r5 P H( [+ }
RMod:
% L6 h( ~0 X2 ^- ]8 w" E) H xor ax, ax
# S. |6 G& |( }" C+ S( ?. e mov fs, ax
+ {+ K& k! A6 P5 Z. |( b mov gs, ax9 C. d7 N* M3 C
7 f3 D3 x4 z8 N% X6 O1 ?3 h
sti, p1 E* m" c. N( {
/ N4 p( Q) f0 u. `4 T& ]0 k: k ret
$ N( W5 x" C- rbig_real_mode ENDP
. Y* T$ F9 r: M2 \* f3 Y% J/ q;------------------------------------------------------------------------------------------------" u+ V, T7 `$ Z, V/ Q
real_mode proc near
& t+ ~3 W4 j8 M9 u5 w- C in al, 92h
# v- H" @- H/ P5 O and al, 02! t/ C1 O. S1 l8 o, i' E5 G
out 92h, al
, l4 _/ S6 g1 ], p& ?) ? ret
f' \: u8 c d: F$ Jreal_mode ENDP V2 K4 ~# I, _! {
;------------------------------------------------------------------------------------------------
( ^; ^, M; r' R% r! e! x9 oGet_Commandtail PROC near
; \+ V; d- ~6 k7 I+ K* x; } push es 2 b/ T; \* x4 ~4 A7 M6 n$ U
pusha
" h e6 b; i/ @7 C( O mov ah,62h / F' f# h8 k; a; h
int 21h8 A# E1 [& S: D6 U9 ^: A0 [- J {8 ?
mov es,bx; g! C+ {9 `9 _$ V* D% G- N$ U
popa
* g6 ]: b2 h+ K pop es
- b9 C) z& [1 W& z/ N7 \ O, v ret
( O) |& I1 N& p; l7 l3 K8 B( dGet_Commandtail ENDP
6 \4 g3 G Q6 n9 D% Q0 I;------------------------------------------------------------------------------------------------
8 R# J3 _, p) u* p, ^* IPSP proc near$ F; ]* a9 Q& N' c6 M, J A
mov ah,62h
0 ?# n/ l% w8 F: c& { int 21h3 ~/ A& b6 v8 o( @
mov es,bx / T' k3 A) j" L5 ~7 t: B
xor ebx,ebx
* T; e# W% W* {+ `: j( m mov si,82h
0 C4 L% b& ^% k+ f5 X mov al,es:[si]
% D. Z: P7 W3 U1 i! E' C call Change) E, {/ P0 @& \9 E1 A9 l' r& C1 }
mov cl,4
) b0 K4 L6 y" Z A( k shl ebx,cl8 C+ ?( F+ l/ h. X* I# G
add ebx,eax
& q* X$ v# R6 L! K0 J! a mov al,es:[si+1]3 f1 U4 x9 W% m
call Change* v* r. f- x. G9 @/ M) ~/ K* T5 e/ }# u
mov cl,4
0 M1 V H! K( G9 B( G shl ebx,cl
0 h2 b3 {, K2 Z& j$ a, w" Y9 e4 W add ebx,eax$ c; L8 N4 Q: Y4 c4 D$ m/ }
mov al,es:[si+2]
f7 j/ \8 `0 h$ a9 B call Change
7 q( X6 x4 s4 ` mov cl,45 P X/ @) i# Q5 g1 [" X! \
shl ebx,cl& p. O. u& m% ~9 s9 s* |! X- _7 A
add ebx,eax
/ R5 d, _4 [5 s9 }! @5 G1 k) Y mov al,es:[si+3]0 P4 @4 H+ J: z0 f7 c9 b- L
call Change
- j3 x" q2 H6 ^6 @. ?) n mov cl,4
/ r: n' e& u( o shl ebx,cl% g# _& A) A7 O! J. p* f
add ebx,eax/ g5 V! v; d/ G: G( H8 Z; r2 T
mov al,es:[si+4]
* D& ^ a3 u- ] call Change0 @# z5 n+ Y/ ^ Z* ~
mov cl,4
) D; G; N! ]+ [: C6 I7 E* b shl ebx,cl7 m0 n. a( h3 G6 ?
add ebx,eax
R s/ E( e1 J4 G7 W mov al,es:[si+5]- R& H- W5 x" {/ n% B/ Q
call Change" e! I: f" h+ n& ~1 B
mov cl,4
4 o. J% z1 U5 j: N0 |, f# p* m" }" z shl ebx,cl# ], `; p+ d2 L/ h6 w
add ebx,eax
) @3 c# s& j+ f3 T9 F mov al,es:[si+6]
( `; [! H) G( Y0 V call Change
. a( H+ _. p* q; L% Z" G% M9 m mov cl,4
* E" e- _6 _; t+ m# z shl ebx,cl. ~' R1 Y; p' c
add ebx,eax# q) f* y# R0 ~! R: f# O
mov al,es:[si+7]
/ Y6 x. i7 f% [4 F' t. F3 F! ~2 l call Change: Y3 f* a- h( j) q- s
mov cl,4 o3 m k. V& c; c; K# C
shl ebx,cl
4 N& M `8 b1 |' ?- W add ebx,eax
7 b7 H; p; R r6 B; s8 U ret
% @$ J# I2 X" `& d$ j! ^9 D$ r2 |& J) S% KPSP endp7 T5 u4 |$ }6 m! |; s
;------------------------------------------------------------------------------------------------
4 M M$ c# d7 sChange proc near$ i; Y7 h+ T5 Q
A:
. {. b3 x/ l- { movzx eax,al
0 R2 c4 e: V/ S, ` mov edx,eax! j* n2 e4 Y3 Q4 E7 [# V, w
cmp eax,'0'
3 ^* V0 m/ }1 U4 _ jb A7 t* y& C, J+ j
cmp eax,'9' 9 i; S( d5 j' {9 K0 R: g
ja B
; l" z$ ^* |. g5 l: g5 g sub eax,'0'5 N7 r$ ?. d, g Z
jmp short E5 M. f% C# O- k- J
B:
& e' u8 g. N/ T4 |* C& G6 T and eax,0dfh & X- w1 c4 w% t
mov edx,eax
, ]- R2 f+ i6 a0 e/ b sub eax,37h + C- s& R: R. x' _
cmp eax,0ah; g6 w7 j" k& b. B4 f# l; N
jb A 0 r6 l3 k( x" G% \2 C
cmp eax,0fh- l1 u: P7 G8 v) |( m1 l1 u0 F
ja A
' @8 B) v' H7 S+ j/ s9 ~9 m1 tE:6 g9 E4 J% G: P. {* D' [$ u) U
push eax
( R; K0 S. @1 D call PRT 5 g; J/ J( v$ l
pop eax
& W- \. I( u& ^1 I; V7 oCExit:8 P( d% y1 [. J7 J6 I! E" K
ret
& M, ~9 ?' ^; T- QChange endp
- q+ g1 t/ X+ }' Z4 ^;------------------------------------------------------------------------------------------------
) D' [" _ R3 R" K% nPRT proc near# ^9 I3 a6 h9 q2 P' h. D
mov ah,02h8 ^8 G) v1 L. L1 s+ W) Z/ C
int 21h
$ z* ~. u+ a5 H ret( z- V; {- |( w
PRT endp
* g. n K4 \* @% o5 B;------------------------------------------------------------------------------------------------& t0 d* l- z( h3 v; q2 B L% R
crlf proc near
7 C1 P' ], Q- h1 `2 n2 r mov ah,02h2 a3 N+ a8 D4 y2 O( X* l/ ^
mov dl,0dh
( f2 ` {7 f: b* w) a6 p int 21h0 f$ R+ X0 A$ E9 ]* E
mov ah,02h" W' {* r, V$ E2 V A9 B0 F
mov dl,0ah
$ G/ e# u- S7 I3 @8 I9 A int 21h
- C9 A& B1 ?& Z0 W# z% N% } ret( d& z7 G: o/ F9 {( t
crlf endp
, |4 n+ V" i% a6 y. h6 L# y1 _;------------------------------------------------------------------------------------------------2 G; J( M* c7 o. {# D5 H1 M
_32bits proc near5 F+ s! b0 @. S8 \
pushad9 a: c) Z4 V* r* v
mov cl,4' C/ ]/ o( q" q) m4 R% I! ^, d
rol ebx,cl
~# w' e! P) S. ` call print_4_bits
6 d. U- G% S5 T( |) N+ m4 D3 x rol ebx,cl0 W3 y- x/ s, o& g! h
call print_4_bits
g: }" v% @2 Q( Z rol ebx,cl
% n8 y; U) J; A0 s6 x call print_4_bits: _; P P O5 k; v* L: U% |
rol ebx,cl9 f# k4 h9 t. k5 w3 t& B7 w
call print_4_bits
: x: P5 k1 m% f9 ?" D {: K4 A rol ebx,cl
3 ]5 i- s {5 w9 P7 r9 r4 p call print_4_bits- C y: f& |. b+ i& X( C4 _
rol ebx,cl
# \. c) Q+ j0 T# b6 S call print_4_bits$ |% a0 Z4 z5 t% p$ |
rol ebx,cl
$ [, s2 [6 r r* C! k, Q4 B% m3 l call print_4_bits
- A4 g% Z) A" S+ p" O1 m4 _1 f5 Y rol ebx,cl' c" h% N4 l: Q1 j
call print_4_bits' P( n6 o! L& A3 e7 n3 P/ t& {
rol ebx,cl7 A0 T2 Z- l9 R+ C! J6 `
popad% T, h, l( l6 }3 ?4 F
ret
' O8 x1 x4 ]' ~# ?_32bits endp
% B- y4 ~, y. `$ ];------------------------------------------------------------------------------------------------+ H9 [2 D- e+ Q2 e3 B. D4 u& S: y) ~
_16bits proc near
+ W# L6 o+ P& F. Y# [& h pusha # y8 x8 f9 n% {7 z% H* G% S4 x
rol bx,cl- U) v' d. B5 v: [3 d5 x& Z' X
call print_4_bits
: D% |0 x0 {* @2 U rol bx,cl
1 O$ `+ j2 q# B4 X- e9 z call print_4_bits
$ C0 j! d% J! Z6 k8 x1 l% G rol bx,cl
% A g5 @4 ~9 q call print_4_bits2 h" |- X' R2 z
rol bx,cl5 ?0 k9 U5 z+ ]; S2 g
call print_4_bits
& ]* e4 p& O- O, L2 S/ [5 n popa8 q8 {4 [: W% @+ [# C7 |: F
ret9 {' z+ a: U0 m) H. m& n
_16bits endp
& @ b6 Q" O/ m: t: O;------------------------------------------------------------------------------------------------
9 j. I# |% |, L2 G_8bits proc near
6 e$ _: N" y) W, X9 {! u: e pusha
# S O# e9 i' c. t rol bx,cl" C# W0 J+ e) c' _! `
call print_4_bits$ a8 P. y% h1 c% s7 I {6 e' Z0 j
rol bx,cl
2 V) I8 T' X: Q: [" b( v* R call print_4_bits
( N9 Q. s/ t" U' q0 L' [/ ~2 O popa
- d' A* T/ f, Z: l ret6 g; z2 B! J+ r7 \6 R& l
_8bits endp
) R% Z( [* X' o4 P;------------------------------------------------------------------------------------------------
6 k/ x) l5 o8 ?# c% aprint_4_bits proc near t+ S/ j1 V* C/ e
mov dx,bx% m3 z9 w9 l U5 ?0 ?9 W0 x
and dl,0fh4 m, p8 `8 y& ?/ b, y
add dl,30h- ]. ~* B- b; a) U* T8 n% [
cmp dl,3ah9 \' t. N2 Y1 m2 l, V5 z0 B
jb print
: {8 e$ b! t* ]; @8 @3 } add dl,7
' n# Z! I/ A, B! t$ iprint:
7 b. T! t0 [ q9 ? mov ah,25 B; z1 W- a( v+ k7 p! T# ~
int 21h
4 L2 p% L! j! Z* \ ret
3 S2 |, s4 I9 M) Gprint_4_bits endp
, a# O: R4 t: [# s6 I- k" l;------------------------------------------------------------------------------------------------
% ^: O4 f: f3 t) J X5 ~CSEG ends
% p" i1 b# M, J8 E7 i& k6 BEND |
|