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

顯示string會出現亂碼

[复制链接]
发表于 2010-10-19 16:41:51 | 显示全部楼层 |阅读模式
各位前輩好,以下的程式為在 big_real_mode 讀取記憶體的值
. C+ _. j; `+ H; F
9 t/ t, `7 i  z5 q. T* _4 ~0 ?例如: C:\memory.exe(程式檔名) 01000100(Address)% H5 y4 N$ E' |+ R' q8 @

) U+ H% e8 d+ c, t/ U$ h則會顯示01000100位置的值: G0 r. N4 O( c3 _' c# H. {

& B7 L0 g: ?! J1 m6 x$ H! C! V4 ?但是我另外還有要顯示出字串,但是顯示出來都是亂碼1 @+ `4 `/ Z7 ^5 K/ D6 X) i% C

& q9 S! Y' \* S2 R, h' h7 A; y8 j麻煩前輩給我一些指導,謝謝  % y9 _9 e3 s/ B( R5 X- W2 }

' @8 K4 X. n$ j. X9 S5 r
6 O: @* w) I7 e( F6 a.model small" z6 f, r+ g) m  D  G+ u* g: `
.386p
) q2 D4 r. ]$ n! V+ M;------------------------------------------------------------------------------------------------9 Z: j- m, ]3 U1 T* B# V
DSEG SEGMENT USE16'data'  
/ S% F* s  B" I/ K7 |  G$ V4 u& D" T0 D7 t( u3 H% \
DESC STRUC
0 r2 ?6 E# W/ O' n  LimitL DW 0  
+ _3 S. y  U4 ^+ r0 [( s" v  BaseL DW 0  - x6 w' {# |3 V3 K+ n
  BaseM DB 0  
, @4 ?3 k  w2 ~% d" L" V6 u" [% k) i; [1 o  Attributes DB 0  " K; B7 L# g. `) `! l, [( L
  LimitH DB 0  
+ z' B# s! {+ H/ w  BaseH DB 0  
0 D- P7 x1 J/ v: _/ ]! HDESC ENDS. P8 W8 ?2 G$ g! o# N/ x7 A  ]
, Z1 _; s0 G, v4 L' J
PDesc STRUC. _! @4 `' i. |" I$ k% ]6 Z
  Limit DW 0  
4 n, G- h0 ]9 c( g0 L3 p  Base DD 0  
; s- z; v0 m: h* I  g& CPDesc ENDS3 T& k* K/ N2 s) P" q: }
( a5 r  ^: ]/ x9 `6 K- M
GDT_def Label Fword5 s9 e5 G! O: |, A( C
Null_Desc DESC < 0h, 0h, 00h, 00h, 000h, 0>7 T2 a4 B2 o9 W$ Q, g
Data_Desc DESC < 0FFFFh, 0h, 00h, 92h, 0CFh, 0>
" {: f6 ^4 {4 c+ v% v8 PGDT_Addr PDesc <$-GDT_def-1, >
( [) c# r( l# c4 ^
: g. B8 t$ `  H' R4 jmsg1 BYTE 'The Input Address is'
! \) P$ c5 y* Emsg2 BYTE 'The Data is:','$'$ C4 g8 U. [5 y  J2 M& Y
% E: a; Q3 m" G* O
DSEG ENDS
8 \; h9 b9 M: {5 L$ ^/ p4 ?$ ?$ _' c* K& v% {1 F2 `3 x8 N
' w" t) H6 x" W& O3 H
;------------------------------------------------------------------------------------------------  / l9 g& z+ N% H' B3 Y7 d
$ i; _3 w) R: x9 `4 m$ O
ASSUME CS:CSEG,DSSEG$ Q& @- _0 r  r- B: @

: K3 S& w4 w/ _; VCSEG SEGMENT USE16'code'
# r5 K3 D; `8 Y: T, |2 `' d( F% f  
$ {3 d% w  W8 V6 \8 V; n, {  push ds: Z4 a8 u9 Q) D2 \( Z* I! R
  push es
+ v1 e& x- X$ L2 H( A" n" f% p  push fs
. L* R' ~& w# s- }3 e3 c  push gs
; [: V- P! }% b$ ~4 {  
. V4 J/ t2 X2 T7 K. F2 j. N  call big_real_mode$ R" M: x* k  I
7 a3 s7 `; Z+ L: w% r) J4 J% Q# B, w
    + j7 l% b5 F: m  G0 h
  mov edx,OFFSET msg1;
* q  m- v( S2 t- G  mov ah,09h;   7 H# Y- Z6 O( f; I6 y
  int 21h;8 C+ m) O+ f/ ?9 u$ a
  mov edx,OFFSET msg2;
6 T& {: H$ ^, P# [4 H. P  mov ah,09h;
/ |# L4 V+ g/ ~  M5 Q  int 21h;
) x& \1 }' j( o  P# d3 d    1 O, y2 r1 ~* E; |9 g! q1 q
  call PSP   
  K- E) ^% W) j4 l& Q% O    7 l& G/ \  a7 Q1 u! Q' ]% D" n
  call crlf   
, L; F' ], X4 X' U    . j$ N! P5 L$ k5 z; c& G4 w8 G
  mov esi,ebx; g/ B, y; p5 Y6 E5 A. m* ?$ Z" z+ A
  mov eax,fs:[esi]# \" r3 ?- ~7 A: Q
  out 80h,eax: T) p( Z1 n* c* _
  mov ebx,eax5 R* l0 c4 P- I9 s2 s/ f
  call _8bits
8 h# r: ?+ c6 w6 V' D! n    , E% x8 k2 v" i' G3 U% a" `
  call real_mode: N3 ?% S( E1 {$ h- f8 r
    8 s% d$ Y/ ~5 ?& u
  pop gs
1 d+ A& G! m0 F9 g  pop fs
! Y! s/ a/ _( S3 p. ?( y; Q: I  pop es
8 e  V% x1 z/ c/ |+ J! S  pop ds  F, ]4 |9 s3 x+ t4 \9 V
   
2 g& R. y- z' A5 n% c+ r& z  .exit
# b$ e/ S/ z: N. g' k9 L;------------------------------------------------------------------------------------------------+ I6 _4 g! I- k: ?, q, }
big_real_mode proc near6 D) C; b3 Z0 l5 ]. r' o
  in al, 92h
. C' ^* N) T% @( ^' ~  or al, 002
! m1 ?  k" y/ [6 L! U4 X+ Z) t; W- N  out 092h, al0 x% z6 a2 e6 o+ B8 n& }- `
  out 0edh, al
0 ]. D; H/ S$ ?4 f) ?, Z% `2 ~  cli- }! b. P, X  {; G) ~2 n6 q& r9 X; |
  mov eax,DSEG
7 d( T. D% N* N. m) [  shl eax, 4- N6 M" X3 X+ A" [+ O+ d8 I
  xor ebx, ebx) X  B4 H: E- U  U5 z9 l
  mov ebx, offset GDT_def
- S7 e" }3 S, z/ z' ?  add eax, ebx4 [. D4 D; M' S# y  c
  mov dword ptr GDT_Addr.Base, eax
8 P/ E" g  n" |  lgdt fword ptr GDT_Addr3 z/ z9 L2 {; g3 ]
  mov bx, 8, V$ ?, w! G$ S, E5 \
  mov eax, cr04 H: V. E7 S% N: }/ J
  or al, 1
) M3 I" ?" T% w4 B/ y: ]7 }  mov cr0, eax! i( W+ L; P; u* r
  jmp PMod
2 U: x' ~( M' D8 j4 y& DPMod:  G- M/ W' @9 g4 X9 \
  mov fs, bx
1 m1 h" F- C" i; ?9 p0 H% U  mov gs, bx
. V2 `4 {! l9 n9 }7 l  mov eax,cr0) [6 S' u5 ^0 F+ B
  and al, 0FEh, ^  O4 m) L# E- v) D5 Q
  mov cr0, eax  4 J/ t' a7 V) T3 z. V; @
  jmp RMod5 v6 ^( e  d- v$ `; O6 M, m
RMod:
  c6 M/ E2 W+ F% E- `6 C  E" T  xor ax, ax; |1 K8 P$ q) O0 `6 C, K: Y
  mov fs, ax
: s" v1 N% p' }1 `1 `  [9 F2 \5 {  mov gs, ax, M) z2 U# w: g! s3 Z9 @
    : T8 [, k$ t" s. j* l1 `, g
  sti/ I; u$ _/ d0 B
   
4 r- s2 m3 ^4 m' Y/ C- p; X  ret
5 L: V; Z- F) Y; R3 a4 @. |* Q2 }big_real_mode ENDP
+ j5 r% V* H! Q4 s! D4 s1 U;------------------------------------------------------------------------------------------------
" v9 S! o' c4 w' w$ a! n" Yreal_mode proc near; {4 t9 G2 ?+ a
  in al, 92h/ F3 w5 G/ N: z- U+ @
  and al, 02* b4 p7 [& b# v+ v: }6 K; I
  out 92h, al   % B- m+ k( `6 Y. e7 e
  ret
& {9 m, k9 v2 z! Jreal_mode ENDP
4 k+ K. N+ V4 M8 }7 t;------------------------------------------------------------------------------------------------
2 t" _$ H/ j' Z. I: H6 P4 IGet_Commandtail PROC near
2 A9 \) Q% u4 B  push es  5 b0 A( q3 i- p2 {* P
  pusha
3 h. v: ?6 t2 P& x; I. _# E  mov ah,62h  * y6 @. i/ G6 N' q& z
  int 21h
- W) w9 }9 ~& X2 v6 f, v2 g  mov es,bx
7 d7 D. B9 Y6 i  popa  ' b4 I2 I3 t5 Z! n4 A& V( Q2 t
  pop es
: x# l# N, a$ R/ v) n  ret
6 n% P1 B) n+ u0 x9 N# g) qGet_Commandtail ENDP- D" H5 m8 _& N/ _7 A$ |6 o
;------------------------------------------------------------------------------------------------
  f7 j% ^: V  \6 j- U% \/ I* YPSP proc near
8 p% S4 a% R* @7 z  R4 ]) u  mov ah,62h
0 a0 M* Q+ T; E' _) B! c" L( @  int 21h5 k+ L5 D6 f6 |
  mov es,bx   
+ }" s9 p; h! \' w; l; v  xor ebx,ebx0 l. ~- }& D* i" d; w6 }0 ^( j
  mov si,82h
) Q! D- l+ O! f  mov al,es:[si]
3 d2 u: t) T$ v, k  call Change. g% d. e" a  \' }
  mov cl,46 q- s/ d5 [- H4 C
  shl ebx,cl* k. A: k2 A: h
  add ebx,eax
9 x1 I: I4 o' v  mov al,es:[si+1], r/ p9 T9 Y  \1 k
  call Change8 ^* _8 E& \$ c
  mov cl,4" t0 L$ M' u9 `" ?& b
  shl ebx,cl+ l" M! Z9 a+ B3 z
  add ebx,eax, x8 w! N0 c+ ^5 G
  mov al,es:[si+2]9 A/ k% F- d7 Z& X8 `" j+ o# w
  call Change
$ T- v  x! C/ r/ \8 @( O  mov cl,4
, f* ?, L7 ?0 R  shl ebx,cl
+ R" O2 e; ?( k7 d! H  add ebx,eax
9 y  y8 U/ \/ R4 v) I. A  mov al,es:[si+3]
+ D, e3 R4 M3 U2 g" \8 `1 g  call Change
/ D; H, h" ?. @9 i  mov cl,4. @& s6 v6 [! ~- }0 l
  shl ebx,cl% d9 A  }9 U) X* O* G
  add ebx,eax
3 ~9 L: D8 A! ?/ K  mov al,es:[si+4]
5 d% o/ U. [5 z9 D2 ^0 {  call Change
* V) p; E. W9 Y! s# y2 Y  mov cl,4
* }+ j: O$ L, Q$ [+ h  shl ebx,cl+ ]( A+ L) V% P$ Y; j
  add ebx,eax
2 z; O+ T6 l$ h  mov al,es:[si+5]
, K* S6 F9 N. M  w! L, B: |  call Change
' g/ i2 G& t6 g1 O  mov cl,4) H9 X/ J! W! V. s3 |1 m- f; W
  shl ebx,cl
7 q; B, i' E9 i" I  add ebx,eax
9 _: p7 y: ~: e2 m  mov al,es:[si+6]! s+ c: t! ]4 {- t# u6 G7 y' k
  call Change
! E5 y( h. l, y% B7 u  mov cl,4
" a  B" C' y" P9 w' z* b  shl ebx,cl
$ t# X( P, ]3 @( t  add ebx,eax4 T1 R( ]+ N8 A8 d0 H: p. h! {
  mov al,es:[si+7]  e, X# g; O* R& {2 L/ X& m4 d
  call Change; _  ?& V) d' C/ n: {
  mov cl,4# P0 t/ L# c  G/ o! Y3 C
  shl ebx,cl
: S. C2 ~/ m" f9 p, [* a8 @  add ebx,eax! Z( P' P' u( R0 f
  ret2 \' D; a* D, {" h! C! i
PSP endp) U8 U4 m, B! y9 I
;------------------------------------------------------------------------------------------------1 Q% M- y2 Z6 d
Change proc near5 u" d+ q9 Y, R0 P6 ^! g/ \
A:   
! z! ?2 v, @3 ^& T  movzx eax,al
& N2 h- m  z" j1 S  mov edx,eax/ x" {- G8 J; m6 J+ [
  cmp eax,'0'   5 T  X+ A2 p+ w% |
  jb A
5 j2 S6 [& ~: J: f$ O9 `) W  D( ]  cmp eax,'9'   / S- o6 {, |8 `6 k
  ja B' L9 l4 w- h3 f6 t0 Z% e
  sub eax,'0'
! V& G0 N* b7 J& P. |  jmp short E+ x/ h9 U$ H, o% a9 I
B:
. V- g* D2 }5 _- w/ P  and eax,0dfh   ( c& Q( G( ^8 X  y0 e# @
  mov edx,eax$ Z% v: z5 `( S3 L
  sub eax,37h   7 s" v) D5 s  O+ Z
  cmp eax,0ah8 }3 @8 [& |* l8 {
  jb A   
( I: |. T- J9 a) p( Q  cmp eax,0fh2 p" R$ r! A# U& O( K% x2 q
  ja A   
; K# K* U+ o$ @5 `# \E:4 x9 N9 _3 I6 _( P4 V/ x
  push eax   
2 t: l" S6 d* C/ e8 A/ W# y  call PRT   
9 ~1 W. G! Y  U: N/ m1 V* t+ |7 S  pop eax
  _  Y$ q6 |: K7 L0 [5 l6 K5 WCExit:
+ u* S( `- J: O8 ], N, u) A# P  ret! T( j9 E3 a' @
Change endp
* I. q/ B/ N0 Q# m3 v( X) ?* O;------------------------------------------------------------------------------------------------
! c. j8 e5 U. K, [& q0 ?PRT proc near, p1 I3 }! x% I" E% b; b
  mov ah,02h4 [7 b2 Y5 G+ ~
  int 21h" j; m8 N. U& B1 D
  ret7 F/ ]+ R9 p. U1 ~
PRT endp
' B8 I4 v! e! v& n! T' _;------------------------------------------------------------------------------------------------( K" O: b1 W6 y" d
crlf proc near  H2 D7 i( d. T. H
  mov ah,02h
6 c) [( A4 B0 E  mov dl,0dh
& V- h5 h4 T" ?* v- W- ?! [  int 21h
$ h/ t4 Y# C! n7 G1 m3 |  R  mov ah,02h
$ T: l9 [$ }6 h; }1 [2 @  mov dl,0ah2 L; d2 U1 k+ w4 _) T
  int 21h0 b' P& c) A" Z( P$ r/ Z  s1 X
  ret9 S8 @; ]4 G+ n: E" ^) S3 `1 U3 S
crlf endp
5 H6 g, g: L' j% m2 z;------------------------------------------------------------------------------------------------
8 ]& A. q& a0 Q, \2 x% w6 H2 h_32bits proc near: y$ E& t, G, f& I
  pushad- i2 A; ?: o0 f, D0 K# E
  mov cl,4/ o2 @" x1 Z# o; O
  rol ebx,cl
; h$ W2 e- m+ |  M& B  call print_4_bits
- o, U5 y4 {. t- E* |9 `8 s  rol ebx,cl' s- w, @) d  K
  call print_4_bits7 ~4 {0 V% Y3 _0 ^
  rol ebx,cl$ z6 }. q2 ^9 G# z0 _# u1 Y
  call print_4_bits7 n: A/ X4 U3 G7 P* M
  rol ebx,cl
4 ]) p9 e* I) D' X  call print_4_bits
2 H5 h* ?7 q- \, p1 v: R  rol ebx,cl# G# E5 X$ F$ Z) U* L8 p
  call print_4_bits
/ K- x* i4 v, S! T& s  rol ebx,cl1 o- S3 _& f8 @
  call print_4_bits
' {, t4 E! h5 C8 r  rol ebx,cl
0 p5 t. V5 o. N) b' k+ p, W  call print_4_bits, L$ Y9 f9 e8 `  t# N8 D5 |, \8 `
  rol ebx,cl3 B  M  s% _0 D; }, W: V, d
  call print_4_bits2 ^: n4 `$ [# r" M& R9 ]% I4 T) Q
  rol ebx,cl9 S2 R- t" [% T* V, s+ {
  popad" N! F: Q5 C  g. t% c+ S6 J7 b
  ret
1 H8 _. r: A; h' D; F) q6 K_32bits endp
7 g/ Q7 @6 y* b1 Q;------------------------------------------------------------------------------------------------
9 n3 V9 d6 Z6 D% q4 s_16bits proc near
* y' f; e5 l% `* f" s+ x: v" b6 t  pusha   $ V' U2 F' @3 Z/ i! E
  rol bx,cl) J! y4 h: C% g, ]2 S
  call print_4_bits) `4 x- D( q7 d; |' T
  rol bx,cl
, c: z9 c5 Q/ s1 _6 ]; e3 _  call print_4_bits
) K" f0 D& h6 S& N) v  rol bx,cl2 ]7 p6 j# T4 I7 |) U0 T
  call print_4_bits, I  c( B% Z# _" R& J. A: t$ Q; B
  rol bx,cl" ^4 J  U2 Y& c
  call print_4_bits
4 h$ W% I, `6 O( O  A  popa. @6 T& \. r8 B& W$ \/ }
  ret) C. \6 z* `: o$ K) w8 C
_16bits endp
4 C- E3 ?" w7 m5 @;------------------------------------------------------------------------------------------------
5 x" |( n' {5 e/ N5 D' r_8bits proc near+ d, a. m" r  B
  pusha   $ b1 @* \0 B+ Z6 R" x$ g% s4 W1 V+ [
  rol bx,cl3 g9 }: X5 p, _6 h! c2 w
  call print_4_bits) q6 I) P9 W% `+ `$ i1 ?8 |! m
  rol bx,cl, o! c1 h4 I- V  e! N
  call print_4_bits7 a6 B  h; V0 A  i' v1 u
  popa% {+ Q5 ^1 D; V
  ret
* m- O- Z" x" k4 u: u! e' f_8bits endp  H6 @1 j( _, i! Y" ]" B
;------------------------------------------------------------------------------------------------
1 \9 v7 G+ }9 O5 c% a/ Nprint_4_bits proc near
' F2 M" d8 f1 h) Z) h# p  mov dx,bx
2 L; r- ?* s$ M5 |1 z9 ^  and dl,0fh
7 c# M# H' g% {4 D8 X  add dl,30h
# u/ g. a' _6 w. _. m' ]  cmp dl,3ah3 G, ]& l5 y: d; z+ u% P% z
  jb print
6 J( j: S% l4 ]5 K' m& ]  add dl,76 e9 E1 [5 ?1 |7 u+ S
print:   4 j, G% x0 ?5 p* Z; I) [
  mov ah,2
3 s' y1 N7 X7 r+ V* M; T& W: J: r0 g7 {  int 21h
" e/ @, R% X1 G' K/ N! o3 v/ L  ret* I' d8 j) M: s0 L
print_4_bits endp   # F! N# Z7 Z# N9 v2 z4 H
;------------------------------------------------------------------------------------------------
% \6 a4 p% o8 `# q8 C. [CSEG ends
# g  Q5 n# p. b$ m5 iEND
您需要登录后才可以回帖 登录 | 加入计匠网

本版积分规则

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

GMT+8, 2026-5-31 21:04 , Processed in 0.042718 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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