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

顯示string會出現亂碼

[复制链接]
发表于 2010-10-19 16:41:51 | 显示全部楼层 |阅读模式
各位前輩好,以下的程式為在 big_real_mode 讀取記憶體的值; E( b5 M. o9 D0 |) q$ `: B3 @$ h  ?

; L( p: K) x- J$ V, U% P例如: C:\memory.exe(程式檔名) 01000100(Address)
, P7 M) P3 s. d& K7 _3 p* r  W5 d* ]8 Z+ P9 V& T
則會顯示01000100位置的值% x7 @6 J! [9 |  Z6 Y
% i, U( s5 F/ P7 ?# H" Z# y
但是我另外還有要顯示出字串,但是顯示出來都是亂碼
* V% Q* n% Q* Q6 F! s
( `) j1 J! J( w( s麻煩前輩給我一些指導,謝謝  2 [* y2 s  i3 B% `  A

8 s+ j- \! m8 i: e. M4 p3 O& A7 t) [' _; {
.model small8 i, @" {3 _2 n, u# Z# ^0 L
.386p
; M- f( s: f, p3 J' _;------------------------------------------------------------------------------------------------% p8 {% r! ~( P2 o+ A
DSEG SEGMENT USE16'data'  
5 X6 C; T8 w" U# Q, A' ]6 l% P/ u6 }% v# v0 _) f; n
DESC STRUC
$ Z- ~! |0 n: J" p$ k  LimitL DW 0  . C# t6 ?4 g; f( S8 u- M; C
  BaseL DW 0  
/ H0 ?9 o9 K$ N8 A% d6 R  BaseM DB 0  ' n7 ]- O! o* V4 g: S
  Attributes DB 0  3 x7 ^& p( E8 s
  LimitH DB 0  ! f/ T; O4 z  m1 X  g  ^* o: M
  BaseH DB 0  
- s5 f4 {: l/ k6 ADESC ENDS
. t9 p! F7 ]1 u
5 Y& x% A" ?: k; w* K4 [PDesc STRUC: l/ K  h, N, z* r. D! A$ n
  Limit DW 0  
, S+ C( \4 G/ M; M" v) s  Base DD 0  2 ^3 Q3 r# z  o6 C, M- t7 i. o
PDesc ENDS
1 K2 g1 O7 s1 u9 w2 r
  t* o! W+ _% f1 {  [- {GDT_def Label Fword
1 Q8 m! @) ]& GNull_Desc DESC < 0h, 0h, 00h, 00h, 000h, 0>5 ^. W* m. D& @5 i% w. M
Data_Desc DESC < 0FFFFh, 0h, 00h, 92h, 0CFh, 0>
& n' u" v5 G! i5 t# Z4 g* j# zGDT_Addr PDesc <$-GDT_def-1, >* w, _* d5 M) R7 z) p
2 ]2 c' y8 I; G- E. w
msg1 BYTE 'The Input Address is'4 F6 B( \: @1 F; O( N( @& c
msg2 BYTE 'The Data is:','$'
( E4 p8 E& l! c4 K4 r% O- w. j6 H; e: j6 ?5 y
DSEG ENDS
/ U5 v: x. w" `$ d. ]
: S: v. S0 n; B* x$ V& U; t/ I8 H" ]" m4 k/ U9 P
;------------------------------------------------------------------------------------------------  1 a& J  q1 ~: W6 P- W) F# S% |

6 d5 O/ y! g6 Y6 [, j+ ^ASSUME CS:CSEG,DSSEG
! k: r: x. m2 @: b
) |/ }, w* m* O9 JCSEG SEGMENT USE16'code'
' f3 m! O8 s: ^" @7 m: V  / x( X- J( F9 ]; j, r2 X6 ^( o
  push ds
( x6 M7 d% v: C, O4 y6 P% t- H& a  push es0 j3 ~) _8 Q$ e& T0 }
  push fs8 d6 b3 A* Q6 H3 |+ {* x
  push gs
& I1 i- N- [- n0 a/ \  
- E# ]7 \, G+ a0 V: [  call big_real_mode' T& x1 L: a8 s5 _' K) A/ k
0 A2 L8 y2 n6 h- d0 i2 f4 r$ T* y5 }
    7 p0 A. {) T- A/ ~
  mov edx,OFFSET msg1;
; e+ E5 t) I" a: I7 h; Q& y4 W  mov ah,09h;   6 ?9 _$ L/ z8 Y5 G( y+ r3 o. b
  int 21h;6 w1 }3 r0 I4 n1 W, Q) A0 m/ @
  mov edx,OFFSET msg2;
$ V$ L) Z" P4 o+ @0 x  mov ah,09h;
" q. _6 }. ?7 \! J% w) K$ [  int 21h;2 K% Z. Q! I- r/ D7 f' [+ k
   
; M4 k9 m% Y/ v& [+ u( v  call PSP   . `  t2 B6 Y1 O8 Z3 O; b
   
  ^( d5 x3 N3 U- L- d: w0 R2 m  call crlf   
' I2 I  {5 G4 q/ V) {2 G2 e    # h# U) r3 z* i  E' b5 u. s
  mov esi,ebx
7 J2 z" q1 z2 t  g3 w5 o  mov eax,fs:[esi]
- _7 ]. v; A6 {  out 80h,eax
. Q& m  V4 x( N6 k5 U' H) z" n  mov ebx,eax, O( N( F7 V. Z/ Q0 x  w
  call _8bits  _' r% R/ p1 N# J9 I
    ) r' ~+ B! K* ]0 Z" J) d
  call real_mode9 S8 b; F# L; ?7 S. O
    % R1 D4 `3 q$ N; F
  pop gs
7 h: x# W* R9 U2 l0 N  pop fs4 Q  Q/ [8 m1 k0 U! Y8 {& A6 d
  pop es
" y$ S5 d0 q% l) h1 `; X' q! S" {  pop ds
% x3 Q0 J) I5 u3 P# T   
& E& }8 t3 u5 a  .exit! w8 I! I! Q+ g4 a! T& d/ x
;------------------------------------------------------------------------------------------------
, k2 z! {: `" C+ V7 z- U9 Z+ [big_real_mode proc near% t- D9 h* ~2 ]) L
  in al, 92h
0 p9 m) o% ]" G; g  or al, 0029 R8 R6 C! \" I3 ^
  out 092h, al0 x: ^. t' V5 U( [" W6 S& i" |0 w
  out 0edh, al! M( z$ y4 V) ^$ I/ g
  cli
$ q! @# B  o+ i  mov eax,DSEG
2 B! H' J3 o8 \" M8 D6 C) c  shl eax, 4
6 N. W. x& b; O1 z) S5 |7 h) J1 ]  xor ebx, ebx
  m; u( H( m/ Q: _* b) H) N, B  mov ebx, offset GDT_def1 N9 W- m4 v: i: h- s
  add eax, ebx- v7 g% z0 n# c3 f. U! X, Y
  mov dword ptr GDT_Addr.Base, eax/ s  V) Y5 U. G3 K+ g" Z
  lgdt fword ptr GDT_Addr' }+ p- s# j5 X8 X3 z
  mov bx, 8! v( c- h' e! T+ ^. W# X
  mov eax, cr09 H2 S6 p  z7 }
  or al, 1" l( o1 n6 o! z( e3 g" ?
  mov cr0, eax
% \, ~# H& Y) ^6 _5 c% m( T  jmp PMod
( X; s: @1 k1 f8 h! z/ @PMod:* x8 A, y) H- a) s9 k/ {
  mov fs, bx
  v6 o" D% o1 ]  mov gs, bx
3 B1 m3 K6 M1 w7 C. @0 l, L3 o  mov eax,cr0
# D5 q  ~$ p9 t  w* V  and al, 0FEh
$ B4 t9 u5 r; `/ g8 W3 a8 Y2 I0 C  mov cr0, eax  ' i% f0 j* ?% d
  jmp RMod
/ l2 X* S5 b6 D6 r2 I% hRMod:
2 i* Q. R+ @* a" |- d; p  xor ax, ax- g- o( s6 k) v
  mov fs, ax
: w' I0 c  _- [0 o  mov gs, ax
( z4 c* V! S- i) ?      ?7 U; @. {, _  H; W# Q
  sti
. A1 E  X$ Z$ C    & {/ l, B6 _: y2 F
  ret
  i! P6 f7 `5 n$ ]$ H4 _: Obig_real_mode ENDP
" Q6 ]- f. q: T2 t$ @;------------------------------------------------------------------------------------------------
* T! @* Y9 ]5 I6 I' Z3 o/ {2 X! Qreal_mode proc near5 w+ j  `% J0 I! P1 o5 v
  in al, 92h
. D- u5 k7 H5 P6 @% \8 v& s  and al, 024 B" ?1 _7 J9 [) O% o  S* \' U" b, v
  out 92h, al   5 `# ~7 D0 i+ }! o$ M# e3 u
  ret9 N* q7 w$ |( @% Z/ q
real_mode ENDP% J, n* G0 |0 y% N+ Q
;------------------------------------------------------------------------------------------------
$ |4 m; h' [. d& J( CGet_Commandtail PROC near
6 Q% p0 G- J4 x  push es  
$ h# k( k* M9 ^. M* ]! P4 x  pusha5 @  R1 ]! Z5 Y0 \
  mov ah,62h  
* h( g5 n+ B* n7 G  int 21h) s; j4 ^( H* _
  mov es,bx
3 P' o, c- l9 ^( k( [  popa  
2 n" A) H* l* h8 M! z- B! Z3 V  pop es
6 R4 u6 S1 L( d5 u$ \, N  ret
  w% x' p: c+ p; X% U$ d1 TGet_Commandtail ENDP) y5 G* \- R! y2 A1 N
;------------------------------------------------------------------------------------------------
% Z4 k$ s/ u& Z, `, V- zPSP proc near0 s) W( A1 g. Y
  mov ah,62h
' D9 }2 e$ E; t! ^  int 21h  b* u+ l2 q, G. u. X8 k: ~
  mov es,bx   7 i# X1 x; Z' X6 ~. F9 y- s8 S+ [
  xor ebx,ebx
  h/ }  Z. D- N9 q7 ?  x% a. O- e3 L  mov si,82h
5 }$ g* v. [, L' c6 l6 T* `$ [/ L  mov al,es:[si]
5 A# H4 C+ }+ t) Z5 o  call Change
$ ~  Q+ x% L; T# O  ]- r  mov cl,4
% w  W5 d6 o7 W) Z$ q, _  shl ebx,cl' d  U2 Y$ u& x, b" A( Y
  add ebx,eax
: L$ j$ F( ^, X- \  E  z; q  mov al,es:[si+1]. |( K" n: J7 W. q. ?$ c2 h5 S
  call Change# r8 A3 k; e- g
  mov cl,44 ?9 B" v+ l: t" t
  shl ebx,cl5 I) ?" z- J* `( Q
  add ebx,eax" [) y0 B  P6 k5 Q! L4 b! J
  mov al,es:[si+2]3 d2 {& X  e& ^. {
  call Change
( C  Q8 Q7 `& O0 g" U: v" O  mov cl,4  N  N2 w. O( A, Y0 ?
  shl ebx,cl
# h8 {8 t7 r" d  add ebx,eax
! w2 G1 J5 P4 K5 I; w" i  mov al,es:[si+3]  C0 n( a$ n; `/ W/ x( n( @
  call Change
/ I/ J4 B) ^( F* K+ a' t% ]  mov cl,4- z. z* q* j* i3 x
  shl ebx,cl
! I/ T( \; }+ d0 s0 ~# l2 v  add ebx,eax
- c5 E' p; X) y/ l8 z  mov al,es:[si+4]: Z# c) P) p2 X# d% [+ o
  call Change, G) @: w+ I( f
  mov cl,4% l% A; O& {* ?3 K2 C0 h+ m9 b6 c
  shl ebx,cl
; p/ h6 Z; K( y* e" r  add ebx,eax
0 _. \6 B/ C: g2 B7 P  mov al,es:[si+5]
  [, H% w6 Q0 U( \  call Change
6 @# A8 a- k! n. P$ w  mov cl,4/ d) B  z1 I3 F
  shl ebx,cl
: o! W, `8 |( Q. S$ R$ w0 y& L  add ebx,eax# b1 B( N' B2 G7 Q- R
  mov al,es:[si+6]
# c/ L5 S8 ]$ l# z) y  call Change) ]2 z, T5 c2 k/ \, X! Q$ \
  mov cl,4
& V' e; {: D& D/ v* G  shl ebx,cl) m$ C8 u9 U: _3 y6 k% G
  add ebx,eax
. R; a2 R2 V4 e! S  mov al,es:[si+7]
. }4 I2 P5 P* O$ r  call Change
# F, M! C: S' K0 y/ z  mov cl,4
* ^: M- u& J/ q  \' c, b9 C6 t5 O$ t  shl ebx,cl0 K4 c& W# G; h2 h8 u( h
  add ebx,eax
8 z3 n, Z' }0 R, ]  ret" C! }' e: b9 y% _0 F
PSP endp9 L0 }7 \; g; L1 x4 g
;------------------------------------------------------------------------------------------------
. B" [. F+ r0 _3 Z" [: VChange proc near
5 x. B* x1 A4 E/ ]A:   
2 S. P$ J& }; C% d0 K, \1 Y/ B  movzx eax,al
+ Q- O/ g( _' o* S* p! Y" r% R  mov edx,eax+ I. a1 H1 ~0 p  H
  cmp eax,'0'   
( u- w! E5 Z& _3 \7 j( X- Y  jb A
) w2 @+ Q. ]( q3 E( z% M  cmp eax,'9'   
. N1 Z% }( L. y3 O) P" I  ja B7 x% I: ]2 X; R; P' _6 W' Y, T
  sub eax,'0'
7 \7 g- u. ]6 ]$ D, |  jmp short E9 r9 Q' q9 n7 W6 g5 W+ V. C9 R4 n
B:
/ b9 C; }5 Y6 {  and eax,0dfh   
6 O6 m1 r+ ?5 I* |  mov edx,eax
9 J+ w) N2 S$ y  c  sub eax,37h   
' `1 Z- A" a' C, Z# K, ~" T2 {  cmp eax,0ah
7 X* K" Y9 j5 b8 r; q5 p) F: J  jb A   : s' F% Q5 q, c- c" h% E  a
  cmp eax,0fh) }6 y( y  u1 i7 z
  ja A   2 c5 y- g/ J( y) X, k5 _
E:
3 @1 d/ O' z) l, f  push eax   
+ n. ]! b* `0 k  call PRT   
3 C9 N+ D8 J2 p8 ^0 h2 {  pop eax
2 D& y- i; ^. O5 u% ?7 DCExit:
/ O  M: B1 r$ I  ?  ret
& b' J  ?% O' |Change endp# l" w9 ^, t, a0 e- B! H
;------------------------------------------------------------------------------------------------
, O) O# \4 N: f4 n, K7 c  `PRT proc near) J1 @+ G/ `% i( r
  mov ah,02h% S7 ^6 H& Q- I- ^) \
  int 21h
* X; R% _/ r% g1 X9 A  ret
7 E- v" P7 [# m" D/ k4 ^$ X. wPRT endp
. T  f$ _0 E; m6 R;------------------------------------------------------------------------------------------------
6 [, X) U* \/ }crlf proc near; r' D( Q/ ]# U2 G
  mov ah,02h( `* }0 L3 R! u4 J: Q
  mov dl,0dh
0 i6 [1 m! k" ~6 L" R  int 21h' ^8 }5 D6 p7 ]  [+ n
  mov ah,02h
6 Y  w$ U7 p% U5 F  mov dl,0ah
2 _( G( R4 U1 Q3 U2 Q% ?" X  int 21h
+ ?) p, c% n5 P. ]1 @2 S  ret5 w& A# i+ n8 ], K* x" D$ F
crlf endp8 ]! r3 r; C( e  `5 R
;------------------------------------------------------------------------------------------------
2 f1 }3 J4 @$ S_32bits proc near
$ y! [3 O( c9 L4 V6 }% |  pushad
$ _' i% ^# y3 ]3 c  mov cl,48 Z  |2 |- m) I- j$ B* a7 m0 q, {: ?
  rol ebx,cl
: S0 d. p* r& m& _8 ^, C' t3 O  call print_4_bits3 k# A1 `- k) z7 l6 E
  rol ebx,cl8 W' ~6 p% h# ]
  call print_4_bits
/ o8 L  J  Q: i; b9 e  rol ebx,cl- Y2 d1 H7 T  X5 r
  call print_4_bits! h* U5 J" _$ h8 R+ r
  rol ebx,cl4 F9 y/ a) }' C
  call print_4_bits
  \) ~: P! `# r- D( [  rol ebx,cl
: D( \/ s& |# y9 y  call print_4_bits
. P9 \2 c% T* S4 q& x8 Y. ]4 g  rol ebx,cl9 [8 Y+ b( @2 L
  call print_4_bits
# q2 c% k* [( G# c8 g# r  rol ebx,cl- A' q8 |6 l* ?
  call print_4_bits: |8 V5 o9 e: p/ Y
  rol ebx,cl
) E( X: r; _5 l* i  k7 `  call print_4_bits0 w& s& o7 _) V
  rol ebx,cl' Y- Z  M8 z& B: x+ D
  popad
2 n2 c" ?/ u) t8 Z  ret
5 Q7 K0 u2 Z6 f7 }+ M% r3 r_32bits endp3 ?# O5 ~6 U7 F+ @5 d. ^7 u
;------------------------------------------------------------------------------------------------
* C9 g( Z8 }8 P& ^_16bits proc near
9 w( k  R: s: p+ C) h  pusha   
3 m8 v9 o6 e5 L+ t" [4 _5 U4 R  rol bx,cl( r% n4 p) K0 H! v9 n0 L
  call print_4_bits# u) ]6 M) q$ e
  rol bx,cl
# e  K6 `) I  x! S- M; l  call print_4_bits# z# G0 B. M6 g1 E
  rol bx,cl
, \7 Z" |. O7 \  k  call print_4_bits) H1 l3 d2 R3 f' r: @
  rol bx,cl
& a& o9 k/ i/ o4 r' Q- }% W  call print_4_bits5 g: @* z; V. o
  popa
' c1 _* n& y8 F# e: r0 h# l  ret# ^, z, t$ E- G. b+ f- e+ x
_16bits endp' q$ y" p! n1 Q
;------------------------------------------------------------------------------------------------
2 p4 s- M, [# v) e! \_8bits proc near9 J. w& t9 k0 c4 N
  pusha   # ]1 W3 j' }( j4 D
  rol bx,cl( N" E% M6 O) y0 `$ g
  call print_4_bits
5 N" I' ]- A1 @7 @' S8 [% F. P  rol bx,cl
% y3 p8 C) p' o  J) y% L  call print_4_bits
8 q1 O8 d+ T0 _( u8 y. _  popa6 M; [$ C* r; l. K9 H6 K% Z) K
  ret
* p0 R+ Q, o# f# w- b# G9 x& u_8bits endp
7 M$ ~& ]5 P. }: K;------------------------------------------------------------------------------------------------5 ]8 o, N4 R1 N4 ?
print_4_bits proc near+ @" i" X$ i$ f9 V% C
  mov dx,bx
" b5 i! a8 ~9 p% n  and dl,0fh" s& B, `2 n) a* \) r
  add dl,30h
' Z" T& L5 u* T9 W  ^+ ?  cmp dl,3ah4 ?* k( ~6 B2 P
  jb print
! S+ T& ]3 J0 Z8 ]  add dl,7
4 d9 Z/ c7 z$ h& I1 tprint:   
& E& P, l6 Y3 Q9 Q6 N! h  mov ah,23 }: l/ F/ }1 Z- n1 ^- G, a2 J
  int 21h
+ m5 l, |7 W" \" ~  ret9 T$ @4 t2 R2 F
print_4_bits endp   + r- U: Y6 g, `
;------------------------------------------------------------------------------------------------$ ?2 D" Y/ s, v+ b  m" [
CSEG ends
, G) X+ m5 b, A' ^, ]8 zEND
您需要登录后才可以回帖 登录 | 加入计匠网

本版积分规则

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

GMT+8, 2026-6-8 08:14 , Processed in 0.057457 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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