找回密码
 加入计匠网
搜索
热搜: BIOS ACPI CPU Windows
查看: 7527|回复: 0

顯示string會出現亂碼

[复制链接]
发表于 2010-10-19 16:41:51 | 显示全部楼层 |阅读模式
各位前輩好,以下的程式為在 big_real_mode 讀取記憶體的值% Y! c  l+ S2 w- E- i7 p

" ]' T$ c3 D& O! R; D  q7 e8 x例如: C:\memory.exe(程式檔名) 01000100(Address)! ?/ O) W) }; W- ^4 j5 U
. \6 r" U! E# R$ S& I( P
則會顯示01000100位置的值/ H  y; H! h$ A4 {

% @( `: L* G5 b1 y2 R- d7 b( ?但是我另外還有要顯示出字串,但是顯示出來都是亂碼) z8 o6 a' i7 ]9 F, A

: Z1 t' k8 U- z, G, @麻煩前輩給我一些指導,謝謝  
5 C, W9 `2 H0 P. m8 S$ S# w" u1 q# z! U8 g

! K5 ]; n/ f3 x. i0 m3 R.model small
$ b6 P. p0 Q& Q.386p2 v- u: \) m* n7 S# s/ Q
;------------------------------------------------------------------------------------------------
5 a" m1 E8 Z, h) v$ M, I" ~/ @DSEG SEGMENT USE16'data'  2 K8 V$ }- s  ]# T3 _" s  e
: D; G1 i0 I' M; g7 W
DESC STRUC
( [+ u: C, h5 l$ ?. F  |: g  LimitL DW 0  
6 ~+ _- ^6 V3 h6 S7 _4 W* t, Z  BaseL DW 0  2 m- n! H, K; E) ^8 F3 {
  BaseM DB 0  
3 G3 a6 e* i" F0 v3 l9 l  Attributes DB 0  + O4 n/ N' v1 O) [9 s6 v) c8 ?& J  K
  LimitH DB 0  
# b% u# E  L. [/ q$ [( b  BaseH DB 0  
. G7 [4 C- x6 g4 B) A, Z. M9 tDESC ENDS
& B" c9 U' z) S+ K1 w7 u$ _8 F  e& \2 @3 Z* K5 D+ G( E1 d; g
PDesc STRUC3 g8 A+ p( R5 j, d* l* _
  Limit DW 0  
( T/ O" t* q; x# r  Base DD 0  
' i. U# D/ k$ M7 O* @! ?2 T1 W+ zPDesc ENDS
8 x/ J4 V+ }7 o4 K, t2 f' n! ^: e
# x# C: B; X5 y4 |' E: kGDT_def Label Fword
* R9 [5 k4 u4 cNull_Desc DESC < 0h, 0h, 00h, 00h, 000h, 0>
; {! C; ~+ I9 i7 N$ X# z, \Data_Desc DESC < 0FFFFh, 0h, 00h, 92h, 0CFh, 0>
8 r/ X( B) l6 @( `/ QGDT_Addr PDesc <$-GDT_def-1, >
+ D6 ]" L- t$ k) b7 X. o9 M
( b3 {* ?% }2 [) }6 B, Nmsg1 BYTE 'The Input Address is'" o; L- h' i; Q- s0 t7 P4 C
msg2 BYTE 'The Data is:','$'4 R/ t3 ^  i( b+ A+ a

* g( P" _, {7 E/ }DSEG ENDS
$ L  V4 V: i  Q( w& w) a; @( X! h; d3 ?3 q1 q

3 D: L( u& C% {' q;------------------------------------------------------------------------------------------------  ( o! G) j- O& a8 P* G
; L  X7 ^: g5 N0 g. D( ~* N
ASSUME CS:CSEG,DSSEG
6 {) F% x/ h" q9 [+ U! z4 Z1 j0 Z: l! ^  z) ?" p/ L' R
CSEG SEGMENT USE16'code'* j3 X9 Q) N. |
  
2 f  k4 f$ F" H  push ds
' W0 ~) g4 ?5 L3 X4 v  push es0 I8 l/ e& k% P2 @
  push fs
- v. g: B' a: |. [  push gs
) }2 ?% P; y% Z" ?+ z7 X  . v8 j. G; m. y) H
  call big_real_mode. I6 j' O# E4 F) j

0 F! s  c6 w( K# l: O- m1 P$ E    8 ~  \# |4 Y! U& x# k; g6 f
  mov edx,OFFSET msg1;; `7 ?2 _  j- ?5 `
  mov ah,09h;   
, z' I3 L- l) P  int 21h;
3 t' P0 Z$ |- |  L) _5 s  mov edx,OFFSET msg2;: a0 A( q. R; s# l; F
  mov ah,09h;
3 \3 H: a# p$ G2 V8 G- m  int 21h;2 `+ B8 l2 ~( i
   
5 ^* Y* g' Q' Y  call PSP     p' }% \1 a2 B4 a
    * L8 S9 s& q7 P8 l9 L
  call crlf   : I: J3 }. z! h9 H2 {7 k
    $ p# B2 x# N$ A0 |  w9 U
  mov esi,ebx
/ p3 q; N& h1 _  mov eax,fs:[esi]
$ K2 J. T3 h! m+ D2 C  out 80h,eax" t* r! ?6 L$ e3 M
  mov ebx,eax8 W% j1 O8 y, ]/ J4 K
  call _8bits; V! y7 ]# M. f. Q
    4 v  ?% I3 t% b$ W
  call real_mode* ^9 {2 y: K  c5 n
    9 X, e5 U8 C8 d! y, k
  pop gs9 T. |5 Y) Z3 }' i2 o) ]+ j
  pop fs; o+ Q8 k! S* x7 X: S4 m& ]% D
  pop es. o3 e# U) q7 }4 L7 d
  pop ds5 u2 |/ N" a. y, k0 i4 B
   
' e% }  t% Y5 x/ o% z  .exit5 Q+ X: n0 S1 y8 C+ {( y
;------------------------------------------------------------------------------------------------1 U/ V- R! Q% L. g
big_real_mode proc near
  I9 A4 B4 t. ~0 r, m  in al, 92h8 x$ }! C( E/ s, P( ?
  or al, 0027 j+ e3 y1 ^( z0 e5 j
  out 092h, al
6 ~0 {! `. V, D* T, A( Y  out 0edh, al# ^4 Y: Y# m9 Q; R: ?. Y
  cli9 Z% J$ @9 d  d4 z. x
  mov eax,DSEG! o+ T; \# b% ?  {
  shl eax, 4
8 ]! i7 X0 |- @+ z  xor ebx, ebx
1 ?2 R; x; j( x" K  mov ebx, offset GDT_def5 F4 S& s: ^5 |/ V
  add eax, ebx
% _+ k) f+ R  g$ I  M  mov dword ptr GDT_Addr.Base, eax: x7 B. X" q/ q+ w; u
  lgdt fword ptr GDT_Addr
2 N- d; m9 S! f: v! n5 _' [  mov bx, 8
0 i8 ?- G6 m' p  mov eax, cr0" t" H* h! _( o0 U2 ?
  or al, 1: ?  v- a2 Z( H/ x' n6 _/ l; W1 G, _
  mov cr0, eax, C* w/ k+ r1 a0 j* g! ^+ F
  jmp PMod0 U) a" ^. k7 J7 w% m0 b( F
PMod:3 }0 d0 _0 e% s" F1 K
  mov fs, bx" I, ?% z" t' H# X5 X" G5 u; ^" t/ r
  mov gs, bx' n# U) r$ v2 W. \4 v
  mov eax,cr0
, s- \4 w6 p( p) u  and al, 0FEh
+ x  \9 ?) w0 U# k" ^3 @' R  mov cr0, eax  
) y& b; c6 |3 m( q: {5 ^  jmp RMod' ]6 Z# n/ r4 z- w
RMod:
- s& t" H4 ?9 q  xor ax, ax" t+ C2 |+ M/ i% h2 c1 e3 [
  mov fs, ax8 q8 Z5 ^, N# s9 m+ z$ P
  mov gs, ax
$ L5 c* q1 J! W- w    # Z  q7 `( W  n8 j7 }( k7 ^# M
  sti
9 h5 |$ z0 w- j7 b4 c4 A! ~3 v( n+ a    ! G$ R/ c# s: G9 I; N9 b
  ret# Y$ Q4 s" M0 q
big_real_mode ENDP* N/ l1 P4 I" M& ^& C3 c# k
;------------------------------------------------------------------------------------------------' I2 n- H+ A" i6 C) ^) I1 G- [( o
real_mode proc near
; H/ a+ X4 Z" I0 K( ?) ^+ a- Q  in al, 92h
# C9 d# \3 q2 L' ?  and al, 02
5 O- W/ }  ^' q# H+ `  out 92h, al   
! A# K/ Z' H$ k3 k  ret
0 J) h; P/ r( k, [' t+ I$ w8 nreal_mode ENDP6 X: N3 J( |% C. ~6 V! Z$ ~; j; Y0 V8 N
;------------------------------------------------------------------------------------------------# `2 K& F. a- x  H6 t- Y  M
Get_Commandtail PROC near3 q' a- `. H; H) E* G' y0 x* l
  push es  
/ e9 f& y' n: C# Z; G. K  pusha
# ]- m, q0 c- h1 L' B  mov ah,62h  - {. ^* @+ }. |- m
  int 21h( N( @1 b# U, y& S
  mov es,bx
( I0 z! N9 d+ c7 `  popa  
$ R! r3 x( O1 n  K/ L" \, [  pop es
6 r8 D! G  N9 I5 e8 F) A: F  ret9 y9 ]' ~1 @7 K  h# X
Get_Commandtail ENDP) h0 I, Q. T5 L7 f* d0 p* N' p( M
;------------------------------------------------------------------------------------------------4 R$ k# F+ I  F. @0 j
PSP proc near& D6 R# S& D% h! ?
  mov ah,62h
4 Y5 _: J, e9 z  }' ]' w  int 21h
7 ^$ V9 H0 _) s# x* I  mov es,bx   / a3 D4 B7 |) O% L  Z; ^
  xor ebx,ebx! X- W7 T3 z6 Y7 J4 Q: K# F
  mov si,82h# A1 A+ v& x! [3 \; I: T- k
  mov al,es:[si]
, l3 W  Q) e( ^  {4 V' z7 ^  call Change( [. G: k1 S1 _4 b) E5 r! ]
  mov cl,4
& V+ M! s6 ~5 C  d  shl ebx,cl
$ ^. W; q* n7 q  add ebx,eax8 T$ |5 T! N+ T4 j6 e2 Y! y
  mov al,es:[si+1]
4 |/ X9 w; p; K7 Q/ B# I0 \  call Change
( O& E; f. _4 M5 ?; E; i) _# B: T- k  mov cl,4+ L- S& P7 K- ^  x
  shl ebx,cl
3 n# L5 y7 y; g  add ebx,eax
. i- x( D9 V4 M" v; T2 L, l  mov al,es:[si+2]
7 q$ `7 l& E4 r* k  K7 v5 N  call Change
; @1 S- g, {* m7 q2 e  mov cl,4
* Q" N2 e. X/ t! y  shl ebx,cl
3 m6 P' }2 z( a  add ebx,eax7 e5 e/ P$ Q7 k
  mov al,es:[si+3]
8 f, d# v0 F6 }- G# E7 S! L  call Change
  W# w' Z+ z. b$ q  mov cl,4
# K" J" v7 J4 r- S& N; U1 d  shl ebx,cl' s6 m7 n) C3 ^
  add ebx,eax' Z8 B9 }, Y2 b* J+ ^3 M/ m
  mov al,es:[si+4]# W9 `3 t6 R  {
  call Change
4 l8 j- O- _% M/ T& s, j% b9 ?  mov cl,4$ q) P! N8 v8 u" Y- ]
  shl ebx,cl
0 B6 w' @2 G# t! K1 m  add ebx,eax2 }- T; @- D4 k! @
  mov al,es:[si+5], c; P; E8 l" H0 P2 K4 X( e  v
  call Change) P& z) `7 k, Z' v" U
  mov cl,4) T" D  N+ E, P0 L8 x0 r
  shl ebx,cl
5 b' }5 S) p/ b, W  add ebx,eax
! Z" H$ s& P7 x3 a  mov al,es:[si+6]" W; ~" e/ x- D) S/ X
  call Change
$ }/ v3 k8 r& w$ F3 _9 X  mov cl,4: L7 r" t) R$ D/ r; e
  shl ebx,cl
; \  Q# J9 X1 h; Z! Y  add ebx,eax
) d$ o( F$ z4 Q$ l( O6 I  mov al,es:[si+7]/ e7 L' ~1 ~; Z* t
  call Change
2 w7 M4 b3 {3 a+ v: o) W6 [7 B  mov cl,4
* m1 F1 K: p! t, I  shl ebx,cl& F1 R" P* A4 k3 x3 `. a8 I2 Y
  add ebx,eax; S; _+ _. _7 l+ s, F7 J
  ret
# w5 j. P$ B8 o# Q8 Z: U& ?PSP endp- W* C% V: C6 y
;------------------------------------------------------------------------------------------------
3 n9 K3 Z8 _& ~$ ]  WChange proc near
3 [5 X% [3 m1 b! ?* S2 y; [9 Y* gA:   
% Q% @& g$ g7 O* u& H& r  movzx eax,al
) ]9 @# u: f7 y8 B& ~& d  mov edx,eax
' |5 _6 o3 O# u/ r  cmp eax,'0'   
+ ^$ H9 W# n" E, E  C  jb A# w7 ]' l/ l$ p: l8 K
  cmp eax,'9'   2 U9 {$ i+ P* m1 W) z9 L7 S
  ja B/ V& D& U4 p+ \- M( n
  sub eax,'0'7 U) [! I6 X8 S" v) ^
  jmp short E
7 c8 G* w1 a0 j  A+ t* w6 |B:
5 J0 P5 G7 f  w4 W% S0 |  and eax,0dfh   
- T/ z* ~3 m. e. D' T6 h7 ~  mov edx,eax
" W/ r2 d& ^. c$ m+ K4 x  sub eax,37h   ( m& A  L$ L/ z
  cmp eax,0ah- {& K% F9 Z% l2 K2 b
  jb A   . t! X: e# U  i0 `9 {* A
  cmp eax,0fh4 |& Q) o6 Z. f. E& F% k/ P
  ja A   & w0 _  K7 ^6 W8 \3 y
E:( U3 j* y6 w# R# i- i( ?$ R4 C% J7 y  ]0 W
  push eax     b# f( x5 @( O8 `
  call PRT   ) o  K, q! e. j' z0 ?" l
  pop eax
+ ]5 M& {' p2 {2 t1 q# _CExit:  L+ P" J6 p/ K9 X
  ret. `* ^. ~/ F. O6 c
Change endp
! }) Z" s* i- l1 [5 t, P;------------------------------------------------------------------------------------------------
/ c8 R3 y9 M4 r. h- N# FPRT proc near
7 t) r% Y/ s+ [3 Z  mov ah,02h
/ |6 E" y/ U. N* O  int 21h4 Y, w/ X6 j9 T& R- N
  ret1 c7 [) {+ S; q) A+ Z  B; T
PRT endp' V, t3 n. I+ h+ J) U- j7 L3 X
;------------------------------------------------------------------------------------------------" [: k) i5 d- J. s5 i& X
crlf proc near& j4 t( F. D# J
  mov ah,02h( y$ B0 l( [7 n3 L# p
  mov dl,0dh
/ C& h4 }2 }3 A' D  int 21h
/ O) `* O2 @- j0 U, M( R  mov ah,02h" P8 ?- q6 i5 f) a& p
  mov dl,0ah) [8 q& o$ I( P: n" Z# ~
  int 21h, `0 N- E! ^# o/ N- w
  ret  t% z6 g' {4 {1 A; s" q( Y
crlf endp
* G* ?, ?3 B2 c/ |1 A5 n;------------------------------------------------------------------------------------------------7 A$ L; ~3 u! f# F7 u* h9 d8 i
_32bits proc near
2 I' {. _6 Y8 p$ {  pushad
; t) o/ [! W! v  mov cl,4+ F- `6 B: A+ Z1 |  d, J9 o  o
  rol ebx,cl
+ I% I1 [- i6 c7 x7 p1 L* q5 l  call print_4_bits- n0 ]+ n: W- A+ t0 x
  rol ebx,cl
8 _4 E; `5 K: _7 b  call print_4_bits" d9 H2 W$ E+ w" u  Q
  rol ebx,cl: z! v: C# H0 p, s
  call print_4_bits' d( S7 B: B& ~4 E' U6 n
  rol ebx,cl# v) O; u4 L2 Q3 }3 n  |" P) O' a: ^
  call print_4_bits
4 V* w: |% C4 ], }5 |. n+ I% f  rol ebx,cl
3 ~( M. i/ x# ~% D7 B  call print_4_bits6 s0 a) l+ \2 J/ L1 H
  rol ebx,cl- `8 j$ p. Y$ h- _7 E1 Z4 \' N
  call print_4_bits8 g3 H3 a& h5 |) w( N+ ~
  rol ebx,cl
- [4 n2 a8 y/ [  z+ x  call print_4_bits6 t4 ?7 X2 F% i7 t4 S
  rol ebx,cl
/ l1 }1 P' a& Y  N/ H+ L* T  R! j  call print_4_bits
4 U  @) _& M: [: R1 F$ F  rol ebx,cl' H0 c# H. z; Q; I4 z$ \" ~
  popad0 @) W$ X' a% U' l5 z9 Y) w/ E
  ret6 `, N; ?9 h: _
_32bits endp
# e) q, q5 y- n5 A;------------------------------------------------------------------------------------------------
. \: \$ t0 @8 Z( W& b4 W3 b_16bits proc near
) {8 e4 D& D2 l1 F0 g  pusha   
& `5 T1 X3 T/ w7 e( d( X% x% o! [  rol bx,cl* y! x  y& ?6 C" b% f, g7 J4 u
  call print_4_bits
- F4 \! t  h) {+ `6 {" L5 d  rol bx,cl  ]* L, z; v4 `2 t( D, q; J5 Z1 q6 z
  call print_4_bits
1 t. v$ ^) }7 z! P  rol bx,cl
& _  [; l$ [" S3 t; ?, w) C. {  call print_4_bits
- ]6 {5 F( L! m/ V& Y  rol bx,cl. R( {7 g. a3 C" |( Z& O
  call print_4_bits
$ v& g1 }& `( B* c6 ^8 g+ H  popa
, |# {( _7 R  f: y- R  ret
+ e! }- `5 u7 M$ z3 k* C_16bits endp
9 E+ r* n- j5 X8 V;------------------------------------------------------------------------------------------------$ F$ ]. A( }1 d* e, m5 O* }6 }
_8bits proc near; D' w" [, }8 f/ I) m' K
  pusha   % ]0 m: d8 H7 ~9 K
  rol bx,cl7 W5 p) b$ b; M2 c3 T  A
  call print_4_bits9 ~1 ?5 G, D% A$ z
  rol bx,cl, |4 `- a; k5 \+ x' B# N8 N1 P. k
  call print_4_bits. P- T' i" V5 f
  popa
$ S3 w/ H' ?0 t4 p  ret  O) |: C( Y6 q1 X7 s$ f
_8bits endp' E" H' A) W' f2 _6 F
;------------------------------------------------------------------------------------------------2 _# L4 e$ k* g* [1 C3 X% T; i
print_4_bits proc near4 z9 X4 O+ \0 S% C8 g' ^* A: K
  mov dx,bx' o3 e! U$ f+ d- x& B0 j  N
  and dl,0fh
# K9 T2 Y7 t+ u/ F- q0 S  add dl,30h
& r# [9 C( J& t5 k) t  cmp dl,3ah
9 H. z3 T8 Y9 `/ v) V/ Z& |' R  jb print2 K; W- k, B' ~! X+ j
  add dl,7, D, l2 i: a& R* q
print:   
) b$ E+ U+ Z) G( _  mov ah,2
& [' _; q4 ]! f" R! R  int 21h
# |! K7 k8 }* g8 O9 |  ret
% j* @" G7 ]0 o9 `% Wprint_4_bits endp   
  E. _' r# f+ ~$ l7 X. I' Z;------------------------------------------------------------------------------------------------. A* x# Z8 ^8 Y
CSEG ends2 W- t6 ?) c# _4 }( @# \
END
您需要登录后才可以回帖 登录 | 加入计匠网

本版积分规则

Archiver|手机版|小黑屋|计匠网

GMT+8, 2025-5-2 02:47 , Processed in 0.031974 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表