|
|
各位前輩好,以下的程式為在 big_real_mode 讀取記憶體的值. s& B/ F& P8 Q/ B4 }9 G/ H; ^9 E5 W2 v
5 I1 k2 ~/ w2 j& L! H: w, Y4 S8 L例如: C:\memory.exe(程式檔名) 01000100(Address)& P% D3 A9 |; `
7 i/ c }+ W7 F# g則會顯示01000100位置的值
% \5 O3 w$ h' X) z# g8 A
6 v# O: S1 D) P- [但是我另外還有要顯示出字串,但是顯示出來都是亂碼
% |" U5 e. o) s6 z% e) B+ n6 i6 O5 z X8 V+ n& z0 @
麻煩前輩給我一些指導,謝謝
0 M2 B" _/ @ P z% L: G
- X: ~8 Y1 ~. z" T! d2 k2 E+ p5 D$ a# i: o* H# O+ }
.model small
* n5 O2 ]) M. w p.386p
- ]7 \( R& Z) e9 L;------------------------------------------------------------------------------------------------
- W; L6 A9 e% d8 t) r3 SDSEG SEGMENT USE16'data'
! h! V/ P) q4 ~7 t4 F4 J
4 r( F; I. ^7 Z0 BDESC STRUC
3 z4 M/ `9 Q1 j2 O3 S6 ]% P4 w LimitL DW 0 7 N, x; H$ v8 G* E4 J c8 j1 A
BaseL DW 0 7 ~9 _, e, b7 D# b0 i8 ^5 Z
BaseM DB 0 3 u# L- L. H4 b0 p9 I
Attributes DB 0 + g( U! {8 n: B: X8 f# Z
LimitH DB 0
3 t. U% C; e. E, N; v BaseH DB 0
9 u2 B* Y* k1 [, uDESC ENDS# }4 N4 ~* @4 w' k2 f. |
& n, t/ R3 C" k% o3 u, C0 vPDesc STRUC
- T# V4 V0 _+ \/ ^# U' H( f) T$ i Limit DW 0 , w; q, z9 I+ _3 D% P4 I5 U- }/ v
Base DD 0 9 J; Q6 M0 T( d% G5 X
PDesc ENDS
6 s h1 _" F4 h
2 s" K0 {8 D+ \" w5 \- pGDT_def Label Fword
; I, P( A. x) r7 B3 CNull_Desc DESC < 0h, 0h, 00h, 00h, 000h, 0>. u# j/ h. E) }4 O/ w" Q
Data_Desc DESC < 0FFFFh, 0h, 00h, 92h, 0CFh, 0>1 V' ]2 G; I) C) C0 l# X
GDT_Addr PDesc <$-GDT_def-1, >, L% l# J& [& e' _" t
' S+ A' G" S$ o R4 Omsg1 BYTE 'The Input Address is '- o8 M/ T2 }6 d G
msg2 BYTE 'The Data is:','$'
& p& U/ u+ x( s* m/ T- W6 c9 d9 `$ Q7 a, c; o2 f, ?
DSEG ENDS
+ U% I9 R+ [ s5 B7 t+ Q: ~
6 n7 l- |: o/ k, L1 ^, Z+ l X/ O9 }0 Z4 ^( S1 O
;------------------------------------------------------------------------------------------------ 6 v* q$ h9 K' x; ^8 L! u/ u
2 z. j& p6 n5 p# z. }
ASSUME CS:CSEG,DS SEG
/ S+ M* J+ G" l3 s# u
/ r/ T& b3 p; S1 SCSEG SEGMENT USE16'code'
, P) F3 x2 X- a1 Q7 T8 _& C j2 C* p' @( Y1 ]
push ds! d4 l, M q* E6 {# B
push es8 N* S/ u3 W: g7 X
push fs
' W7 n' z1 F6 F: }7 Z push gs6 u) Y, _/ p" G, |
# [1 W6 g# D( ~
call big_real_mode" F; r: I3 h a4 O) v
6 ^. s- Y6 n4 }; ` % W1 d3 O& g/ v, C9 ]
mov edx,OFFSET msg1;
9 O! a# o. r# A' s% h7 ?8 P0 ~7 J mov ah,09h; + I( T- W' G4 g# ?: J
int 21h;
- Q2 c. K3 j1 C mov edx,OFFSET msg2;- [; A) k# I& {' n
mov ah,09h;0 N7 [/ \8 O/ o/ [4 c
int 21h;* ?6 l( {/ l$ \9 O b0 h) H% A0 X- T
( j! U" _' i9 x6 M call PSP 0 T5 q0 b9 l6 _, D4 F4 Q
6 G+ E9 K( b( B+ N
call crlf
5 b& o! l. f/ j; ?. K8 H ) k3 a% X+ ^* j. c0 L/ i5 U7 x
mov esi,ebx
# L. e: W* C- Z9 ~ mov eax,fs:[esi]7 X, Q. R9 P2 |! A: W3 F4 f6 q8 n
out 80h,eax3 Z% ` C, `" A4 d9 c4 V- l) J
mov ebx,eax
3 n$ V% q! w. w. l8 T# r# g G. P' x: H2 D call _8bits# _& B' E( q9 u! \6 Y, L
. _+ Z0 L7 C& _* V
call real_mode
1 \8 I) l5 O& Z ) S) B7 b0 o: t w( p
pop gs" V% s1 @8 [ a8 Y
pop fs' I) |+ i2 V6 y3 T8 L
pop es
5 E- b6 d8 a: l pop ds1 J* v. e$ `' L& K3 b
4 o, R5 j& d5 {
.exit
* D. `4 g# p P8 e;------------------------------------------------------------------------------------------------$ B% [" s3 p( @0 b, A. T. H
big_real_mode proc near' l' A5 q* \0 m7 t' \4 e$ o
in al, 92h/ I: s( F, N+ \+ e5 P* Q4 \5 a& D
or al, 002 T5 ?$ D% n- x$ E3 ^" D$ [; {
out 092h, al
7 x7 t& ~( l7 I' z. R out 0edh, al2 j- O' k+ y% Z. ?( y
cli
8 u3 u0 C8 i" s* D" ]7 P# o9 R* |4 z5 Q mov eax,DSEG: D2 }1 |& {' M, U2 ~ B
shl eax, 4
) g5 l3 r% h! D2 G2 F' ] xor ebx, ebx( B6 p0 X( ]- ]. A, U% ^- y; [) J
mov ebx, offset GDT_def6 D# r# C9 Y1 w9 K- h2 `4 r3 D6 f+ }
add eax, ebx5 [- o8 \) u+ @8 F
mov dword ptr GDT_Addr.Base, eax* A* Y! d6 w6 Q7 J. r
lgdt fword ptr GDT_Addr/ F3 r# x5 w5 I
mov bx, 8+ u" G& H) k2 [, K, I/ A" L
mov eax, cr0
2 `3 e% [' _1 f6 t4 [ or al, 1. c4 M4 ^, R: O9 Y
mov cr0, eax1 {4 q- P* r# q2 S/ L
jmp PMod
! n9 ]5 J7 C. Q0 L ]- _2 CPMod:3 }1 W" P% p+ J0 N M4 ]! G( n$ g
mov fs, bx* H* P) z1 u4 h5 b0 n9 Z
mov gs, bx1 D" c$ ]/ {: B
mov eax,cr0- P$ |) v* w8 s; I; v! n; i- X
and al, 0FEh. n: P% N! x* ?1 t
mov cr0, eax 8 y* O& Y& n( w! T# j7 `* v. U- g
jmp RMod
- w s* B* M. h) e9 F! w! hRMod:
0 t- n0 {2 s0 L( \, m" R4 z xor ax, ax
) W, X% T" Z* y! u mov fs, ax
4 b& Y, h8 d/ C+ x mov gs, ax
b2 r( u" }" O! d! q
0 w- l# u( _% B { H3 |4 o2 O sti1 ?$ z3 X0 i. c- S% O$ Z1 G
3 B$ U. B" ^$ x& f2 y+ Y" B' T
ret p9 M4 F) p% O. n+ M
big_real_mode ENDP% v; a) ?; [+ V# I( q3 j; w2 ?
;------------------------------------------------------------------------------------------------/ `6 C0 I6 G- p4 t8 _7 d
real_mode proc near) k, G2 F( C$ [3 c
in al, 92h$ U# W' Q# m0 n. x2 H
and al, 02: K4 e# B) Y/ {7 ]6 x
out 92h, al
& J7 g& a+ ~9 C9 V# |. O ret. h3 c' _0 \/ Q8 g% N7 N3 X
real_mode ENDP
- k2 S1 n. a3 M- \) ?& u7 K. V;------------------------------------------------------------------------------------------------ w# H6 c8 V% a3 h
Get_Commandtail PROC near
3 e* F+ e5 I7 n push es 5 L, d% }( n; x/ e. m
pusha3 R; B0 I$ c7 c& z# I9 n
mov ah,62h
6 {/ \* d S7 b6 l: a3 d int 21h
- T' o8 j- K4 P3 J% M* J) b mov es,bx5 X. [% `1 ?! R7 r/ b2 q$ o! \
popa % O p7 V, {2 V0 f5 n+ F; n
pop es
) p- ~" }+ m+ i2 D& Y4 L4 \: p ret1 W G. Y; {' r0 |$ q
Get_Commandtail ENDP
( v# d% D8 |' L- t+ |7 ` q;------------------------------------------------------------------------------------------------
6 ?6 j p! r3 fPSP proc near( v, Z; V, B" H2 \, S' @) \/ W9 [
mov ah,62h: t) |7 O1 H6 B3 a$ K ?5 `. F
int 21h
( N7 N8 f7 N5 I. u, F. t mov es,bx 5 M3 N3 [2 E# g; o6 d
xor ebx,ebx0 n' F8 \$ H d7 g3 @6 v
mov si,82h4 O/ s; D4 k$ N: o( M- Q* M
mov al,es:[si]
# Z' X& ?- f/ K( z, y0 T4 F) I call Change
4 @& _) n ~8 @ mov cl,4
5 S8 P: J+ T$ _+ k( L shl ebx,cl$ v" [5 B; W+ M) e/ M
add ebx,eax! ?6 w' r* p1 K1 F
mov al,es:[si+1]' [' I" B+ J+ Q% [; d4 t
call Change4 ^# A8 k/ q3 [) i
mov cl,4% T# W/ p7 d+ t/ N& [
shl ebx,cl
/ u0 ]( @7 w( f& P' M% I2 q add ebx,eax' x; X3 h+ S) f3 J) c; g4 P6 E
mov al,es:[si+2]
) L# c' g1 K1 I3 b call Change) Q, s% v6 q# V/ Z
mov cl,4# ^( m6 P* u% O+ g* t# L
shl ebx,cl
) k+ V6 w1 R+ W5 k* D add ebx,eax' P* f, a( n2 }- H; [1 \% G! S
mov al,es:[si+3]
: W* L# q$ }( f' H o+ z' O: x4 f call Change* M0 i& Q' H/ u9 [4 |: Z" s
mov cl,48 R9 x8 Z* p2 F4 b1 y! p
shl ebx,cl6 ~# F6 U8 Y+ h' o# @! ~
add ebx,eax7 V0 Y0 m. N4 n( u0 d
mov al,es:[si+4]; Q8 K0 r9 L# E2 _" P7 T
call Change3 y7 E$ l3 ~9 A- p& g H) b
mov cl,4
3 C' G, C5 X5 `: K6 [ shl ebx,cl
0 ?+ D3 g6 k2 p1 ~3 T add ebx,eax: _1 j N7 h4 f
mov al,es:[si+5]- d) N8 U) _3 I4 y' u$ \
call Change( r# f2 j- b# `! j# W2 ~ p$ C/ U6 |
mov cl,4
5 F# S8 t& X9 M shl ebx,cl. @ t2 T5 q5 R8 y9 g- S$ x$ u+ Q
add ebx,eax B4 f+ G' n$ w& b" T8 |
mov al,es:[si+6]* B1 d- o6 I) ~' f: R; o$ ]
call Change
5 Q1 e8 y- y: t2 E6 @& Q* S) ] mov cl,4
' l/ o' v! j+ f T4 c shl ebx,cl
& i0 \. _4 j) w add ebx,eax
4 |& f9 f7 p% p9 |) ] mov al,es:[si+7]) z$ ]' e6 Y* K. P/ y! ?! a* r9 r$ ~
call Change
/ h \: A2 i% |4 `. k) E; L mov cl,4
& Z6 b; Z7 t% W( c1 H shl ebx,cl7 i; o, P+ Y/ r( B- Z# c7 e9 o
add ebx,eax
2 w/ F% ]6 h' o% |! P; O) F ret& Q! M. V; X' N: @& S: C& B$ C) Z
PSP endp0 c4 M0 P4 ]6 N7 r; Y3 n
;------------------------------------------------------------------------------------------------7 Q0 P e6 O2 ]# r9 Q8 D
Change proc near# p9 j4 j- b K4 }; R
A:
. ?% }7 ]9 e# t- N& S' P movzx eax,al
0 P6 {+ i/ o0 q# ~8 j- ]. X$ J mov edx,eax4 n" j/ \1 _; P% J. `
cmp eax,'0' 0 q7 g& I7 ]8 N' v0 G8 O
jb A4 ]/ ^ T, [' R
cmp eax,'9'
5 S6 {, y/ f! d6 F+ {9 J l1 v& U) D ja B
+ {8 A/ y1 ]& I9 l% u" B sub eax,'0'
7 @0 q. c4 c( o- y/ N jmp short E
% `7 e- X8 t& e( F6 A, k" VB:: v) K* I3 o5 g4 P
and eax,0dfh % e0 Q. K# M/ b6 X2 r1 w' x
mov edx,eax$ G8 J; @. ^) F) d; B: m9 k! W
sub eax,37h
- O! g( H( j1 p cmp eax,0ah
1 Y& U" e* w' k jb A * o' o6 R, v/ B4 h* T
cmp eax,0fh
! z3 j0 U% P0 z9 f' u/ H ja A
4 P. ~; ^$ P/ A2 TE:
- F* ~$ Y" I; b push eax , V$ @5 }* M8 q5 k
call PRT ( ?; Z( Z: m Q: `
pop eax; z8 c) y9 z* p+ Y# a
CExit:: Q) _+ }$ Q) O- t, W% H
ret: N8 i* H' f* _3 X
Change endp8 X0 a* I/ k1 n- C7 T4 v8 D; |. R' s
;------------------------------------------------------------------------------------------------
/ D9 p1 |- x0 T2 {PRT proc near
- x+ E1 A" m& ^4 x, n; g/ S6 J# ] mov ah,02h
2 w. }* B+ p/ g- _1 P- f- n int 21h
6 ~2 k9 j4 n- }% _ ret
+ ~" C3 P5 u# j# rPRT endp
* y! R0 d g; [" x, e;------------------------------------------------------------------------------------------------
, l6 c. `6 |! b) zcrlf proc near" C S" E9 c5 V4 c
mov ah,02h
" K( U1 q7 }# s3 m1 i mov dl,0dh
( E, c/ C2 T$ p4 R% w int 21h' Z8 a9 J& e7 U$ `( `, V
mov ah,02h, z9 y' U3 F5 n
mov dl,0ah
8 X/ m; \ F& G, l+ S( n: E& b" S int 21h% O4 ~& v2 `) D$ v
ret
& a$ w5 v0 Z* R2 Dcrlf endp
% F: y0 ]. K. \& y0 X; B) `& r;------------------------------------------------------------------------------------------------, |3 `& y! A& M3 d! A
_32bits proc near
' f+ |4 ^0 ]- H- F& ] pushad2 p6 A! u( W$ }% y
mov cl,4
1 ]4 W# y# J1 s: x2 T( ^: { rol ebx,cl( C3 c: f# f* o9 f' s
call print_4_bits
& R6 D ]$ X {& I rol ebx,cl
2 D& f* _# A' B call print_4_bits
4 m8 `$ [1 }& x7 \5 T rol ebx,cl4 ]( W$ O; J, z
call print_4_bits
0 K2 I/ z2 d& M- z4 i& A5 i$ z rol ebx,cl$ w7 i1 R& t7 H. ]! W3 Z
call print_4_bits7 a# Q& }+ x" L2 l
rol ebx,cl
. }6 E$ W4 K$ c# R+ x, f call print_4_bits
6 U2 A K7 r& i8 v rol ebx,cl
. L1 ]* {6 Y4 F: B% L call print_4_bits
7 T2 V, n0 s' A% P1 d+ C rol ebx,cl" v8 P0 h' @! T$ E5 n9 ^2 }% R
call print_4_bits
" A4 Q* @+ Y2 m rol ebx,cl
& C! {$ @( E+ V) Z) b% b call print_4_bits6 e4 }( {: a/ ?: c$ e
rol ebx,cl
; v2 _9 g0 h, S4 i$ T5 u$ V4 V popad! z5 [7 e' i7 Q: I
ret9 j. Y: f7 x; S' t {& Q! z1 \7 s
_32bits endp
! S. ^9 i* c, H. _;------------------------------------------------------------------------------------------------, f3 C8 ]1 i" Z. l9 J
_16bits proc near+ s9 }+ |# b& L7 K3 Q
pusha 4 U- H' k, ]) D# G: p6 \
rol bx,cl% ~$ a$ o7 f% V% H. d* E
call print_4_bits
, u( P; A9 O; G6 U rol bx,cl
0 m" f- Z# h1 S1 N. n& | call print_4_bits* f0 l& r! n- S( o* X
rol bx,cl" w% L* |+ q; Z& s4 S
call print_4_bits" N& R( E* [& z4 t5 u1 e
rol bx,cl3 r, G: {; k% J8 v4 ~; i, t
call print_4_bits
( O& T7 G8 E% A2 c( ~ popa
+ ?5 r+ X" n& \( x ret
9 |! K. }0 W9 o& u* O' a_16bits endp
, ~) r5 B0 D8 l* X' P9 @ E;------------------------------------------------------------------------------------------------% e! E/ y1 u9 R2 O: w) k- _4 d
_8bits proc near1 S1 W7 G2 s0 W& i2 U$ t: B0 o
pusha " G; k4 n; s- V5 W
rol bx,cl
9 \0 S, f; M" l1 F" u call print_4_bits
' R5 c- `4 r2 Q, n4 O- D$ | rol bx,cl" e. n" E) O1 S( D g3 ~/ f
call print_4_bits/ b9 }, c3 T/ F) }
popa
: k$ ?- B( n' S5 \: T: h) ? ret
, G1 E; E* C8 s# Q) `* a: w3 v_8bits endp# P6 |$ B, K1 E% h
;------------------------------------------------------------------------------------------------
5 _- }% u5 v* Rprint_4_bits proc near
# X5 I1 U* i2 R. C mov dx,bx
: c7 [9 u0 k1 a; n) `5 @" Q and dl,0fh7 W' N' }' h+ X% S
add dl,30h
4 s, i7 y& o4 N5 a cmp dl,3ah$ X; [! {1 L0 b9 i3 `4 m
jb print; Z: V2 _4 n0 E; ~
add dl,7
3 R5 n6 x6 E2 d$ Q2 _& yprint: 1 r8 @3 M2 V; L5 t# x
mov ah,2
5 _+ U: g. W( k int 21h
" d2 O6 b; O4 A% m; k ret
1 Q; g O7 B5 I, Xprint_4_bits endp 2 C' g# b! n+ F/ q
;------------------------------------------------------------------------------------------------
9 o- x! P* N) T: Q* ~CSEG ends
$ V- e% V! _3 l2 K1 c5 vEND |
|