|
|
各位前輩好,以下的程式為在 big_real_mode 讀取記憶體的值
( A1 z$ r, N$ v! w R/ g+ F+ e" |: b# r9 w% r9 m7 A
例如: C:\memory.exe(程式檔名) 01000100(Address)
1 G* m, }& }4 \7 [' l p% n( @6 |6 V2 S
則會顯示01000100位置的值
+ D: l% D$ R# `4 H4 Y1 L7 g F" [1 D* h6 i' z
但是我另外還有要顯示出字串,但是顯示出來都是亂碼' ~0 I! T* h9 x
6 W; y4 U0 g9 w6 a
麻煩前輩給我一些指導,謝謝 $ W; @6 k6 l& B7 _
7 o. I7 k" B7 x* F1 R' l. U7 O7 c
.model small% `' N5 A/ w; I- P5 |0 y3 Z$ W
.386p
8 _' ?! c' b' I+ v7 P7 o;------------------------------------------------------------------------------------------------
& n+ B6 {" }5 o% H/ C2 ]3 zDSEG SEGMENT USE16'data'
4 c7 t. U2 n5 p4 C
/ _# B1 |8 `6 T4 A/ C5 t: D1 bDESC STRUC `8 \# x- a% x0 Q9 z+ ?! h( O
LimitL DW 0
* k4 f( C- c$ U' ^2 u: [3 p6 ]( D+ k9 ^ BaseL DW 0
: V8 b) W: A9 u$ K BaseM DB 0
6 {" S' |- a$ J) N# W. Q Attributes DB 0 + T- x- U6 s" `$ H5 \
LimitH DB 0 " ?, B" J: @9 w7 I+ k
BaseH DB 0 " G1 q) W2 F8 z/ a; D9 o
DESC ENDS4 @ ^+ @7 ? b8 t8 i
2 t* t# B, R2 s3 h8 ~PDesc STRUC
E) I8 ~6 E9 r, z Limit DW 0 7 p- i% S- t1 g7 ?. n j7 `, S
Base DD 0
% g/ H+ X& F8 P. @5 j* C7 hPDesc ENDS$ U4 |/ M5 N7 r" I
8 w1 h! v% r) V3 iGDT_def Label Fword' s8 s& o5 X. G1 r" O
Null_Desc DESC < 0h, 0h, 00h, 00h, 000h, 0>5 j- m/ f) e# a
Data_Desc DESC < 0FFFFh, 0h, 00h, 92h, 0CFh, 0>
0 C( E( [3 T/ g5 {GDT_Addr PDesc <$-GDT_def-1, >0 h4 \' `% M- O) V" |- I E9 N: m9 H
. J% B# X p2 A! R' b+ Q1 Ymsg1 BYTE 'The Input Address is '
3 [+ W8 Q8 {! u" p/ emsg2 BYTE 'The Data is:','$'. t2 M. \7 y' K
3 a6 x4 Y9 }- |: k' F
DSEG ENDS) h( w3 ]7 f* u$ r% I
6 x0 g( x+ E: X; W; Z; H& K
8 a5 _( _- M' ]- V0 ?2 K9 E;------------------------------------------------------------------------------------------------
* A: y0 {6 e- x
+ Z$ F3 L/ I! C& ?* c" T) W$ iASSUME CS:CSEG,DS SEG
0 B+ `6 E( j) ?( ?/ |3 ~$ f+ Y/ s% U/ H" f3 B) ?
CSEG SEGMENT USE16'code'2 N" d# h& R) {: B5 K8 ^3 V/ a
0 q& d5 B: y k9 t' M m# G0 y8 i
push ds" n! A* d e" y4 _
push es. s3 N* O' b M( h
push fs' h" [9 r) P+ U+ T$ c; j
push gs$ J: C7 T7 V2 r4 C M2 x
+ t( i- s, h+ ~
call big_real_mode
/ {# O0 Y; N! Q6 H9 d0 Z7 }
3 h/ w% J$ S4 e+ i8 `4 Z8 W: V # F8 b9 }2 i: L- i- N' c4 X
mov edx,OFFSET msg1;
& H8 A2 i0 Y: u! F$ i3 r' S8 ^% d, o mov ah,09h; , r5 r* | p2 r. d* j
int 21h;
. J# o8 t6 B% X mov edx,OFFSET msg2;
* B( F: [8 c1 x. v5 u mov ah,09h;
& F$ A' ]$ j; G/ ^ int 21h;8 R1 C/ X2 [" e4 N5 Q
& w' e; X' d; E# h b call PSP : V- y' P4 u8 p. P3 t
, i/ L) ^- Z/ \9 g9 h call crlf
7 N( m" U/ y/ _5 H( t2 b5 O + u5 Q3 v% q, }2 j# r
mov esi,ebx6 H! E0 s; q' C+ N$ F
mov eax,fs:[esi]
1 A" k4 [0 J! [- b3 @0 e, i out 80h,eax* Z7 N5 I; B6 o' h+ r
mov ebx,eax7 t8 X& G) j4 s% s0 ~6 w' L1 l
call _8bits
; H( R5 w2 \3 U) _& N2 }/ j
$ j+ F* Y `' N$ ~ call real_mode- n# H' d! d9 k; [2 A! |7 b
! W3 }& V/ S$ R9 O
pop gs- Y6 z2 W5 U/ S- @
pop fs
8 d" n) n6 R$ ~4 `4 c6 R* T# U pop es: w8 o) o: E; \( z8 P
pop ds! A& T; M# i' @$ w7 q H
4 E( c( f3 K2 a' N6 y2 }' F
.exit
0 R5 f" h) g( @( e4 A( ~/ z% y;------------------------------------------------------------------------------------------------
1 D7 H; y2 L4 o& {big_real_mode proc near/ ^& n! f1 }1 S- h; k
in al, 92h; A% y+ J. {: r8 E
or al, 002
' e, S9 X# |/ q' q% n$ [# w out 092h, al0 G8 F" O* e ~& d: R Q0 ?
out 0edh, al
! \. z2 W$ X; d' a cli( d6 {7 g, ~, C1 l% \& i+ ]) r+ e
mov eax,DSEG( b4 q+ g1 B* }( r
shl eax, 44 u& y0 v, R5 ?) G! H, `( [& r
xor ebx, ebx2 M0 q7 o" N X0 g+ C
mov ebx, offset GDT_def$ }5 E R; d3 B/ ]# T7 _
add eax, ebx3 { O5 Y; [6 C# a& n' }
mov dword ptr GDT_Addr.Base, eax1 u# _; r1 c& q& H. g
lgdt fword ptr GDT_Addr3 ^9 _* T6 h3 g5 @
mov bx, 8
5 n8 {3 e+ h, l# k+ F2 e mov eax, cr0
- c9 O [5 F3 j' |6 [* @7 { or al, 1- X" {' |) ~% l5 v' i1 r
mov cr0, eax
$ \2 i/ M6 B4 n" i# `. v# h- j: I jmp PMod
* U( m, S' R7 c1 @1 lPMod:$ E4 ~0 B" B% n3 }8 p8 [
mov fs, bx
/ O* A5 U: Q- ~' H mov gs, bx" S8 B. K4 Q, Z
mov eax,cr0
% _, K7 ~9 t: M1 G2 C* T and al, 0FEh
8 |6 g v) `/ \0 \# H mov cr0, eax 6 K+ D; t& c# o# q7 R
jmp RMod
6 t: ~" u2 D+ g% E. G, A2 G& gRMod:
d/ }7 A& a( z* Q2 C1 u! N xor ax, ax# [2 L5 f; v& u, V7 Q& J1 z! p" ^
mov fs, ax
0 x/ g; y* [9 h! y: \ mov gs, ax$ W. W: e% z6 c! l6 B# Y9 ?
7 W8 ^4 _8 Z% o9 d# ? M8 A
sti- |0 a, p) ^7 \1 ~: X3 I9 z/ E, f
9 n3 D4 I) H" k( l ret1 k# \4 h: L2 c/ O. \, h
big_real_mode ENDP
: J4 X* p) z+ i" z7 d* X1 j( O( O6 w7 M;------------------------------------------------------------------------------------------------ n- C. [" o6 \: m+ f7 P6 @
real_mode proc near* M1 j6 V0 Y5 r( N
in al, 92h( t* x- u4 q, G5 z
and al, 026 D9 U+ G) C+ i; I4 S1 m0 f$ @
out 92h, al ! o& q: Y, l1 p. o1 i
ret
/ Y8 B' a' i! F# Z% ~real_mode ENDP
; b1 k5 n2 G8 _; H6 A [; j- g;------------------------------------------------------------------------------------------------7 p: ^ l8 |6 |- n, H# p; f( n
Get_Commandtail PROC near! b: _( h9 _. b3 c3 w
push es
9 a- g+ A6 f, J1 A6 A pusha+ N8 @2 }& F, d o9 U
mov ah,62h
2 d# L: @" L$ A: u7 X int 21h4 I+ [5 m6 @) g! L6 g9 U
mov es,bx# l8 U) |1 V% V8 h1 q: X
popa
7 k3 [3 i7 K7 P) T$ p pop es% K$ z* m, O' Z3 W
ret) a/ F9 P I+ @0 N( m# v4 Y
Get_Commandtail ENDP
7 L( [: Q+ e0 L) N;------------------------------------------------------------------------------------------------
9 n# Q$ U/ f4 L9 S# D% zPSP proc near, U M' m# a8 u- y( V S
mov ah,62h3 v9 ^! `5 I _% h! w
int 21h
% r4 Y9 `: n, Y- t+ n mov es,bx 4 o" d- A( s2 G9 B
xor ebx,ebx, U8 {) e( |6 D
mov si,82h
: b+ I0 \% i+ t mov al,es:[si]: V# ~& Y9 f! R1 @ @! l
call Change
% t/ [ n* s) M# }4 e; E mov cl,4$ i0 F1 e7 X+ k7 j' I& P) ]) A
shl ebx,cl
! K8 M. |+ d% R6 E add ebx,eax
- M* X* K7 B) T mov al,es:[si+1]7 e5 o7 B, I9 r/ N0 @! w6 e
call Change
2 h; Q1 C1 S4 l) \ mov cl,4! M) Y& W5 p2 O5 i7 C) m
shl ebx,cl# O1 G6 \ m! T: Y) S
add ebx,eax
9 m* s* A* S% G; \. j mov al,es:[si+2]: O. S8 B4 W8 B: ], e
call Change
; L; K, N% x* g. }# t8 H7 y mov cl,4- ^* |( I" f- x# W M
shl ebx,cl: s0 }& h) ?) l
add ebx,eax
$ N* _+ k9 `0 b. Z% u8 y mov al,es:[si+3]
8 G. A+ {. E! z1 C call Change8 Z: X8 p- `" H A& |3 [
mov cl,47 k+ v% ~) O+ S% K: C) \- u
shl ebx,cl& p z% Q H$ z& t: J, {
add ebx,eax
: l5 A: S) J0 ^1 n+ T& s, h mov al,es:[si+4]1 m6 [: v6 I5 |* |: Y% v
call Change/ M# g! r$ q i+ v, b/ ^" |
mov cl,4
3 m" b9 \) c3 B! f2 h0 n shl ebx,cl
- h5 A7 z* t* z- }. y c add ebx,eax
# x2 l4 ]$ ]% m% o& j; [8 R mov al,es:[si+5]
/ A7 i* L1 U/ w6 g; U' h call Change2 u" ?4 X0 B+ `
mov cl,42 X7 M- K: W) s0 r6 q
shl ebx,cl
) f- i8 h7 E+ Y4 U1 x8 `; m0 d add ebx,eax
, O @% F8 w$ j, O- K mov al,es:[si+6], J. k a5 d1 W
call Change
, p! T! R9 a6 Z8 ?" e% ` mov cl,4
; d2 ~5 ]$ E, J2 k1 B8 r' Q shl ebx,cl" R) z/ l& S' v- m9 I& \: M% ~) r
add ebx,eax
: h& m& o1 K- m' U9 G4 v mov al,es:[si+7]7 x8 z" Z( a5 i4 z" n
call Change
! K1 t. P: M3 E x7 c) j mov cl,4) R. [7 d+ l% e( l" a: }# A
shl ebx,cl
" G" M& a! G7 [! F. ]+ x add ebx,eax# s5 M1 t6 s! D0 i
ret
1 [. q3 M1 A: }5 v4 GPSP endp3 o! E, u5 d9 m1 h- ~9 _! D
;------------------------------------------------------------------------------------------------8 i5 ~: ]- f8 @- g& k
Change proc near1 e4 F9 M9 P4 t6 V, b4 K
A: 4 X" r3 e; F) w0 i/ |' X7 c
movzx eax,al
& X9 H( v3 i" }! z+ m mov edx,eax
% ]4 R' I7 t5 m cmp eax,'0' 5 ~, \3 L S" f, Y% A+ o; _
jb A b' F \# s" K0 y, D
cmp eax,'9'
9 q4 z! Z0 v% r0 ~7 \$ C- k: U ja B
4 j9 ^- l0 I$ T6 T$ O7 g+ | sub eax,'0'
Z3 ^: k( f9 F; {" t jmp short E$ Q9 Y8 z" d2 O2 h% o+ r8 P
B:
+ p) [8 Q: ~: i# J( r and eax,0dfh
) Y* x4 r5 ?; A# a0 j, q mov edx,eax
' E% g/ {) E1 P% o* j) W sub eax,37h 8 p m. y" [- l' B# `2 }
cmp eax,0ah, ]# k. K9 {) J9 f; W& ?. [- O
jb A h1 @6 R4 `% P6 N1 X
cmp eax,0fh
2 ?- ]/ b% b2 W. S7 j* `% \+ ?. z O ja A
L$ r# l/ Z3 E' k2 j* _E:
- r: Q6 ?. r: V u6 g8 A! h: h push eax , \0 | T. [3 _
call PRT 6 N* Q) _4 I5 a9 e) W$ H. \
pop eax
( L* G5 m: z3 d# I2 T7 n' n$ C! DCExit:
- |( m# k$ |. z6 V8 U* [ ret6 G7 ^3 ^* w5 g* } n# Y! c) g
Change endp9 o) I+ o$ `& p$ C4 j5 K
;------------------------------------------------------------------------------------------------
6 `. H) ~9 a. f1 B; c5 _2 APRT proc near
; p% _& m# Y c( f' R- u mov ah,02h( _. T8 v# [7 s/ j* l
int 21h
. M, b/ _7 W0 t. }6 g/ e; z ret
3 h* ~* [! v; U* C1 M6 D9 VPRT endp
8 `9 ~8 s6 ^/ Z" V;------------------------------------------------------------------------------------------------5 u5 e1 o: ], ^; C2 ?! v* }& a5 z
crlf proc near& J: B% w" B4 ^6 ]% Z8 d! h
mov ah,02h# k- J# H1 i0 u* k
mov dl,0dh
5 b' A# B/ Y8 e# `. Q8 Z int 21h
* z9 I% e4 y& R- j. c! r! j5 F3 J/ k* M6 u mov ah,02h
; z/ o, ^1 l ? Q mov dl,0ah
2 k6 J* h6 [3 Y; G( o- n/ T- E int 21h
' p1 D2 K$ ]& Q g: b2 C ret
) w* @. D8 c/ p, {, w- _ K# C) Wcrlf endp6 {5 k, X8 I. P
;------------------------------------------------------------------------------------------------
3 y+ C# ^2 ?2 p_32bits proc near
8 |( M5 ?; X2 j. K) s5 t pushad U5 W6 y! ^- U3 A! h) I( _
mov cl,4
+ b# Z8 e$ N; M5 ?& E( A rol ebx,cl3 d5 @6 k7 |+ m" `- j
call print_4_bits
5 s* d; G$ ?) Q% j rol ebx,cl
$ f: W/ ^; h7 L call print_4_bits2 m/ T1 N" G: g2 r# o, E6 e
rol ebx,cl! w) K6 J0 w+ u9 }, E
call print_4_bits. E# b7 }3 a$ D! H- V" ~
rol ebx,cl- R& R, _5 i& v& [- R( W
call print_4_bits; X2 w u: F* }% j4 f9 P* Y( B
rol ebx,cl
9 z0 q& Y5 Q6 b, E( _+ m call print_4_bits
$ C$ ^0 m& I' F& ]1 z- D2 }; e rol ebx,cl6 ?5 S3 q1 {9 F! L. o
call print_4_bits1 p. O1 o* \% j$ p+ k5 [
rol ebx,cl1 d% q8 W* H! f: I& c' f+ l
call print_4_bits
4 V+ `7 d+ f! q4 _1 d rol ebx,cl
/ ?9 K7 R. |/ V, Z4 T call print_4_bits
7 ?# b% j4 X; T/ j0 l% R rol ebx,cl+ Z& _$ M$ G5 v# m% O
popad
# e' W* P9 w5 L( ?8 O6 N0 D2 f ret7 c2 P( J; t) N5 h( n. M
_32bits endp
6 p* S+ ]6 u5 Y; H( x b# G+ M;------------------------------------------------------------------------------------------------' Q* ^0 ~, {2 I& {7 `
_16bits proc near
7 q0 P W8 z- z# {4 l pusha * S( m2 T; s- z: s* d
rol bx,cl
! a8 T. ?7 Q% s+ q6 u' p call print_4_bits
8 M+ L+ @0 _! n( G4 b rol bx,cl
. H# k1 W( ^& E2 ^ call print_4_bits
7 s6 e+ T6 k2 e rol bx,cl. v. O2 ^$ G$ ]. U9 D, m
call print_4_bits* F; d* Y% r5 v5 u( Q, T, j
rol bx,cl1 G/ C7 X! v# S0 U# h
call print_4_bits) {5 B! a7 @) _
popa
, `8 C+ P* ^* ]: Q X( }! G ret
9 W5 e5 U3 P# E: Y; a7 u% }9 M4 x1 l_16bits endp3 f* Z2 t c+ X* F: {& e9 a
;------------------------------------------------------------------------------------------------
& b( n* V- |5 O9 V_8bits proc near) V- K& `* |' w; S+ D" q! V3 p+ `
pusha
9 i" n' E: @ V2 a. A rol bx,cl
. `2 U3 s5 L4 S; Q- t call print_4_bits
# F+ c5 ?: _5 u! o* ~3 t/ [ rol bx,cl7 W4 T% }7 V4 }3 j' n5 v
call print_4_bits
) e" U+ [' E0 J6 s/ H8 |2 R" d+ O( I2 M; z popa- J+ C# v: \" X4 ]* [: r9 ]2 \
ret
, k; B4 a; C1 i) H# N: `_8bits endp
* K% _8 x) o2 N D;------------------------------------------------------------------------------------------------
3 M- I4 A) O/ T0 {! kprint_4_bits proc near
l' Y/ W* z6 V' l- P1 m mov dx,bx
2 O! ?. F% V+ c* }( \ and dl,0fh# t0 J2 s8 w; Z' C
add dl,30h
2 r% z% ^: Z& C; i$ o7 S& F cmp dl,3ah" v8 b% c( I1 A
jb print3 L7 ?4 v0 M5 X, _
add dl,7
7 x# j+ C( y4 ^# Q) Y$ r7 Uprint:
) ?: w' ~1 l8 b" R mov ah,2+ H5 r8 u! {4 o1 `1 r% M
int 21h
$ y3 Z9 S+ \3 N0 U0 z ret
) i' H( g2 p6 z" j& X/ b; `( iprint_4_bits endp
& g* A. C% c- e+ i& \8 x# O8 ?;------------------------------------------------------------------------------------------------& y# |* \5 }. Q" `( q8 t+ N
CSEG ends
4 b1 h( _2 H& d1 J! `+ yEND |
|