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

顯示string會出現亂碼

[复制链接]
发表于 2010-10-19 16:41:51 | 显示全部楼层 |阅读模式
各位前輩好,以下的程式為在 big_real_mode 讀取記憶體的值, F* z5 N# Q& s# ~* }

% d9 m$ w% {; {例如: C:\memory.exe(程式檔名) 01000100(Address)
8 |4 H+ q6 b# f  E5 j2 s2 |) I- W' `$ X. ^5 \6 Y! R/ y! E& @
則會顯示01000100位置的值9 W$ f7 m, x4 _( x+ q: ~) ]

) N9 y, p; E3 w9 R1 g" p但是我另外還有要顯示出字串,但是顯示出來都是亂碼
% h- c# q# U: |4 v; w
# o% n; P! ~, S麻煩前輩給我一些指導,謝謝  8 ~/ g# L% C/ {. ?+ w
# q! |7 N* I. J) l

/ Z% u; l9 o$ J2 A4 b) B) h.model small
+ t+ r4 D, L6 C& `.386p, @$ b6 F8 f0 s- l9 ~/ O. t; X
;------------------------------------------------------------------------------------------------
' z4 d' T% ]3 A, P; YDSEG SEGMENT USE16'data'  
2 @4 I2 ^: a7 [0 U2 G; L5 b! S3 f' Q# K. x9 ^$ _( d; u  L8 C
DESC STRUC
. f" V4 [8 G  K  LimitL DW 0  ( }3 l  ?$ C9 L2 ~/ q
  BaseL DW 0  
5 x' `( Z% ^; \# m, I* g: K  BaseM DB 0  
# Q- n6 }! D8 ]$ G8 @( ?6 A  Attributes DB 0  2 o5 @  q4 ]+ H) R* [* u5 s5 z
  LimitH DB 0  
+ M5 D. J+ c  T7 z$ _  BaseH DB 0  1 Q% `  g# b  r4 B
DESC ENDS+ m2 a! q* X# V
! x/ w$ C3 H- `" s6 t6 y2 t
PDesc STRUC) C; j; B; @) ~0 {' h, z$ P1 O0 a) ?
  Limit DW 0  
+ `3 C' J; _' ?8 {8 k  Base DD 0  8 F3 B; R1 f$ i
PDesc ENDS
+ U* n8 [* }8 X" S/ @, a0 t
- K( A9 e; ?( ?$ O! j. S! mGDT_def Label Fword
% u- r6 [2 c& d0 s" M/ {Null_Desc DESC < 0h, 0h, 00h, 00h, 000h, 0>2 w0 y0 A4 o9 J6 E
Data_Desc DESC < 0FFFFh, 0h, 00h, 92h, 0CFh, 0>/ l$ a! Q, l+ l  O5 P1 t  ]  |
GDT_Addr PDesc <$-GDT_def-1, >
0 D) g, q( w1 i
8 C3 e6 o& d) \msg1 BYTE 'The Input Address is'
& s: P0 N% c: `6 Y- l* P8 Smsg2 BYTE 'The Data is:','$'
% [2 |7 v4 z& y. U" w
6 K& _3 ~- O+ U; S! t$ X, m4 KDSEG ENDS
. R' B& z: J: X3 r% e1 J: y- N! l
6 O1 |9 D  G, |. r8 _
+ M# h( ?* v% T% j;------------------------------------------------------------------------------------------------    q! |( R: @3 ^/ v, [9 K/ \# C' G
( n8 I. K4 t' U  z' u& Y9 b
ASSUME CS:CSEG,DSSEG
* w9 Y- o- B) K* W  ]) J0 S- t/ A
: W5 I+ A$ j8 m4 O8 V& h3 J. {CSEG SEGMENT USE16'code'% l/ w5 T; d; f, N8 w
  
4 b1 x: d. @* ^' \  push ds( d! W* }9 ^5 W# g) `- t2 N: r
  push es
; P4 v2 N( m% ]4 j* \  push fs! R4 O5 B3 }2 Z2 J) s, G
  push gs: e' e8 R" M; d0 `
  % z- K! |* ?9 f: O
  call big_real_mode
( O: y+ l- W) Q
4 q( R1 i+ I( }    & U' U$ e% e$ }' K- M6 @0 ^
  mov edx,OFFSET msg1;3 a8 D. Q9 k4 o9 g
  mov ah,09h;   + Z* G2 ~/ Z. n2 H& a
  int 21h;
4 C. _+ a% n# c' z$ r, h  mov edx,OFFSET msg2;
( T+ v6 ]+ b) X4 A0 g6 c  mov ah,09h;
8 O/ {2 X: w, s" i5 w7 A7 J2 x. z" A  int 21h;
  A( ^+ ?1 W, w! Y      _1 [. o1 c/ J' q, d( c
  call PSP   
- R# O" m* r- X5 |% t1 g& I7 i   
' u# Y' \$ \; I, d& ]6 L% [# ?5 e  call crlf   ' E, x$ z. s8 {8 J" J
    ' P% z5 o5 @( L
  mov esi,ebx2 z9 E3 ^, C8 X/ f( b3 e6 f
  mov eax,fs:[esi]
$ M$ y: B9 c# s* o3 ^$ B  out 80h,eax
. q2 V" m/ k" p/ C3 ]& `  mov ebx,eax4 ^$ n! \% r. I: S& u+ K
  call _8bits- g. @1 N4 i; s
    . R! {. s" s' W- j1 ~
  call real_mode
) d$ F2 Q6 C8 V% i! \3 i   
, y% ?  Q3 U! [  u6 G' W9 D/ E  pop gs
4 e6 }) q  ^/ S. r  pop fs& B3 g0 |3 F5 T5 ?  \
  pop es6 z7 F0 m/ p- ]. H* j% a
  pop ds
2 W, y/ z& \# E, I   
; z5 K; u; V' A0 P" B" E  .exit7 r! o7 S* A9 n; w& Z! X
;------------------------------------------------------------------------------------------------0 @  y7 O4 R3 k2 N1 S
big_real_mode proc near# g. H: Z6 q4 J+ z* H; E
  in al, 92h
1 U+ R8 F" ]/ t, E- Z  or al, 002# Y; P# v, {4 |6 I7 _  A4 m
  out 092h, al- ^% G$ r  p) ~: t
  out 0edh, al
: e+ I; z6 d5 H$ ]4 q" j  cli
' T! K" u0 v* A( x  mov eax,DSEG
% d0 B" g$ y! s0 _; i  shl eax, 4" Z' ]2 ]7 }5 z: ^2 n- G- ?( N
  xor ebx, ebx
) R8 K9 i7 U# o5 W3 V  mov ebx, offset GDT_def
- K3 }) Z: O: L$ c+ R  add eax, ebx8 B6 x( A1 S7 h# s" x# v4 O2 \
  mov dword ptr GDT_Addr.Base, eax
# V4 j. P, B& ~4 |7 t6 G  lgdt fword ptr GDT_Addr
6 E1 [# w" k' s: s4 O$ x/ B  mov bx, 85 G  t* C6 ]0 {/ w$ q- C
  mov eax, cr0
9 g& G; ]0 I( z5 i# d5 k  or al, 1
9 L9 m0 a3 ]+ a/ `3 l- y  mov cr0, eax% w# U+ h+ B# O, F, x
  jmp PMod/ F* R  A0 Z2 H8 y3 O% E" B
PMod:. Z0 t- ~1 a1 T$ H1 @+ ]
  mov fs, bx
, w( V% x8 n) Q1 ^, c3 V, A: v6 F" {  mov gs, bx! l2 }! x) Z" u5 r; A  b  ^
  mov eax,cr02 V' U5 w( M2 S
  and al, 0FEh+ r# s0 V4 q" s* z& n! `
  mov cr0, eax  
  y2 _" t0 d2 @3 _  jmp RMod
" I( N3 {2 I7 x- S! q4 a7 aRMod:' ^: J; g+ x8 A! {. c
  xor ax, ax
) R% c: B7 [! {  mov fs, ax
% n1 x* `" R2 W3 Q4 B- P  mov gs, ax# k! r, O; i6 a0 O1 w
    7 ^. p. S9 R1 X4 d4 X
  sti
7 N% q) Z& R$ J; D! B4 f   
3 k6 o& l  E! e  s1 @2 f* R  ret
7 L4 U3 f* P8 [4 r7 q/ k" t+ ~# Wbig_real_mode ENDP
; K% z" V- W! Y" X" b;------------------------------------------------------------------------------------------------7 ^, T% Q- W5 ?9 `
real_mode proc near2 Q" f5 R7 ]5 C' D
  in al, 92h- ]$ {# T6 K6 ~" u
  and al, 02
  o7 f  e1 G* S2 h# a* e" G7 B  out 92h, al   # e0 D3 q! R6 `
  ret# Y/ c, Z+ {4 _1 b8 C3 G3 |
real_mode ENDP
* h  q5 m. W- J;------------------------------------------------------------------------------------------------
) B. r- m- Z8 U8 }) @Get_Commandtail PROC near8 O( [" v, D% Q# Q' r3 s( q( ^
  push es  & l/ F% ?+ c7 v0 q4 ~
  pusha
6 \2 _; ^2 T; l& P' N; U: f( F  mov ah,62h  ( G/ s; H4 u6 |$ D
  int 21h# ^: R$ J* b) o$ [% H8 D0 {$ `; p
  mov es,bx
. ^! X3 }2 ]0 C( S8 T, X5 J  popa  
0 r6 l- B& s6 `) `0 v) m* p, c8 T. i  pop es
0 P, B+ C/ F3 z. K% q  ret
2 o: X2 A6 c0 t" N- |: M4 O' BGet_Commandtail ENDP# Q% s, `+ F, E1 \/ P
;------------------------------------------------------------------------------------------------* }/ t2 R" L: a1 V  y8 X& B2 _* q
PSP proc near8 P1 M/ G  l" k8 B' o5 c
  mov ah,62h6 T# f' f; ^8 s1 ]1 ]
  int 21h
  ~, {& V2 U, q  mov es,bx   
$ N# I8 D. I9 I, j6 R, j/ a3 _  xor ebx,ebx
( Q8 H1 T5 b7 q  j  mov si,82h
0 ?* X: V7 j+ f" ?, N  mov al,es:[si]+ L& o* X, {+ j1 L6 f8 v
  call Change2 G" [% g; q. ], W
  mov cl,4
9 C) c- t& T( f  shl ebx,cl. ]/ `$ K* @" r+ R3 A7 {
  add ebx,eax
& Z$ b: r, G* k# I0 Q" X  mov al,es:[si+1]
8 w8 R, \9 w/ J4 @8 D  call Change
2 X6 G; F) D9 x. Y5 ?  mov cl,4
6 D0 v/ p& c/ ^% _% ~4 @  shl ebx,cl# C0 ]7 i5 x6 h+ d  \
  add ebx,eax
. R6 F" T) f. \7 I7 I& L  mov al,es:[si+2]4 }+ s1 G1 M$ G( p  Y
  call Change& `" G) p& U$ C) a
  mov cl,4
9 s& L* ]  }1 l8 \0 S$ Y' U$ j  shl ebx,cl
+ C+ C0 ]  {: j! L  add ebx,eax
/ \6 E3 [) Q4 d. v: L+ ?  mov al,es:[si+3]
* q% f+ N3 ]; c$ H: b- m7 ^$ C6 P  call Change3 f" W  }. [% \: Q( u" F3 S* d
  mov cl,4
+ D0 h* |9 F* C' C8 \+ @/ a& U  shl ebx,cl
7 G- _: v! L: f8 ^, m6 n/ {' ]  add ebx,eax
1 ^. K4 u3 Y  M  mov al,es:[si+4]
2 }- p# Y% I! C2 o' b  call Change
" N2 v2 D3 z+ g  mov cl,4
& J9 N( d( s: T  shl ebx,cl
" b' F5 W( T8 `% a7 [* o$ ]$ |+ d  add ebx,eax# ~) J( G5 z- o# N& i0 j* g
  mov al,es:[si+5]% h4 F8 G! ^) q
  call Change
( K! _2 l6 Z: ?$ z/ o  mov cl,4
. ?& w0 |. I0 M8 d4 ^  shl ebx,cl
) O9 S; ]0 Z  K2 g6 Z" v* p3 N4 v8 d% W  add ebx,eax2 g+ Q7 D7 _. s, F% Q0 W
  mov al,es:[si+6]; l* S  m  Z# \- P5 P6 h
  call Change
, U: ]! F8 O* H* t( I3 z! z  mov cl,4- [  }* ^9 D6 l+ Q+ d
  shl ebx,cl: q! K6 k7 j* z
  add ebx,eax
. t4 j: a. h* n( N% D  mov al,es:[si+7]
7 v! T; U. O. W  call Change5 S8 ~$ @" t& C  Z5 R/ [0 D% u; T  }
  mov cl,4
% u5 l( j3 i% _+ B. s6 ]8 z  shl ebx,cl, A0 z/ Y( \  |' Z5 {
  add ebx,eax
0 F7 b; ]0 K- N% y& B" L  ret
* t' X( ~" ]/ y0 GPSP endp
9 A7 J/ R; W6 D; M( T9 w;------------------------------------------------------------------------------------------------
+ G8 B9 o8 R0 ?* ?2 TChange proc near
  Z- U/ r, k1 y# zA:   * j1 s6 d7 e( C1 i, N. [
  movzx eax,al( \; w1 M9 p0 `/ o. j
  mov edx,eax
, O9 l* b) M# |# r  cmp eax,'0'   
" _; d) `$ H  x# v9 p7 P  jb A) P5 d/ P, }" ^; q2 ~: w
  cmp eax,'9'   
5 q1 `5 Z+ ?- ?  ja B
- w) ?7 K8 I- g  sub eax,'0'
# x, P) I  @: F" b  jmp short E
- e9 A5 Q, J8 ]8 _) D, @B:* D( X/ _5 @# {
  and eax,0dfh   . P+ y) n* b9 f; W/ j6 t7 L$ @
  mov edx,eax- w, C6 u3 B0 L
  sub eax,37h   % F. S0 n) x7 `  t1 s$ M! \! ~
  cmp eax,0ah: j6 n5 f! m! I1 |/ Z$ u2 t% h, _/ G
  jb A   3 ~' Y; `# C% o# O% s2 `
  cmp eax,0fh
+ U* ]  @$ @( F1 c3 t3 M  ja A   
/ F0 K) S4 j# i5 u2 TE:
) ~# \' ?* b9 e! \  push eax   ! A+ Q/ K; a/ @
  call PRT   1 _  I" [9 Z& i5 D
  pop eax
8 _5 [' D! A5 W: b# \0 F4 _) k, gCExit:3 R' P1 _2 }  V( w7 T# {
  ret: F/ M0 \+ @7 ]
Change endp
- e* w5 T3 |( v* R+ [0 L;------------------------------------------------------------------------------------------------$ k6 B5 |! B0 t' Y
PRT proc near# d$ B5 p2 a  u3 M
  mov ah,02h" y: y. H8 k7 Q$ `. U3 q
  int 21h
* z0 M; ?; R! R: l' d) K1 W8 X  ret
& R5 a4 W, p* j" P* u+ qPRT endp
% T% ?$ y8 X8 p;------------------------------------------------------------------------------------------------; C0 Z% Q% X6 l0 D- D: T
crlf proc near: f0 p" H6 m% F( b
  mov ah,02h# {! T  q  [' Q0 I
  mov dl,0dh2 E2 h; |, t' l- h; Z
  int 21h- T4 O7 }* \( l! e- O5 A
  mov ah,02h
) V/ ?# v+ m0 D( y6 }  mov dl,0ah
8 J. F+ O7 r. q# b# t7 x  int 21h
3 Y! |( q3 ^% O8 D, ~  ]  ret0 o: p& ?) |* Y; W+ L1 O
crlf endp
3 v2 J1 y( E- U- c' R, M) `) U# j;------------------------------------------------------------------------------------------------
' t. d7 F1 n8 Y. l$ O_32bits proc near, ]  T6 E  D: Z. j; g3 ^
  pushad
5 Q, r  }! ]  n/ o' B  mov cl,4
, f2 [- l. H  o& }) y0 _  rol ebx,cl
: A# M3 E+ }8 n2 c  call print_4_bits
7 W* n2 X$ v9 T* D0 T  rol ebx,cl
- J! ^! A9 D; T0 t  call print_4_bits
" W& w5 O; L5 a) o5 h" ^  rol ebx,cl- J* i! Y4 l  ]+ {
  call print_4_bits7 H6 i# x4 D0 d8 Y2 k
  rol ebx,cl/ r6 d' }; U( i( T7 u
  call print_4_bits
+ O2 g4 I$ P- O0 Q9 r/ p" E: C  rol ebx,cl
9 f2 v: i( L) s  a, h$ N  call print_4_bits  X& F$ S  l' ~# M) F+ n  w) w
  rol ebx,cl# C% `) @2 Z/ k2 Z8 W
  call print_4_bits7 O( l, J% U: H  m
  rol ebx,cl- e/ X( B; W; _. C* \1 S
  call print_4_bits3 p5 L# j. w8 v
  rol ebx,cl" e/ X7 o* D: ^; v" ~( C
  call print_4_bits7 e9 g' ]2 A0 M8 R
  rol ebx,cl8 @, Y1 I( ]3 a% r8 W. \
  popad
; m/ _1 c0 I( K5 I5 [  h8 Z  ret
) ~( C8 }3 G7 x- Y6 [4 C# |_32bits endp$ {7 C: E- A6 f( q5 B& g! a; w. e
;------------------------------------------------------------------------------------------------5 O6 `8 u& f1 m
_16bits proc near
" j3 |2 W9 Z& v, P! j  pusha   
5 a8 J+ E& y5 {$ a; P  rol bx,cl' D1 Q8 d5 I2 k/ t; G( e
  call print_4_bits
7 x$ W/ m* L& E  rol bx,cl
+ v0 b* @) I6 z& o% P/ {  call print_4_bits
+ x4 S" B6 F2 y# o2 @  o+ Q8 Q  rol bx,cl
% K) T3 ]+ h  K5 L! l/ c  call print_4_bits
0 ?1 D5 _! x" a+ G) \7 w' s8 k  J  rol bx,cl7 [: W8 I# T5 G2 c- c- I
  call print_4_bits
$ Q$ C7 j" ^. b4 l7 l0 z  popa
4 a  W0 o4 a- F5 s  ret: z- U0 K& w  I3 z
_16bits endp7 N+ ]5 a6 D; U4 @6 H
;------------------------------------------------------------------------------------------------  z1 ~* n$ P: r* N4 F
_8bits proc near
/ G% h% W* n6 D2 j2 m  pusha   / }' {- R: P" g/ c: n
  rol bx,cl
% S6 Y* |- Q* G  call print_4_bits% T: |  B; W+ o5 N! j
  rol bx,cl
5 m0 _5 w3 [& ^. C  call print_4_bits5 J9 U6 Q1 K# q2 ~3 R( ~% H
  popa% V0 K( Q7 e3 N4 v1 ^2 [
  ret
# Q4 w& C1 M$ }& x_8bits endp6 C/ |) p6 H* ?( Z; L" E+ E
;------------------------------------------------------------------------------------------------
* v' \: N. }3 K% Y4 h4 r6 iprint_4_bits proc near
! A7 Z8 b3 I$ ?) @1 {( p  mov dx,bx
4 Z" Q7 ~  |7 C  and dl,0fh; r; H8 u4 d: S  o3 P& |2 X, E
  add dl,30h; C  Q! h* P4 j9 U$ u
  cmp dl,3ah; z0 I2 U* ?0 J8 |
  jb print) M+ c" b, M1 d3 J9 i
  add dl,7% ]; f& ]8 E6 l& }
print:   
3 X$ w- ?6 a$ x7 j8 e  mov ah,21 l$ a  y3 y9 M& L+ J0 B& C' O
  int 21h9 v$ a/ U! i" q  I5 U; N
  ret" d2 R  Y/ W% ~5 m. y$ w
print_4_bits endp   
! L7 V1 a. b  @; I; W8 I, m3 P2 ];------------------------------------------------------------------------------------------------! L+ |$ X# h; G" k* B! d
CSEG ends& |0 H( v3 G" }
END
您需要登录后才可以回帖 登录 | 加入计匠网

本版积分规则

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

GMT+8, 2024-5-19 07:46 , Processed in 0.023134 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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