|
|
各位前輩好,以下的程式為在 big_real_mode 讀取記憶體的值( ^# q% Z' H2 _0 Y) f8 ? L
, O# H5 T6 S- o4 s1 x! W
例如: C:\memory.exe(程式檔名) 01000100(Address)- Y1 P; R* E' u5 y* v! }
9 e3 G7 A1 s+ T. z1 \& ^3 {則會顯示01000100位置的值1 J3 u: `- @$ X2 {$ p& L5 m) d' q) u
0 M7 `# h( U. R# d1 Q
但是我另外還有要顯示出字串,但是顯示出來都是亂碼$ d9 ~9 _% V% J( y$ q1 {
& r. Y% i2 M% d+ Z麻煩前輩給我一些指導,謝謝
* ^# q' @: p* A5 s1 V, ^" K- n3 f5 B3 p; e+ e# b" n/ d) X
) u2 ~( ~/ j0 r' b
.model small
3 {' Q8 P8 k( }& T/ R& K* G+ {2 A.386p$ I% G9 [- e% C/ ?/ N- }
;------------------------------------------------------------------------------------------------
' V. l5 l6 A/ e. [DSEG SEGMENT USE16'data' 8 k, D6 Q4 O5 r9 g
% g% T' m! c7 e
DESC STRUC
) r# J' d, R2 X LimitL DW 0
* P/ X* I5 ^% l$ y% u+ m, h# E BaseL DW 0
! ~, R. B" k: E5 k BaseM DB 0
3 T" r L8 l* Q# B- K Attributes DB 0
. V/ K+ @ i( j9 X) P' ] LimitH DB 0 " O* C6 Z* Z. L' Q- e
BaseH DB 0 0 `. A/ u; ? |7 o
DESC ENDS
" b$ x/ V, U1 P) T. h& X4 \; D1 X# q; k# \& o: ^" V! M
PDesc STRUC
7 o7 r+ e3 w% ` _: g- [ Limit DW 0 ! Z! V) b! s$ H6 @" l
Base DD 0
8 `6 R$ t$ [, s) @: J3 IPDesc ENDS
& K* V5 Q# Y. ?8 x. b, V7 Y$ @" U+ l, O: F
GDT_def Label Fword, s( X3 a3 p( F3 e' e
Null_Desc DESC < 0h, 0h, 00h, 00h, 000h, 0>) ~9 F& m7 E% `: B+ [
Data_Desc DESC < 0FFFFh, 0h, 00h, 92h, 0CFh, 0>% c6 r, W9 y2 E5 U$ U/ F
GDT_Addr PDesc <$-GDT_def-1, >
# @/ z) a6 w6 ~# C& t& Q( p3 f
2 T- t) {7 E4 {# B2 Z1 ~: q8 mmsg1 BYTE 'The Input Address is ': ~* a- j4 d8 U% a/ \6 D: s
msg2 BYTE 'The Data is:','$'! Z r5 j. C8 B
# F& f* q# W7 K0 P& SDSEG ENDS
, T0 z( y. N+ i& L2 r& h
% X6 M( O2 n( x1 K3 j" Y" d3 v, d4 k- ~+ k8 T
;------------------------------------------------------------------------------------------------
) a! B$ r0 H( y- \$ f( k$ [$ X7 b
ASSUME CS:CSEG,DS SEG
& A1 I# H& b3 T8 r) N# D
4 h1 B) }2 g+ `3 O0 U6 NCSEG SEGMENT USE16'code'
/ u9 z. F+ `& W* b/ s- z; E
- k8 q1 q7 T. _5 G" Z push ds
# o+ w5 _, h3 T8 R+ B push es
0 [+ o M7 e$ _- q push fs- h! _& Q ~4 i7 D/ t8 {8 U( w0 R% v' J
push gs
' `/ S* S3 ^. Q) Y5 ?& F' ?, n 5 ^0 D1 I. n$ ?7 N1 f9 Q% _ Z! U6 J
call big_real_mode' R* o- ]( B; u, |1 b
) v/ ?7 j) u+ k N z0 R0 O9 F
( r# }) r0 `: x4 ^8 b: t/ {0 G4 W mov edx,OFFSET msg1;" N& |9 q- I/ t) M& r9 B
mov ah,09h;
/ {$ y. s; V e5 n5 A int 21h;) j. h4 g6 z/ D1 e, D2 W
mov edx,OFFSET msg2;
9 E0 I) {9 a0 t3 P" a mov ah,09h; v ]$ d2 O# s* y
int 21h;
+ A( C0 w$ |7 n+ e. V/ ?
- Y$ T5 I4 D. r# }. H/ Y- V' @ call PSP 0 E4 y% N6 X. R
$ c3 w$ c6 @$ m9 @: N1 s call crlf
! m! t! b: k+ G
5 I4 A- Y2 O3 G/ t% Q mov esi,ebx
" R, j# [/ `$ r) Q mov eax,fs:[esi]
1 F7 t, J6 v- D4 }8 h( x2 @8 ~# ^ out 80h,eax) f' O8 w U6 C6 B1 Z% q% q; j
mov ebx,eax7 q3 _& q3 s/ C9 O d, i1 h
call _8bits4 R( u9 u! Q$ R [( J* G; d" B
- j$ y: l" o" q7 U1 z
call real_mode" D& j$ z# m+ `& p( |+ y
8 s" t: D! ]3 Z8 i2 P5 Y
pop gs
) v4 R) Q" o- j5 @( _% S pop fs
4 P* J6 ^& L8 p" k D pop es% c& h# @) ~$ Q) N2 b' Y
pop ds2 D1 \6 i- C- l, t9 p
; o* {. @7 @: K( Y: o
.exit
/ `6 L8 Y ~* r2 k1 u! C1 c, Y;------------------------------------------------------------------------------------------------
: P4 L+ J% _3 a6 G! r. p5 ybig_real_mode proc near
; G: _3 P" p, M$ a! Y% q in al, 92h
1 u+ ?+ [2 e7 s) Z8 P! c or al, 002
0 E6 P" t- W5 y& n2 l out 092h, al: I8 @; y4 X9 H1 T, h, x. t, ]
out 0edh, al) E, }; j% V6 L# B J. J+ i6 L: X
cli
- s( K2 o1 s1 J3 T0 N( `& C mov eax,DSEG
7 e$ Q+ n4 v4 K) j shl eax, 4 l" ]9 ~ V* A' d1 l
xor ebx, ebx7 {) o2 L5 B. A Z# V9 g; s% h/ [& ^+ S2 r
mov ebx, offset GDT_def% T' h& r' I' Y' y
add eax, ebx, }+ Q9 J7 U- v0 K
mov dword ptr GDT_Addr.Base, eax
2 h" Z' r0 U6 z1 T lgdt fword ptr GDT_Addr
, L( |+ E8 y* C! a! c mov bx, 8
- B S( |9 V, l# F3 |! } mov eax, cr0. T" E0 _% c: J* U1 s; y
or al, 1
( T j- \& N1 j0 h( t8 n mov cr0, eax+ e" e' m' a, ~3 j- u4 [. s7 d4 h2 |
jmp PMod* x. `, b! G. w$ n. ` [2 {
PMod:
; E( j7 s/ B0 u) o$ k mov fs, bx, l# x0 b# t4 D$ r$ k
mov gs, bx
3 y1 c/ q; K8 t- h& u2 r1 ^ mov eax,cr0
% F: a) }) d+ t' R# m; r; {9 ^5 d and al, 0FEh
# R. [" D5 ^, L8 ]9 K# U( B! `" u mov cr0, eax % |; H6 j1 w( r6 x/ f
jmp RMod
7 ?& h' ^$ m$ T; b$ K5 q0 V& YRMod:' R% B( d9 ]3 ~! C7 r
xor ax, ax
+ S# `1 x. W# y- D2 F- U( i) i mov fs, ax1 S! r/ J. m& E) p: c2 e
mov gs, ax
. @! Q" z% X- R
. \! p- k: ^. s1 o6 i! u sti
2 u' T* E4 X9 E; Z& x2 L 0 E: o8 V2 ?) s% \" m* s
ret
" }6 H+ u8 p8 ]) l0 P: d6 N% ]+ [big_real_mode ENDP O b' ~0 N+ q" a' V
;------------------------------------------------------------------------------------------------8 w8 e/ T$ w! ?& i! X5 c8 P" U0 W
real_mode proc near
) T+ S0 \, ~9 I4 w5 ~ in al, 92h3 x* ~& S5 v, l
and al, 02
/ B6 Q3 y9 b0 ^( n- |, Y* G0 h out 92h, al
' T B% b7 @. t4 F" w/ e ret9 x/ r7 U! `1 v8 d; j- N
real_mode ENDP* N- [" T- \8 ?1 U. g
;------------------------------------------------------------------------------------------------ K% P0 N( q: ]+ o7 G/ S/ [
Get_Commandtail PROC near
/ X+ u' x& K! u: ]/ T d push es , |" K* `" J$ y9 A1 y: I5 H: _- ^
pusha
: W0 D8 _2 ~' |) s9 O1 y* B mov ah,62h
( k2 A' ?1 ?2 i( P0 e int 21h
, s3 i- y% s# J/ J mov es,bx
4 ~1 m/ O' F, x5 J4 I popa
, P0 D) W0 l$ g5 r2 W! K9 ` pop es
' m, c0 \& A6 K) k6 u ret3 G0 M9 ~" O5 P/ a0 w3 n& |+ M
Get_Commandtail ENDP4 T$ l: J% A) q0 O
;------------------------------------------------------------------------------------------------
0 g5 }2 d7 a+ I+ \: KPSP proc near
8 `, y- O3 l% q1 k) E+ m mov ah,62h
+ C9 Z( K& k6 b$ Z8 G' P int 21h
7 l1 y8 R: a. N" M. X) ~9 v mov es,bx 6 J: x4 }9 M/ P4 C# Y3 y9 P
xor ebx,ebx
6 n/ ^: f0 m$ v' _2 G2 | mov si,82h
: j) h8 c( [0 R3 r0 G# X# T mov al,es:[si]& Z, b9 P1 F% J8 [5 a2 o
call Change
- B$ G- }- U# Z mov cl,4# b, ~/ E9 e( E! A
shl ebx,cl" R; y) o& }7 z6 @; Q
add ebx,eax
. M' e& H4 L4 X; V4 D: S, I- r mov al,es:[si+1]
) j+ I) f2 i W' y) W+ w8 B call Change) Y3 \: @& ?2 N8 Q5 h
mov cl,4& _; g/ Y- @/ @& s. g
shl ebx,cl8 [2 e* c# ^# o
add ebx,eax5 E, b9 O) u. `
mov al,es:[si+2]' Z8 v4 w4 N# R- I0 e7 q
call Change% R0 L- {! ?# g4 u$ L) [( h
mov cl,4
8 x) G! T, {) w' J4 |0 I7 y9 K3 q shl ebx,cl
c) E7 N- C" I1 t( s, d add ebx,eax: ?3 {+ ^; b$ A( x1 r
mov al,es:[si+3]
! e B6 m3 i1 A call Change
) K; P7 G9 _- }5 u9 b mov cl,4
% \! v, g8 j' Q% V* I shl ebx,cl
6 |8 B! X. A% a) p. r O% e add ebx,eax# W+ ], S; n4 w/ l7 \
mov al,es:[si+4]
) A) g6 I3 @7 b4 c7 ` call Change
+ u" B' X6 ?% y0 A mov cl,4
- e2 X+ c& u( _& o% w3 f, b shl ebx,cl
* ^5 a/ [- l$ K& y- V add ebx,eax' f( s) r3 x5 B4 h7 s7 w8 q% n+ q
mov al,es:[si+5]
7 o. e# p% v& \8 R call Change' M; j& K" n* F
mov cl,4
9 k. t) R% T! [$ f; _) ]# R shl ebx,cl$ b" Z" U$ s# Y3 E& O
add ebx,eax) K' p% ]& r0 c
mov al,es:[si+6]4 g+ E4 R# m/ G! H
call Change
8 I/ u' o3 o* A6 T' H; N& g mov cl,4
; j& h4 [) g0 v0 ^: l/ p shl ebx,cl. P# L. T$ r) w& V2 B
add ebx,eax
" R& Z" p6 [* Q0 ? E& p mov al,es:[si+7]
1 E# j0 u% C% r U1 `# P% M call Change- @$ W# e6 Z2 s
mov cl,4
/ }" m' A/ G. V. h6 f O shl ebx,cl b7 C: f9 C/ _7 M
add ebx,eax$ b ]5 S' R9 [/ W/ |
ret
: L; [+ x/ E! ?1 x2 m8 `PSP endp, g9 T1 r, f9 b" \, ^
;------------------------------------------------------------------------------------------------9 X4 j2 I' p& s" k( d
Change proc near- P3 X a. V5 c; i- F* j$ h
A: ! {* }) V5 M0 q+ e, Q' K
movzx eax,al
7 c! Y3 Z9 f' b1 C6 E( | mov edx,eax
9 K1 _9 G4 F0 X- y& k. a+ } cmp eax,'0' s* y6 P' P9 c0 L: U% Y s! `
jb A" j7 _: ?% l# [0 P
cmp eax,'9' 8 z2 }! A6 ^( D+ y5 P7 c$ u9 l
ja B
; [# s# d) m2 J sub eax,'0'% v4 w4 x9 _) n1 P( O+ ?* v) M: N7 [
jmp short E7 M: o; O* I& f u7 i
B:, J4 w+ T7 ]) n8 w+ V0 k2 Q" o" b$ l
and eax,0dfh
2 g k5 i3 g( M/ F2 q S# X# z mov edx,eax; ^/ f, a- D8 n4 t- B
sub eax,37h ! I9 Q2 L! K/ q' h1 w- x0 ?) `
cmp eax,0ah5 o) [3 ]- E4 s* J1 C, I" ?
jb A - z/ _% o; t" ?( Q, I
cmp eax,0fh
8 U- \ R$ f3 {4 ? ja A 1 y' b2 D9 q9 \$ i* a
E:
( D9 U0 n/ O1 R push eax
( ]* K5 J0 ~, D* F: s! \ call PRT ( K4 Z* F" ]4 t0 Q6 p2 `" b
pop eax
! a9 M, v; l+ K4 o# r3 B/ B8 [' N1 yCExit:8 _" T3 ?2 q$ m. F% L, D
ret& J9 C- O( A7 L' B+ X/ N
Change endp
# f: w5 q& i+ B+ p2 |! s;------------------------------------------------------------------------------------------------
$ F+ ^% V9 m7 EPRT proc near
* m& h0 v1 r: Z8 B7 V mov ah,02h
, K5 G2 D: W1 h: w, F4 O H int 21h. F& f; e4 |" ?1 T u( b
ret
9 v/ j; D; S# W. N6 jPRT endp
6 ~$ ?/ g4 R* J5 R/ ?* n9 v4 W& E; o;------------------------------------------------------------------------------------------------
0 j. z5 P( p0 d: n( Ucrlf proc near- `' B/ h9 Q- G% ~; R+ a
mov ah,02h
2 l; d2 G3 D. A' [ {' d mov dl,0dh
( }& F( i% v4 O8 N2 n7 B int 21h, @- X) @* @6 V" d1 h o! I
mov ah,02h
5 v# }9 s7 S. K4 e6 f8 @ mov dl,0ah
: S9 R, V( g3 ]& i int 21h5 O7 [6 k2 }) D5 Q/ e/ C! o) a0 A' s
ret, W" ~+ w P2 ~) `+ ]
crlf endp: {& c! R2 v; T( X5 }1 R% L
;------------------------------------------------------------------------------------------------
/ M1 \( V. G: F& __32bits proc near/ X$ I, V$ T5 X' {
pushad: [/ m b. c @# B0 V
mov cl,4
! A. ]" u5 r% a; p rol ebx,cl
0 A6 Z) ^ ^' s call print_4_bits: h' K) p j8 D
rol ebx,cl
3 }; z% q8 c; L0 ?- | call print_4_bits! t+ `1 V* a% D2 P* ?! Q
rol ebx,cl
6 _8 F- N! \; R; P p1 b# V call print_4_bits# I% _% |. G2 j4 I- w4 x
rol ebx,cl
5 o# D) c; q1 p- e8 `7 O call print_4_bits
/ D% l3 h& M- N# a rol ebx,cl
" G0 o# F' a4 j$ }0 p" D8 z7 {* ?' M call print_4_bits
( j1 E/ T2 @& U4 T$ @ rol ebx,cl
0 {( s% @7 c8 S5 }- H( p call print_4_bits
l) W+ O7 ] ] rol ebx,cl0 F# J3 c1 j$ s$ O& v
call print_4_bits
& a. `" J0 O4 q i% Y* e0 B( h rol ebx,cl) C; o T$ v2 y1 t5 R- {% S( e
call print_4_bits
7 J, _+ Y" s4 i; H2 C rol ebx,cl
: a* K. U- m$ z- c6 ]( @- c7 W popad- K9 t, g( q( K5 x* D: N- _( \. {
ret6 S& n5 g* O4 i) T' |
_32bits endp
1 f! j% t$ }- z3 i# b;------------------------------------------------------------------------------------------------* X- }/ v* Y% T/ @
_16bits proc near) d) x* q1 o# \6 g
pusha 1 w, @0 B( O2 W$ j8 w' a& `1 m
rol bx,cl
, ^* o& |' C' ? f% n; J) r. U8 w call print_4_bits
: e9 q' X2 [6 ]" x4 x8 | rol bx,cl
1 o0 l2 g" d7 _' I call print_4_bits9 Y8 `) |5 i! W( ^8 x
rol bx,cl4 Y' [! i8 i3 k; P" Q
call print_4_bits
6 q& M" J* h% z6 [& U X rol bx,cl
8 a* J, w" _7 ], v6 P4 Z" V: } call print_4_bits
; ?8 m& e+ b R, h popa
. l9 p6 j. P g! }- ~6 {8 b2 | ret9 i# O" q# D) E' m; m+ E
_16bits endp
5 g9 j, g8 ]( t& {;------------------------------------------------------------------------------------------------& y; s' C& d H; I8 H
_8bits proc near2 k5 @! Q! o3 c6 D. X, h5 t. e
pusha p$ }1 z2 E. R9 [
rol bx,cl
0 b7 R( H4 {# T8 l call print_4_bits
# O) x. J p2 B4 V$ \ rol bx,cl( ~# J$ [" c1 c, g7 e
call print_4_bits# J; P9 |, L% m, d" a# i
popa
7 Y% J$ i5 f- Q ret
; y7 H4 M/ F% k4 ^7 D_8bits endp
+ k1 @) @# g4 @8 x& O;------------------------------------------------------------------------------------------------
: ]- z* d) U$ O- t! ]" T6 c# sprint_4_bits proc near
) `# H/ s. ~9 }1 P: O6 V3 @ mov dx,bx
" n( X ?. @4 y0 \, \! q" A& m1 G and dl,0fh) c, {/ C. j9 z4 Y+ B- A
add dl,30h% w% c. O& Y& T
cmp dl,3ah+ y( S8 i4 G" o2 t5 i
jb print5 G' x! S x, u1 t! O2 w. U2 O4 J
add dl,75 Y3 k) f" W; ~, \. {0 q
print: - A) i/ w; Q. s2 Z4 \( ?% [
mov ah,24 |3 n" T- q5 x
int 21h5 M6 c) ~8 k' |( q
ret. d7 E/ }) E0 Z" b
print_4_bits endp # `8 Y4 L9 [ n% h/ \
;------------------------------------------------------------------------------------------------
& j; z1 F- @4 w7 S6 @7 \% |CSEG ends, l3 Y3 |1 G2 l. ~
END |
|