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

顯示string會出現亂碼

[复制链接]
发表于 2010-10-19 16:41:51 | 显示全部楼层 |阅读模式
各位前輩好,以下的程式為在 big_real_mode 讀取記憶體的值
0 g& }$ [+ P9 \, f
5 L# H/ X  T( A3 y- q# E例如: C:\memory.exe(程式檔名) 01000100(Address). @) ^+ ^9 q' v! {3 L! a. V
* t7 \6 c  l) l. b  U& ~! c3 F" c
則會顯示01000100位置的值# T: B9 J2 ]# |! o* O' }
7 \+ c4 r1 t' `4 {7 w: O
但是我另外還有要顯示出字串,但是顯示出來都是亂碼$ G- M( y" B" s* \

6 _% b# C1 S* H( G' T0 M; n麻煩前輩給我一些指導,謝謝  5 U) x( r- X$ F/ H  m9 Q
4 N, r  \& y* ~% d5 a
$ n( z4 i& }3 B; S+ O
.model small
% O5 w. R  R; f. W) X2 }.386p0 L9 u3 g- g( c2 b
;------------------------------------------------------------------------------------------------9 h& M2 X% C6 _! A
DSEG SEGMENT USE16'data'  
  k/ @3 V) E3 N! [( X' B( A) d* u6 i* d: x% k
DESC STRUC
8 y8 z; _6 v3 V; a4 @! S3 ~+ U2 W  LimitL DW 0  
1 Y( v' ^. N, W% s. T: A% {2 e  BaseL DW 0  % h  x$ B7 ^' [& n
  BaseM DB 0  9 a7 O3 m. p2 [5 d6 K  ~& ^
  Attributes DB 0  
" y7 c3 O$ o8 C& b; t9 g" Z  LimitH DB 0  7 k  K4 L$ `+ L8 u
  BaseH DB 0  7 d* W2 \' K& }' z) B: p
DESC ENDS
  I- y' ?6 T; w8 R$ w' l8 e1 o
" @9 k( @+ z  i% d3 w& Y/ b5 \PDesc STRUC- L* b$ `9 V  |: C
  Limit DW 0  
4 H9 g2 K2 [* ~4 I, \1 @9 \8 ]* t  Base DD 0  3 \) J) y) l# h; P0 e, V: G
PDesc ENDS
3 a' v; [0 Y' E3 t/ R# k/ P3 s  v) \1 d6 G: X" ]7 A3 b
GDT_def Label Fword
1 u5 T4 G  d% R. f# \- V% ?Null_Desc DESC < 0h, 0h, 00h, 00h, 000h, 0>( u3 G: ~! S) ^$ J1 S8 C
Data_Desc DESC < 0FFFFh, 0h, 00h, 92h, 0CFh, 0>
3 ^' m& N% x) k8 {, z2 z; c. OGDT_Addr PDesc <$-GDT_def-1, >
8 T/ p6 U% p8 C: J$ ]/ ]8 X1 c4 k
7 }" Z6 h) i0 O& q% Nmsg1 BYTE 'The Input Address is'
  s: |: T" q/ d0 C  U! T$ ymsg2 BYTE 'The Data is:','$'+ x+ P( q& r6 ]2 k& ~. i

, B" J6 {  R7 n2 GDSEG ENDS7 ?( ~) w" X) I) T
  z+ M$ V+ I$ k$ f

, y3 p* j0 I0 m: };------------------------------------------------------------------------------------------------  
# J( \6 c! L* N0 _0 ^) X7 ?9 A, P. g2 x1 ^
ASSUME CS:CSEG,DSSEG
1 f8 e2 ~& p5 }( Q! R1 j2 t* G$ E, L, K6 j; e
CSEG SEGMENT USE16'code'
+ q7 F2 U5 k" I  W+ V  
, a6 }' J% w, ]7 }  push ds; j9 u, n! g* t0 c5 p
  push es
3 O  k2 M( T* G9 W+ P  push fs5 w: X* j. e5 l4 d/ Z6 |- E1 w
  push gs. Z% k8 g4 m1 e8 V' {# p$ ~; q
  3 y0 r( y; v! [6 M
  call big_real_mode! N3 b) `2 E5 n
6 V; e) a4 X* R/ Z" X9 r/ J
   
- c/ [( `# p- ]/ Q0 Y6 U5 s  mov edx,OFFSET msg1;
. e6 H; J+ ^- {2 m$ }" w# Z  mov ah,09h;   
( L1 x6 V, p3 @% D# k& G  int 21h;
+ I3 Y+ r' L& m* J- n7 S$ u  mov edx,OFFSET msg2;  B# k" F6 H% ]  @
  mov ah,09h;1 T# _; m* }5 ?/ P& h) e! ]
  int 21h;( l$ T; u, ?5 P' O; a
   
" _$ T4 A  p7 x% ^- X8 X; q  call PSP   7 E$ Y/ Q2 w* N1 k+ T# t1 ], h+ \
    " f& g! H3 m, V) k' X3 Y9 @! m  G7 Y3 _1 e
  call crlf   0 U' k' k' T% m5 d3 U
   
' M# O2 T% [+ k1 H/ U4 Q  mov esi,ebx9 |5 M) D% x  b' J3 a) P, Q6 D
  mov eax,fs:[esi]
  E5 M1 _6 F; r1 B" q, x) t% p# v4 J  out 80h,eax" L- ^9 M( ^" l. ~4 \' x0 {) O
  mov ebx,eax
9 Y0 y5 J& v/ y, s# Z# Y& ^  call _8bits
2 @9 b) @6 O$ w* o: o. V+ [   
/ \* A! m; l' z' f& L  call real_mode
2 U/ Q; q% f$ R: S% T) R( q0 \( x# l# U   
2 Q+ [7 w& o; m) L  pop gs
( p- O3 Q2 t- l  pop fs
, I$ ^. h( }6 \+ |& I. Q5 z5 n  pop es
1 k6 `+ p* i% R: |( D  pop ds+ Y/ y- \; k/ J5 \2 I. U% `% P" I
    4 g1 h  |; I7 f! f& d$ A8 I3 Q) ]
  .exit+ n# B; R- ?  p
;------------------------------------------------------------------------------------------------
# H: f: M' o: s8 ~2 U, m; ]big_real_mode proc near' H6 j6 W; E7 K( a
  in al, 92h
8 \8 M, E: j" _: S0 \2 N2 s  or al, 002$ G  c* t9 `6 V% ^/ n  K  ?# X
  out 092h, al0 C' l9 W) Z- M4 H/ e% A, T0 Q) Q
  out 0edh, al; T* G0 `8 ^2 C' q+ M! U9 x
  cli; r" b' O  j- ~$ j4 W* n. g; w
  mov eax,DSEG
* H  T7 f+ r$ A5 I$ [( s; e5 ?& k  shl eax, 43 K  s, R& T# s
  xor ebx, ebx
  Y& z& u0 Z" b; Z  mov ebx, offset GDT_def
: @/ a; ?% @6 {  m4 U& U( h  add eax, ebx
6 d' \9 w2 e+ B( C- C  E5 ?  mov dword ptr GDT_Addr.Base, eax
; @2 d% K; Z: z* D% C  lgdt fword ptr GDT_Addr5 u' J" R, B7 u, v
  mov bx, 8* M4 m. q/ f3 j4 ]; W
  mov eax, cr0( u' L8 [4 b. [9 K  y, S  l! i
  or al, 1
3 }0 Q9 a* W) z7 n  mov cr0, eax' H  M% _" T; ]
  jmp PMod
' o% m. }. B% C1 ]  P1 {9 U& iPMod:
. d% C, I; {& @3 z( y% i9 l' O  mov fs, bx1 ]$ A8 A0 k' a0 E# E$ n- P' s! U( k
  mov gs, bx
! K% D& D, o- [$ m5 O$ @  mov eax,cr0
: F+ A" ]( N% j) D3 }% a  r  and al, 0FEh
/ S" @: q! H5 k  mov cr0, eax  9 t0 z: `) ^3 ~" N, A- F% @) I% f
  jmp RMod+ |& A/ A6 _% }1 k' o2 W
RMod:
- f; h/ p9 K+ Y# R. Y5 ^  d  xor ax, ax, a6 Y4 O# M4 ?8 i$ y- P
  mov fs, ax6 G3 n' O, U7 T/ I2 u
  mov gs, ax
2 I. e7 [, [! S2 Y3 k    ( P- A- W0 t8 E- v7 o
  sti
; [* d3 d- B7 j! }, h   
2 l+ Z+ n3 F/ G; R; I  ret
( [1 e3 q% [+ jbig_real_mode ENDP+ j( k3 ]7 p0 y- f2 s
;------------------------------------------------------------------------------------------------8 C& E% l4 z$ @- I8 p- K
real_mode proc near
$ i6 C& v0 Q" ]7 O/ w5 `  in al, 92h
& }1 r6 a8 v- v$ E6 P5 Q6 O  and al, 024 H/ }* n% b/ S/ r+ t" i" m8 |
  out 92h, al   5 X6 |0 ]+ m# b2 R6 Q3 c* T
  ret
( @& \; X/ _" l7 Y3 f  preal_mode ENDP# R3 V3 ^7 u) B/ ^5 h
;------------------------------------------------------------------------------------------------- M# Y, w9 [5 o* J# w$ {
Get_Commandtail PROC near& X: c  \9 k: B1 X. d* l4 h9 r
  push es  
# A6 \. B  A7 J0 u  pusha
9 }; s' x8 v% ^. D6 K  mov ah,62h  : j5 m* B9 I3 W/ v  Z4 V. z2 a8 Z) w" [
  int 21h
$ i, u1 H$ L4 w2 {  K  mov es,bx
" t& w/ U* ?8 f2 g& X: F  popa  
  i* K& I1 O+ N# @, ?' T  ^) n/ q8 t$ y  pop es
9 {3 U3 w! X, J7 x, D* i. Q  ret
7 E0 y1 s0 \( `( f! y; k7 t& YGet_Commandtail ENDP
+ b4 D# M1 ^" {" G: i# ~1 U;------------------------------------------------------------------------------------------------
9 X1 i4 }. h* P' XPSP proc near
/ A' g2 p  M, R+ ]5 j$ y# A) C  mov ah,62h
$ y4 o5 n+ X; m  int 21h
; \5 U( T4 S# C( G7 d1 U, P/ X  mov es,bx   3 s0 ]; F% W3 W" M! _) g) R
  xor ebx,ebx
  P8 Q% i% @/ M9 G, ^! a% r/ y  mov si,82h
2 E9 B  s+ M" H  @  mov al,es:[si]
3 z: t+ F$ M  V9 C& F  call Change" W* r- q' t8 F% m2 M" s
  mov cl,4
. B) a1 O+ M' A! v1 j* O& M0 t  shl ebx,cl4 w0 K6 Q& c6 O8 l0 o
  add ebx,eax
$ S* m% a$ o6 k/ ]1 k1 l4 p  mov al,es:[si+1], w# S! J. b, k/ O
  call Change1 P" h) @' @7 i  q) I' S
  mov cl,4" @/ B  t/ {# K' s6 n) q
  shl ebx,cl3 B) V% E( e5 r/ L6 Y6 ?+ ~! X2 t
  add ebx,eax
1 D; Y& P, e! b6 I6 z' W8 x  mov al,es:[si+2]
  Q, k& S" j# a" W, v- _" _  call Change
( w, }# M3 |7 z3 F  mov cl,4
4 T6 Q8 t5 K& \8 V' b  shl ebx,cl0 @/ r0 ~8 `' a$ H: g) ^
  add ebx,eax
( M% _! ^! w5 ]5 e* L) s  mov al,es:[si+3]6 R8 Q, i4 }% E7 c: I7 N) n
  call Change! O8 J' h0 l" \- m( c8 c0 f4 }
  mov cl,45 w5 r3 r' N; t
  shl ebx,cl
: Z# a+ R4 _' ?+ K) [  add ebx,eax) {6 j  A* z: |" S# m; q
  mov al,es:[si+4]- `  e+ c' Q$ s' {( b2 K
  call Change, z- p7 [' z* m6 c
  mov cl,4
6 ]+ P5 J$ ?1 W  shl ebx,cl  s7 y. @7 B: p3 D! K' t# b1 P
  add ebx,eax3 b) T( I6 B; |% u1 {$ o
  mov al,es:[si+5]
% b/ h9 E8 T* `7 E* ]) k+ [  call Change# f/ i. T' n: Q; j* {
  mov cl,4
" R% Y4 Q6 R$ v7 U5 g. {* a9 q* z) K  shl ebx,cl, O1 E: |* P! X
  add ebx,eax
& r8 S, H7 O8 u; d: }  mov al,es:[si+6]
/ v5 T6 z+ l* k8 x9 u% l8 k' V  call Change$ \) t, I3 K" d( J9 ~1 l
  mov cl,47 z" D! l4 C, J: j1 U
  shl ebx,cl7 _/ M& h, g& ^
  add ebx,eax& z: Y; S4 f  h/ Q
  mov al,es:[si+7]
+ K% E% T! s/ r! s  call Change+ U$ \: l: w' x
  mov cl,4
. m" O+ i5 i# P; M  shl ebx,cl: x& E, S& V$ h, t
  add ebx,eax
6 R3 ?! [1 Z  H+ {  ret
1 z# w5 g! j2 v2 L4 S9 IPSP endp9 e4 `  g0 y! T8 U: q: R) j+ B
;------------------------------------------------------------------------------------------------
/ ?$ |' x% E  v) _) ^  s4 AChange proc near" F! B: e, a$ D7 G
A:   6 ~; _/ m0 W2 {
  movzx eax,al
( x' e/ @& R# c  mov edx,eax% X; h% f0 X" A: P+ \" l
  cmp eax,'0'   
: G5 V0 M& H" ?% E2 T6 `  jb A$ Y6 \) P8 m0 ]9 s# X- z; A
  cmp eax,'9'   $ v. y; f- l2 W6 X' a
  ja B
6 J  i, [! }/ [7 E: Q4 [2 w  sub eax,'0'
" }5 q3 z# |( ~# @  jmp short E
8 h% a* h9 D+ r/ T8 ^) U  P8 V4 x; y' EB:
5 @* [4 n! d# V9 U  and eax,0dfh   5 h+ k9 j2 W6 y2 N6 @6 m/ ]& @
  mov edx,eax
# x& q: Y& d* o/ M& w  sub eax,37h   
0 R7 ~4 v8 `5 B' y/ N  cmp eax,0ah& C9 b2 Q8 C3 c# b3 r$ l& u
  jb A   / r' Q, U$ T+ I$ N' z, s
  cmp eax,0fh
* p, P! y+ T9 i" ~4 P  ja A   
& k, z0 @% k( [! W+ L1 UE:
' H: d4 s: Y. s  push eax   ) J) U3 Y/ E; ?/ a6 o' g% s
  call PRT   
5 y+ `5 d3 X. E; m# f7 @  pop eax
( f' S5 c0 {5 w0 M  F1 xCExit:
# |) n* [  O5 J( J, F  ret' n8 p7 o* M1 v6 M- f0 f4 s
Change endp# N+ N! A+ K1 Y1 v- h
;------------------------------------------------------------------------------------------------( j( o: g. t/ ^% O$ ~# Y5 {
PRT proc near
. v2 G9 H" j( A' q7 W5 Z/ i7 g  mov ah,02h
6 k/ e  Y, r+ b: l  int 21h
- ?: N' F5 q) z  m9 p9 }( h$ F( H4 S  ret
; w: n5 s0 f7 H3 IPRT endp* j$ i9 T; n. h: y1 x  i
;------------------------------------------------------------------------------------------------
1 o5 q5 Y/ n: I+ z3 X+ zcrlf proc near
8 J- U( l- o2 I1 Q- @1 @  mov ah,02h# B! t" M; {9 s* W! {
  mov dl,0dh7 O: Y+ U: }" f4 J5 A: S: L
  int 21h5 l$ h- B' _) t" a/ X  e
  mov ah,02h
9 M# s5 x' Z; V! Y& I  H  mov dl,0ah( M8 Q  A6 [* p- ^# ~  a  V, ?
  int 21h
& c& k/ R1 R! a2 l8 l  ret
' b) h# g$ l2 B: E( `crlf endp0 u3 O9 I( l2 u( h) Z% w; H
;------------------------------------------------------------------------------------------------0 k" w" V) \$ L' s( }: N' y, E; \
_32bits proc near6 ?/ V) V! c! ~
  pushad
7 y! U9 k/ d" ^4 m; @  mov cl,4
: R0 m8 s4 Q- X  c( r, ]" i3 K  rol ebx,cl
9 P: x6 a" b% d9 E# k" v  call print_4_bits( l& ?% Y; c, N8 x0 K9 J# n# b
  rol ebx,cl+ G. z, d  }6 M
  call print_4_bits
; A0 e4 Y5 p4 x" l+ b) n  rol ebx,cl! A$ k7 m4 s- f- b$ ?; ?- O
  call print_4_bits
1 X' [4 o( U  ~4 K  rol ebx,cl( ~  }* D) j9 q) Q7 K& {5 f
  call print_4_bits
- R0 w' q) A9 `( t% O7 p: G  rol ebx,cl" Z) a2 @% P- o
  call print_4_bits
, y: i1 j# o' k- J  rol ebx,cl
, V+ M; w" C, s% n. x  call print_4_bits
, x2 g2 K3 Z! ?; L9 M+ M  rol ebx,cl
/ g! K* y, X- W2 q) Y  call print_4_bits) [" U) Q# r' x, b
  rol ebx,cl
. _( Q1 I% a, S: J/ g2 \7 ^  call print_4_bits
4 C8 \2 w) A5 _. R5 z, Z1 @* H$ X1 T  rol ebx,cl
- l# w& n: J6 ]' s! F$ I8 W3 h4 k; i  popad
6 y( _+ Q1 C# F  l' H/ A  ret9 n# ]$ Z/ F1 R' t: [, O
_32bits endp" \4 J  r$ |" J1 X' k
;------------------------------------------------------------------------------------------------* z7 C8 F& V) W+ l3 z8 y9 d. p
_16bits proc near6 D  `, \* r. Q& ~
  pusha   ) V1 `6 X" p: D) c9 y
  rol bx,cl
0 i. {! Y1 z+ Q  call print_4_bits$ j4 X7 v! N3 ~1 ?. Z- O9 @) Y" a7 w  W5 F
  rol bx,cl
- f/ c, A4 y) d- n  o8 \  call print_4_bits
  k% U5 o6 C& ]; h; s9 c  rol bx,cl
6 T4 R1 W* a8 p: }& {+ w' Z, y  call print_4_bits: e$ q2 |0 ^8 R
  rol bx,cl
$ H3 [8 K( F- ]! A) ?  call print_4_bits2 k- d" a+ D+ T; O0 ~: V. M
  popa
, n/ T+ @7 }% ]7 u2 G0 U8 i  ret
/ _' I* o. L6 Y& {: ?_16bits endp1 Q2 m5 ~  w5 J% l- [' M. y
;------------------------------------------------------------------------------------------------$ P: m8 s  R5 t# h. {4 m2 ?
_8bits proc near
& p! T: T+ F% H- L/ j2 U; }' b  pusha   
& i3 k$ n2 J* q( P. O  rol bx,cl
. S8 X2 `' Y0 U! C  call print_4_bits
7 {. z- P/ M3 H9 G7 H/ ^9 e" B  rol bx,cl/ }2 ]5 x5 M1 ~+ c' h( L! m  [
  call print_4_bits+ n) o2 u" e' d$ _4 n
  popa
& E' [6 f  @1 L4 k$ r- k1 n  ret
6 Y$ x" [, K: C) S( l5 O5 o/ e_8bits endp
3 m# q/ m6 |5 l;------------------------------------------------------------------------------------------------# a5 V1 l+ c: |/ @& a  [: K+ J
print_4_bits proc near, D+ ~$ ^$ z# A# L% t- h: b1 S( l( z
  mov dx,bx( a2 b+ x1 C& Y- y$ {5 ^3 x
  and dl,0fh' ?4 |; }; q- g5 |5 C/ x
  add dl,30h
& L* a  Q: q2 `! H' M$ L  A* P  cmp dl,3ah
& x7 [: [1 S( O1 s  jb print* o% n: H9 @' {8 H) V! I  @
  add dl,7
- N  j9 N- [/ w& D+ w! c8 P! ^/ Tprint:   6 G3 j- }3 s7 |
  mov ah,2
& Z9 [4 u9 e0 X. I' K  int 21h
# |# ^! Z! l9 Y8 W/ X* e9 N0 ]  ret7 n$ R* e( f) l) N  D
print_4_bits endp   
+ j9 ^6 L" \" ^( o1 `9 y; a3 P( Z. R;------------------------------------------------------------------------------------------------
+ `4 P- r! q6 A& kCSEG ends$ V$ y. L7 [/ u) [6 s' h! Y% W
END
您需要登录后才可以回帖 登录 | 加入计匠网

本版积分规则

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

GMT+8, 2025-6-14 05:29 , Processed in 0.023195 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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