|
|
各位前輩好,以下的程式為在 big_real_mode 讀取記憶體的值
$ @% C: ?! l0 o8 ?6 |6 |) s r% `6 m7 h
例如: C:\memory.exe(程式檔名) 01000100(Address)
5 H7 w3 w+ y! J' M' j* [( K! Z2 k$ @! [. U. {1 _# c
則會顯示01000100位置的值
; \0 P$ _9 U8 v
# `+ L3 Y1 C5 G但是我另外還有要顯示出字串,但是顯示出來都是亂碼
- G# Z% H" I2 ^' R. D; n- I/ `2 q. C' y% _8 O
麻煩前輩給我一些指導,謝謝
. w; K0 }4 D: Z8 G" K% v8 y3 U
7 P; l# b9 e: C/ [( T" t5 e: {) U! T! j3 p" O) ^
.model small1 C9 J# M! u4 W3 t* I
.386p! G' B% |4 w- e A9 w7 R
;------------------------------------------------------------------------------------------------: a6 d$ ~4 c$ \1 ~
DSEG SEGMENT USE16'data' + N( L N4 b; u, `9 ^
" a: p6 b" _# U, \2 I( w
DESC STRUC
4 V$ G% r3 |$ g+ b LimitL DW 0 ' c, R& E% W8 O$ p5 n8 Y4 |3 D
BaseL DW 0 ( Z- W* _/ n J9 z/ n8 T2 r2 U' ^
BaseM DB 0 + f2 O# ^+ }& x) T) j
Attributes DB 0 - ]: u. \- v5 O$ U9 T$ F
LimitH DB 0 $ Y1 f# E; r* E
BaseH DB 0 4 J& Y U# a- V
DESC ENDS
4 R( M. ~3 B3 C% R1 p: d: M0 l; W% k3 w0 E! ~, Z, M* d* O9 E
PDesc STRUC
' A! g/ w3 \7 S+ J+ Z Limit DW 0 , _$ U' `% \2 U1 \ f) D3 e& h
Base DD 0 & K8 Y5 ]5 e1 k9 y
PDesc ENDS
2 U8 a% h" M7 \# \" w9 O
# @) c1 D0 v" F( |! @9 IGDT_def Label Fword
( P5 b1 v/ V% YNull_Desc DESC < 0h, 0h, 00h, 00h, 000h, 0>
; V: G1 E$ ]" c6 O8 rData_Desc DESC < 0FFFFh, 0h, 00h, 92h, 0CFh, 0>7 W; f( N4 z8 Y ?" o+ J
GDT_Addr PDesc <$-GDT_def-1, >$ T9 ?; M9 y3 X6 ^- |2 ?0 J3 |" a
, I" N+ o4 W+ Kmsg1 BYTE 'The Input Address is '8 k6 O$ Q$ m( q4 G3 g1 A
msg2 BYTE 'The Data is:','$'8 v8 g5 @' A7 A" ^) M$ I3 y+ f
5 @( o# H# H6 d2 w
DSEG ENDS. K+ k5 j6 @/ K% Y* G8 v0 k) ^* C
9 J" s" |7 Z! X# `4 ^
' k# }$ K+ P$ F;------------------------------------------------------------------------------------------------ 7 A* C8 W. R P. z4 U( e' V
9 f/ o* w* h: c" Z1 n8 [7 B5 y4 C0 I
ASSUME CS:CSEG,DS SEG0 p1 L! t8 G4 W7 i
4 F X. v0 F- Z
CSEG SEGMENT USE16'code'8 B- h2 A# P, X/ ~- R8 m; ?; g/ J
; {" E# C9 `4 v push ds
U& C6 d# `: s5 H3 Q1 s5 Q push es
7 t, p# t( g& }5 j1 A9 ?) p% t push fs
0 ?# D. E, O; Q$ x! W- f' F/ a9 E push gs
$ @8 c. S" C: ?) X2 v Q& [& A
1 [& u ~" N* r4 m; e; A2 x call big_real_mode( I, v s- E- J7 _5 s
5 l$ Q( s: j( k4 v1 K- q
/ ?: u, a4 J7 H* a( j8 l
mov edx,OFFSET msg1;) o/ u) q4 Y9 O
mov ah,09h;
0 g/ w ~/ m$ ? i& \ int 21h;
5 @' n8 ]+ e O4 I- K6 C mov edx,OFFSET msg2;7 D9 y7 [7 C6 U9 J9 r7 c6 m+ b
mov ah,09h;: x# m- A1 c$ k9 y9 K, L# z- X$ B
int 21h;! N( G% ?" K* }$ R( a" x
* w' t, N3 _2 _) U, _' n: I0 S call PSP # ` f' C$ n* M% i5 ?! `3 i- U
4 J0 ~4 w) s$ G' b call crlf 6 V5 k" w, e' X: Q$ {
% g, T" h) G' X* h7 J/ r; m
mov esi,ebx8 u" R5 d0 a1 Y7 V8 X2 c
mov eax,fs:[esi]
3 i% s* y4 o$ K$ o- w. _ out 80h,eax( R; Z3 ?% U0 q" T$ u( O
mov ebx,eax
5 q( w) W) g$ J, d2 H call _8bits1 }* q8 s9 O4 ^$ R \$ L1 h4 D. L
7 v6 z: {2 @8 J call real_mode
9 K2 W# q- b% y* m; K* P. J, q + t- G7 Q9 d; f0 m# R) `4 L
pop gs
3 N6 T, F: ]$ a) P1 ?: A pop fs5 T0 g# S5 K+ A. {
pop es; u& w9 Y0 j- J" _& V% Y
pop ds
4 R: O% v l* N- e; g
6 w' G+ I; \" O0 I* l# @1 x( H .exit" S: F/ G& y7 |
;------------------------------------------------------------------------------------------------# v H( r1 p6 j6 q; b! G9 \6 J
big_real_mode proc near
( A7 U: G( f' Y6 j, U. W9 i in al, 92h
& |7 O8 w; s9 C* Y) s or al, 002
# F2 A* j k6 M* _ out 092h, al1 b( s: @( w W' r/ M5 h# G
out 0edh, al2 Z3 N3 V7 ?6 D r: m8 j
cli
1 x% `$ v/ p( x0 N* Q" \" w mov eax,DSEG* t5 E; W' {) `: O! x3 ]9 s
shl eax, 4* P/ ]7 B2 S( M
xor ebx, ebx3 O. t8 e7 r8 J' I6 Z0 u
mov ebx, offset GDT_def. ]; M9 ^. {9 u: W3 P, U# z* _/ F
add eax, ebx( [- f/ o) L1 ]6 _/ w. m
mov dword ptr GDT_Addr.Base, eax; z* r& t! ]1 K9 Y
lgdt fword ptr GDT_Addr
/ K$ s0 g2 m; j0 B) ` mov bx, 8
; F2 S7 B. d. b% M& f+ y6 a, N m1 l' l mov eax, cr0
! U) p* }2 \. }( L6 H. ` or al, 1. F/ Q, f" x/ p4 G
mov cr0, eax5 o& H$ N& P1 W3 }
jmp PMod
6 S, r; G: Y9 j+ n+ N# x APMod:, Y* ~ f2 P- f* P. m* o
mov fs, bx
! N. t; y n/ _! a; d mov gs, bx
# V8 C* q8 C. s8 B8 _2 R, L+ N mov eax,cr09 w3 X8 m* y+ O
and al, 0FEh
4 c. f; _$ R- J* h5 L/ P mov cr0, eax
/ d( f( [4 c( l8 I, w7 a; Y8 w jmp RMod7 k8 H% Z0 n$ J/ Z( [& H( z
RMod:
% P' b8 t; x8 I X xor ax, ax
' h0 `; H, f3 M0 k: ^ mov fs, ax
! K' F: U, H z n mov gs, ax- C P; h. k+ {1 Z4 j; S% u0 N" r. a
3 e/ _ ^! M% L2 v6 {
sti
' q( X2 E/ J1 Q- p$ M; \+ E
- M) t) H; Y" M @ ret
, R5 g' P) i6 w# R- o3 Cbig_real_mode ENDP- g$ h& ^1 f# `! G8 R
;------------------------------------------------------------------------------------------------3 \; I0 g8 y" S' o7 R+ E
real_mode proc near: U$ `) r# c7 H* K6 k- ?+ @; L
in al, 92h
$ A& _/ S% f3 }0 N' _: p5 C and al, 02
) Z3 y4 P' t3 e out 92h, al
8 ~0 E0 a+ r& C9 l7 n ret3 T4 L5 V$ O, k
real_mode ENDP, O4 {8 W* A8 {9 z; P/ G8 ~
;------------------------------------------------------------------------------------------------
1 f- l6 g5 f2 g5 q/ y8 x* e+ qGet_Commandtail PROC near! E/ m# b* e3 L6 E b! ?
push es $ X8 d: s7 r; i. ]
pusha2 f4 a: `/ ^/ q! c2 L; \
mov ah,62h
) e5 r" c) f+ O: ? int 21h) Y# N% X* O3 O7 `' ~# g
mov es,bx
) J( m. a; f5 P popa . a8 Q0 ~ y# g2 W
pop es
! P) ^0 }' A# e' K+ e r ret
" L' ]6 K0 t% a9 N9 ZGet_Commandtail ENDP
: p0 T) ~, d' N5 H;------------------------------------------------------------------------------------------------' I& f: x0 C" R! b- J
PSP proc near! R0 O. Q7 i% W2 b/ j0 L
mov ah,62h) |$ { ^+ L! e' v$ c" K' ]& U
int 21h
5 e' U5 n( w4 l" p5 G, R mov es,bx ; q, a+ i( R+ o+ D6 U0 u7 ^
xor ebx,ebx; R7 N7 F6 H( ~8 W% F0 i6 R. _
mov si,82h
1 S" _9 P5 _, c, ^- } mov al,es:[si]
; g' j0 m/ W. ^4 N! r8 C4 l call Change
- f# e4 x* G" j mov cl,4/ y; V" l R/ d5 s; N8 m0 c
shl ebx,cl( D( G; o: U& H- j
add ebx,eax( V1 m a! ^7 Z" U; c
mov al,es:[si+1]
# A3 E- ?) l% o9 Y" A call Change9 O5 W/ t, t' G5 m
mov cl,4
6 M, J! M" F8 l8 G shl ebx,cl7 |( a. x; U) `5 C* R, \ T
add ebx,eax
5 `3 k! C+ r$ n) v1 {0 n) g mov al,es:[si+2]
0 r: d- i& N8 B! c, R call Change
3 f8 A7 _, v% o! S3 Y% T mov cl,4
& w* Z$ G1 R' A$ x- c% d v shl ebx,cl W! x8 D( W. \3 D" W
add ebx,eax# R; _: `; _, ]8 b
mov al,es:[si+3]
* _7 w2 }/ ]0 A* ^ call Change& L( X- m1 Z! h+ t% e
mov cl,40 T: ~# ]0 Z+ h0 i- G8 m9 p- `5 R
shl ebx,cl
$ P& Y1 _# |% l. _- @: a' H. o add ebx,eax
; P* [* w+ v- L mov al,es:[si+4]
9 o1 u, x d3 V& J. d( `7 g( f call Change' u, `! F" e( p r1 @4 N
mov cl,4( f0 q8 p0 W$ M, G
shl ebx,cl
& `( e4 `5 }4 P" x. j0 Y( W3 I+ l add ebx,eax
W6 P( ~1 }' y5 @( ]3 k mov al,es:[si+5]9 ^4 a/ @) m/ t \: H2 R% ^
call Change
( s% g4 T% L2 D* s4 R) s mov cl,45 X$ ]1 I5 B* X- p: t0 R
shl ebx,cl
9 m0 J) m, Q* n; z" W0 p add ebx,eax# m8 G3 h7 u' M
mov al,es:[si+6]
2 F2 t$ ^ |4 B/ z) d2 Z, b call Change
# Z1 G" F) e) u8 C1 E mov cl,4
, e# c. P" @9 j4 w shl ebx,cl* }( a2 [ M7 O
add ebx,eax
* @ _. o8 |: F6 ]. a* O' i mov al,es:[si+7]- |2 t# ]6 M0 H4 Y0 E. e
call Change
) D3 x* E Z. d* ?0 \* A mov cl,4
) N; }, K% m- {$ T shl ebx,cl
' c% r% s- q- k! N E, [ add ebx,eax# D. V5 K/ ?1 r3 V3 Z2 ~/ {
ret
1 N& Q3 J* z7 e: f& ~( V, ePSP endp; a7 g! g# C& X, ?& O" x& j
;------------------------------------------------------------------------------------------------2 U& N* `, V8 _5 {
Change proc near
4 K+ ]3 _" g8 D' fA:
U/ \) ]1 c2 N" i9 O% a3 ] movzx eax,al
" D, [0 ^* i$ }# b6 F mov edx,eax
% L$ ]1 o2 O8 Q) N cmp eax,'0' ' D! t! |$ C% E$ i
jb A) d; A% w/ y# O! ?+ f
cmp eax,'9'
/ P7 ^4 w7 b, S ja B7 V+ q% i- Z' V5 C
sub eax,'0'# |; i4 W( k' h1 `/ W5 F5 h
jmp short E6 z3 d' K4 Q% U: F- u; D$ S
B:
2 w6 M4 L6 R9 t7 t! m9 P and eax,0dfh , K1 _0 }8 {. P2 V& \$ t
mov edx,eax
) r1 u7 U( `/ W( O9 B b' z _ sub eax,37h
, ?# r/ D: x+ R* p cmp eax,0ah
5 o* T: Q# ~5 j* o' P$ ~. |9 h jb A
# C' N# p* } @3 {4 {9 W7 m cmp eax,0fh
3 Z) }* `6 \2 q) G: F& ^ r* v ja A , a* `; R$ L* s& y
E:
$ Z+ x1 n7 F; [% T" _% ] push eax
. J" i N: c7 W: G: x1 F call PRT
/ s9 ?8 ]( ^0 }' d7 W7 S pop eax
" `7 H) Q& I) u, q5 ~9 iCExit:
! c$ _( D# a) q" b9 H% S ret
F. A& j4 _5 A! \1 h) ]5 G) MChange endp# M5 ~$ j9 h: F( l+ H- d9 P7 l2 {
;------------------------------------------------------------------------------------------------8 l, J2 P5 ~* @" Q" P6 b
PRT proc near
0 G: g T+ @9 O8 e, f6 b mov ah,02h
' B# I) J" @* T/ N int 21h
% N9 N1 n- f' L% l ret
& L+ _* N: H% c- i% ?PRT endp- V# M* b; \( d% c$ ~1 v, z. g) p
;------------------------------------------------------------------------------------------------
3 a6 v7 n! ~" y8 g: ?crlf proc near w6 D# k+ O" L* n ^8 Y# |
mov ah,02h7 m' V4 @7 @. u' x4 n* z3 P0 @
mov dl,0dh
- B/ k @1 o( O% f4 Z int 21h7 c, V! e- D( {! ]) `
mov ah,02h
5 L' O6 o8 K8 Y1 u& m. ]: h r mov dl,0ah
, j! W% G6 k# h' ~/ T7 t int 21h
4 g; J5 q/ n, Y$ P$ X, a% Y1 O# p ret
8 t6 T" \6 x6 L( E3 [) W# Vcrlf endp% W! Q- N& w f% y; f
;------------------------------------------------------------------------------------------------$ v$ M U% ]$ J' q
_32bits proc near
: S8 C6 J/ D( W) G9 T8 C! r8 s$ q pushad
2 u& P* ^7 U6 { mov cl,4$ j9 h. J/ }6 C; f
rol ebx,cl
" J8 r; C3 T9 Q7 @7 B; \2 v# J' O call print_4_bits
# ?$ {2 n3 |5 Z rol ebx,cl
+ I. r/ N' w4 e# ~9 T call print_4_bits1 D+ ^" S, C9 B; H
rol ebx,cl8 f/ M& p5 I8 o! T
call print_4_bits/ R- b+ {5 N- \2 T0 t
rol ebx,cl
" {8 G5 o+ c* u5 T; r5 w n call print_4_bits
9 [+ v* ?: A1 k rol ebx,cl% \4 u! s& X1 U `* {( F
call print_4_bits
$ J2 C8 S& i _* D2 s& B S rol ebx,cl
: M) O- e- P7 l. U- E9 u, H call print_4_bits
" s7 K4 x+ S/ u& s6 B+ s5 F rol ebx,cl
2 [* J4 H1 Q8 [/ A9 t call print_4_bits/ _% W( T/ S! I$ d& x: Z1 Q3 t
rol ebx,cl( v# M, |# ?& \" M( z8 z# [) A
call print_4_bits1 A; b1 j8 C5 u0 m: k, c& ]
rol ebx,cl
1 D3 O, S+ J9 u( O _: z# Q0 a popad
1 m: I1 m9 y$ ^! w5 j ret# u# q5 j" b V/ q
_32bits endp
- g( b6 d. i% [6 A+ b- U;------------------------------------------------------------------------------------------------
4 i# K/ i" L2 y_16bits proc near
. Z% ^2 E- d$ _8 z) x pusha " `) ? r8 _- q1 j& `
rol bx,cl
( T# O& l' I, ]+ @( B y% E: A call print_4_bits
/ N( ]$ y6 z4 r7 Z# ] rol bx,cl, H# C o8 b/ g: Z' U' W
call print_4_bits
* F) ]5 u& y- J7 ^ U8 m rol bx,cl
4 b' t2 ~3 a* _/ y call print_4_bits
/ N4 |7 @" [, D; D: `9 K4 ?9 s rol bx,cl
7 l G, ?. F1 L( f" Z4 X0 v call print_4_bits$ y6 p# h: ]% o2 k, ]
popa
) U# S/ t- }4 h! R9 e ret4 w, N& e- [; g
_16bits endp& ~0 c/ Z0 i4 \4 @7 _; Y3 H
;------------------------------------------------------------------------------------------------
: y& X& c% Z5 U1 I5 ~- ]1 a' P, k8 \_8bits proc near9 B1 W; V# [. l [: \
pusha
5 C4 Y4 U: N4 X: b% \$ l+ F% _ rol bx,cl
1 Z- q. J% x9 `! D) M0 W call print_4_bits" K( R) l( f; [6 ~
rol bx,cl/ B5 J7 Z7 s8 @4 W: \
call print_4_bits& u; C7 @7 _5 j' W6 l0 A4 Q& J
popa
+ c3 i) i7 |3 v- ] ret
4 r: [1 f0 S+ o7 G* Z% @7 j_8bits endp* ~ y1 T0 a. q" a3 Y2 P+ l
;------------------------------------------------------------------------------------------------3 q5 U% q$ I$ H* M: b7 {1 C, x
print_4_bits proc near
; K3 @. Q- P! l& W* \ mov dx,bx' W" }$ a+ V% c+ q. Z, g# C
and dl,0fh
. P+ E8 n+ L8 T# N8 A add dl,30h
2 Q! ~. z% a5 k3 ?4 @0 `7 O" G cmp dl,3ah/ A" a/ N( ]6 l' H: z, w+ n. P
jb print: ^/ _7 D9 T' O
add dl,7+ h+ ~: k* w9 _3 @ }! r
print:
% D7 B8 m0 C. a2 w# H2 [1 F mov ah,25 [0 m z5 N1 i5 ?& F
int 21h
. x2 h/ C6 V. C+ Q+ n" J4 K) c ret! x% [, b% m. B# R6 s1 v& r; v( b
print_4_bits endp
# o0 Y6 U% T9 U' m o9 V; `;------------------------------------------------------------------------------------------------- g/ r3 e2 c" l9 b5 o* {- S& z- F
CSEG ends. k/ l# k% R3 |* X1 I& y
END |
|