|
|
各位前輩好,以下的程式為在 big_real_mode 讀取記憶體的值* ^8 L/ n1 ], d; p! O, p; s, p. o
& J0 c9 s% r( m7 q E例如: C:\memory.exe(程式檔名) 01000100(Address)! {1 E" y. V! o" K ]; ^
1 r* E3 u# l( i
則會顯示01000100位置的值
- f) e6 {* Q; ^3 t( ^; ?+ k, J a. g% J
但是我另外還有要顯示出字串,但是顯示出來都是亂碼
" Y( K- L7 B0 U* ~( p! Z9 O/ t
0 F$ d' j# J* d" X麻煩前輩給我一些指導,謝謝
7 j6 w( L' G, J, s! B5 V! z9 x
. j" i6 y) Z0 v6 e3 \0 |& k. c5 j6 y. V" v8 r
.model small$ |) ?$ p- Q# t' Z3 c) D) p
.386p7 q4 @% F6 }4 C4 T I0 }( s/ l& Q
;------------------------------------------------------------------------------------------------: H3 h% r$ n1 I }5 [
DSEG SEGMENT USE16'data' , ^+ ^+ ?" M% e+ R1 m
q! W( ^6 y$ V8 C, |DESC STRUC- [3 @1 Q' y0 V0 h
LimitL DW 0 @. \: a+ N7 K0 ^: K/ [) z$ K
BaseL DW 0
$ C4 S" T- u- M) Q BaseM DB 0 1 m. g( [' N8 |( U0 E2 U3 [
Attributes DB 0 E7 u1 | E/ f3 W1 {/ }
LimitH DB 0 7 x+ d; v: R. s* p' `
BaseH DB 0
% D( w; H+ b, _: H5 P1 s( s# D4 ^DESC ENDS
/ ]7 }; U* X- P6 e( D0 ?
9 K U/ v) u4 }$ F7 y' mPDesc STRUC
' q$ y2 ?/ s4 g% f Limit DW 0
; m3 l) A& a0 c1 c k Base DD 0 |9 H# Y7 e& a
PDesc ENDS- l! i$ X7 C9 l- R5 n: s) F
) m& }; P& b8 w _$ ~
GDT_def Label Fword( c8 j$ x, d$ ~" ]" y# g$ O0 r2 M
Null_Desc DESC < 0h, 0h, 00h, 00h, 000h, 0>
$ Y8 }- s, q1 x* GData_Desc DESC < 0FFFFh, 0h, 00h, 92h, 0CFh, 0>
/ f0 |% g3 g* ~5 u7 T) KGDT_Addr PDesc <$-GDT_def-1, >' S" z5 |& y: ~" `* {# U7 x
9 F; \9 p3 \6 ^* `/ p# Dmsg1 BYTE 'The Input Address is '6 h8 L1 U: y c( }' t* y B
msg2 BYTE 'The Data is:','$'
/ w2 {9 [2 u! P" S( J2 D" c6 I$ x$ i9 K h$ B1 H. \
DSEG ENDS$ N$ ^6 j- |9 `5 D" t3 ]
: T+ [+ H1 E% A& w% M2 \) |- v- `! Q/ L3 v# n+ m
;------------------------------------------------------------------------------------------------
/ ]7 F% G) H ^, g; k; i- W5 P, `# j0 e7 s! X, E
ASSUME CS:CSEG,DS SEG
3 Y; b- h' C. y6 [+ Q" H
# o" Y! k4 L: SCSEG SEGMENT USE16'code'
1 u: }/ D D6 r8 E n8 `2 v! z# z0 _/ h0 S 4 V1 x8 R' K) ?2 {
push ds
: E$ R9 y+ `. ] E, @ push es
% B* l4 b) `+ D. I1 X5 e push fs
# R% n$ [! q) r. Q; _1 ~ push gs
, s% D8 g! x9 `+ m0 P
) |3 N6 [# R" T' k z call big_real_mode
+ b8 ^2 s1 y R: v5 O9 `: W5 k8 R- b3 X) [. t9 @ j: ]" s
8 G! D2 c7 _. K/ Z+ m6 @
mov edx,OFFSET msg1;8 R3 c9 B w7 Q: ^' b6 E
mov ah,09h;
3 n# a7 ~: R; V) r) b7 @ int 21h;7 x; i8 ^: Z' d1 K8 Z4 o6 U
mov edx,OFFSET msg2;3 [$ p2 j7 L/ {- T
mov ah,09h;0 \( Z& `( W! d' s# x6 e
int 21h;
, l$ I" K$ e$ r/ U7 E! `- m * [1 M3 d3 E$ }! B, ^
call PSP
5 `$ x T$ I+ X% R" t
1 h, g1 _: D' y9 P6 G- A call crlf ) _% ]* ^: O8 s( |4 s* U
2 w8 @- A! g0 F5 y" h; M mov esi,ebx6 B1 P7 z: c0 ?9 C. f3 ?- o& k4 s. ^
mov eax,fs:[esi]3 q; [& [- {! X. B7 C) W
out 80h,eax
) n% ~# q5 t% i# X2 O5 h. y8 b mov ebx,eax0 g6 H: u- G4 H; E6 |2 w1 z5 e o
call _8bits+ B+ P' j% K& e
" g# w/ o+ R ^# s+ X call real_mode4 R0 y; C" D3 e+ D* v
, z* v5 s( G' K( r! Z+ n+ ` pop gs$ c' Y% r: Z9 y! F3 n& ^4 E
pop fs
/ w$ L9 Z+ L% |! z. O pop es
0 o* L0 b+ V/ i2 n) A: J pop ds
+ r" s ~3 O, n4 \% b
F- f) Q1 r+ P3 }$ t: l" |0 u .exit" y& o3 g: t, ^2 c
;------------------------------------------------------------------------------------------------( O6 K6 Y+ P, e; w6 E4 t7 ^) w
big_real_mode proc near
+ \$ e/ @% }- b7 m in al, 92h
% l. D4 R' w# U. s0 Z or al, 002
. d( p6 G: Z. V# s3 x out 092h, al* |: u" j% x$ s3 r' ~: C5 p
out 0edh, al
3 Z. `4 a3 z) t1 R$ g cli
4 h6 j, l8 a1 }) l2 p& D mov eax,DSEG
% M" u; z3 N+ [; T$ K shl eax, 42 E d g. j5 c- {. p2 n( j: Q/ s
xor ebx, ebx
6 |2 ^$ I# {' i8 D6 N, w mov ebx, offset GDT_def, P W4 R% M' b1 p
add eax, ebx
) t$ ?1 a5 ?! C$ V& U! n' R; l' K mov dword ptr GDT_Addr.Base, eax
' H+ ]2 M \% h lgdt fword ptr GDT_Addr: i. [' D& Y. y) b; C- ^' L4 K4 S
mov bx, 8( j: l# ?4 G1 a, `. }9 e
mov eax, cr06 A) p) q- L1 L+ r# @
or al, 16 @) @% U2 b( V) ~8 K9 K1 \
mov cr0, eax
I. ?0 N* i8 j' i jmp PMod
6 W+ [2 N$ K: n1 W: aPMod:) ^+ o7 x' j: w7 i$ N
mov fs, bx
5 p3 T1 ]; D( K# Z( r' T2 n. t mov gs, bx( ?; @1 E4 J. ^7 x; |9 D! F
mov eax,cr0$ a! ~ Z0 C3 m9 t
and al, 0FEh
1 U( U- X$ N, v; W& B2 g' P% X- p mov cr0, eax
* z, ~' Y$ l, b7 F* T _: k jmp RMod
3 Y; Y4 N" {2 l8 P! V: J' hRMod:
+ G# G5 R2 t# `6 Q* }- _ xor ax, ax' ]. ^& w, L* K9 ]' d8 q
mov fs, ax6 O; b. D( D' j8 i4 K
mov gs, ax" j8 R+ X6 G: _% Q
' j% ~4 v' P/ f @ sti5 Z h5 _" D" U3 a9 z% [* Y! p& z8 V
& b& R% C/ g5 |$ U
ret
1 H( l; {5 L) `4 c4 p/ {big_real_mode ENDP0 I, D1 Z# _ [
;------------------------------------------------------------------------------------------------
/ L3 i6 y: ~8 ^2 k) u9 e& {real_mode proc near
) C( z! P1 H: e$ X8 [% N# b in al, 92h
) R* a7 u$ z( F1 `9 y* M and al, 02# R* M7 e4 [/ t' f8 C& W
out 92h, al $ T& ?0 W" J9 n5 C0 q( t
ret- F1 q; r# g5 c: M' d
real_mode ENDP
; P8 L- m. d+ E) u4 J" |6 a" }+ g;------------------------------------------------------------------------------------------------6 ?8 D+ j* i, R
Get_Commandtail PROC near) j+ c. u( s/ Y
push es
" n) S9 c+ F; x pusha
. V$ j2 i8 Z+ s$ m$ M- j6 ^ mov ah,62h
9 H) P# g$ k! b7 ?0 w3 J' a int 21h5 P7 Q7 g3 `0 G) M$ c" V3 E
mov es,bx
1 w4 e7 z4 L( n6 \+ P popa
( ^1 O7 S. e! b+ U pop es) H: K0 k* t4 S: y& C1 J
ret: m# C3 t: J, c6 `+ M
Get_Commandtail ENDP" s# ]( S: u9 R9 @) x
;------------------------------------------------------------------------------------------------4 F0 U4 z* q' y" f- G+ Z, L# e- [
PSP proc near
, ~6 H; I# X$ z; j mov ah,62h
* v2 ^, Y2 y- v+ }' y1 w" f; b int 21h9 ^7 D6 x0 g5 w+ `+ Q+ ?
mov es,bx
% G# m m8 p2 n, R$ ]# ]& @ xor ebx,ebx4 K' C$ G% x, N
mov si,82h( @1 e# @/ g- L5 F1 _' m: I
mov al,es:[si]! x5 W( N/ J2 h! P4 o( R% G5 I
call Change
9 G! u o2 h7 V2 O7 j mov cl,4
$ H* B4 |) A8 ]1 A- X' _7 c/ i8 P shl ebx,cl3 y5 z$ p$ P0 F( v" {9 N
add ebx,eax# y* z9 e' q" _% }0 ~; Q. I
mov al,es:[si+1]! ]6 h# A! n4 u* Y& C
call Change/ q& [; v$ n Y/ F2 l% z) H
mov cl,4. g8 N9 T( K1 {* q( a" V q9 W5 S" i
shl ebx,cl& N; q+ c1 v. c" h
add ebx,eax
, m2 _+ [7 X) r0 I- z7 [/ S9 z! n- H mov al,es:[si+2]
, [, Q8 G/ J( F0 R* ? call Change7 W$ V" g: Y$ M, T
mov cl,4
# g! [4 d; Q# `0 ~, A- n shl ebx,cl
# z) x4 L5 M% c/ b+ V& M add ebx,eax- h8 z- h9 T1 [. x3 E7 `
mov al,es:[si+3]5 H3 Y, Z; u- p4 s/ y
call Change8 X9 ^1 n8 _ r6 p
mov cl,4
2 M3 f1 x8 J2 G. v1 V shl ebx,cl
7 C/ O- m+ X7 }7 \, ~3 c( \. z add ebx,eax4 v$ E: F# @2 T4 a& @
mov al,es:[si+4]
$ @) {- B0 U0 E) I call Change, J3 X$ y# [$ s" \
mov cl,4
. i9 N& W: w" E$ O0 G shl ebx,cl. Y% Y* R. k3 T9 g/ n! d
add ebx,eax$ q( H4 J' W! L
mov al,es:[si+5]
4 x( C; y0 O% o: P call Change
6 }9 _( u) U/ n" D- m mov cl,4
( k$ P* M" p1 o' m6 V5 t shl ebx,cl2 o0 ~, ?2 a' K7 F& O
add ebx,eax) h# L5 n8 K, S! X1 b p' @
mov al,es:[si+6]
; |2 h7 A) a/ F% G call Change
6 T* T+ z9 [0 U+ q mov cl,4, L" y5 |# |% n' F* W* G' J/ ]' ?
shl ebx,cl
% @8 R" c4 W; B) a add ebx,eax
. ^! N7 d& b: J( s mov al,es:[si+7]$ w. g7 c0 n/ k/ c6 r- }
call Change
' k( p6 p% ]+ D. P) { mov cl,4- C; O# J X* G" ~
shl ebx,cl
; \" l& O: [. V! m( { add ebx,eax
0 c9 s' O4 e. p) q ret
, m E5 [9 n; ZPSP endp
8 u6 g- q! I- N2 v+ w;------------------------------------------------------------------------------------------------# n. Q+ N: i1 O' I9 p& d6 {
Change proc near
( f4 N& K6 L" S1 KA: 4 R$ j9 L2 ^6 m7 j4 F0 Y
movzx eax,al* _, z5 r. T) t' |
mov edx,eax% Z- T. @" B. P* s+ N6 o4 X
cmp eax,'0'
/ y' A$ |/ ?1 o; w, I d jb A
- m( B1 z* m# a) X. p5 h cmp eax,'9' # T. n+ x) b$ T3 t9 \+ ^# N R) t. o
ja B
5 I. M0 p2 R% N' T sub eax,'0'
2 O6 i- Q3 n) ] jmp short E" z6 k) g4 G( m3 M
B:( o" e5 Q" H( }( K
and eax,0dfh ( B& p9 }6 w* K$ c$ v6 q3 a1 A
mov edx,eax
, g1 c9 D6 s$ g9 U sub eax,37h
% u) {2 h* @8 A cmp eax,0ah
- i$ s5 y# {% ]0 B" a, _) W; f jb A % X! a5 h4 s |9 M& t
cmp eax,0fh7 M, e7 [6 q- w, V0 M& W0 D1 B
ja A
( _$ h( I3 L8 S4 U4 H6 lE:# K2 o6 i! n- l1 @7 q9 J: m
push eax
: H, f: [- B$ x2 u+ r0 l- i call PRT
$ [8 b6 L- i( [* d pop eax0 n; N" y* M2 K6 b
CExit:
/ X) @" ?8 L* k ret9 p6 K% q8 x( g
Change endp
% b% z9 O% d; G0 n D;------------------------------------------------------------------------------------------------) w) K9 ?$ m% T. v* P8 m
PRT proc near
. g& L% I; i* Y* p5 A O mov ah,02h: x4 U, o! U4 `+ p
int 21h
- T: J3 X7 N Z8 W+ e% } ret' @" D* O( b% K3 @+ \7 }9 _
PRT endp' }) R: A( L8 D- D) ~
;------------------------------------------------------------------------------------------------
5 }& B+ E" J S6 \( \crlf proc near) f& l" {$ V0 s, m+ r- k
mov ah,02h
, k% K' d" v# B! p N+ V mov dl,0dh9 O$ G2 x# f5 _; {
int 21h2 I3 V' |% Z0 u& Y
mov ah,02h! U; _) X3 Q# x$ k( N
mov dl,0ah
2 }0 T( i! u) R$ D" A int 21h# B( ~# K/ k2 x* M
ret
$ B9 p# V+ H+ F; r* g2 d; |5 Ycrlf endp
0 z& I$ Y2 y& p& e;------------------------------------------------------------------------------------------------8 a4 A6 P5 a$ B& I! B4 E ^
_32bits proc near. d6 k- `& N* P$ |
pushad" ~' ?: z, f8 A+ }# a3 `
mov cl,4
/ ]9 i8 [0 A( d4 V* {3 Z$ q, \2 v" S! L rol ebx,cl7 z% p1 m6 u- O, ?% P
call print_4_bits1 N$ T5 M& ]2 S6 W) O6 ?6 s
rol ebx,cl; R. Q0 N) S: q, y6 J
call print_4_bits
# g: A9 P; M" {: ^% t4 } rol ebx,cl+ f, q3 |1 K' u+ w) s7 i9 C( N
call print_4_bits
& }2 T: x4 [: J' Z9 J+ O3 N rol ebx,cl
" o- x, V8 Q3 ^( _% B/ g& E call print_4_bits
% y: }' Y- N2 J4 t7 \ rol ebx,cl
- O* A6 f: a! ]! J6 w7 y( _: m call print_4_bits
( h8 } X# M# c% z( [0 @0 k" O rol ebx,cl/ j! @6 T2 E3 a+ D! v
call print_4_bits
, ]; h/ h1 b1 C6 Y2 c* ]- o rol ebx,cl* p$ o1 }6 g( r4 L2 t4 u
call print_4_bits
8 V9 @2 ~% l7 M rol ebx,cl
_5 S$ p2 H( j' ? call print_4_bits
3 d9 ]2 W0 X) c3 U9 t; c rol ebx,cl
8 U( d8 c7 q- s4 x: d popad
) c* G. r1 ?' T9 P3 M7 d r# w( l ret. x" K3 B. ~& }. ^
_32bits endp; n& [$ ` p% W% m. P8 z" Z) i
;------------------------------------------------------------------------------------------------, z- r# y5 t- p' I/ L
_16bits proc near
) H7 |) X) b( r* A) V+ @ pusha
K3 _4 Q9 E7 k$ e) [ rol bx,cl, U6 K0 P' t4 Z, F0 x
call print_4_bits
3 T6 O- j/ K' i* \3 `% R: M' ~ rol bx,cl0 ^1 g. }% v/ {4 b* `* m
call print_4_bits, ^4 ^+ V1 T; G/ |3 Z
rol bx,cl( |( A/ @; i( W2 X
call print_4_bits
( M9 t2 q" X. R0 E) _7 G, p5 V9 Z+ q rol bx,cl5 y# Z) W: X' K9 b& A
call print_4_bits
" ~4 k7 E0 @- v' ]$ l popa+ O8 L6 t- Y1 V2 L3 p4 n
ret
) ^% }) G5 m9 d K_16bits endp: D5 e8 {& C1 H/ F
;------------------------------------------------------------------------------------------------
) y; n) P, n0 c_8bits proc near
' v. E1 \" |( d$ l pusha
- B& c, ~, E! C' z) ^5 {5 [ rol bx,cl
! G! g! M0 c% N3 j call print_4_bits
' `- p7 A$ a1 K4 B' f rol bx,cl6 a5 @' G5 R" a2 ^
call print_4_bits( H5 I, i. D6 h& A
popa
1 E! A$ z: R( w) ]4 c ret
! R" ]$ Y& Z9 f5 m1 _' l0 K_8bits endp
2 |/ k" [( { e* j) y7 V' Z;------------------------------------------------------------------------------------------------
. z! i" K5 ?5 U! o, v8 I, fprint_4_bits proc near
% r4 G+ e7 d0 `4 @6 h/ E mov dx,bx
6 Z1 O7 g; j# j# w) j' j, T and dl,0fh
" ?# r( m }8 \2 l2 z3 k0 x. W n add dl,30h
* \. d! | e, U% E5 M8 ` cmp dl,3ah" J, q8 R& y) j0 S! @( T% n9 B
jb print' X! J! T' b* x* Y/ c. Z
add dl,73 T) p6 `/ H& ]# u) t, F1 O
print:
$ t% z1 i5 g- c( _ mov ah,2
W4 I# |% O+ X3 \( S$ Q% X int 21h$ N3 |! D6 ^2 r4 k5 v* M
ret
& n0 p; m# a: n6 z7 `print_4_bits endp 5 Y6 Q+ x; S- m$ b( T0 K
;------------------------------------------------------------------------------------------------
9 \8 H0 n8 l( _& C/ b+ {CSEG ends
! ^" E' M6 N3 U, S4 d& IEND |
|