|
|
各位前輩好,以下的程式為在 big_real_mode 讀取記憶體的值
6 K( i, M0 ]4 M9 d7 M2 `9 r! c3 V3 ^/ U3 S, X5 @' [$ d$ T
例如: C:\memory.exe(程式檔名) 01000100(Address)
2 a- A- k& E% A8 a; u& x2 ~( O
( W- Y( b+ n6 k! O7 w則會顯示01000100位置的值8 T8 ]! f; H6 `! Q, ^. K9 I
+ u, A; U: X ?' G
但是我另外還有要顯示出字串,但是顯示出來都是亂碼1 b7 }6 X2 T$ Z/ i( n2 S
/ ^9 l% J2 }( | k
麻煩前輩給我一些指導,謝謝 # G T, b/ j* f" q4 [
( a" x2 s* [8 x% s
4 }; a7 l- O1 j) T* H+ T" J.model small
9 E& Y9 X% m- b' L- L7 h/ ~.386p' A# l0 {- u4 `. p! _ ]/ X B% R
;------------------------------------------------------------------------------------------------; H( V- e* |! |) i# S7 ?1 k
DSEG SEGMENT USE16'data' " n9 A/ I K8 f# _/ O% f7 `
. Y" h, W9 P% V
DESC STRUC+ N' D: w8 w1 P/ ]- o3 N. Y$ H# w
LimitL DW 0 3 E: E& o8 Y- S" p: B
BaseL DW 0
+ W- x; Y2 q6 f6 ]& m BaseM DB 0
" ]7 A: g: w" N* n s( T/ ]( G$ f Attributes DB 0 1 a, N! `2 n0 c- h3 _8 O/ j& u
LimitH DB 0 # q; E0 R- [4 N
BaseH DB 0
" }% D; G; m2 q+ C- cDESC ENDS
) \5 g- ]# P) Z) p! q) ~/ I5 a% M$ t( G& T
PDesc STRUC' O7 K+ Y9 f& D3 b
Limit DW 0 $ w/ e" `1 {; P7 U: M
Base DD 0
7 v; n: O0 e4 h' _# L: ?PDesc ENDS; |/ [8 O/ R, e2 Y L' Z
' J) ~: h" N8 eGDT_def Label Fword
" }$ a: o6 h; y/ uNull_Desc DESC < 0h, 0h, 00h, 00h, 000h, 0>
% g; \5 o- E. {1 ^' @% I6 XData_Desc DESC < 0FFFFh, 0h, 00h, 92h, 0CFh, 0>
, D6 D# |( f7 }+ K+ ^GDT_Addr PDesc <$-GDT_def-1, >3 `; \3 ]4 }/ R& T* o5 e
; B* ^4 w4 @: ~msg1 BYTE 'The Input Address is '
' d$ L2 }1 ^, n. }: y# xmsg2 BYTE 'The Data is:','$'8 e2 K: t+ _$ |( O* O+ E5 t- d
& |7 a( C4 x' lDSEG ENDS
) u G+ V; ]$ C; M! T5 W# S8 y0 @9 S
' h; D6 I! }, d$ \. ^; |& |- C
A$ |$ l) B! ~& w;------------------------------------------------------------------------------------------------ % [5 U) V$ |* Z& e3 g0 |) @! R
* R1 ]& F+ `. ^% e8 z
ASSUME CS:CSEG,DS SEG
2 k! _7 Z6 \# T7 v1 m" G2 c! ]
/ F+ F" T! _& H+ Z, @CSEG SEGMENT USE16'code'" j5 j3 F* p# d, w( m
9 K: _# e. C7 }/ u t$ T. o
push ds
* N* r* ^* r% U5 `% T push es
$ ], x i$ f/ q* V) Y push fs, j# }/ F8 d3 ^0 c/ L
push gs
3 T& Z. o4 b: P , s' s* m+ Z0 l2 }
call big_real_mode
4 _, [" U( J0 C0 x4 |
% D1 V, i% i I! \% q, Q
6 ~6 m% S6 t1 D mov edx,OFFSET msg1;
. h! b& n G: L/ Z1 E' Q) g% q mov ah,09h;
4 V2 g$ z/ G- \# g% ?) `: a* I int 21h;# T0 `0 C2 A' s2 n9 S+ |
mov edx,OFFSET msg2;
) f3 M0 |" u$ V+ ?. f0 k8 O) m( ] mov ah,09h;
: e/ D4 F7 ?+ l' X9 |1 } int 21h;
- J; V2 ~, C" t; o, y8 X$ b 4 T! H1 F4 V/ w. f0 C4 K. V3 S
call PSP
' k2 W, Y7 t9 }2 w: t $ X8 m- A; B2 r7 W0 v" j; M
call crlf
. q" Q, ]4 R* w. S
4 M8 z3 F1 b! e! Y mov esi,ebx
5 ]3 Q: T) F" o( y# t: L7 x mov eax,fs:[esi]
5 r% B9 c0 ~% K# N6 z3 ^5 | out 80h,eax% a, G$ Z) D, d( g2 X# [
mov ebx,eax6 }7 [/ d. g/ A9 H- a% D
call _8bits) L# e9 K( W& L
7 [6 O/ i* x6 B1 l8 H: D call real_mode7 m% ^9 m( t" Y! e, O3 S! ^
+ c, [+ U+ Y/ R/ [
pop gs
6 {: g7 a; w; T+ v9 C: j; w" k4 X9 F pop fs
4 T- j/ G' H* [2 L pop es
! j" n7 W1 I: Q; K" l& s pop ds8 i+ K4 s4 [0 K. J+ ]5 c
8 N5 o* O& Q% E! O
.exit
6 A( c# H; T9 P& @' Q;------------------------------------------------------------------------------------------------
! \$ B( Z3 c+ }; \+ S# ?, ~) mbig_real_mode proc near
4 E1 G" G9 ~- @% _: @* q% O! } in al, 92h
) \4 I6 I# }; k+ p% g' | or al, 002! j4 Y- {3 d! D7 R X; V
out 092h, al
# f5 l4 C& d; W2 X$ U T out 0edh, al# y7 r8 ]3 P8 _: ]- A
cli" O3 o( \" r( p Y9 ?/ n9 t8 G+ C
mov eax,DSEG" i0 n) V! b- ^
shl eax, 4
" G% n F7 W! \ h xor ebx, ebx
3 W; h. { U% B t# q( o7 y( k mov ebx, offset GDT_def0 E3 h% X. [( u
add eax, ebx* g x: e7 J* k
mov dword ptr GDT_Addr.Base, eax$ y2 Y; U& _+ X( n! n
lgdt fword ptr GDT_Addr5 f/ F$ o% w9 T% F4 q
mov bx, 8* y. B8 _# O* j7 i! P& @( z
mov eax, cr0
" Z. e, N; @/ v3 v1 j$ i or al, 14 e/ Z6 \+ [* ]3 h5 m( e, ^6 _8 {) ?
mov cr0, eax
9 J' ~+ G% ?: [ jmp PMod
( V4 d" `( Q7 ]PMod:
8 E) |. [: i o mov fs, bx# ~; X4 p- V+ ?, _8 U5 o
mov gs, bx
, `$ g/ m& m) T3 H0 X4 v& \5 A$ b" N mov eax,cr0# O7 U$ @4 n8 j9 \
and al, 0FEh1 b0 G7 W+ a- c# }, j |
mov cr0, eax " V% R( _8 w' ]8 ~+ S4 v4 _, B
jmp RMod
) S* o7 y, X' v# tRMod:: N e" l7 O& Q7 y4 Y
xor ax, ax: r7 ~" S4 g( W0 S3 [& F- n
mov fs, ax- u1 o, v+ h: E' S- @+ T
mov gs, ax
8 I7 s# x/ K. v( T6 X F* g ( M, O+ z7 n$ U- U' L" x2 X0 H
sti
* W. V+ N) a3 A2 j9 y% e: }
k1 ?. C- ?* w4 Z: Z ret$ \" a. v q: F# u( }) o7 o
big_real_mode ENDP
; N5 C/ X+ q4 y0 r2 E0 o- [;------------------------------------------------------------------------------------------------
5 e0 ^% E; V, G5 J( @real_mode proc near* _7 k8 \- q5 _( Q7 f
in al, 92h3 O; B: g2 ^& ]7 `) I
and al, 023 q% i) [) D7 R0 M* |7 b _/ S" R H
out 92h, al % ~- z' f, T5 f# Q, J
ret& k5 j0 D5 I- Z
real_mode ENDP, J& z; q0 _5 V) \+ T. |
;------------------------------------------------------------------------------------------------4 M; Y7 i, E, m8 E3 x
Get_Commandtail PROC near
$ {' c( Y' n9 o% I push es
1 `8 j& `; i3 z0 h w pusha, z( x# h" a2 w6 x9 `9 Q
mov ah,62h
; R! o9 A3 j2 B' W int 21h# x# \# {- m7 E% k0 r; d$ K
mov es,bx% i3 b& G' ^, N5 _
popa ( |" D" L) }0 M: {1 g
pop es
: R1 `& U S$ h. @* t5 Y- x& q ret7 |2 e' v) Q( h& ~+ L( e
Get_Commandtail ENDP
+ D G4 \" x+ Q( i- ~;------------------------------------------------------------------------------------------------
" Y0 u& T0 j# k6 hPSP proc near
0 W0 {5 }4 R/ x# x mov ah,62h$ {- r0 q, U, _
int 21h
# |& v; |. Q, Q* l# q% t mov es,bx
$ f" J% F9 N7 E6 B% O. r" j3 E xor ebx,ebx
' A; C( U+ c& G5 k3 b& V& T' v; h mov si,82h/ W. f$ \2 O! Z' g9 U4 Z u5 B
mov al,es:[si]
6 m1 b2 X! }( ?* R call Change' a0 a3 R5 H' L* o+ Z" s _: F
mov cl,4
+ O$ B( {' O0 q, f/ [& h" Z shl ebx,cl( }6 n: A. ^' l' I$ y; N
add ebx,eax# r& t8 p; X. S4 `* e$ J
mov al,es:[si+1]
; U2 T" h8 Z" Y: {' Q5 a c0 s call Change
$ t6 X' w9 z- V4 I4 H& G4 X mov cl,46 T/ F- ^9 ?7 O o' G/ |
shl ebx,cl" U: o/ [3 u, y' q
add ebx,eax
- L9 i# p6 O: s3 B mov al,es:[si+2]
6 R, h, b# L' p1 u1 @7 L; O3 ] call Change6 S% r/ X" o' t6 `* c, l0 x
mov cl,4& K$ R9 U, w0 ~* W3 u% K L+ g" k
shl ebx,cl
; i+ M p, p: A5 ^$ F add ebx,eax- w: V4 R! S2 _
mov al,es:[si+3]
+ b% N; v( t! `2 {& g call Change
/ f o: `# `' l4 v- {$ t& w mov cl,4, t8 M% X. A: y
shl ebx,cl- \5 ]9 N: W; b
add ebx,eax" h/ s- I9 s2 z1 B" X2 {( V9 ]
mov al,es:[si+4]
5 G4 v* u* ?8 L8 E" V3 P call Change( b) Q6 {" z; c$ F) _
mov cl,49 b5 A4 G' Q+ V
shl ebx,cl
4 H2 M1 M( q- g7 o8 a3 j add ebx,eax
, T$ Z+ y( A9 Y3 h- f1 S; \, Q/ {" R mov al,es:[si+5]
3 l8 X% N" x( H( J% ~* \ call Change
/ x: \5 o$ ?- p+ F$ o# L mov cl,4
( u3 A( @/ {: ?# |1 v2 u shl ebx,cl2 {; O( i6 N. y& w$ \
add ebx,eax
, a7 n, q/ Y& v( x1 V& l I6 j0 D mov al,es:[si+6]
- T( V5 ~( }( c O8 f! C8 B call Change" j6 O, C1 _) ^ e6 M
mov cl,4
9 x! [- ]3 K- `8 s3 g6 V; i shl ebx,cl
) a( o. i" c+ M( a7 i add ebx,eax
7 B' {8 a9 {0 m6 E+ _/ H( q mov al,es:[si+7]
0 A. a7 |* V+ P8 ^- U0 S call Change
- Z& ~/ y. b7 C- i3 a$ O+ w. j2 U mov cl,4
2 j: N' a8 t' S$ }% l- \ shl ebx,cl
+ a" x7 A' p3 M" D add ebx,eax" O! z/ M$ b( m- e; k
ret
, G1 q+ } U9 H9 H3 LPSP endp3 v6 D1 b0 u( |6 ~) c- D4 M
;------------------------------------------------------------------------------------------------6 E x1 g. m% C" P) ^! a
Change proc near
/ n+ b2 q8 L9 u5 ]A: 9 y* i) T' ~8 z' ^% F, C. ~4 q
movzx eax,al
/ B9 A+ K% h7 `! e/ v) s, X mov edx,eax( M p! j6 {4 y3 K0 z9 {
cmp eax,'0'
* Y0 H6 q+ v$ d jb A
* E0 [: l% F: R1 E cmp eax,'9'
3 o9 R7 `! Z3 v/ Z5 j8 H& N0 _ ja B
, y7 X1 Q% k' c sub eax,'0'$ `; ]' l9 {) _$ t3 m; ?. V2 Z5 Y
jmp short E4 D- o2 ~5 J' z, W
B:
# F1 Y7 e$ d) a7 g# p' l and eax,0dfh ) S. x1 z0 l6 ?2 B7 y" {
mov edx,eax
( L' f( M: V+ U, J4 n sub eax,37h : \5 ~# q& w& t& ^) ]' l
cmp eax,0ah3 P5 |( e; o- i& W* N) b
jb A
" j( h0 O( Z. E7 K# d cmp eax,0fh
! _* [6 O. P, p$ E ja A 9 F: O" {- h/ `2 `
E:
3 ?, n5 v s m+ I4 O2 G/ E% U( H push eax 5 [, ]4 Y# C4 X% }8 }0 q' l
call PRT
! P- r5 i% M6 v, [8 d pop eax3 a9 h2 P4 O: E3 s, ]+ Z; m
CExit:: b2 @: ^1 V; e& }
ret
o/ a% L# f4 |0 z. x/ YChange endp
7 T* w5 r! u( j' z# W: _7 n$ X;------------------------------------------------------------------------------------------------
: Q/ e! R: s1 q( Y: C0 lPRT proc near
, S: M1 q5 y* {- Y mov ah,02h% N9 b" a, b+ a3 j# j
int 21h: D; @8 R; Z7 k; M6 V+ ~) ]7 z
ret
$ Y" D# q! n3 q, f- T% j4 k! MPRT endp
; J/ f2 i% t) E4 W' k2 p- n, J;------------------------------------------------------------------------------------------------) [8 c& G# W' ?. G9 { l: N) E
crlf proc near
' L; A$ H" @. c* ] {; D3 Z: W mov ah,02h
2 O! e1 s. M3 _+ _ mov dl,0dh6 U0 v# p! \% d: v0 ~: T
int 21h
2 ^% C" J8 C) T* E) e4 z mov ah,02h
8 {$ Z4 I/ G- U" p- i* \ mov dl,0ah
; g+ I8 M2 `5 p. u- ~9 m int 21h
" @3 M" L/ K5 E ret/ P* u/ e7 i2 u% `2 U
crlf endp4 P0 V* r+ [3 x3 b8 u0 v% W7 q) F) w
;------------------------------------------------------------------------------------------------" C1 s3 `' r/ K) D' w _7 @$ g
_32bits proc near
+ X! u. j) K2 \ pushad0 c0 ~( e, z. e& W' k
mov cl,40 R& k* Y* g+ J- F
rol ebx,cl
4 n( N0 E. T! i/ q* i7 b call print_4_bits! Y* [ B; g% q! U) f" z% i
rol ebx,cl% u2 }8 G% e& S( |" I, i! w, ]
call print_4_bits
+ D% B. [9 @) X" @, b rol ebx,cl
( K4 Y7 P& s' R- D6 ` call print_4_bits
( [5 i7 S2 E. ~( ? rol ebx,cl
9 a5 x8 J- Q( I9 F8 M call print_4_bits! k) [' `3 ]4 F9 n" s
rol ebx,cl a7 ~4 A3 T0 X1 ~
call print_4_bits0 G2 f4 |5 g$ W, _
rol ebx,cl4 m: S- m9 ?& v
call print_4_bits" q* Y, ]9 \: p A0 a1 V) }; n
rol ebx,cl
5 @' _1 ?2 O: y1 G2 S call print_4_bits
0 x p8 H; w% v: S4 Q% p rol ebx,cl
9 C$ s1 m: ]% [/ M- c( t call print_4_bits+ j0 Q; P; W3 s/ L( {% F
rol ebx,cl
$ ~+ A3 M) s- {: f; E1 @9 m popad
. ?( K k4 g' S# F3 C ret
/ v! P" `- t) w_32bits endp* R/ |$ b2 S0 Y1 E& u3 ~. V! E
;------------------------------------------------------------------------------------------------
6 S# `/ A8 u# R2 W: n_16bits proc near2 P4 x" U1 p+ U5 f% ~
pusha & f( L+ P: z$ h9 H t& A
rol bx,cl
. B+ k+ L g4 `$ k3 x call print_4_bits: j: q) [7 S) s# v4 d+ L
rol bx,cl: s2 S* f. K$ a* g1 ?% y. A2 ^
call print_4_bits
* Z/ [, N7 p. k rol bx,cl
r# N9 k' k' L; m2 ~( W call print_4_bits$ u V/ p+ K, v* s" l: c( e
rol bx,cl: W& R4 f! w$ S1 P
call print_4_bits
7 x: r# \2 s- n, `3 W' Z3 F popa
7 f( b# _9 d, |2 m, | ret. m$ P0 i9 j+ Y
_16bits endp K+ V6 `0 l; q# N9 I2 Q& N
;------------------------------------------------------------------------------------------------
2 ~9 K6 P+ m6 n% a! u6 n: n2 c_8bits proc near
+ H. ~1 C' N5 O' a+ [ x pusha
9 b) x4 X9 q! N% b. F% E rol bx,cl4 A0 q! z3 z2 t, N" j k8 }, ]
call print_4_bits. e: u1 K4 T* w. ^# ?+ S9 J C
rol bx,cl
6 l. ?8 a3 u$ Q" Q8 [5 h% }2 e call print_4_bits( y# E) R3 Z3 o4 F& e8 f9 N% u
popa0 C- w% y3 ]* d
ret# g- |: _$ E( \0 s& X
_8bits endp
) t! l& T4 \1 b& I0 o;------------------------------------------------------------------------------------------------% ]$ b! ~2 R! f% N; h- P2 Q: m( K5 m
print_4_bits proc near, {8 E% W) G1 e4 {, K" }# j
mov dx,bx& o% w) B7 [( n# b+ R4 {7 k
and dl,0fh6 t1 R b0 F& D7 h u3 E9 m0 t6 ~ T; Y
add dl,30h3 a. v, E0 X+ H ~1 A2 B5 r
cmp dl,3ah
; o& T1 T. ~: ~% e1 w0 I jb print
# t# W: G2 S' G4 F% z+ D add dl,7+ o K5 r, W0 e8 f8 y7 x4 O6 @
print:
" A" f, W+ L( ^, ]- N# h mov ah,2
( N% \+ z4 t+ I! M! [ int 21h
; Q" ?. G5 G7 ^: g ret
8 D8 ^: O/ e$ j) ?print_4_bits endp , @( R: T& z, k; t, h) M
;------------------------------------------------------------------------------------------------+ X+ L8 K0 d A1 C4 ]
CSEG ends
4 V5 z6 Y7 U8 I: \END |
|