|
各位前輩好,以下的程式為在 big_real_mode 讀取記憶體的值) n, Y# O8 d0 N* N, v# Q+ @3 t
4 [4 O4 s4 ]' g: a3 _
例如: C:\memory.exe(程式檔名) 01000100(Address)
1 @% m1 Z2 D# s) N
0 _" ]4 @$ B7 g( D' O; E則會顯示01000100位置的值
5 i1 B5 ^! F. r" o! x8 [
" M1 s2 l- x8 W% s; ^但是我另外還有要顯示出字串,但是顯示出來都是亂碼4 H K+ h, \: M- _. @8 E
0 c* h6 E+ i/ h, K; Q. x7 q
麻煩前輩給我一些指導,謝謝 , S& z% ^( J; Y0 E) H
* a% X+ z$ } _' R; \8 V6 |. L+ A- i" E5 O
.model small
5 r [! f" O& _5 \.386p
: c# {+ u2 v M7 D# R6 @8 S3 B% i. n;------------------------------------------------------------------------------------------------! @* d1 U: b% U; n
DSEG SEGMENT USE16'data'
0 R4 m% \3 @) r! |, p% l
* t2 b1 ?# g! f9 v) i7 c5 p7 RDESC STRUC
+ ^! [6 q* l% B6 }, ?4 e( ] LimitL DW 0 4 A8 J7 k. l/ R1 l7 x
BaseL DW 0 , U# R$ u# u' T) ]; I2 _2 E8 s3 u
BaseM DB 0
1 |8 ?+ E5 k1 ]. z Attributes DB 0
# ?2 q) K7 \7 D2 q- E LimitH DB 0
# U- l- `8 F" C- X4 e: z' q4 F8 ` BaseH DB 0
6 p! {" J. q3 N* k) PDESC ENDS
" i i( f/ R7 h8 }+ M! s
' [. }9 s) k; ePDesc STRUC
4 ?) f0 }/ }+ b$ z- S: C Limit DW 0 & l/ F0 D8 r& }; B1 K& F
Base DD 0 : @' ]; Y I' Y: E$ P# ?" O+ ~
PDesc ENDS+ ]$ X% R/ n( ^1 s7 k" X
5 k! Q( n6 d1 }GDT_def Label Fword
' H* x6 J0 e3 O8 nNull_Desc DESC < 0h, 0h, 00h, 00h, 000h, 0>" O% ~6 E) H1 X$ y1 t0 o
Data_Desc DESC < 0FFFFh, 0h, 00h, 92h, 0CFh, 0>& y! p3 v! b: X: n. p
GDT_Addr PDesc <$-GDT_def-1, >8 q( ]" D# C# ?0 v% v2 @0 D0 S
1 K8 }1 d/ s4 ]% P
msg1 BYTE 'The Input Address is '
! Q5 f; T* v- {$ S$ y5 y5 jmsg2 BYTE 'The Data is:','$'
# D# `# l' q. ^/ `8 b# t* w/ M
% Q' H f; g+ A! @) }: TDSEG ENDS6 b& G( J" Y5 P
; X4 f7 S) ^/ p# ?: x' n! Z* A! W) [. s/ F3 H) | c& t3 n
;------------------------------------------------------------------------------------------------ 5 X+ v# O- A' b( O. {9 e- ^
) O4 Q2 r% }0 c- p$ JASSUME CS:CSEG,DS SEG
1 H+ x& G9 B6 Q- a4 @9 {# d& `5 \5 r& l }. @
CSEG SEGMENT USE16'code'
& ^8 I) R7 [; t! ^6 V) J: w ; b9 j S! D* [- t- q" p+ `/ r$ v
push ds# W$ E: b* q& A8 l" b$ X
push es
( ]- R% J4 R. Q% s push fs1 n- R X/ l, f
push gs
. [# j9 |+ E( R/ G% `1 I
/ S/ y# A; U& I* w2 S call big_real_mode
8 c2 b5 O M, O. j! g" s K1 r2 m2 j: c
. W$ W7 [" ]. Q3 C& c mov edx,OFFSET msg1;) B' r: E" e' Y
mov ah,09h;
R4 F/ q( ?, \; v8 U int 21h;
" F# V# j8 k J" u- |# m mov edx,OFFSET msg2;* V% |; z5 [1 J8 `, t
mov ah,09h; p3 m# r) H9 l; d4 T
int 21h;
6 q; u$ U! ^; \: O2 U% m2 T 9 m( D3 w- i7 B" ], [% J
call PSP
: e4 n+ p" b7 C' [; T6 V - b( j' |7 j' o* \. G! M! Y" h
call crlf
4 U% F2 C& {0 J. S: g - {" H0 D/ J1 ^! e
mov esi,ebx
8 N# [% Q2 ~( L mov eax,fs:[esi]
9 x% d: }1 `1 ^8 |/ D" V. A# z: _ out 80h,eax
: x6 d% v, t/ p9 K7 { mov ebx,eax& p6 s% P# s2 @2 b) n! x% _
call _8bits
9 e( L, l* V- i$ l
# t u/ c0 s. S M8 ` call real_mode
$ b9 w# i+ p1 F+ D & w+ s' J; ]9 e+ }
pop gs
! |1 S: x- G \' B/ A" _' Y2 | pop fs' W- h: L3 S1 m& Q1 A; s) v
pop es; h) G4 S2 s2 f& b
pop ds" j4 C& ?$ C1 R$ F7 m; c
& O; R: i- Y! A* w$ o .exit
+ M$ W- z2 K( O9 }& F' C;------------------------------------------------------------------------------------------------
8 \" l. ^, ?. r7 A/ F. r0 W% @' @big_real_mode proc near
, {/ `2 D; Y5 B3 y$ }5 e" y in al, 92h; l# T2 f+ O: D0 K+ i5 q- r
or al, 002
/ H1 V7 l6 ?) k! l6 S out 092h, al
9 a+ z" o& }$ ^( J out 0edh, al) B) ]4 `4 M, U7 [9 m6 s
cli
* e, U5 B6 U. S r! ] mov eax,DSEG
' _) Z/ C! D9 Z9 R shl eax, 4( B; Y, Y& X/ J8 P; q. X9 \+ m
xor ebx, ebx' ?7 d1 w: [( N, o
mov ebx, offset GDT_def" i! q H( t- u) P3 ]3 u
add eax, ebx4 U% \9 S, e. B& B h* ^
mov dword ptr GDT_Addr.Base, eax
. R6 q2 O( [' e; a( |4 k( l lgdt fword ptr GDT_Addr: K: U- M8 Z( k- o2 S* J7 N
mov bx, 8
8 h' b# l8 T% ?% F2 r mov eax, cr0( x% J2 n% Q, k8 M# i
or al, 1
4 Y3 K5 ?/ h: i mov cr0, eax7 t6 K: ?& \8 P$ i! P' H
jmp PMod
! K/ ^: `& f8 A3 j/ R6 H3 wPMod:
3 q d3 Z: W( m- K$ ^ mov fs, bx
: Y! N t4 d( t- k- s% v mov gs, bx
3 Z2 b9 I9 a5 C1 P1 k mov eax,cr05 V$ W# O3 c3 D9 X2 D
and al, 0FEh7 E; o0 C {. g# e l7 T; o+ v, F
mov cr0, eax
0 v- B/ X4 B$ b2 ~ jmp RMod
# T; n* H8 P; {- FRMod:2 C' ?" K! C9 l) e4 z4 @& I: H" l
xor ax, ax
; l+ _8 W" p; a( o: o mov fs, ax
& W) W% L* W9 S$ Z mov gs, ax- K3 d5 @9 ^7 g8 e+ [2 O7 K
( u. e1 K4 L; [ ~) \# o sti
, x8 v! E+ r4 r 4 [) T) |8 A+ J+ P
ret
' K6 t( T& m! x. ]big_real_mode ENDP1 u" l" \$ Q3 u7 ~ t
;------------------------------------------------------------------------------------------------+ f& @5 j% l) M8 H( |
real_mode proc near
4 i) ~/ ^* ^6 h) ~! H X in al, 92h) R; T; N" G# B$ D% @/ w4 Y& e
and al, 02% }- s4 ]/ H7 R4 I
out 92h, al ! U2 T! x( o5 [2 {$ G; K) c
ret
5 }0 r& U# ?2 o* c. I9 ?1 ^real_mode ENDP, M- B2 @4 W5 v1 f0 \. s/ c
;------------------------------------------------------------------------------------------------
w3 k1 _, h# s3 qGet_Commandtail PROC near
; T/ A x, k% v( \ push es 1 U. B: |7 b' `
pusha
P3 ?9 m! P0 o0 E mov ah,62h
* L( t' x, k3 D, }5 U* J int 21h
( s% ~: l- ?( x+ _ mov es,bx
& O+ [! C4 e1 U popa
; Y7 {, a, _" W- n5 ^+ q pop es
H2 O3 h7 ^1 k* o2 i7 s0 V6 S ret0 D8 i+ N" {7 d# V/ k+ K
Get_Commandtail ENDP
5 u; |2 B/ x6 B, X& g+ h, j# u;------------------------------------------------------------------------------------------------
: H" j$ m7 c+ a/ zPSP proc near& T5 ?3 M D$ D3 }% n
mov ah,62h
& {9 c$ C' B' n. ~2 z1 u int 21h/ v: {0 B' L" W! F. m5 y! n
mov es,bx % i" |3 s4 W4 a' _2 z' E
xor ebx,ebx! N7 }: Y9 O7 j2 G& {& l% P
mov si,82h
0 Q$ g, Z; \( m: z mov al,es:[si]
7 e6 v3 |/ Y; t& Y$ G5 B# x! i call Change6 e5 t1 V! U% t" z6 S4 G6 P% A; B
mov cl,4
# I! J* {: z$ V4 g) t" w9 B shl ebx,cl
9 h7 M7 ?) U# E add ebx,eax5 R* a8 |: u7 s* K
mov al,es:[si+1]1 G- F" {( [; `0 M' j+ z8 @" F) j
call Change
: E% g1 n7 U7 g7 K mov cl,4, v5 x7 e" z$ Y) A1 c! ]: f( u
shl ebx,cl, m8 q# g* E0 P6 H% k
add ebx,eax' A S- L& M* e: l
mov al,es:[si+2]
3 \+ ?7 A) B, c% s, w4 _: |/ q call Change* T; O% H( E5 |; c" Q3 }
mov cl,4, w6 ]% V7 h! |
shl ebx,cl
" Z8 V t' D: @: E; ?- ~ add ebx,eax
# i9 m: h8 z+ ^4 h mov al,es:[si+3]- z* P6 k% j. M3 U$ o) y1 V
call Change' v) u( z, Q, t- y, P/ t
mov cl,4
4 a1 Z' E2 k: j" `+ w- E+ z. p shl ebx,cl3 F. g: ~. W1 a6 V3 `0 n6 H1 s+ B
add ebx,eax
! V$ Y4 z" Z4 j4 _* F9 ]$ ` mov al,es:[si+4]
, c6 Z' w3 P- g call Change
- m! }) @* i: F7 u mov cl,4' v" \1 g/ F& r" I/ P& w
shl ebx,cl
) z' g9 B8 G4 t: _ p add ebx,eax
) ]( H& r/ L6 p K, J mov al,es:[si+5]
]& S! Z1 G9 O call Change* Q# z' r* H* m& P% f
mov cl,4: @# x0 Z$ P0 G9 m) U
shl ebx,cl' x8 m% p1 n( @9 ~
add ebx,eax' ~% f: R5 R1 f4 x, R9 z
mov al,es:[si+6]! p6 r4 [" ?- e5 M
call Change
; i6 m0 |* `1 \ ^0 ?0 C mov cl,4
, `& V% ], H; ~" |# S$ u shl ebx,cl& m' a" S1 z% y* |
add ebx,eax
2 H9 v- A* g' L, n& G+ f mov al,es:[si+7]
) _$ V1 k$ t- f/ v call Change/ u9 K4 |8 M# v1 I6 Z; u! Z
mov cl,4
( o5 q# j2 F$ D" X: j shl ebx,cl
* V- C3 `; _( i4 Z1 b: W9 E- X add ebx,eax
! T3 w8 _" d% e( B) @0 b" d* | ret; ]' X* E; S. ]
PSP endp( w; M/ a; C2 U: ^4 y2 e) F
;------------------------------------------------------------------------------------------------% X, d) u9 b# ]1 ?4 b Q* n b
Change proc near
0 Y& g- e! A/ j9 m1 u$ yA:
3 G8 N( B0 X) [$ l8 b% ^4 M movzx eax,al
7 A: ]# I3 `* z M8 ~ mov edx,eax
9 |2 c+ B7 e0 O1 C5 C% D4 u cmp eax,'0' ( w. t" Y9 T' N
jb A1 p7 {! h# z* w6 x8 }1 P
cmp eax,'9' 7 J! N. q2 x* C1 Q1 @! `
ja B1 C2 M" z/ m$ L6 _. R/ F3 G
sub eax,'0'
6 m/ v8 v! r6 b0 w jmp short E* `7 D+ n4 p0 h5 e+ }
B:
1 M/ W* q7 n. z( X3 Y) I, J and eax,0dfh / O% A0 ], }2 p/ G' R8 P4 `
mov edx,eax+ A. r# C& Z1 G4 d5 [
sub eax,37h
8 o9 A: S# l3 z1 { cmp eax,0ah
3 A o \; W0 G* ]" h" l jb A 5 A/ a/ P N& P; V4 v
cmp eax,0fh
$ b4 {8 k# i- F, ]# } ja A
5 H% }) {- G6 q1 pE:$ W/ ?% e, z& W
push eax 0 c# P" U* Z5 G- a# h
call PRT ' R( s- Y4 ^8 Y7 h
pop eax
# N0 ^# k9 V* M( K+ lCExit:4 |) ?! j/ } c* d( ^5 Q
ret6 L2 O: R* n `- e% f- i- {" E0 J
Change endp0 b( [4 E0 D5 y: d1 n# G( U# Y! `
;------------------------------------------------------------------------------------------------9 r7 A! z. g. o' P9 O& S
PRT proc near6 k& h" S+ v4 ^
mov ah,02h
+ ^( m' |0 q" n- q" T int 21h
% K7 J i3 F6 c' w8 J+ q: U' M3 N+ p ret% ]5 O' i, R/ s7 C' c
PRT endp2 Z7 F% G) c* m+ H* o
;------------------------------------------------------------------------------------------------
4 D! X/ ]7 c9 Y' P' Qcrlf proc near
( Q6 |1 s2 f0 t4 `5 M mov ah,02h
. m5 O6 s" n$ O+ y9 I/ K# [ mov dl,0dh
- Z4 p3 U6 h6 V% ^ int 21h* x" g9 c+ i& R! x0 X7 d4 K* M
mov ah,02h9 G% Q7 h) C! _& U3 D. b
mov dl,0ah8 H4 P' |! C" \; u
int 21h
% w7 R q. b4 O4 e ret. o5 `, Q& i3 y+ F' p
crlf endp7 q5 W8 E8 ^- f( f7 c
;------------------------------------------------------------------------------------------------
/ @! S. u5 G4 f: J3 Z5 \1 c_32bits proc near; v$ l7 [( f6 [; R4 x+ k0 A
pushad
1 B5 d+ @) z" N' Y4 o mov cl,4
, k. U, v+ l$ ?! Y rol ebx,cl
1 W, W" q8 y- c call print_4_bits9 o9 ~& A a4 u
rol ebx,cl8 J" M. f1 @& O1 K& w
call print_4_bits
: l! D% W5 z0 u rol ebx,cl6 g$ |& W. {: }- { u
call print_4_bits4 I! k. ^, z1 Q: O' i' s. m, `
rol ebx,cl
4 o1 W8 V3 n3 f8 F call print_4_bits
) ]( n: p% x) {- _$ \; ?+ Z6 A rol ebx,cl
9 O. \; z! x5 L: f call print_4_bits7 [9 C' [! i3 b# }3 |- y6 H
rol ebx,cl
3 B; w3 u# f v4 ]8 B8 g# G9 c call print_4_bits
; K) Y4 O( U! i3 @& U/ f rol ebx,cl
; @% ~& W% P: W( Z call print_4_bits
8 A& c% O! X8 c1 e rol ebx,cl
+ R( A+ h& p* B1 | call print_4_bits
/ H2 l3 o4 ~, [: ^* m rol ebx,cl+ R s$ f/ Z/ L2 Q, Z
popad& e/ P) m# I3 X9 o
ret
8 X) k1 m' ]; \( O0 K5 l_32bits endp
4 {3 {* x9 D/ P5 O5 b& S;------------------------------------------------------------------------------------------------* z7 }! p/ X! u' b
_16bits proc near
$ m' `" g6 i6 m! w$ {% E* r, h pusha 2 y- X- o+ x* U( _) J
rol bx,cl0 L# y' R* P) l7 e+ O
call print_4_bits
* H1 T( J' e. o+ y rol bx,cl# [1 S/ S Y3 O
call print_4_bits
3 i" z2 X6 a( m4 A8 I rol bx,cl
- L" Q5 O( l% f9 X' i call print_4_bits& u* Z6 ~( ]$ e% z/ K0 [
rol bx,cl
4 z- m' D7 ]" Q3 ?+ A, d. L call print_4_bits8 A1 Q# r( n \4 M7 ? X! y
popa
! J3 Y. P/ \6 x9 M$ w: H ret7 j8 D, A9 F* x4 @) u5 ~# t
_16bits endp& p1 N8 T+ M- f u
;------------------------------------------------------------------------------------------------
: z: X9 l- i6 \+ w' W- \ Q_8bits proc near
. o- b1 z1 D# ?% E5 g pusha ) k2 i! ]; W8 h# K% l- h
rol bx,cl9 Q! d, O' @2 ` L+ x
call print_4_bits( R* l" K/ B+ e$ m* b7 T
rol bx,cl
5 P I3 ^. c/ `2 H% C9 N2 } call print_4_bits5 L9 }+ O9 q* {; i9 e5 r. p
popa
( F* W& ` c: S; F* G% {- P! |4 w ret
; L9 v; O% l# T2 [& H- p8 F_8bits endp
* S# _- D2 D; M2 H% b6 G;------------------------------------------------------------------------------------------------
0 t$ W4 \$ a- p5 z5 fprint_4_bits proc near+ t- q" y: j: ` M
mov dx,bx
3 ]3 \! K4 d; b and dl,0fh e9 {& X8 [3 m# @9 I8 z) K3 p
add dl,30h
4 _0 O4 Y7 L6 x cmp dl,3ah
/ q4 U! s/ p' l. i6 H: r jb print
7 o* x/ X, C8 _( `3 t3 @/ z add dl,7
7 h! R2 e0 _3 T% a1 h6 iprint: 9 K+ z9 @ u6 I- m7 G' ^
mov ah,2& |8 q1 k) C& }
int 21h4 _& W' V2 g* C# |" [5 G
ret
+ l8 O- F" D i, U( Gprint_4_bits endp
6 n' q1 c$ q8 h;------------------------------------------------------------------------------------------------" \ h! m. r; j6 n( _& A
CSEG ends
7 e0 j+ i' {4 \0 \END |
|