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

顯示string會出現亂碼

[复制链接]
发表于 2010-10-19 16:41:51 | 显示全部楼层 |阅读模式
各位前輩好,以下的程式為在 big_real_mode 讀取記憶體的值
2 Q$ W; m% C' X) g0 B
; k4 C3 w1 f/ U  R例如: C:\memory.exe(程式檔名) 01000100(Address)
6 i1 O0 u* Q. o: I3 a; ^$ r. t* l! t/ O" p4 @3 `6 @
則會顯示01000100位置的值! ?, W/ l" o7 k) j0 P% Y

2 p- ]* x- q( b但是我另外還有要顯示出字串,但是顯示出來都是亂碼
) H" B. d& H5 m) C1 [2 S6 d6 ^$ [' N' o+ r% D3 @# }% M- K7 D
麻煩前輩給我一些指導,謝謝  2 x5 R% K: R3 l/ G) V, i5 N  V
5 U1 n- P( U' w* \7 P
* b. M" J* }1 Q1 s! q
.model small
! q) H; c" g4 _& \% A- E.386p
$ {% v/ |+ w; V+ l6 Z$ M  t;------------------------------------------------------------------------------------------------. }8 J2 l) F5 b4 N6 O1 a# |! \3 a
DSEG SEGMENT USE16'data'  
% U" g, b/ s) k: G
: k  T: a+ T6 j7 ^! l* ^. |DESC STRUC
. B$ i% ?4 G( B. D$ j2 M8 U  LimitL DW 0  # z9 M: h" C9 X  z2 B- g8 r
  BaseL DW 0  
/ l& K4 B, \4 Y- ^  BaseM DB 0  6 W. i( G$ l: y0 R' r; v
  Attributes DB 0  
- E1 p" m, G" A; H! c0 G  LimitH DB 0  
, e9 G: Q, {* }1 d( q; d  BaseH DB 0  
9 x7 q8 M6 r# WDESC ENDS
& ^3 d8 @+ a5 R% X' l6 _
8 C# A( Z/ R  a5 U0 ]) ]PDesc STRUC
4 W& y. J% J$ ]% e  Limit DW 0  % E% [! q- Z4 K) t, ~+ l
  Base DD 0  8 F- N8 y7 l( u
PDesc ENDS
. r4 V- ~0 _: P# k
6 ~4 y3 w3 W8 ^) {$ D  gGDT_def Label Fword2 |- s8 K/ @0 ?& A
Null_Desc DESC < 0h, 0h, 00h, 00h, 000h, 0>
7 c, h, _5 Z4 a* U: U9 oData_Desc DESC < 0FFFFh, 0h, 00h, 92h, 0CFh, 0>
' G; d  L' X5 P: rGDT_Addr PDesc <$-GDT_def-1, >
8 r* p' ^2 `# {: Z! ^, `# R5 M
7 }7 X! I/ K& C& f( ?msg1 BYTE 'The Input Address is'4 r/ A) _, [% D8 C
msg2 BYTE 'The Data is:','$'
0 ~! }, }9 _& W3 B' B$ G
/ P  V2 ~9 V9 v0 K$ [( NDSEG ENDS( ^: H/ q9 E5 v5 m

4 `% T$ g; X' ^6 d
2 ~8 P8 n2 [' j;------------------------------------------------------------------------------------------------  9 w8 L2 ]$ |  l  x0 c

4 I9 L4 I2 i3 w- |3 Q5 LASSUME CS:CSEG,DSSEG$ c2 I8 W+ q; ]. f/ |( Z  @1 @8 _
& U! @6 Y2 L3 f7 n" f& Z( ]
CSEG SEGMENT USE16'code'" ~1 }0 R3 ]. [- m8 v3 }& W
  
" z% W/ ?- w3 M) a; U  push ds
; Y% D) O. _+ I( t% J- M( q- W* E  push es0 l2 V( u0 m4 s" g
  push fs  `  J5 Z7 x0 j; E$ D( A$ x9 m3 K" |
  push gs
" B0 N; ~5 Q( V- l4 M0 o  
+ P$ m% `! q8 o, ~$ f9 U& [: u  call big_real_mode
% M9 y  @) `% l* n; U, K2 ?+ Y' C( L# I+ {. g% T1 H
    0 j8 i  n$ [8 K' [, Q; Z  |: z1 h
  mov edx,OFFSET msg1;' u8 Z7 ~$ z5 n, c6 ~0 j, O* p
  mov ah,09h;   
& S: j  Y! L/ Q. F, o% A3 ~% X- V  int 21h;. e+ C  [9 V# v# C
  mov edx,OFFSET msg2;
# }- w# F$ c6 ~$ g  mov ah,09h;
# N! P" U& e: e/ y5 @' A1 t( g# g  int 21h;
$ r/ ~, X3 Y) s2 ?1 Z, c' b    : N) Y* d5 f0 F  k9 f4 f2 {
  call PSP   
/ M; x: ]: E9 ^" B2 o* ]! k    . V0 c4 r' x1 \& Z6 ~( U, S, ?
  call crlf   
7 M8 c% u  J0 h! A6 T. j) F0 O   
! h$ J/ e9 _- W  mov esi,ebx
5 ~5 o9 z2 a- |8 ~  mov eax,fs:[esi]9 v3 C# K7 x5 K/ X
  out 80h,eax, `1 x( `6 ^# W+ l
  mov ebx,eax7 D7 A& ?* R0 Q* p6 t
  call _8bits
+ N7 {" \/ c! D7 c, I+ q   
/ T; C/ d# @" K1 A- [6 ~  call real_mode1 S6 L7 r6 X5 Y: g7 y' M
    , ]: N" J3 [7 o- _! `: {
  pop gs% h: F8 U- D8 E: H
  pop fs
5 D7 P) e' T/ q8 m0 G+ Y& l  pop es+ s' y3 [. y5 r# R$ {) p% Z3 \
  pop ds
1 N( x0 D3 C; ?1 J+ H0 Q    3 \5 k. V. Z6 r( l- P* Y5 y
  .exit
4 m" D5 D& s8 z;------------------------------------------------------------------------------------------------
3 b0 M$ Q% \2 F7 ^6 ]+ R9 Y+ vbig_real_mode proc near" A& w0 j' y5 {1 @
  in al, 92h, G5 |0 p( P7 g- P9 _) q
  or al, 002
1 s* p! S# w" {  out 092h, al
' G1 w6 _: X3 n  out 0edh, al
$ T/ B0 `; f' g" A* S  cli, D( j9 x; `" i, ?" R; f3 u
  mov eax,DSEG$ u, X/ ~* m6 \' T- e, E; R, M
  shl eax, 47 I  F, H& [9 i$ A& J: U3 Y
  xor ebx, ebx
  v5 h+ \% T' y) w$ E( F  mov ebx, offset GDT_def, K6 @8 D/ h! k. h  ?$ j
  add eax, ebx4 |' i, D1 k" I# |4 o
  mov dword ptr GDT_Addr.Base, eax
: _& p, s/ R) y6 ?3 E4 f" [/ k: c  lgdt fword ptr GDT_Addr
+ F* N6 D5 t9 q$ @8 R. @  mov bx, 87 `* [' y$ k: x1 w$ t2 b9 _
  mov eax, cr0
. D) E, @/ U7 Q/ m  g* S  or al, 1# [8 t7 |3 n, j) c2 p
  mov cr0, eax
4 J7 o1 }% K% V' T6 a  jmp PMod
! b3 x1 L. r% wPMod:
9 {8 L. |7 x( U6 d9 M  mov fs, bx$ K/ J2 O: C3 }% @/ o% ]( `9 c( C
  mov gs, bx
3 Q: S6 F' I: n3 o$ S, @' L  mov eax,cr0: f$ u2 F. G+ o- r% }  t& I' f
  and al, 0FEh
. g( E5 g  l0 x: L* f! b6 C  mov cr0, eax  # F1 |! p! j" p
  jmp RMod
- Y/ t4 g' P* F, l: M/ W: n1 iRMod:8 s% D$ i; F  c! ]5 e
  xor ax, ax* C7 L% T% m4 M1 }4 K
  mov fs, ax9 k" M# v$ Q% n; t$ j- ]
  mov gs, ax4 V% z7 k( x! H  u" V# A
   
8 s' n0 j6 H  ~& A5 c  sti7 v3 U3 k- \2 g: _* {  @
   
  X. C/ C% ~6 N* x  ret' |0 A# \& K, s
big_real_mode ENDP! @$ I+ \# m7 u, v) S* x, l2 d9 `  Q
;------------------------------------------------------------------------------------------------  J" R5 [) Y: S4 ]* r1 Q( j. U
real_mode proc near$ I$ I5 G3 n8 f
  in al, 92h
9 |/ C  D. j* p  and al, 02
7 v. D$ i2 T9 R& U, {  out 92h, al   
; X, V7 H/ ^+ q- `) ?$ ^2 X  ret) x* ]! ^* S8 C0 `0 d. z
real_mode ENDP8 S4 _; _& j/ `
;------------------------------------------------------------------------------------------------% Q( c8 @) o' g
Get_Commandtail PROC near
8 h: T" X8 r5 H: r) ~. W% B2 B  push es  4 Q& f3 o3 X# H- @9 n% _) M7 _7 K
  pusha
' b6 h  ?, B9 s3 C% |: q3 f+ F# a  mov ah,62h  * a4 i2 J7 C* y% ~- W% P
  int 21h
# {3 Q3 N3 e: ]  mov es,bx
  ]! s8 L9 \! V8 V3 ]  popa  
& `  [/ t0 j+ b! [& A6 Y4 k  pop es
5 e& U5 V* A" M; m# Y6 A  ret
% ~: ?- W: X! e1 H" k4 b& L9 qGet_Commandtail ENDP
9 T8 J; [$ J+ U* B;------------------------------------------------------------------------------------------------
, B& W1 k# H. p0 {& W  f$ T' }# [PSP proc near# U+ V" x% Q  p% E) E
  mov ah,62h
4 ], ^0 C6 R' ~8 C2 G. Z9 S0 r( Q  int 21h
2 x# m. g8 W& S- h8 V  mov es,bx   0 J! |! A/ |) v6 ?* ?
  xor ebx,ebx
' O6 x- @" @6 p& M  mov si,82h
/ ~% g+ l+ D/ @2 b' ~9 O  mov al,es:[si]
# w+ S! W# O0 E' Y  call Change
  `2 T0 o' }# {' T* G! |9 v8 T  mov cl,4
, @( n1 J3 |& u- \2 A& I, u" ~1 Q! B  shl ebx,cl
* r2 t5 U; A+ w3 n- g5 R& j  add ebx,eax
; @/ g+ q/ C, d- u# j; @  mov al,es:[si+1]% _0 x% Y6 G$ u0 J
  call Change
. \4 H* U3 j) b# i  mov cl,4
7 F, }  P' x, w% h  shl ebx,cl
9 j7 O! C# o3 u" ~  add ebx,eax* a( S3 R' K8 a, x3 \! |  T, R! b
  mov al,es:[si+2]
  T1 {) \+ B- G( D) R  call Change' A8 O+ c9 `3 E! d
  mov cl,4/ M1 S8 Y( ^6 U
  shl ebx,cl- E( l' E+ L7 f/ n- O! l& `7 t
  add ebx,eax
' ?( a) n8 c  b  mov al,es:[si+3]
9 P3 m) q" f$ s, J  call Change1 O$ j/ }# [' [8 B& e# k) [
  mov cl,4! q: u, {4 s6 C( E- X7 o- z5 x+ R! T
  shl ebx,cl) ]& y% Z+ g5 E9 \: Q; D2 L
  add ebx,eax
2 |2 B( z4 @1 {0 b) s# l) z) P9 S  mov al,es:[si+4]
/ d9 g# N' d  k  H( w8 x8 M  call Change
/ ^, E( l/ @" u3 E+ _0 B5 e3 L! ^  T  mov cl,44 H! D4 u3 I7 r5 U3 W
  shl ebx,cl% X  h+ ?0 ]/ e9 h! w
  add ebx,eax  D: }! |( X1 J6 J6 Y* g
  mov al,es:[si+5]% Y! k* V. {0 `
  call Change- x) W. [6 b. x% F6 e
  mov cl,42 ?4 F: T3 e; |- B- n5 i5 [
  shl ebx,cl' l" t$ R! ?) }" E9 c
  add ebx,eax, A) E$ u# }2 I- R" @6 P
  mov al,es:[si+6]* u/ P* q/ C" x
  call Change3 O5 F' m! A) g4 }/ c. h; V! V
  mov cl,4! `, N% u. s# t/ P, n
  shl ebx,cl
: t4 s5 |* g; L4 H1 O3 G& [  add ebx,eax; B* L7 \) p9 x9 p% _  u1 x
  mov al,es:[si+7]. V$ ~+ v' ~$ z
  call Change0 r: _( |. G9 p( R2 M
  mov cl,4* [1 m$ B$ A+ U" ]5 Z
  shl ebx,cl
! h) Z/ Z: E7 q8 E. w2 m  add ebx,eax: l) y  B( f0 |2 _
  ret
4 t' \' ^' l$ QPSP endp- C4 [. j3 w3 z3 B
;------------------------------------------------------------------------------------------------
* ?8 W7 \- j  C* gChange proc near
5 Z! `' r' G0 T( l  e) I! FA:   : W+ a8 O! O+ {9 X
  movzx eax,al) u2 D0 o5 _8 Q* N3 S  \% b6 a- O
  mov edx,eax5 m$ f4 [( e& E8 J
  cmp eax,'0'   0 z, {2 D& |& X; w
  jb A* v5 _1 `2 |% E
  cmp eax,'9'   
+ Q8 I" M6 [! Z3 j5 n  ja B: ?4 n5 j! \8 Y7 j9 q' a, M
  sub eax,'0'
$ ^1 Q! I( j7 I  jmp short E
2 N: M$ C; v% I1 q# K* ?6 uB:5 U5 A' E* J( C$ c0 B* ~
  and eax,0dfh   
; |2 q: I; J, [  mov edx,eax
$ A" j/ n- Y5 ?* V0 ~  sub eax,37h   , M4 ?5 v" k6 V7 Z. Z) U2 A  G
  cmp eax,0ah
: E& L, I( s/ @- P' a8 k2 }$ ]  jb A   9 x; v2 I# s8 r5 g) t
  cmp eax,0fh4 _8 M9 l# H  s
  ja A   
3 T  x( {1 O) |5 ?8 Z; z  vE:# T' C. ~: G; H2 R9 x
  push eax   * K% q8 z7 A: k: I
  call PRT   
5 q( B0 m. L! L+ B- P  pop eax
( W% D" R8 k( P* v6 _CExit:* D9 w' n; c- c% R
  ret
5 L( n2 d9 `4 Q1 [+ J! ZChange endp) c# j8 u2 k  b) P9 G
;------------------------------------------------------------------------------------------------
0 ]0 A% Y  S/ B3 K/ Q" Z8 C* T, PPRT proc near# _. L, Y' V+ _' N- T/ U
  mov ah,02h
" E8 ~: |  f3 x8 i3 Z6 v  int 21h) {5 K5 K0 I/ Z4 n
  ret; b3 _7 \' u2 g
PRT endp' s0 d; N/ b! l) B7 p
;------------------------------------------------------------------------------------------------) H/ {1 W9 m2 o
crlf proc near0 H: ]4 L7 b- \8 e( {
  mov ah,02h8 N1 S4 J: Y8 Q4 s
  mov dl,0dh: i* G2 i1 m* X' Y, N6 P7 K. \
  int 21h
% i, o, T: H. |3 _  mov ah,02h
/ L" l& j% r$ s  mov dl,0ah6 d1 u8 N+ o8 X* Z# j! l
  int 21h
, I1 O0 m- C" p$ X) A: N  ret
1 }8 b0 T" b4 G$ I( w" a+ Pcrlf endp
4 j% j' q4 F! \) \% k+ _$ I3 b+ M;------------------------------------------------------------------------------------------------
, A9 ^5 p) Z( ~/ ^' I" ~: O. G6 __32bits proc near
6 O8 N3 j& d" D( u  pushad
1 {, H4 z( h! M" J8 m$ O  mov cl,4
& T; z8 P: H  \! a/ C# d  rol ebx,cl
$ s( o" {% Z+ v' L  call print_4_bits1 Y: C$ S; Q' Z, `; k  V2 \
  rol ebx,cl: @( G2 d8 ~+ e$ D/ }0 Z* W( O
  call print_4_bits
; r. X4 e5 }+ J; M2 c  rol ebx,cl. h& Q# S$ ~" L" v
  call print_4_bits% e5 i- |+ e, b% V* o
  rol ebx,cl/ A* _( s; q8 K5 s" m* G9 M% n# l
  call print_4_bits* i, M! z: c2 U' @; p1 O
  rol ebx,cl! F5 f( Q/ b0 b7 l" v% ~0 L
  call print_4_bits
, h- J* p9 k- Y! s  rol ebx,cl4 z, p! ~9 G% w/ L1 N
  call print_4_bits6 x0 f! h6 P5 h
  rol ebx,cl
9 j3 y2 w3 c* t' T# m  call print_4_bits$ ]2 z% L! r9 v# s$ Z
  rol ebx,cl
* T, M% m. c( W, Q5 a/ b  call print_4_bits3 C/ h( l' a: i4 j  d
  rol ebx,cl; x; t6 r1 j' g' r
  popad, E" h$ d9 v) @( V* c- c* p
  ret
& b0 c0 c* b6 P( Q7 C6 T_32bits endp
9 ^: Q, ?' _  T$ H1 t;------------------------------------------------------------------------------------------------/ C: M; z; h7 h( x
_16bits proc near
. S) X# }/ L( u  pusha   * \9 U* |: f4 e6 B2 \
  rol bx,cl
/ A3 W3 ~4 X( |' V  call print_4_bits( ?' C4 {  N  }% g8 C9 Y
  rol bx,cl9 ^& H/ [( i. x9 H
  call print_4_bits
- T' S; T' e: Q3 W) L; y8 R  rol bx,cl
/ h" X& _, J" ]& ~5 I2 u1 j% h  call print_4_bits; _% r7 r, f. ^  y, D6 i3 H
  rol bx,cl% ]2 D$ ^% o; S) `9 ?7 V4 c
  call print_4_bits$ ^. x6 ~3 ~* ^5 `4 E8 }: C1 j4 A
  popa
/ x! j1 u* Q4 W) W4 G  ret8 u3 r2 A+ T: G* F2 i
_16bits endp
0 @: _' Z+ _) T: P( m;------------------------------------------------------------------------------------------------$ q  \+ s5 T* ?% N
_8bits proc near" F+ s* a5 ~& l* s2 T  F- x
  pusha   8 ?9 C1 v9 s  d/ A2 O+ M) _
  rol bx,cl3 s% s2 ~" r  @4 N% u! C
  call print_4_bits6 }7 {/ j) h2 r
  rol bx,cl
2 t$ M& c' Q1 H4 s  j  call print_4_bits
8 S; x/ z& }( G  d+ S2 N  popa+ b+ I6 S. m. L% @( ^
  ret$ r9 j7 b4 g4 J
_8bits endp
4 ~" _* y4 b+ l" ~" d;------------------------------------------------------------------------------------------------
4 l- c! j9 j  a; _print_4_bits proc near' D- t' ~' T, E, u$ @6 _
  mov dx,bx- J1 A5 E  o- m8 Z
  and dl,0fh
6 N! ^+ G1 O* I* H. D1 w% ^: P2 ^9 k/ X  add dl,30h
$ Z' k9 k! P, r/ A+ H4 R( g' @  cmp dl,3ah- `; y4 @0 R) T, D3 N1 ?" M/ X
  jb print
( y, n5 ]2 k& r( G: H; m4 }: f  add dl,76 ?! S* ^$ v8 J! j
print:   
' j: M( X2 Y0 e  mov ah,2
. b8 i/ j0 S( O- |9 E( T/ P9 x  int 21h2 T  ?2 y7 |9 w4 [' y$ ]$ T% _
  ret
. v8 u+ @) p8 k. m' aprint_4_bits endp   
& o9 g% g8 T$ s2 [* N( n5 h;------------------------------------------------------------------------------------------------+ y5 G8 B. z+ p6 e, {
CSEG ends
, ]( Y2 h. b$ t9 o: \/ aEND
您需要登录后才可以回帖 登录 | 加入计匠网

本版积分规则

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

GMT+8, 2026-3-5 17:41 , Processed in 0.073282 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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