|
|
各位前輩好,以下的程式為在 big_real_mode 讀取記憶體的值
" j2 }" W; W6 G8 I% n- k7 Y( E5 B5 R# U! c
例如: C:\memory.exe(程式檔名) 01000100(Address)1 x ?& w5 t! S
u/ e. u9 k7 k5 z
則會顯示01000100位置的值7 t$ u& K7 b% g2 Q. q5 V. K1 P/ k
( ]$ \( {: K) g) i' @
但是我另外還有要顯示出字串,但是顯示出來都是亂碼
' ~: L; Y& l8 z' D/ M
. n8 }' c( R( A# e麻煩前輩給我一些指導,謝謝
3 s0 Y' D' A: i+ C
5 v+ s8 E( {5 C$ @% z7 v" q$ a8 k
5 Q/ W# e# |% J.model small
! g5 A( U+ j! K3 L1 s8 V- M.386p
7 R2 k9 v$ m+ B }6 n7 w" w;------------------------------------------------------------------------------------------------
' I8 p) Z$ C* }3 O6 ~DSEG SEGMENT USE16'data' . c; k, S: Q8 P, v- n/ a9 F
/ b" [5 k7 h% LDESC STRUC' T! q8 Q1 @- d7 r/ V) B; V
LimitL DW 0
d. G4 O9 [: k+ L' D$ ~. \3 g! d" O BaseL DW 0
5 O$ W3 }# K% e" F* L& X% P BaseM DB 0 7 Y1 Y W' F, Z; P
Attributes DB 0
8 [, N" I3 B0 X" p& A" q LimitH DB 0 , l+ V) ~- @) a$ e. K
BaseH DB 0
* C; r8 e6 u1 n7 Z+ hDESC ENDS
# Y$ A/ o Q% k: o
& d( d; b5 A, j; v; }+ A$ iPDesc STRUC
1 d9 p! s/ |) H% s6 D Limit DW 0 ) s4 s) y; d; ~( j2 h
Base DD 0 6 M/ S) x% W0 ^. E* K/ w
PDesc ENDS
" ?9 Q* Z5 [3 y- Y2 p, V* h" Y9 \8 l+ ?5 m5 A, Z$ d
GDT_def Label Fword
8 j# g& G5 R. O1 xNull_Desc DESC < 0h, 0h, 00h, 00h, 000h, 0>5 R$ o6 K1 ~# T9 z+ a. Y. d
Data_Desc DESC < 0FFFFh, 0h, 00h, 92h, 0CFh, 0># D# `# l4 h; h
GDT_Addr PDesc <$-GDT_def-1, >
* N: X1 p% H7 m! r4 V) {# ^6 u7 [, b: y
7 J. ?, R8 S; W3 ^! \# E1 Cmsg1 BYTE 'The Input Address is ', o2 B2 j) k( y, a1 H6 T
msg2 BYTE 'The Data is:','$'2 n/ T# [& ?$ { }6 x9 `, p
. C# F# P6 X8 s9 \( _( [
DSEG ENDS8 U6 U& `" Y3 H
' H' D3 q3 x9 _ ]+ R$ g
' I5 d6 p3 f- b+ |;------------------------------------------------------------------------------------------------ / {! P- _3 }2 e8 l8 c
/ c* a/ G/ W& \5 AASSUME CS:CSEG,DS SEG
4 M, l- M9 l/ j) ?! R# N' j
' i$ b7 w/ B. q5 u% L+ FCSEG SEGMENT USE16'code'
' A0 y, x1 Z1 `( }1 U
% c+ h' g6 D, ? push ds& d5 ~/ s) t" j; I
push es, w) C# U( I: J* f" B* w
push fs
0 s+ ^0 u6 v1 }- |" @; z8 R' { push gs1 [9 R5 a5 c5 F
( K I% Z' _+ ~8 _0 {. g6 ` call big_real_mode
- O1 K4 {- |9 Q5 {4 n8 \
" }( }6 x' G0 t5 D8 M4 c : L& F4 k! u; A+ O+ \
mov edx,OFFSET msg1;
+ ]" R" {. F) Z$ h% D8 S mov ah,09h; 3 y9 N4 Q& p8 q& F- e- h# q
int 21h;
* i& g9 b& i6 K2 {/ M mov edx,OFFSET msg2;
7 ?. t' u7 q W5 d9 h- f2 v mov ah,09h;
- K( g, P- M" F/ E$ d/ ^# i& a3 E int 21h;* \ j! O4 _$ u0 p$ A
7 x* Q, f/ ~( h) f4 V
call PSP
* b: C/ e- S: `9 u: j - k9 S7 [6 [! \1 i. \
call crlf I! ~# g9 ]" z. Q
) h# c. ~" U B+ D8 d/ M l3 }% ?
mov esi,ebx
' d0 q( f7 r) G% V' b3 F mov eax,fs:[esi]
& E) }+ U E- h/ h out 80h,eax2 z, f1 m0 \, D
mov ebx,eax
8 c5 [) G3 a6 U3 @. n1 s call _8bits
8 E" m" a$ [ E
2 v* w) T, i& f+ m# B: L! B call real_mode
. S* W4 `: _( ^9 P
) }+ j% g; L6 I a pop gs
. h3 L; m1 E6 t* h. Y pop fs
1 y" g, `" d" u+ K2 i( c! y: k4 _ pop es: O/ L9 |" _# D4 Z& m
pop ds
$ n; b+ d3 W0 b% `- Y 5 M* ]/ m: o {# [; |0 A
.exit
7 x9 U0 N+ P* i( X3 w;------------------------------------------------------------------------------------------------! ^. D( m, M8 z' A% T" Q* P
big_real_mode proc near
4 E [+ ?& N7 m7 T5 `" A in al, 92h# Y* l( \/ v5 g! a9 O
or al, 002
1 G# K0 Z" ]& j/ V& ` out 092h, al
2 A! u0 ^% L7 {6 Y, s5 g+ g out 0edh, al
! {8 R: W$ W6 ]7 t0 ]# C+ O cli9 N- e# N7 _5 E" l! W
mov eax,DSEG( n$ c0 N0 R7 q2 `# D
shl eax, 4, i3 T |* d2 h' f/ l
xor ebx, ebx' T# l A! n O
mov ebx, offset GDT_def; v- |% ~' Y" W. ?* @7 A- d
add eax, ebx4 w! R; V" T8 X8 U- Z3 H7 m
mov dword ptr GDT_Addr.Base, eax" F3 P5 k% m, N( J# n) v6 f
lgdt fword ptr GDT_Addr: p, L. f; v7 \, D2 k5 N1 F1 n
mov bx, 8
$ O- Y i; t7 f' h mov eax, cr08 m3 b- e/ N3 h' A
or al, 16 ?1 F% u4 [3 w1 y) n9 k4 w
mov cr0, eax
$ G o& o& K: ^8 v jmp PMod) m$ ^: J2 N! L: S8 Z8 u$ f
PMod:
" e0 Z' T# x3 l6 @ mov fs, bx
7 e- d- |) y. p! L0 V mov gs, bx) n8 O. E# r; D2 V2 g2 p
mov eax,cr0
. ]/ U8 j( E& q and al, 0FEh3 {* j: P& G0 m9 T; L4 h
mov cr0, eax
2 K6 I3 v1 m2 ]/ ^ jmp RMod1 Q0 m ~0 r z4 k o0 `+ Q( _4 y
RMod:$ t7 b/ v. ?/ M/ u4 z; ^% o- `/ f
xor ax, ax& q! r7 x9 Q0 w6 `3 E* o
mov fs, ax
, [& @- w2 ~2 c2 X8 d mov gs, ax, {9 I& x/ ?9 h
7 X0 v9 H5 _# v& J sti
6 F' J" @8 Z" S# Q" v
. C% v7 t9 x+ z8 x6 \ ret
! k8 i; K& c o3 ]. ^* U. U0 r( obig_real_mode ENDP" ^$ z7 p6 I% W$ b0 K
;------------------------------------------------------------------------------------------------8 a+ _2 `) N0 q+ `$ I+ O
real_mode proc near
& T$ N3 Q* E) ]4 d. _ in al, 92h
6 ^" R& S& |0 F) B6 l0 J/ o and al, 02
( y; d, S( ?1 ^; G3 v out 92h, al
$ i4 T6 F0 u# Q ret
) B: a8 g1 x6 E! W' c' F8 Yreal_mode ENDP
# t* ^7 o4 |( \9 G) n7 J;------------------------------------------------------------------------------------------------
2 i( i* P9 t' u' p. ?' t4 cGet_Commandtail PROC near' \: A3 x! c' ~3 H- Y! c9 V
push es - c8 X. R3 @$ i8 [! K5 ?+ a
pusha. O, A/ e( }; z
mov ah,62h / o/ J- i2 r( \% f* ?7 l
int 21h
2 [! ?% N( ^# E5 N mov es,bx1 J( |/ r; L1 [3 ^
popa
$ A- o" l; N p- n" B4 N pop es# ]; S+ h6 E6 F- Q0 ?
ret* N# K7 k/ V& `1 s2 b% [+ C3 B# O
Get_Commandtail ENDP
. r2 k% h! [: @3 [& V2 s;------------------------------------------------------------------------------------------------4 f5 u- B' L* D4 \' |
PSP proc near" g' p* ?9 t* H! C1 a3 E+ |% W3 a/ ], W9 w
mov ah,62h8 S% z4 p3 o" A! O2 Z7 i
int 21h
6 A' f8 G8 S8 z, D mov es,bx
& ?9 k: H4 G) T3 c6 D! Z xor ebx,ebx2 h7 ?0 f8 q1 V" j1 H
mov si,82h9 w2 ~- a2 q" J" {
mov al,es:[si]
/ P( m7 c7 n" |6 O call Change7 t& @7 G, c9 p1 b" W& M
mov cl,42 Q- c7 T4 D/ h
shl ebx,cl
- `' S% q: E* J add ebx,eax# b7 I+ \7 H( |7 P* g! @
mov al,es:[si+1]3 K! ^* Z" k, L, q
call Change
8 b9 U% [0 u: ~2 ^$ R3 b( u- m mov cl,49 {! q" [+ {+ e4 _
shl ebx,cl. ]5 ]: q9 h7 N" }8 `( B( Z' m
add ebx,eax& b9 `/ z( J, Q7 V; D$ Y
mov al,es:[si+2]
% x) i- j9 w$ P call Change+ Q1 Q. ~$ f, x9 R/ O: }
mov cl,4
5 M4 v B9 b& s7 S shl ebx,cl( R8 K8 @. ~2 T3 Y" _3 R% a
add ebx,eax
O% Z; s8 G* O! ]# d i mov al,es:[si+3]
1 L$ W# i. R2 V+ ?1 m7 N4 \, o call Change
3 Z) A2 _9 ^* V L. H. { mov cl,4
, l! e% }8 j9 ?: L shl ebx,cl* b* c) B: o' p: S; j
add ebx,eax
/ V( u" u3 S' t" y1 S4 }5 h3 a mov al,es:[si+4]. ~% J4 k9 Z* x9 R
call Change
' r/ h* z& a( g/ w5 o mov cl,4
- i, I( w) `, ~0 l7 O4 t) v shl ebx,cl
* r6 u1 w7 J2 e2 K# p add ebx,eax
) l$ G8 N1 S8 _. N6 y+ N& E mov al,es:[si+5]+ s/ t$ _* L; b
call Change1 T' K: C& Q9 D* f# y* z! q
mov cl,4
, W, y# c5 c! Y+ Y shl ebx,cl. e) D5 b8 C; E. V" B3 W
add ebx,eax: W5 [( C+ s) g: J0 h" b4 ^
mov al,es:[si+6]
9 _* A( h' w+ Z; z call Change
# V. k) U6 n+ {+ j! w8 I V mov cl,4
* F) ?1 E, c2 C4 B" F shl ebx,cl! o4 w( ?9 u7 y: a
add ebx,eax* D* [2 W7 r. \1 y: i
mov al,es:[si+7]
- i9 x+ s6 d- z& n% s2 y% F call Change
/ `& v3 F" x5 T5 `5 a1 m4 U" B4 N; p mov cl,44 R7 w+ d& `2 a# f! F
shl ebx,cl% ?8 g/ Y" K5 s$ h4 t
add ebx,eax. y- j3 g J& s3 a+ y5 Y: [
ret
5 O# C+ p5 B2 v* i5 @" {& HPSP endp
/ h7 v' I( Z' H6 O5 @;------------------------------------------------------------------------------------------------
* N1 P Q4 W: i% H, z3 CChange proc near! m p# g% i6 I1 q8 l; O
A:
3 h5 D+ R5 K+ x, Y0 C! } movzx eax,al9 j" n0 Z: b1 r9 x$ L
mov edx,eax5 q4 l, `* i E6 x
cmp eax,'0' * k7 P0 ?3 w# @( x2 ], Q' q
jb A, `# S8 Y6 ?# {! i8 q
cmp eax,'9'
d( S+ z: D- b ja B# v% N$ |7 ~8 v% b) ]
sub eax,'0'8 Y7 H, ^ Y& {2 \
jmp short E
5 t7 {& }% R/ l5 c. oB:
6 R2 v5 P& o* l% _' R/ X# ` and eax,0dfh
, \% d% j. s1 T; x mov edx,eax3 _! K: O, F% @' T1 s( }" d% g
sub eax,37h " b' t: {6 d% L3 m# y" R" E7 @
cmp eax,0ah/ ?/ n, p! z: w2 L; {+ p
jb A 5 y, ]) c4 X( S" l5 x* n
cmp eax,0fh
" ~0 N0 [8 n# h; L/ Z; c( |) \! k ja A 9 W7 [, z" c" G3 M
E:
& ^; F" A8 L# }3 e# E push eax
6 K. Y7 d8 e* U" T2 V: a call PRT
9 r7 j: F( a) l3 P; ` pop eax' i, ?/ }; F2 H% G I/ M
CExit:
8 E1 v' I9 ~% ?" U6 o- w7 ]- y' C ret5 Y: G% |: r* B: y. A' r+ G& r$ M
Change endp+ i2 C- _" f, u. o- M3 a* g2 p
;------------------------------------------------------------------------------------------------
2 W( l" m/ n3 x+ X$ y ~0 [- L7 QPRT proc near
! L3 }. h: m' e: j( y mov ah,02h
6 U, w8 N0 f8 W( ` int 21h) Q7 Q z# @/ ]" V$ v
ret
. D' N2 q7 I; J! MPRT endp$ D( Q- @; s% m9 Z M
;------------------------------------------------------------------------------------------------
+ f `+ o# m0 T2 Dcrlf proc near" U6 {) V$ v$ S* Q
mov ah,02h/ ~+ ~ {! {# {/ w8 t
mov dl,0dh$ h4 ^; R5 f; T' d/ p
int 21h. B& L. e; j9 L# L4 t
mov ah,02h
, |" U8 R" v* I8 `' U' X mov dl,0ah
) Q& V9 w Q7 `) S4 y% W int 21h, h& B5 @2 }( d; o" K4 T
ret% d2 e& F. Y9 l! F" B& B* i
crlf endp
8 U2 G5 T) F3 `6 q;------------------------------------------------------------------------------------------------
_" U* K! t0 P5 D" U_32bits proc near' S$ J% B0 @3 H8 f: h4 L, s
pushad
# i6 F6 v( M- O H) w mov cl,4
. ] M$ m8 B1 `, J8 J6 n( | rol ebx,cl
" _2 G6 P+ j, m call print_4_bits
) W9 {8 Q1 F8 X rol ebx,cl
, ~* o. X/ P2 e7 u call print_4_bits
) E- k/ W# \7 i. \8 u rol ebx,cl
' I3 m3 W9 g1 O call print_4_bits
; Q7 @. x$ R5 E/ f& h0 { L rol ebx,cl
; N1 l+ z: I& W! k' J' H" R call print_4_bits
, g2 ^* t; E, o4 e+ K rol ebx,cl7 m$ u/ f! n6 @+ a, E: a! A) l! |
call print_4_bits: ^( W) M4 E# B( A3 t
rol ebx,cl
6 N) p0 @+ T& P call print_4_bits8 _5 w1 U5 _. l8 k
rol ebx,cl
6 N: u# p& I1 h/ K" n! J call print_4_bits+ {) l5 @% B4 }' Z
rol ebx,cl
" B% T: O% } X4 ~' Q call print_4_bits: Y4 C1 W1 g9 j. L
rol ebx,cl
8 O& ?. z* V0 t( F popad' S" D. i& d( m% ^" \( w* Q4 Q
ret3 ~) L5 }- e7 q! ^' f
_32bits endp) N6 Q9 G$ }8 B
;------------------------------------------------------------------------------------------------
, |7 Q `% ?6 n* Q) q3 [8 M_16bits proc near" M: M6 D. P2 ?
pusha
$ F' @. H9 [$ G4 t% o0 E rol bx,cl0 H( B; k0 B$ M; M" q! e
call print_4_bits
& ^/ Y& X7 O7 @$ V# L rol bx,cl2 O) c( n$ c: u, P
call print_4_bits$ G$ K5 _, Z7 V4 @/ D4 R* A. D% p6 w* X
rol bx,cl
2 }% l1 ~. D: i7 X8 g5 E: J2 Q call print_4_bits
1 P P% g: e/ z' ]# s) x0 Z4 `5 s rol bx,cl& Q3 a0 {$ P4 w, p) z
call print_4_bits( c M4 k' C6 d2 ?
popa8 V) l, e. |* Q. N7 F
ret, ^ I7 N, Q/ o$ f2 C% s2 I5 f
_16bits endp
' p* Q4 B: A+ x;------------------------------------------------------------------------------------------------& e! r; s) }# E# z2 r( s, A2 l
_8bits proc near, ~- V1 s+ d3 M5 S
pusha
+ K; ?( l: X- v1 B( F7 m+ \% }! |% Z rol bx,cl
: U6 u7 e0 H- n/ A' z call print_4_bits
. ^ q2 B0 p7 M8 C( A; t `' U1 O8 j rol bx,cl6 X9 k8 u9 f) o; k) k$ C
call print_4_bits2 R) P8 L( s# x3 ^+ K- M C
popa4 O. B3 b; p- x/ b" P% ]
ret
! J4 t, O5 D( Z8 U_8bits endp
9 H- j! E+ d3 q) G0 O* k4 c+ t;------------------------------------------------------------------------------------------------
2 W) T5 z* l- {% u6 a6 yprint_4_bits proc near
& d, e) ?/ f6 b) b mov dx,bx/ X7 `1 q! e# l8 b! _* l% ]7 ~
and dl,0fh* ] B& X7 J+ P
add dl,30h! P2 _! X' ?$ J2 u: h* J0 H, J
cmp dl,3ah. e1 ^* i5 \8 I( ^' t+ Q
jb print3 D |, D: a3 `* l" u( o6 f5 A
add dl,7! u- G. C# n' _! s6 V& h8 q/ K% L7 u
print: 3 d: `8 e3 x# ?8 U
mov ah,2; @7 o' h' c4 ]+ A7 D2 }
int 21h2 I/ L' Z+ ]. J) X5 j9 }% _
ret, D$ \! y3 W6 ^' l
print_4_bits endp * d# C$ p8 r9 y: @1 Z( c5 R# ?
;------------------------------------------------------------------------------------------------- e* n F! s$ H/ u' @* B! l# u. Z4 h
CSEG ends
1 L9 ?& x9 c+ H3 W/ ZEND |
|