|
|
各位前輩好,以下的程式為在 big_real_mode 讀取記憶體的值0 Q6 W/ d i: P; J! m
* d) D& m( e' A+ C2 B例如: C:\memory.exe(程式檔名) 01000100(Address)
8 }& @8 D( T: l! H2 A& |6 F: J# Q! ~- ]
則會顯示01000100位置的值
- h5 E" w$ f7 H) b- a5 \3 S% m& o
/ g d9 X4 x, ]: v3 W9 b但是我另外還有要顯示出字串,但是顯示出來都是亂碼
# M9 N1 \4 x1 h- L. q( n& B. i7 P* P
麻煩前輩給我一些指導,謝謝 2 `' Q- u' V* V; @/ s
# t: j3 }( |; c# [/ y- k
, Q' X" u) j& h1 x' d/ u5 c" d' u" C.model small, R( U+ t0 I3 S2 k* z
.386p; x2 T9 @1 E: y! c
;------------------------------------------------------------------------------------------------2 H0 S, z5 K( J5 l0 w
DSEG SEGMENT USE16'data'
' s6 @2 y% B% a9 m9 ~, I+ C
G' e' F9 N! p2 [- U/ L8 aDESC STRUC" s7 @2 D$ z6 }7 ?4 E5 b
LimitL DW 0 5 c7 F7 m( y- W" t
BaseL DW 0 @6 r5 a& S" Y8 k! Y6 L, R
BaseM DB 0 / D/ `. `+ j& _& d0 _0 g+ M% y
Attributes DB 0 ' W- q6 @/ c5 W3 Y3 D, u9 W
LimitH DB 0
% Y1 @! p( f/ K2 m BaseH DB 0
) i# p1 _) R8 q8 K. dDESC ENDS
2 q$ O( Q3 G1 K8 Q. X) S5 y& Y9 \* |+ ?
PDesc STRUC3 _3 O9 @" t a8 L
Limit DW 0
! W# i8 V v) u+ [1 ~7 _0 _ Base DD 0
9 E, U4 s0 J0 n/ {: bPDesc ENDS, X5 n3 [3 e6 w
0 h& `" t$ R( _# hGDT_def Label Fword
2 ~9 \( o8 s% p" r6 W& c: nNull_Desc DESC < 0h, 0h, 00h, 00h, 000h, 0>
/ ~* K% T; b2 C pData_Desc DESC < 0FFFFh, 0h, 00h, 92h, 0CFh, 0>
c P } B( ]GDT_Addr PDesc <$-GDT_def-1, >
1 A, H; z1 A% k" D, J+ ~3 E7 H6 u
msg1 BYTE 'The Input Address is '/ u" f' y T; V9 d
msg2 BYTE 'The Data is:','$'
0 z4 G$ h9 m4 W7 M. D* J) G' `' {% M, V+ J! B2 |1 j( J
DSEG ENDS
5 i d; I& N' Z" J6 j# c7 ~* E! U4 R |. C* M$ {
, [0 W5 R9 D. Z5 @- u;------------------------------------------------------------------------------------------------
1 w+ ]9 L/ p/ w% I4 B; S+ y. S7 f+ k. A
ASSUME CS:CSEG,DS SEG. D5 q; M, |+ _' |
: W8 ^! W$ P2 }
CSEG SEGMENT USE16'code'
9 T! g0 p$ e9 d1 k1 \/ p 2 V2 {1 j+ T* u0 j% j$ x
push ds
* e# r; m! h2 g* F, u7 P push es
% }$ [" L1 S/ R M# s% F) r* ^ push fs! [, l6 Y# M; D$ x
push gs
, v. l' _% E- t6 R& i' z3 N ~
1 a6 W% S2 S! g" g) u8 |. c0 Y call big_real_mode
/ E( k5 y' J9 W! f& d$ s4 u f; p2 i, w7 e
. [2 ]$ _7 x- v% K, ?6 u! u mov edx,OFFSET msg1;& `( s7 ~' }" g& b+ o
mov ah,09h;
) Z! T8 e f5 x: g, Y int 21h;
! f3 M0 ~% a- W G# j; e mov edx,OFFSET msg2;: z% o8 F* m2 B/ s, m; F) U
mov ah,09h;
* U7 o3 W% y1 X0 N3 f int 21h;
. N, U1 M' \8 U8 q! R
% K" _ b O! V5 h2 K1 f call PSP , o6 _7 D2 C6 @
8 d# P9 I- T; _8 |. M call crlf 1 R' v9 v1 Z. ]
! M7 c! `; H5 A; ?1 w* t mov esi,ebx3 K5 n. ]- A8 M0 G4 X. x
mov eax,fs:[esi]# K/ y) h! r, }0 k. ^* Z; c. D3 Y- U
out 80h,eax% E# }' E! m" v9 A! w' u
mov ebx,eax+ ?1 F6 M1 C% x( ? C
call _8bits) v+ Y% p7 A, W7 c' u
4 O" d% N+ H$ j. ]' S call real_mode
M( m& K& C5 k3 u6 c% E# L ' W4 H9 j! N0 W) a9 H
pop gs
T% K+ F/ v# j# m pop fs8 E% E/ H! J F
pop es6 @' ]2 B1 W, p
pop ds
! ]; \7 w# `/ @4 L% t0 @2 h. A- V* M ) N0 U1 ? V# U7 a$ k
.exit
- U/ w7 T ~6 U; G4 ]# L7 P9 y;------------------------------------------------------------------------------------------------% n+ K& S; g0 a9 E
big_real_mode proc near
0 L$ ? R$ C4 A5 s" w: x0 i in al, 92h& y5 Z- o9 `) ` [; q- { |2 O1 A
or al, 002
$ ?' [$ j. e' i( V6 m4 V1 R out 092h, al
+ s8 T, ]* `9 v out 0edh, al, e, t \& z, g4 p) |4 I" |
cli
2 k) W4 M. B$ w5 L mov eax,DSEG8 x5 n5 X9 S5 \5 ~; y- \3 I7 R
shl eax, 42 o( m" v5 _. p( H$ F" ^, g
xor ebx, ebx; H4 W$ k8 _* K- ]2 x P& X
mov ebx, offset GDT_def) {% P2 b$ _( B: h0 N% ~) Y1 r
add eax, ebx$ Y/ F6 r# W& W# \& J6 z9 v* P
mov dword ptr GDT_Addr.Base, eax3 ? ?- G2 G/ E% ^( G2 q
lgdt fword ptr GDT_Addr) O3 q- f I* W) ~ }1 o! F e3 p
mov bx, 8
* u$ i4 }0 d2 R9 w# f4 g mov eax, cr05 ^7 h3 U8 ]$ B! u
or al, 1# e# z) e5 B/ u8 f
mov cr0, eax4 O" p" |, ]* @4 v5 r/ L) Q
jmp PMod% h% f9 q& ^5 p6 @* {( d- ]' t
PMod:
! T. x, U# x8 p mov fs, bx
' i. ?# f% v4 D9 J. S- J5 T mov gs, bx
+ ^+ G; w8 @2 `6 y: P% V7 U, [ mov eax,cr0
) E/ q1 T8 b8 y, x& g6 z and al, 0FEh
# D4 [" g, J9 x( O* n mov cr0, eax : W: R- J0 r5 l4 n: C1 |1 a6 e
jmp RMod8 S1 d) F) H2 D: B& k7 W
RMod:
( t6 ?4 ]+ G5 @5 z% p xor ax, ax
: ^2 n; H4 g; u: Y3 J* m mov fs, ax
, |, q5 R' Q0 h( H( d, O mov gs, ax' c. k0 u4 L% Q, J/ K
5 ~/ W4 Z. k" N' b7 ], }- T
sti R) N. `; @3 `% n3 E4 e
3 `6 Z( G1 I- C$ o ret
2 |$ T6 F# `% p* i, Q$ bbig_real_mode ENDP
$ l4 R( ^) s6 p: s;------------------------------------------------------------------------------------------------4 t) [6 I) a, ?4 X& X
real_mode proc near5 n) q; E2 s6 x
in al, 92h
/ I1 D9 t3 D$ [- T; f: M and al, 02) ~. R: a j- c9 V4 r, u( X
out 92h, al : u7 @0 N" H4 x
ret
8 M! e9 u0 ^6 j+ P, `real_mode ENDP% e$ X5 R8 P2 B+ j( j# @7 C* }
;------------------------------------------------------------------------------------------------
4 d% s5 H8 N( k9 Z8 }7 tGet_Commandtail PROC near
( e z1 f' e2 G4 a1 Q push es
" k2 ]$ F, V+ d8 Z/ g pusha3 a3 C; y7 }+ J4 M' X; Z
mov ah,62h
2 {- ~ C q/ B8 t5 i5 J int 21h
8 {0 I; @! b2 i ~) f+ G mov es,bx
! j9 y* m0 q% ?9 [2 U5 V1 [; C popa
* i& i5 a5 K/ E# q* w$ U8 { pop es
# e' K, h" k# G8 P1 V ret+ h: M4 ]( |3 U: {1 V, h8 \
Get_Commandtail ENDP% T9 M8 v: Z! s/ K3 \
;------------------------------------------------------------------------------------------------
+ D% y2 y9 M6 O c1 c+ gPSP proc near
9 m5 n1 r% n Q. n mov ah,62h# ]4 U8 B2 J% i& ~
int 21h
" q- l1 c! I: E. n mov es,bx 2 z O! G5 q- _# b
xor ebx,ebx
% |/ g% H1 T1 N: s mov si,82h0 D- L) t* o7 ~3 T
mov al,es:[si]
' S7 x7 j8 P( L* s call Change8 e f3 o" U% f( N8 B) z* w
mov cl,4
8 z6 I0 I- f# {$ n6 a/ H shl ebx,cl
: n& k6 C9 }# f5 D1 O' t/ v) b add ebx,eax
, ^5 E! @$ w8 k3 \ mov al,es:[si+1]% A W U1 V H
call Change
% ~4 z/ H+ R2 t1 M5 g mov cl,4
' [- X- o& u4 q: C$ v1 ~ shl ebx,cl
/ @" Q" m+ V0 c9 B* p- l+ R8 i' ^# ` add ebx,eax
" M" v/ }" N. @6 L8 B- M; h' } mov al,es:[si+2], Z6 j% L/ O+ K6 p( C
call Change& q* Y) W' T* P: l
mov cl,41 S) I& y+ _! m3 |
shl ebx,cl
9 i" c O7 R* E4 F- v& Q* O add ebx,eax8 v- E6 g" m1 y- r3 R* m5 g( R
mov al,es:[si+3]
% y8 u& r* D) s' N1 V call Change
, f6 m' d6 S4 M. n9 M9 E( y, [+ f0 | mov cl,4' D2 i) o+ H, S3 {
shl ebx,cl
- C2 ]1 L& o. c5 ]& a) @4 y1 } add ebx,eax
! T4 H& N& z. W0 v mov al,es:[si+4]
. r( O$ Y/ {: V" ]% I$ c ~8 r call Change5 F4 C8 l- u! l) r8 S2 R
mov cl,42 ?, v2 `( z- U5 V! X" n
shl ebx,cl. k% h; f& D0 p- k$ ~* e, M
add ebx,eax0 T3 @0 m/ }$ m2 K6 D( M
mov al,es:[si+5]
4 J2 p6 i$ } f5 i9 e- W/ B! ^ call Change7 S. x4 D( M5 n! D4 p2 s
mov cl,4
1 N0 w2 |/ r7 }. s# B# B# M' { shl ebx,cl
: n8 g3 ~; V% g/ w! e% ^# d$ \ K& x add ebx,eax& ~* [( M) _. b$ h, n6 I
mov al,es:[si+6]% r9 T" j5 g" C) M5 u1 O& z+ \
call Change
; I. {# m4 c# t, S; r mov cl,42 c1 p' e( A: ~ C$ W
shl ebx,cl9 F$ z% O& F4 d# g' E& j) R
add ebx,eax- t) D; M+ u% i7 r0 _; Q% T
mov al,es:[si+7]
0 W! w& N9 v ^/ t4 s2 J# K; O8 h call Change+ A& p6 b+ i+ U: o6 U6 |2 V
mov cl,4 C( `9 K; f8 }' h8 n, p
shl ebx,cl
5 ~! F. n- |8 S' _9 s4 W- }6 S* w add ebx,eax
+ C S/ G( D( o. J6 Q, j* ~ ret2 R/ f$ G" T( v% L# V$ A
PSP endp. B7 I$ W3 O* R! v& E! k
;------------------------------------------------------------------------------------------------
- e8 G+ h1 K! bChange proc near, w" g4 X) t6 H3 r1 n- J4 T
A: / @5 t$ e; ?* I( O# J" H5 P8 \
movzx eax,al- O4 L5 v+ _, f1 f: i" P
mov edx,eax
; H4 E4 [% i# R) }& O+ o cmp eax,'0' 8 q( r( ?& p6 h/ D, y% c$ G/ f
jb A# l. \5 z U: }% `3 P( E8 A: {
cmp eax,'9'
% S/ B6 u" G: u, A q ja B" j$ ?+ v7 A' L6 {
sub eax,'0'
( F* I7 f# E K0 G jmp short E% a- N. ^+ T8 f6 b% r' H5 v# Q+ b
B:0 F1 b$ X3 {/ p# m$ Q8 C3 F/ j
and eax,0dfh
4 Y4 a: [7 ]5 Z, s7 \ mov edx,eax
, n) j2 K/ j3 _ sub eax,37h 6 M' \, r O/ h& {7 H! ^
cmp eax,0ah
" \( ^& L! ?: z jb A
" d# j, f4 y4 ~5 X* _ cmp eax,0fh
9 H' Q, y- U8 ` ja A
# k: H- _# {5 p% S$ y; t2 fE:& S- N0 M% T4 e" d6 C! i6 \0 G2 F, Z
push eax
' Q8 K# [" n) N* f# B call PRT
4 E' o; V$ T ? pop eax, z6 T% Q9 N _) q
CExit:
! b, u3 j" f( p; h0 @, [# n, S! T ret4 Y+ b" Y2 l" p2 K' G
Change endp
- H8 @" x1 `$ B4 P4 G6 u/ P;------------------------------------------------------------------------------------------------
i# X2 K3 X) F% x; O4 k8 RPRT proc near# g# o- G2 k: H$ l4 s
mov ah,02h
: c0 S- X2 |$ F+ ?& [ int 21h
; O3 ]; F, g6 s7 Z" i ret
3 G0 B V2 ]0 @. W" @' S; I, jPRT endp
* m7 F3 ]. o6 p- w3 J& w6 y' M' ^' X8 X;------------------------------------------------------------------------------------------------8 V* F) i) f8 b5 W, T; T6 p
crlf proc near
, S! w4 ]% H. P. _- Q) X. H: k+ Q mov ah,02h
2 l2 \3 F; s. e* u' D' A mov dl,0dh$ Y. G+ w1 e8 t( V7 F0 T }+ B" x
int 21h
' t/ {5 a# r9 \, [" s( Z9 P mov ah,02h/ a/ ?: @( e/ ]
mov dl,0ah: c U& E0 ^2 w8 o7 @
int 21h
8 f/ _$ z; a3 U c( @0 t ret
- B4 r6 H' U' Qcrlf endp
4 q+ {2 R4 I$ P8 W5 P6 U;------------------------------------------------------------------------------------------------
# ^/ l3 k8 O" v% _7 J_32bits proc near
q0 v( Z. J# ]0 X# J( h: h6 n3 d pushad" ~$ W/ ~8 C' K4 z! n
mov cl,4
: d d6 {0 c0 Z) B rol ebx,cl1 A+ j; q* S+ t! w: j5 P, s
call print_4_bits
8 |2 Z: F: B+ g6 W" v% ^- u( f rol ebx,cl6 J$ i- L' _6 @, L' X( ^
call print_4_bits
8 G0 o2 K3 \$ F- p6 i rol ebx,cl8 q" {8 I( U/ `! z
call print_4_bits9 N5 o) Z4 G3 E- U
rol ebx,cl
: E& F S9 t/ E, L, s! I) [0 { call print_4_bits
1 J6 ~3 c; h3 B; B9 L rol ebx,cl" Q8 V+ @" q( t; Q! o* Y: Q& M' N
call print_4_bits3 f2 }. Y U( w4 p7 F' Y5 Y$ z
rol ebx,cl
$ M- s. g1 v* d7 M! |/ W4 C call print_4_bits) ~, C& R, w* n
rol ebx,cl& ^4 b1 F/ Q5 S2 z) o- Z0 r
call print_4_bits
4 W( I- L1 P- E/ A6 y6 r rol ebx,cl
% x7 O% _1 u ?: F call print_4_bits" X3 R- z }- G* `, L6 f( [; N: {
rol ebx,cl
4 u4 P! c% M: \ popad J. {3 ]3 }3 C, f
ret- c2 U; G+ b B: M0 A
_32bits endp
, r! u9 e& c9 ?: b0 J3 r2 o;------------------------------------------------------------------------------------------------
2 A8 ?2 Y; T1 U! l& ?7 Z) ^_16bits proc near$ V% H, e0 J& j! w7 ~ X& M
pusha
5 [& Y, K3 h4 |( } rol bx,cl( q0 H0 v1 _% o6 e7 t% R+ o
call print_4_bits
6 ], `4 T/ n: ]( K rol bx,cl
5 U4 K, `+ T7 ~5 z1 a call print_4_bits. X, z6 A! {. z
rol bx,cl- K w: k4 Y0 u. t
call print_4_bits
+ c/ {5 u9 A" ~- B rol bx,cl& p% Q+ ?1 A8 e
call print_4_bits$ C. \* P4 A, d( {: p2 B
popa
. W7 Z' R; x2 j ret
; V- L$ ~# x6 D% Q. e7 I_16bits endp4 P$ [) B L) }0 v
;------------------------------------------------------------------------------------------------
. B" O1 E% u8 } e_8bits proc near
3 Y* }" U1 M# u' s* j! g0 _ pusha
' g7 D, J5 Y; M$ T/ z. N% o! x rol bx,cl
4 U/ d; c$ x$ a call print_4_bits) r: F+ m, k1 B3 O9 j. C
rol bx,cl# C7 |. E7 O5 k& ^; b4 j# K
call print_4_bits
A7 B9 Y$ m/ I- a& q3 B popa
7 X* G$ `9 b* c X3 @1 p ret! P P% [! k' K
_8bits endp: ?) K# T- M$ [4 l' x) X* O
;------------------------------------------------------------------------------------------------# V) a. G! z/ J: s
print_4_bits proc near5 w- b& Q0 L6 a- F# c3 r# S; g
mov dx,bx( @4 I! i1 }: O# O* Y% Q& E
and dl,0fh
. D }4 y) {$ j( `( t+ w, K add dl,30h! H3 x" }# H: \2 D
cmp dl,3ah( ~2 p7 L/ F' W% u4 y( t
jb print2 ]! X2 e/ Z9 I" H0 J' H T# S. `
add dl,79 S/ X5 {! l4 ~$ o1 N8 I q
print:
: Z7 K8 C" {" `! N o$ y mov ah,2! w6 \+ j! w9 H2 [
int 21h
( s3 ]' y6 D J$ {, W' n% h- R ret4 m$ Y5 \7 s4 [( o- i' y4 N
print_4_bits endp
% p7 f: P x$ J) q: d2 [;------------------------------------------------------------------------------------------------2 o0 B2 J. x, q8 y
CSEG ends
9 r, [/ X. s7 O$ D+ NEND |
|