|
|
各位前輩好,以下的程式為在 big_real_mode 讀取記憶體的值- o( d* W( K9 ]: S1 R
* h5 y: _" V0 q" o4 N) ]9 w
例如: C:\memory.exe(程式檔名) 01000100(Address)5 T ~' L. r/ F; t1 `& w) D" J; y& x5 A
! q. A9 z" i, }5 }- P
則會顯示01000100位置的值# i9 e6 K o* O
. F7 E; Q9 F& r. Y1 W
但是我另外還有要顯示出字串,但是顯示出來都是亂碼3 l* _0 B& b6 H) |
2 J, k9 D+ Y; g M r
麻煩前輩給我一些指導,謝謝 ( H2 p! _8 J# w1 P$ V
- x% ~2 {, Z! K# @3 A' d, T k8 y
; n/ I0 S* E& t.model small9 w6 I- X. S: z ]& ~5 n
.386p4 O- E+ Q# b- l, C2 ]& Z% D5 M! x
;------------------------------------------------------------------------------------------------; y4 J: R) D1 _; C* F U
DSEG SEGMENT USE16'data' . A' I6 V5 z8 P3 ^$ K
, `6 \2 g9 N! n, Z( \" h
DESC STRUC6 [. b6 S$ p; s/ ] g
LimitL DW 0
! q$ F8 A4 {2 P BaseL DW 0 2 t. d* L; W5 b; [
BaseM DB 0 ! t' M+ ^: \" f/ q. m u
Attributes DB 0 0 K1 A- z- ?' U6 z
LimitH DB 0
" G6 Y/ \! z, t BaseH DB 0 : g. M- R" f3 j9 N" B
DESC ENDS
& M5 t7 E4 I# J! v# K- X
8 T$ s* N; b. P# \9 VPDesc STRUC
/ u0 e1 v/ e1 P0 r3 i Limit DW 0
% C0 q0 |+ z/ [, u3 w4 o* ~. l Base DD 0
) [9 P `" n5 w: f6 l1 Z2 SPDesc ENDS% v- u- ^4 |% O0 s a( v$ Y- }
- d( y6 @1 L% j! cGDT_def Label Fword7 [0 l: V! k+ Y7 y7 J3 W
Null_Desc DESC < 0h, 0h, 00h, 00h, 000h, 0>% u: C5 w+ S! q$ ?% x
Data_Desc DESC < 0FFFFh, 0h, 00h, 92h, 0CFh, 0>
7 G3 u0 E4 n9 u" D) ]; Z3 F9 [GDT_Addr PDesc <$-GDT_def-1, >1 X+ T0 M- L5 _5 R2 |* t$ }" E
4 n. M1 V. d+ V% Kmsg1 BYTE 'The Input Address is '3 {5 X& a$ Z, G# x, `$ M
msg2 BYTE 'The Data is:','$'
0 M% ~) F- ]$ V6 s7 ~" I' s/ c' _' q* ~+ s3 T2 ^
DSEG ENDS, e a) G0 t+ e2 z! O7 B
, j K% ~; {) m/ _
8 R2 _/ |) c! p; t- }6 B2 N4 |;------------------------------------------------------------------------------------------------ : ~9 I" J; E5 G
3 T' T# G: R' V7 BASSUME CS:CSEG,DS SEG. m5 d! _- w$ M# b
( o: h0 T& U6 g6 B2 n: L
CSEG SEGMENT USE16'code'
2 g0 F/ {, @6 L4 J9 P( s
; N; A; h- a3 ] push ds) J8 x5 l/ v% T8 h3 p* R
push es
9 J% n0 F9 v, p R. e+ v1 D push fs
|* `9 }5 A4 g7 L% p push gs
?- b. b" v0 E6 E; y
5 \7 u D% Q; ?4 w- g' a8 S call big_real_mode
6 o& A6 X2 q+ |1 G( z" d( b& K( @- }) x# P7 [
6 {" y- D: z0 O7 a
mov edx,OFFSET msg1;+ P- @- d& G. B7 P1 B) o
mov ah,09h;
! b# y% d6 g% X. t2 z7 H: x0 T2 [ int 21h;
8 @4 w6 h* m* p* f mov edx,OFFSET msg2;6 U$ L+ N8 j# m4 t$ D' ]9 Z
mov ah,09h;
( y" `3 x% f2 ]. o+ q& u& O& S/ \- d int 21h;
* ~/ o% J' J2 F, e8 ^* G
& ~0 z$ f% H1 |. t( A% K. ` call PSP 9 p6 i( [7 Q4 Z9 f8 y5 A: n! G
5 ^* C" c, I' h4 Y: a, N% m7 f call crlf & N0 Q1 E0 T- r) \9 h# r1 Z1 a
% Z& ~& G' w" y mov esi,ebx$ K; v9 v _0 m" N# Q
mov eax,fs:[esi]
* ~- d, I+ r K* I# X$ S2 t out 80h,eax
0 B# }4 u+ Q9 p: w4 p mov ebx,eax3 R7 [7 M g, v" S4 C
call _8bits
4 Y0 @% `+ i# ]+ ]9 [ / N' V: O; A! b# D' D; `4 M- g
call real_mode
! u7 K+ I i* f" C$ r; {* h 1 {) F5 f! X# V% f. V! x' d
pop gs
8 [$ r# V( O- j0 z- e3 [5 A7 [ pop fs! F y i: t' m
pop es* S) v- ]+ I5 i
pop ds
/ [5 A; T! |$ e9 t
. E) }! J! u+ l) i( x0 U8 s .exit. {6 n2 l/ ?- {5 L* ~( i, ^
;------------------------------------------------------------------------------------------------* Z5 R$ H; ~' y+ C# v0 K1 l9 X ?3 s
big_real_mode proc near
; o0 c, a7 v, i5 u9 Y, ?+ ]5 H in al, 92h9 }) s0 X2 S, j9 ^3 D6 D, Y p6 X
or al, 002: f4 w6 W* B; A9 s' V# C
out 092h, al6 I7 ~: k/ R9 ~3 J( `" R H% ^
out 0edh, al
) N- e& ~ \3 I$ L( M cli1 l, _2 x1 a9 q% s/ j2 ~
mov eax,DSEG! k4 w, p9 j/ z; r, u
shl eax, 4
; T$ n' {7 S, Y5 ?0 X xor ebx, ebx
; Y" L; |$ h/ b1 C( R mov ebx, offset GDT_def. s# r/ ]6 \0 K1 W0 {9 o
add eax, ebx
( g; y6 [& w; x: B7 _( ]: X. L* M( _ mov dword ptr GDT_Addr.Base, eax* c T% ~1 G& R0 ?! `5 b( c
lgdt fword ptr GDT_Addr
7 F, n9 a ]7 T7 c6 D- y mov bx, 87 J8 n4 `* b- X* `* F% `
mov eax, cr0
( l) b) w u+ u- E4 ~; ^" j or al, 15 b0 b4 n/ ]2 K. X4 `/ N
mov cr0, eax" |& E4 d. ~5 _ V# T5 I- Y
jmp PMod
5 X3 m& D2 q$ T/ |0 x% `PMod:
* j: V3 A0 u, d7 C0 I mov fs, bx
! K# F% E! i h mov gs, bx$ ^4 @5 U7 d5 @$ g9 g7 v
mov eax,cr06 V7 e5 v, ?1 O* Y- G5 [
and al, 0FEh
6 v% e) {6 q# {* ?+ U3 k mov cr0, eax
& f, r' K# n% N' e% r1 s jmp RMod; z- \) O4 ^/ f+ d4 E6 c5 D, R
RMod:
7 g% m( S8 K9 [2 J+ k6 L) U- p xor ax, ax
& l4 b/ \+ e- V. y* A8 D mov fs, ax
6 n/ L8 `, p5 p0 Z* z* \; k* i mov gs, ax
5 m% A7 X+ s( p. ?% K8 D$ g / R* U% ?1 ~& t7 H( r, ]/ L
sti
( l2 {+ Z' y& l9 a3 C
+ p, T! J( ?2 Y; [ V! Y3 I+ g5 u ret) s7 s/ `1 B) L7 ]. o4 ~
big_real_mode ENDP B5 ^& }8 i5 i/ ~
;------------------------------------------------------------------------------------------------3 s+ _" D1 T; o: W
real_mode proc near
0 t% l9 C) c, d0 A- G ~ in al, 92h: C7 t0 T8 q4 I; W
and al, 02
( f; t( |. f. u5 u! F$ y/ _ out 92h, al
; V( O& L J8 \1 F0 N1 R ret8 M. A1 O( q' T: X4 e
real_mode ENDP
; q8 M1 ~& Y4 Z& S;------------------------------------------------------------------------------------------------
! |9 k8 u4 R# v9 W& s$ kGet_Commandtail PROC near7 X5 U: X) n9 d
push es
- M) V; r1 i) T, I$ Y: f: b pusha
' \8 H) \/ B7 x$ Z; ~$ [6 \& u+ t mov ah,62h $ x% \" R1 _" q* g. ?
int 21h4 y/ O; V! T- D1 Y" G
mov es,bx
8 \# ^+ _/ l1 Y4 y7 O: |5 A" ? popa
3 `1 }& f; p2 _, F/ N" t4 K2 M- Q pop es( u/ L: N# o' O7 a& P8 s& h |
ret6 u( ~9 L* q3 x3 O& _
Get_Commandtail ENDP; k3 _4 w& @/ M2 V! \- x
;------------------------------------------------------------------------------------------------& D6 k- u, \2 t
PSP proc near
% S5 g% J- T. U# ~% | mov ah,62h
; _: y9 p) y) J0 K- f int 21h0 b& y! B' q+ L" k" d5 z
mov es,bx
7 p' q. ^: ]% G9 ^1 ~# r/ }- x( G xor ebx,ebx
* O& H0 L" G3 U6 [ mov si,82h
& X s' Y" C7 l+ D# A3 L mov al,es:[si]/ C# L2 q+ k) B6 v' j
call Change
! |. Z7 ~4 V( w( x7 v mov cl,4
5 ?! i' D& z3 M! K shl ebx,cl
1 W( N3 }. n5 {: r- b4 Q& {, ?, `4 ^ add ebx,eax' q, _1 C; [& X# Z; a2 K( `
mov al,es:[si+1]2 [7 S! C1 d: }, C
call Change9 O, B) d) A( H# [
mov cl,4- f+ W- ]* q6 z$ x% u6 L
shl ebx,cl
5 o% l' _4 W. V add ebx,eax
8 u3 J4 ^( W' P H! E2 Q mov al,es:[si+2]* m4 Q, _4 t/ k7 Z2 w; w u
call Change
$ j6 X O! D* E; t mov cl,4
8 k1 M$ P8 D8 S/ H) D3 J shl ebx,cl
4 W0 b. e: \; g, h) F% v/ l0 @ add ebx,eax
) \" o/ T$ ^; o" W* D0 s# Z mov al,es:[si+3]% U2 B7 A8 K2 R: y- q
call Change1 e `7 p( o. B0 P( o
mov cl,46 m5 p/ b7 b6 i" q# [( ^8 X
shl ebx,cl- D2 o. B% ^- D) W* Q( _" f4 j
add ebx,eax# l! W/ n5 S9 ?& L
mov al,es:[si+4]/ P6 J% `3 w4 K' z
call Change" n5 D/ K2 S0 W9 ^6 R
mov cl,4# V; H# q" Q J( `, a: Q
shl ebx,cl) r* y# n) `, f* c/ e: H" _
add ebx,eax% J A4 S m+ _
mov al,es:[si+5]
% t3 `, q% a4 `* N$ q call Change
0 b8 \: `# g# g# q1 d9 j: e mov cl,4
) L) g7 t. Q; l7 [! b shl ebx,cl
3 z) W7 o$ f( a, { add ebx,eax, T6 r# Q1 a5 X4 u0 p
mov al,es:[si+6]
8 V, U. I& v4 o4 z2 a g/ e call Change. i- d. _; B' e" \! D
mov cl,4
/ g; U3 L# ]) L% l shl ebx,cl7 |& r% B3 f/ O+ O X9 n
add ebx,eax
9 {; m, e% u$ F# e d1 z mov al,es:[si+7]. k9 D9 c' a, D
call Change
2 C, L0 F. H/ O# f4 H mov cl,48 N5 X/ F6 C1 u3 M6 w
shl ebx,cl
7 x7 S' e5 t0 i9 y" d! a add ebx,eax1 m$ M8 }6 j' F
ret0 q3 m7 W* x5 d
PSP endp
) ~7 T. C% [' \9 I;------------------------------------------------------------------------------------------------7 R p# ~& Y1 g; I4 I( r
Change proc near$ p8 h% s7 c# L/ S
A: 6 ~ ^+ \; X! r" j7 Q' {
movzx eax,al4 }; @/ v6 H+ M$ H. a; u
mov edx,eax
& }8 C2 Z7 P- x( ?+ ?: u cmp eax,'0' 2 t* a5 M& A( l" R4 S8 s; X1 {+ N
jb A
/ F/ |( C, i$ W7 G cmp eax,'9'
- x& \0 d" l+ z6 b6 s ja B
$ f* ]1 b. \% k8 J- S. ? sub eax,'0') R. }' d% b6 l! H
jmp short E
. w0 U- D! {* v+ w" u- Q: V6 V9 dB:8 r, b; n3 P g0 b1 E% W
and eax,0dfh 7 [* E, ?& G u! P- r
mov edx,eax- M L( P5 l" [: r: ]- i
sub eax,37h
! Z3 R. P4 I9 h& W; U; F8 X cmp eax,0ah+ U" H* W4 I7 Y+ t
jb A
7 K. H1 e6 a5 W4 j0 S$ Y) n' t cmp eax,0fh7 s; B5 R' M T* a [0 m ?) V
ja A 9 y, ~9 K' m/ a' `# q
E:8 |2 c2 D* |; ?( t
push eax 5 ?/ I0 X7 G) |% v' e
call PRT ' Q+ U$ Q; C; f
pop eax
' X+ [4 z1 ]4 c- ] YCExit:
) ~* _0 v& T* t6 J( E1 B0 ] ret& V, x3 @. k" }! [9 q
Change endp
3 g" H$ {6 V& Y; v) \7 K0 \( _;------------------------------------------------------------------------------------------------/ T9 B4 ^; [1 ]; p- h
PRT proc near4 k3 S, k2 }/ J, T
mov ah,02h
z- _6 i* o/ ~' \" U. C int 21h% ~0 Y$ k( U* j; d# @
ret
; A- G$ m- i6 Y. `% t: EPRT endp* R. Y' L' y1 m" f. f6 ]
;------------------------------------------------------------------------------------------------
v$ I/ _6 p' W( n% ocrlf proc near0 d' g! ]9 p$ f1 l, s
mov ah,02h
! O' J7 g1 P+ O6 G6 m" s mov dl,0dh+ z5 S6 |* y0 J/ @3 ]$ F+ d
int 21h! H% v6 k6 \" l1 j* O; t/ P" u `
mov ah,02h
% \0 K9 P( S" f6 ` mov dl,0ah
, S- o m0 f6 j! m int 21h
0 n3 Y3 B: @ N3 f4 L& i1 I ret
4 A$ y+ e2 h. z+ `crlf endp
9 a6 l, k Y Y8 Z4 G;------------------------------------------------------------------------------------------------0 Y. A' N; ?1 r. b. m3 b, l
_32bits proc near
/ ~$ d+ _$ y, I8 u8 w pushad
+ [# B. J; K1 { mov cl,4- A6 S6 w5 d7 X- l9 g
rol ebx,cl
) H# {2 C; Q( L0 E7 c call print_4_bits; Q2 p k/ e2 J, b' u
rol ebx,cl6 ?7 F$ Z+ s" z; f9 ?, m, b
call print_4_bits( F3 h) w) v$ F( O r7 R
rol ebx,cl
6 u. Q) A- G, e call print_4_bits
0 W$ P3 K0 f& I5 J* P! q rol ebx,cl
& X; F7 Y; ~( @3 \% O! l/ { call print_4_bits# k. ^ q( Q. @2 e# Z# t
rol ebx,cl
( s m. q! Q) b$ @/ R7 r J } call print_4_bits
' Q5 S$ O; C0 w* y# X# x+ w rol ebx,cl
* d3 t1 f. P' I) Y* o call print_4_bits
' w& H, L) N# w+ [$ N; K rol ebx,cl; N1 _: T: h `: N# I- d3 z
call print_4_bits
; F; F7 D! p$ D$ I5 @ rol ebx,cl
6 p) w1 d7 E! ~" X+ T call print_4_bits
3 S. }; u# a" K: l& P, X3 Q/ ~ rol ebx,cl
0 |# c$ q |" H. g popad
( y* F' D& e2 X* ^9 o) [5 Z f ret
. z! N0 M2 Z2 C" Q1 }_32bits endp
5 j. K6 h7 E) E" d;------------------------------------------------------------------------------------------------' p- {3 E8 v# h
_16bits proc near
7 D2 [6 C8 m8 V pusha 5 M7 R7 V. @ @. E6 o0 |0 h
rol bx,cl
- h X# W) p: G) y; V" S/ D& K call print_4_bits- K! y' m* m7 K& f4 L
rol bx,cl3 s$ Q8 T$ B. q( }0 W# e* b
call print_4_bits$ E6 N# u3 H+ U3 g- c8 ~
rol bx,cl! z9 X: X% V$ x* ~- I
call print_4_bits V$ }0 k, ~7 o& u4 D7 z( z( U) f
rol bx,cl
2 j4 _2 o2 {. N5 O call print_4_bits
9 Y. O" j P% [) i popa6 y I' e1 b" [3 o$ _7 o5 t
ret
0 M/ E; f- b. M1 M_16bits endp
2 P: Q" |$ C1 @0 u5 X;------------------------------------------------------------------------------------------------! d8 S# } ]3 Z& K, W: `1 f
_8bits proc near& a# z2 v& f2 ?% E1 h; R2 T5 S+ U1 z3 l+ r
pusha
& H2 Q% O. f+ `2 o1 h rol bx,cl3 l6 ?( Y6 Q& |5 E3 o
call print_4_bits( Q" _) O0 Z& t6 ?" u: m/ z
rol bx,cl
" b) U0 v' N* E call print_4_bits* Y) A/ a N$ K* \
popa
6 G* D( t7 P5 T0 x! w ret& P; f) d/ Y& K# x6 N
_8bits endp
" v8 G( u8 j$ s;------------------------------------------------------------------------------------------------
! C: y. e+ \$ h1 }% ]1 ]# ?. ]) L# lprint_4_bits proc near
$ h. ^( K# \" W. K \$ N/ a mov dx,bx, i! i. [% t6 G% u
and dl,0fh2 V$ [0 z% q! \& h) T
add dl,30h& z: V$ n" w: e3 t( f6 A9 ~, {
cmp dl,3ah$ ? X$ G; w5 S+ v4 z u
jb print4 G# z) `* e9 q e% z
add dl,7, i' M* u: [1 V& i! F& J, B! D
print: ! w& a( V4 [3 Y9 `" g- w
mov ah,2
1 J" Q/ y/ R( x: l int 21h& O) B( K5 f+ w. v. m$ w9 d6 j
ret
5 F$ d8 C2 g! p& R5 y: Pprint_4_bits endp
( ]- t+ V* p s* k;------------------------------------------------------------------------------------------------
% {! D. Q6 X8 S8 w6 ?CSEG ends
. S# r4 F: [' y Q1 n3 tEND |
|