|
|
各位前輩好,以下的程式為在 big_real_mode 讀取記憶體的值
4 w& D* V y1 C' [! ?1 Y7 k, U/ L$ Q0 Z+ f
例如: C:\memory.exe(程式檔名) 01000100(Address). n% g _. f& Z- s
7 t) b( n( l' a- S$ U則會顯示01000100位置的值' B0 U/ e& c7 S# ]$ p
& @$ f' {5 c W- u: r但是我另外還有要顯示出字串,但是顯示出來都是亂碼) C8 ]& m' Q- b) ~1 J* h9 `9 _6 b
3 p x1 i3 f" J$ z麻煩前輩給我一些指導,謝謝
' x9 T3 C6 c8 D3 a3 W y# V; M) k4 k4 X, d5 H V8 Z( R
+ q6 J9 a$ }3 S. s b/ [# q
.model small) Q" s: M6 R* B, v0 K* w6 x9 O: y
.386p& y" |+ t) z" @/ j/ ~
;------------------------------------------------------------------------------------------------1 b H5 Y: l ]0 S5 U
DSEG SEGMENT USE16'data'
0 S1 i8 n. {& R- o9 ~4 z. N2 f Y3 i( Q7 M) d
DESC STRUC
+ P4 h c A1 h8 O LimitL DW 0 # w4 G3 r6 v' S6 b
BaseL DW 0
! J: w0 I' }4 }( {/ r. x BaseM DB 0
- g0 L! |2 F8 ]' [, x Attributes DB 0
5 N1 J* y! G; @2 U0 B# N8 K# M" z. j6 f LimitH DB 0 3 ^$ e5 b7 q! v, n" y
BaseH DB 0 0 E( @" }" `( R
DESC ENDS
, r9 X6 g5 _' b& m0 T4 Y( ^! A# ~7 e' _* g* Y8 l- b r
PDesc STRUC& f0 o8 _4 |* \3 _' x0 y) o& F. v
Limit DW 0 ) p3 `9 g7 A8 w1 T
Base DD 0 ! w4 |3 i8 ^' @# Z
PDesc ENDS+ k/ l, o! r6 P3 s7 z+ \
! N* x. B, m" z! i& h
GDT_def Label Fword8 X( c! [' q' r# j9 x
Null_Desc DESC < 0h, 0h, 00h, 00h, 000h, 0>
; \ b. O9 Y5 `: R- A6 B% ~Data_Desc DESC < 0FFFFh, 0h, 00h, 92h, 0CFh, 0>
+ J" k$ F) v5 R' r0 }, S- ]GDT_Addr PDesc <$-GDT_def-1, >2 \9 ~5 J1 ~! H/ e
" {2 E6 j( {6 |2 i, h2 u& P$ a5 Z
msg1 BYTE 'The Input Address is '3 l0 u& f) x! ~2 y4 G& o; l" W4 V
msg2 BYTE 'The Data is:','$'
2 \* c5 A! H0 @6 r% W ~0 F6 i0 w2 D# q
DSEG ENDS
$ c; [( v( `5 C0 \% X( V* v
: K) |% m' c2 w9 r# v d
( D. s# o" a4 i# K* C. t;------------------------------------------------------------------------------------------------ 7 ]* q: X" |7 k
s+ O- {8 f. G; [; X4 |" ]ASSUME CS:CSEG,DS SEG2 N! z ~ z. x8 k) m1 q9 R1 |
# Q. |3 r9 W# @) YCSEG SEGMENT USE16'code'' ^0 n, P- Y/ x8 H6 i
1 T6 t4 {" H1 d @8 s( Z) e push ds$ f6 a! R* D7 J6 F! J( }
push es2 w& t& }! x/ [2 s( ?$ y4 S
push fs
$ _% |& A2 R+ l3 q( D push gs
3 O4 c7 o. q; y, r# `/ W% q
0 t# H# k0 c8 s/ N x( k1 V) b call big_real_mode: |; N3 H4 E# s1 v; G
; [3 k; H; q% t 5 g3 j) p/ a7 ]$ `3 ~9 P) ~& C
mov edx,OFFSET msg1;% n% n; v$ Q* L2 N, j* i+ I4 U# h
mov ah,09h;
- f; w; B3 w& z2 ?) n! R. c! j# e int 21h;
$ Y6 k( u% I9 E$ s mov edx,OFFSET msg2;
4 Z, {9 J" X2 q' t7 P mov ah,09h;# l( i5 T) b& N8 o
int 21h;9 a% G9 a. A+ v2 G( R) D& `* @
! Z/ n& [8 P# n3 ^$ w6 [! u call PSP
$ ?# l8 b3 e w: Z r- v- v
; e& P4 d1 Z* x' I" | call crlf , T) |; x- { U" V9 w
9 E2 }5 @, X) G- Q- B; V$ L' J: y
mov esi,ebx
( V) `& G% l4 n9 E2 I mov eax,fs:[esi]
* D+ M. ^0 o0 K) k% [ out 80h,eax @. M, C) ^5 n; Y
mov ebx,eax6 }# \% ?# l3 T+ [) `
call _8bits
; {9 U+ n# x& f6 L, S5 W$ I
2 ^: {4 d. ?/ T' x# t. i: ]- W call real_mode& d1 [. G1 y+ m" T, d
% I$ u7 S8 Q+ e( U }' j5 J
pop gs6 s- A- V, |+ N# `% J$ B- N
pop fs: |! l1 q& W: Z+ d( U( v. [0 l
pop es) V8 o; Z8 q- } z
pop ds
. K+ u( p+ l3 ?' T. T5 h $ B4 m" ~: o- X
.exit3 r% Q) G$ [; p0 S7 l5 z: H, W' {1 T* E
;------------------------------------------------------------------------------------------------2 ^1 D$ u' ~% j( Z+ g
big_real_mode proc near
1 h g5 f' u& d' W* l2 K/ n+ B in al, 92h2 [9 j! F( d9 S
or al, 0023 W( \( }$ |/ C, l" Z) x
out 092h, al
# C T. x- P( }" a out 0edh, al
9 y! Q+ K% h) ?" W, D, m# E cli+ c3 D& T1 a+ r5 m& j0 R
mov eax,DSEG
1 p# a+ z2 b* ?% K8 ` shl eax, 4
9 A- c ]. Y9 e7 p0 @ xor ebx, ebx
4 k7 e: |% q4 u w5 W+ b mov ebx, offset GDT_def, Y$ s5 \2 {7 o `. G; k
add eax, ebx
8 |8 t! z# Y2 F3 C$ }# Q mov dword ptr GDT_Addr.Base, eax, d; @' u, c! n7 u( w
lgdt fword ptr GDT_Addr9 o4 N- z9 P7 l' M$ H ^" c
mov bx, 81 ]* b$ [( i4 Z4 \3 l2 \0 r
mov eax, cr0
" Q; c7 o* b8 x* a& x: q! e or al, 1% P/ i6 @! o) t
mov cr0, eax
) G- ^5 o5 |4 T: m! K) O jmp PMod7 T8 s+ L5 f/ [7 j5 l' g
PMod:! `, z0 p) E$ |2 Z& d) N
mov fs, bx! }0 K7 S" t5 \/ i7 m
mov gs, bx7 j% `& X. W c
mov eax,cr0
( k- P( ^7 g# A' w and al, 0FEh8 z( t* L! `& p3 S
mov cr0, eax
8 O- L, V' S; C# v1 V) N" D& ~ jmp RMod
1 v8 M( P M- @6 z/ [ Y' l9 h( nRMod:1 [' @. Y3 y! Y. o5 x
xor ax, ax3 q7 g1 K8 l* S5 O4 t3 P* l/ {& d
mov fs, ax% ~7 Y; v+ u3 O2 C$ y# j7 Y5 z
mov gs, ax
: y+ I' w! E/ B4 H! g6 Z
) Z8 t* M q2 P% P7 D! ] sti/ M" ~7 p$ J' e# j0 X
" S4 h1 L% B; y) {1 n3 E4 i7 |8 e ret+ x0 n b& U6 X( |. G4 S
big_real_mode ENDP
8 m# t* N2 [( X7 k;------------------------------------------------------------------------------------------------
* u, r$ V% J" T0 ?, N1 B& g3 G5 b. oreal_mode proc near$ f* Y% v: u/ I
in al, 92h
6 K$ K! Q5 x! e# e and al, 02' l: \% B" `; a5 o/ l
out 92h, al ) b0 A; {1 o @/ m d
ret
v# b0 y# _/ H5 O5 }real_mode ENDP" Z! f% y5 F. a# Q0 R
;------------------------------------------------------------------------------------------------6 g, o( I& L. ]% f# T
Get_Commandtail PROC near
3 |' U1 @- t2 z; P; p$ a1 R push es ' [4 z* g. [2 j$ a
pusha& \: M! ]* ^7 ^2 i! a7 ~# h: d# W2 B
mov ah,62h
A# f( n" D8 e2 D! M$ |4 a ~* t int 21h
. F# \! N: z1 v- F; H+ q mov es,bx
6 B1 p! m' T: `6 o popa 1 c' L1 q+ M) O' _, ]+ o* S% J3 J
pop es8 e' g( Y7 G5 z6 G3 M4 y- Q& K
ret0 _ i, Y5 d; b3 H* C- o E
Get_Commandtail ENDP
/ O+ {- k3 K) G* k0 ~;------------------------------------------------------------------------------------------------! I& ~1 P( B$ m4 g! i2 ?; D& G) I
PSP proc near" q3 k+ W6 y. H' ~% C8 q" o
mov ah,62h
; K |8 _. _; z/ k* ~" @6 u int 21h6 f; D& X# W; e/ G# @& u. D
mov es,bx
1 |5 _+ @- M3 u3 i xor ebx,ebx) ^! c* u8 F$ p
mov si,82h& E2 [. X0 k p# V, b J
mov al,es:[si]
5 q3 g& b6 {+ k; S* K3 ^$ F call Change" [$ {& o5 g h7 S
mov cl,4
0 N! q! S& _: ]9 D* ^/ \6 c shl ebx,cl
- J/ X/ e* L( R2 H. U' h/ _ add ebx,eax
9 v) b! D0 U5 ^! [! t" d0 x0 y, G6 i mov al,es:[si+1]$ b# V. H0 w/ X! C
call Change$ c$ Q+ N- {$ H7 d( J0 l. Z3 ~
mov cl,4- ^2 P% T- _7 C1 M
shl ebx,cl
+ x- y& ?3 x! `* }, I C add ebx,eax$ d. n( g2 O. g; t# @! `
mov al,es:[si+2]( i! G" f! \* `; q6 y& t2 t% M
call Change
( [0 x$ o5 n8 a4 ^ mov cl,4: T0 I" ? L- A
shl ebx,cl+ N( r$ k+ x8 f: j+ H
add ebx,eax
+ }: ?8 U3 d7 p mov al,es:[si+3]
, T5 L+ D' C& c; r5 F& X$ T* r call Change! l) J" y; V3 }( z7 E4 y
mov cl,47 }4 }+ O. j5 D( T
shl ebx,cl
) c! @6 C: w) C+ Z0 f- \ add ebx,eax/ S7 l) u2 z0 [2 P4 S
mov al,es:[si+4]0 Z; [$ o2 \* Q* t4 I, j8 S9 h
call Change- `3 O1 h7 @, t* d1 c |
mov cl,4% d* @6 g! `/ q5 w, h
shl ebx,cl
% T: ~ ?; }. o/ Z+ |$ ]- Z+ O S add ebx,eax
8 Q9 g# A8 I& b6 @% p" i. a mov al,es:[si+5]( N2 e H7 l4 p- X
call Change7 Y! _' V; n( D/ l" d* c, _
mov cl,4
8 F* y& r T; k x1 x2 ~8 E shl ebx,cl9 v Q1 V% U) R. K9 f
add ebx,eax
9 e- K `0 M3 Y7 _8 C3 t mov al,es:[si+6]% u* Y0 D# T0 e% i9 U1 o
call Change3 Y% u0 S. g& a1 X$ k
mov cl,4" v$ x. D! k. k% k
shl ebx,cl. |7 U, D+ r! n5 v" u7 }" j# |! k
add ebx,eax
- s- x6 W' |0 ?0 x3 M6 y mov al,es:[si+7]- g- @0 G0 A% K3 @& s
call Change
# k; Z1 @ Q: H1 [/ ] X mov cl,4; v5 C6 W; I- E8 B) F
shl ebx,cl
% H& n4 J, v! B. a5 F add ebx,eax4 M2 m# x. u- a3 v$ s9 Y0 T0 z
ret2 M( q% p! X# F8 b! z: ^/ z0 ~
PSP endp
% x% A5 Z* ^2 ?;------------------------------------------------------------------------------------------------
/ a1 H$ j/ E! q) f# j- J* lChange proc near) d9 Y& u; b2 u U0 B& `
A:
( s o9 C# l6 i7 J6 B movzx eax,al7 u L# Z+ Y0 g& o
mov edx,eax4 `8 o' l N: r' S& W# n# Z. |
cmp eax,'0'
o# R, `. [# U* W jb A
( P, F1 D5 O- n' E! u cmp eax,'9'
+ {) p! l2 y/ A1 ^8 N ja B
6 t5 g1 }/ X; U( K4 t4 w sub eax,'0'( `3 @4 J; h3 T" I. c! J
jmp short E* o* z' d5 a: ~0 x- ?! G; ?& n
B:
- z: F' |+ Z% R4 Q4 v and eax,0dfh
- {, `4 f3 I. a9 G5 X mov edx,eax
% I3 \6 k& k3 ~ sub eax,37h 8 @2 W' c* |) w& a2 h5 \# \ b
cmp eax,0ah
) e3 F5 Q1 Q, s; ]6 W- t jb A
F4 ~/ y- K- s7 L cmp eax,0fh4 r; z) {+ X* `+ P- }$ ?* C
ja A 9 u- T9 ]6 k! r5 d8 U$ s( M* R( ^
E:
" U6 e- ]& S' | }7 I3 p" E push eax
% S; G: l" i* i call PRT L k3 H& K- y# ~- ~4 E+ A: b
pop eax' `( P- V2 v* \4 N
CExit:3 d n6 n4 B+ [! k7 [, q
ret0 X- M1 p- a5 L
Change endp. l+ Z6 N( a# T( X- ^
;------------------------------------------------------------------------------------------------: h/ J; \# O. o2 c
PRT proc near
% \, o$ c4 |9 _& Q7 ^, k$ {8 y mov ah,02h0 N; k I0 d R/ {5 j' L( c
int 21h- ]! t* G) I5 z) r6 I
ret
2 @; J. ?- j5 i) g" A; _PRT endp# z. D6 H5 N. R$ ]) W. M- _ _% x
;------------------------------------------------------------------------------------------------
4 h& ^. f6 V: q% Q5 `crlf proc near
2 p6 k; [7 \ W mov ah,02h
8 C* J# }! ?+ d+ X* I mov dl,0dh5 I# O& c) @/ ]0 C k
int 21h
0 l+ r# x4 N0 C8 m" z2 k# v mov ah,02h6 D! z s0 P, B9 F/ ^& `, m' U; J4 C
mov dl,0ah5 ~% h' r. M. k# B1 \/ o
int 21h
8 X: g. y7 E1 C$ f7 v ret( d+ ?& w- d+ x9 w
crlf endp1 i6 I9 ]9 `5 Z1 K5 O5 P
;------------------------------------------------------------------------------------------------
0 t, Y: I- Q/ k# L& F9 y4 D_32bits proc near. y- q2 L- ?( T/ ?0 Z
pushad
9 K& x2 U8 ^) c. G# X& b mov cl,4/ ~2 M/ s& o, V Z4 c
rol ebx,cl
# t5 U1 ?3 n5 w8 t' r( d. }6 l call print_4_bits+ u" c6 T- z$ p( Z% R
rol ebx,cl
% N. v$ x4 t" ? call print_4_bits0 b7 K. c0 C+ Z0 s; p* {2 y8 U
rol ebx,cl r; q+ g' H8 l) o6 `# Q, B0 }
call print_4_bits- @/ m( @7 ?+ X" b: }
rol ebx,cl
" b+ D/ s4 j: W5 A9 j2 ? call print_4_bits' S$ G& k" W" b5 H" v, R, I. B
rol ebx,cl* N% h% s, l' C$ A
call print_4_bits
8 V1 k3 r0 |& K+ G rol ebx,cl3 a( E" }+ W8 A2 u( N- ?: Q
call print_4_bits% D/ Q2 a1 j- y4 G
rol ebx,cl
' U8 u k7 X2 I# |" _( g call print_4_bits
' L6 j4 D. [, }3 X rol ebx,cl$ B o g2 R) W3 o& r* _
call print_4_bits
4 B) U: `* z& ]- Y' ~: ~ rol ebx,cl& [3 Q& W1 ?7 S! _* V7 M( h
popad. @( x- h7 z& R* x9 _( N" ]3 F# z
ret0 [: I9 x: O9 B! ^- I6 k: \+ t& \
_32bits endp9 l" H; K4 M& R/ |/ l+ I
;------------------------------------------------------------------------------------------------
# z9 v2 E9 k' n( a0 ^0 P_16bits proc near
4 @7 x( N: U/ r1 S% x7 t" M pusha
4 m6 @" F6 ]8 ]0 u rol bx,cl+ ~ y# l* N9 t- R- P$ z5 l
call print_4_bits
' Q0 h1 z) @5 K" O4 N( {# t6 ?) i' x rol bx,cl# w- I. K, ~ ~% D5 G3 @& D( U. q4 d
call print_4_bits
) Q8 B2 B5 v( C' t rol bx,cl$ J% A- E; z: \- B
call print_4_bits- \& V+ _7 p' N6 w6 Y6 q* ~+ ~
rol bx,cl- s% `' M+ b- ~) x! Z5 z
call print_4_bits, {" k+ s% j6 Z; G
popa5 B( @- o9 z! Y, b% b8 z
ret
% _0 s0 ?8 B. T9 |2 G5 F% |_16bits endp
* c, ~8 w' |) z% m/ J9 ?( [% P9 r;------------------------------------------------------------------------------------------------
; @1 w q. c3 t$ n5 L_8bits proc near9 {, ^7 b) C* O( H
pusha 9 @+ S* _; v' X! b1 G
rol bx,cl" ~1 N! a, J* E# J- i
call print_4_bits
" ]7 s6 c8 W/ r" b rol bx,cl1 Y8 _# z1 _( l o
call print_4_bits
* m( }3 ~' L" F& l( B. R popa3 l& W7 X; A. U7 {# m2 h0 a
ret2 H5 F3 L* j) z9 [/ D. _, g, L
_8bits endp1 I$ _2 X7 J- s
;------------------------------------------------------------------------------------------------
% \# n5 ~7 G$ j6 sprint_4_bits proc near
% W: L. ~6 g- i4 T8 S% S7 P0 U mov dx,bx
: D0 R* U% [8 c7 i1 V and dl,0fh
E, `5 g) o C+ {& X2 G9 d6 b+ { add dl,30h
; L$ m9 q0 x: h4 d. E cmp dl,3ah4 x1 f' s( b2 Y; |: p, m; ?
jb print$ k4 u5 A2 f5 H1 W6 W
add dl,75 ?( ]; }. v2 L% }
print: 2 z% v$ L5 q" a7 q; ~
mov ah,2% I: E$ r6 X% J* L' F w+ e7 L, Q
int 21h
& L+ _; U; |0 k D0 ^$ u. Z0 G ret4 \! d& l$ K) }, C$ l$ W& W. d% }* ], N
print_4_bits endp S6 k1 U# z/ S' [' z
;------------------------------------------------------------------------------------------------: k5 L* P$ t1 U, {/ G1 L
CSEG ends4 }0 ~* L* l" d) E" @
END |
|