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

顯示string會出現亂碼

[复制链接]
发表于 2010-10-19 16:41:51 | 显示全部楼层 |阅读模式
各位前輩好,以下的程式為在 big_real_mode 讀取記憶體的值' C1 W9 i" Q( W6 j& f- P
: {: }" K6 j8 y6 r
例如: C:\memory.exe(程式檔名) 01000100(Address)0 G/ s/ y( R4 P' `5 C+ b

, W% r9 }; O/ ~. @則會顯示01000100位置的值* A+ t: g0 r  A5 q* A

  W4 r/ C. B) k& v$ g' i- j但是我另外還有要顯示出字串,但是顯示出來都是亂碼
" z$ T* \- n; q" r; a6 a. @* o& B. m9 V! C
麻煩前輩給我一些指導,謝謝  
6 r) n8 K1 @2 z7 c- y, _( J8 H3 A5 k0 Z6 V- ]

% C, Z: D$ O# s+ K- X.model small
$ O: ^* ?% G' k. f% H9 E.386p
0 B  k( Q4 I. m  U. W;------------------------------------------------------------------------------------------------
4 U8 z, B( ^5 ]DSEG SEGMENT USE16'data'  . d+ c% u% T  K6 W1 N

. ^0 {/ F9 f& R' wDESC STRUC
1 Z: \' m, S  K% h( G  LimitL DW 0  ; B. Z% ~, S9 t' {; c3 Z8 b
  BaseL DW 0  6 i$ q- U/ q/ x
  BaseM DB 0  + k0 i1 K& X3 o/ R7 {
  Attributes DB 0  + i1 A. ^4 y  _/ [3 g- w
  LimitH DB 0  
8 t  h  @6 _$ g  BaseH DB 0  
- i! g+ l4 }/ XDESC ENDS7 N* j7 x5 G+ Q+ Q
  V0 {1 e3 ~: e9 V* s
PDesc STRUC" |7 `, ^' E: g# g1 g3 L
  Limit DW 0  
! m8 H" @6 {: s6 J7 ^  Base DD 0  ) i9 H2 m1 Q+ K
PDesc ENDS4 U* E* @$ n! Z+ m

$ W2 n6 K( C# X8 G/ _! tGDT_def Label Fword
- a* t% b% _3 GNull_Desc DESC < 0h, 0h, 00h, 00h, 000h, 0>
/ O$ Y$ B6 E- ZData_Desc DESC < 0FFFFh, 0h, 00h, 92h, 0CFh, 0>: j8 C" m8 K  K) L, |4 \+ }
GDT_Addr PDesc <$-GDT_def-1, >! ~$ o; u- o& y) `. P- h+ [  }

. G. v. _6 `7 M, |3 p  e5 O* q7 Kmsg1 BYTE 'The Input Address is'
% F% q3 m+ S3 xmsg2 BYTE 'The Data is:','$'7 I2 J  g0 M# Y) N1 z6 V' O( c
9 L" y" p7 y! _
DSEG ENDS
" A# O, Z' ?2 I1 x, O8 r; Y5 y$ Q; k6 n$ G
# t/ b$ I9 W% [4 D/ Y9 g- Z; S" A
;------------------------------------------------------------------------------------------------  
1 a; V# a! z2 @, f% S4 U3 V' q! ?- z* F2 g2 Z. e' w) b
ASSUME CS:CSEG,DSSEG1 k; S% f) l, Z8 c% s6 w* ?
7 t. g2 x3 U0 F
CSEG SEGMENT USE16'code'- F: P! O& ]; ^/ J, i
  
% @3 ^& ^0 H' K' u  push ds
- j- J6 X( P) N  push es
! \9 ?  A8 L3 [' A5 o: x% o( _$ Z  push fs
1 R6 G, Z; X4 B  push gs
9 i2 W* U9 t2 D  - o5 l, g1 Z) R' L# q* h6 M2 x1 z
  call big_real_mode- }9 k* v* x$ u% N+ R9 Z$ Y

: [  C$ O$ b& C/ ]- E- H, c   
' T1 e; K' S% K/ Z6 ^% Z7 x4 n5 {" ]  W  mov edx,OFFSET msg1;
) D0 M1 Y9 k  S  mov ah,09h;   % }7 \, p" |# O$ I# s1 G% {! r5 c
  int 21h;  y, p" y. z: m: V" p! h
  mov edx,OFFSET msg2;
8 c% u: |3 V( R5 V( b% A  k# R1 c5 Y  mov ah,09h;; J! z0 A6 C5 o, `7 Q( [
  int 21h;+ j5 \9 g% B2 E! Q7 E
   
/ p  V, {4 }# ^. [  call PSP   4 Q* K  ]8 N& U4 B! f
   
+ m, E% ~1 V( D. l7 m/ Q  call crlf   
+ _5 A9 `2 D; |, s5 G   
: r/ y9 a( U" {$ T* W  mov esi,ebx
- h( g& o7 a1 a8 L: ]  mov eax,fs:[esi]- c$ N' K' B9 K6 h
  out 80h,eax
1 O+ z2 M5 x  y1 Z* ?  mov ebx,eax
+ z, i  u2 i# I( K3 ?+ |  call _8bits0 ]( C1 O8 x& V5 _
    ; _; S: w( m) C( V) Z$ ~; Y
  call real_mode
; E7 E5 C- A# r  a& o    , U3 D+ h; y: Z! M" T2 x
  pop gs
4 O" v5 x/ Z- U0 q8 m0 N' w  pop fs+ Z- u; d) W8 U7 g3 f! ^, P6 }! d
  pop es
* n* N, d6 k( X! a  pop ds- t- q5 g+ o" R8 o, Z- N
   
0 {: t$ Z# \' S1 A# m- k0 c  .exit
- i8 u( I- l' F7 J1 I( H;------------------------------------------------------------------------------------------------
  d/ p  T5 M; m* J0 G+ N9 B; G) {% |big_real_mode proc near0 y, H3 j5 m" L& y. b: R
  in al, 92h  Y& {; y" s0 l$ [9 D. t- ]5 N
  or al, 002& \8 a( l) }: P) U( u
  out 092h, al
( q, Y7 {0 x/ S) V  out 0edh, al) V1 p7 X4 `% K
  cli! p2 r2 l* E% m; I, O! X1 `' R
  mov eax,DSEG
+ Q+ b. F, C& A+ l  shl eax, 4
& |8 ^2 Z2 h) T. B, g  xor ebx, ebx
* X3 t5 s( q0 Q( t4 \  mov ebx, offset GDT_def
, k) ]0 Z: f7 z) Y. V  add eax, ebx
/ F* T) p, d& \2 G8 I4 k5 F8 l  mov dword ptr GDT_Addr.Base, eax) m8 M# R0 c4 a* `
  lgdt fword ptr GDT_Addr
- C+ x8 y% n/ H/ f& a, g  mov bx, 8* P2 p4 i- l( ]4 a: O
  mov eax, cr0" a! ~$ u# ~1 t
  or al, 1
1 p$ X: r! `6 y" H. }, r( x; b  mov cr0, eax- C) V6 G( y$ u# C+ o1 d. z
  jmp PMod
; I- @( Q) @7 uPMod:5 e1 m! N. E( p5 D
  mov fs, bx
4 |" H* W% E6 k- R* t4 G  mov gs, bx* q: F3 \/ t+ v3 A% `1 s
  mov eax,cr0
. q  B* S& o6 A# g4 i! P9 X3 M% h  and al, 0FEh: _( H" H; e, t4 T4 c( |; a# C
  mov cr0, eax  
2 s" i0 b! Q3 P- F, Z* b& t8 R4 ]  jmp RMod
& W6 B2 f; Q5 I+ j) ERMod:0 {) n$ i# z, i
  xor ax, ax
: G. s# ~, s9 Y; f  mov fs, ax
" ]  i, P3 b6 l. q, G  P: ]  mov gs, ax+ Q0 B- _# g/ ?2 F& s- A3 k
   
( E9 h/ [+ j& B6 T" K; n; C; w  sti
9 ], L" ?/ M* n6 @" i& H4 T9 Y   
( d- m6 K+ a" q3 C. Z) E  ret0 E4 `9 L  e, J& j4 {. r
big_real_mode ENDP
& G" h3 S8 l$ l( t1 d2 X;------------------------------------------------------------------------------------------------
; e: s; B& A9 {% U. Qreal_mode proc near
3 I9 H0 m% x2 q' P  in al, 92h
! E! l& x/ z9 H2 V( U/ X  and al, 02
, }+ E: ]$ E% I. [/ O  out 92h, al   
- u& `+ v, L0 O! l  ret
7 z4 ^3 ^/ I9 U$ @) [" treal_mode ENDP" [' a  k; p' ~! Q
;------------------------------------------------------------------------------------------------" [% W% K, V- ^1 [" o. F# D$ Y
Get_Commandtail PROC near  C' `4 f; a' m/ V- |7 k) A" ~
  push es  
  X7 ?4 \" [! O/ a& ^$ R; N; I  pusha+ W6 q; D3 W# S. v+ y
  mov ah,62h  
- m* {5 _; ]* i0 ]  int 21h
# R# @1 c$ O& H. z) G2 U) S  mov es,bx! r# L& h4 [: J/ t% W" s
  popa  
' ^: X: ?' y( l  {  pop es
5 s  J" @6 O2 N8 y  s  ret
' x0 I1 W1 b4 oGet_Commandtail ENDP
% V8 `( g! I- C  ~: K! `;------------------------------------------------------------------------------------------------) k! O2 H4 H3 H9 W3 Q
PSP proc near) `) o! m( }8 T6 u) ^; x
  mov ah,62h
( B* C# h% |2 R: X0 P3 t6 e  int 21h- n* T0 H9 x9 z3 i9 l
  mov es,bx   
! r0 g3 `0 v! F6 E/ N  xor ebx,ebx8 G$ A/ o! ^6 m  Y8 c; U8 Q
  mov si,82h5 @3 m# z# ^0 T) }2 }. D
  mov al,es:[si]
9 @8 M; f! I; s5 N  call Change1 N& ~% t# F+ ^- E1 n8 Q0 k
  mov cl,4% E, D2 X! {) r: F
  shl ebx,cl4 O3 w* c* E+ E$ T6 M& m8 D
  add ebx,eax
; x, _0 d, |5 {+ e! e6 E. `4 |! K  mov al,es:[si+1]! U% b* ~, s3 [
  call Change
; U7 d! X4 o8 k2 X  mov cl,4
) P+ c( V) D1 M! J& S$ h  shl ebx,cl$ h3 Q  G3 N3 o  q# b' j; h
  add ebx,eax2 R/ D$ q( y( C9 I, ~
  mov al,es:[si+2]. Z2 s+ k2 b5 ~# @: K* S
  call Change
/ d# V% k7 `1 y  mov cl,48 }" L( q+ R$ L! I  y: D
  shl ebx,cl# S/ U  W4 R0 `4 R* U4 Z
  add ebx,eax
; m2 c- q; g- Q- M9 a0 t8 g  mov al,es:[si+3]& M; w; ]2 K  S* X' d  m
  call Change
+ j& M6 ^' ?% ]# y$ z' o  mov cl,4
& h7 i* O2 n2 v1 L8 v  shl ebx,cl$ v: D% j9 A5 y' G
  add ebx,eax' K6 D( }- r" I" C9 V
  mov al,es:[si+4]
; |9 p  Y/ z% f  call Change
* @) z) O) @  v5 B8 q  mov cl,4
* g( c7 W1 b" _! F9 B  shl ebx,cl
2 S6 N) X% E. p* C% o7 ^  add ebx,eax; u9 K6 f* {5 T& {  n7 j1 Y
  mov al,es:[si+5]9 `) I6 o( T; U
  call Change
+ i: t$ u8 j( n; S. i; E  mov cl,4
4 |! I3 r  m# [: r$ L  shl ebx,cl, z$ w3 a0 Q( ^0 w  F
  add ebx,eax
* {/ b0 @! A) f6 u( l8 A9 u  mov al,es:[si+6]
% }* x2 U# ~& p% n" Z  call Change
$ C) l8 c  R* Y) e  mov cl,4
  k3 G# a4 P5 F7 |8 q  shl ebx,cl
/ d, E. X: P! ?! s; _  add ebx,eax, E, i3 L% z7 @* h7 C  J
  mov al,es:[si+7]& S4 s! v4 l4 k" G$ Z% B/ x" b+ @0 x
  call Change
6 f0 y' z3 S! @1 z+ l; H) J5 f4 O  mov cl,4
* f$ H( O- t6 w8 R  shl ebx,cl: i" n& `* b( l4 [
  add ebx,eax5 \+ G5 [0 U6 _- {( b
  ret
0 F2 [- B: M8 q1 T* J9 ]PSP endp
, R9 G4 i5 F* r" G, m; T- [3 z;------------------------------------------------------------------------------------------------/ I. Z0 n2 c% i( o- t
Change proc near. ?: [' |( G8 e
A:   
. b% D" K+ E. d) B9 G  movzx eax,al
' B& m1 c1 ?; Y4 S8 |  mov edx,eax" I1 R/ j2 I7 ?; v
  cmp eax,'0'   
# ?' I- K  O2 R# k# U  jb A
& ~9 C. P- P  F+ {) a  cmp eax,'9'   . b. c8 F. V+ v9 V9 ]
  ja B9 F1 N! H. k4 a# M
  sub eax,'0'
) o, p+ s/ _- O4 n6 ?  jmp short E9 A- L5 t0 }+ |1 J0 U  @" O
B:
! n* p% t' c) F+ P& j# X  and eax,0dfh   5 b' G, P5 Q% d" k6 S0 T1 X
  mov edx,eax, T% f6 U- v( ^. n% ^! G+ u
  sub eax,37h   
$ H8 b+ Q+ R  U; n  cmp eax,0ah: l/ L9 V6 I9 F
  jb A   2 k6 S6 s% V# r4 Q
  cmp eax,0fh* r# ]* a/ ^4 E
  ja A   8 o6 x5 i% z' v/ a
E:, z$ X1 B% q) {& ]
  push eax   % y1 o2 a6 B5 T2 }) d: E6 b
  call PRT   
$ D5 s* C" h- v* @1 M! ^  pop eax, t1 [# G; X2 T! C3 G( ~6 s
CExit:
& n9 @# ~: L# U+ m7 y. Q  I' l  ret. W$ V0 |3 _. G) o+ b
Change endp
" W9 v$ g5 c* Y;------------------------------------------------------------------------------------------------7 D# S% n+ B8 Q
PRT proc near
3 U# v/ |. v1 V; Z  mov ah,02h
1 {4 t( M: G5 a, ~$ A4 w  int 21h9 H3 {, D. ~$ ^0 M4 [+ e& p8 ?
  ret1 `/ \% |5 l+ b+ w1 X3 ^
PRT endp
8 g5 M" }( A; t" u$ P" G0 U4 ^;------------------------------------------------------------------------------------------------5 h, p0 H& t* w9 s
crlf proc near7 f, O) E) [  ~2 N2 {
  mov ah,02h. L! z9 R/ \9 a, [& o9 M* t/ Q0 h
  mov dl,0dh5 w3 n9 D8 _# a9 Y6 U
  int 21h
; ]. h2 b  B. C  C( C; N0 [+ g- [* z1 W  mov ah,02h7 W# T/ ]4 ~9 x3 _' ]0 H
  mov dl,0ah
: _: ?4 j" e# J4 e0 F  int 21h
- X3 U, E. [: }' M3 ]  ret
  \8 `. R/ }: l5 |( J' lcrlf endp) y% z9 J4 g, {8 o8 G5 z
;------------------------------------------------------------------------------------------------
9 `3 R; H( y5 E$ e4 m1 S_32bits proc near6 }6 y* h1 D/ o
  pushad, h( o, h. d- R  |& B& f5 R& W/ i
  mov cl,4; X; p  u" c9 E* [4 l+ H9 w# X
  rol ebx,cl
# Y8 ]+ s# F+ J- s  call print_4_bits
# o/ `+ I2 [/ |9 D  rol ebx,cl3 ^$ h4 p7 }2 A7 ?: i& T
  call print_4_bits
2 _6 E, L# N) X# c  M3 Y  c  rol ebx,cl' R* S# ^( c2 x+ L; w
  call print_4_bits- ~. X# t) H1 m/ [  N0 `, M$ s; H  m
  rol ebx,cl
) e3 ]/ i" V# `, Z" W- A2 e  call print_4_bits
. Z3 R0 r. j7 c0 E" x4 Y  rol ebx,cl
; n9 G4 ^9 P$ _9 B+ e  call print_4_bits
: I: }6 _" @& p, g/ [" }  rol ebx,cl, I# ?" O* O# I; Y6 L, O% N5 h" i, d
  call print_4_bits1 B9 `9 I& h9 m$ F, n+ M
  rol ebx,cl) h; W. E8 `( L& ?
  call print_4_bits* A: w2 C+ Q5 x. E( v8 f( f' o
  rol ebx,cl
, j+ P: k$ h9 Z8 P& C9 v) z* ~* J  call print_4_bits
$ N2 C* [. h* [" k  rol ebx,cl
8 }/ E- e. F' h* J  popad) g) X, ?& P* @2 u
  ret" u, e1 f- f1 Z; Q
_32bits endp
- a$ P4 v5 j: V& Z7 ?- R3 F;------------------------------------------------------------------------------------------------
# \* X* `, w3 e( y4 c1 ]; G5 Z_16bits proc near
1 a8 r- U8 U5 o* M  pusha   5 U, k+ C( o8 x( W; G
  rol bx,cl  o% R7 J5 a! n$ R5 n4 y
  call print_4_bits' ^* z, c% H' }4 \0 n; u8 `( p3 s
  rol bx,cl
# d6 S3 s3 T; `6 Q2 f  call print_4_bits
/ d7 {' z% c) z: p  rol bx,cl4 o' {- J8 a; \5 R7 v8 W! S
  call print_4_bits
4 e: a" o" D0 `' @5 z  rol bx,cl8 y! j+ Q) ?/ Y" F( Y, C& f
  call print_4_bits
+ b- K/ b' C8 I& x" H$ [1 v  popa
, r5 L# s8 v+ N5 q% V, Q% ?  ret6 \" k! {' ]! v; y
_16bits endp2 }: x, N  E- m; L$ S% `
;------------------------------------------------------------------------------------------------
" N- @' E9 G3 D. Q, o$ D0 C( @_8bits proc near- t7 y7 t! [  T$ a6 S5 X/ J
  pusha   : H9 |# G- A+ {: N# v- W
  rol bx,cl
# \/ h" g* @) t* H$ \, V  call print_4_bits
. h* G2 X9 o9 U1 p: ]  rol bx,cl
6 g8 e, \! f5 A" T) l  call print_4_bits  V- f  X5 {& \  g" t6 _
  popa/ _) q- Q2 W3 A' p. p, v
  ret
6 a8 r/ X  n7 r% X! n" C- a9 t_8bits endp4 O  w1 U3 W+ B  t
;------------------------------------------------------------------------------------------------
1 V  `1 m$ L: ~& D* cprint_4_bits proc near' \' x$ A5 h' U3 I2 H/ f
  mov dx,bx3 ^  s! o5 z, C* P) ~( F% R* T
  and dl,0fh6 p+ ?$ {: Y2 [9 H% H
  add dl,30h$ s  D( ?4 |: e. E- {% r+ U( I5 `
  cmp dl,3ah: u$ B" }8 @( o7 o# h9 }
  jb print
! c5 k0 ]- C9 G; Z2 g  add dl,7
! V+ z+ z3 @+ Y$ W. r  Y) h9 Q: Eprint:   
; G2 q5 i* O5 u0 ]  mov ah,2- o! Z. O. M7 F7 C  ~5 V1 A2 d
  int 21h
0 u, v' K! @% f" Q* t9 \- D  ret
4 Q; t/ Q9 Z5 k; z" T) Cprint_4_bits endp   
; Y  R% _* T, J% Y5 D3 U5 e) [;------------------------------------------------------------------------------------------------2 P3 j. b/ J# O
CSEG ends
2 d* d2 r# N+ T8 K1 B$ ^; pEND
您需要登录后才可以回帖 登录 | 加入计匠网

本版积分规则

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

GMT+8, 2025-12-1 08:34 , Processed in 0.496297 second(s), 16 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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