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

顯示string會出現亂碼

[复制链接]
发表于 2010-10-19 16:41:51 | 显示全部楼层 |阅读模式
各位前輩好,以下的程式為在 big_real_mode 讀取記憶體的值) ?/ Z5 }6 K$ x( \' `1 F

. s1 l9 z0 N$ y5 Z) U" l例如: C:\memory.exe(程式檔名) 01000100(Address)
6 L  H# L" x2 Q# u+ R1 {4 n; U# L5 ]+ ]; p% z
則會顯示01000100位置的值
; c- l9 \: b  Z, Q
+ e+ X% K9 \& {但是我另外還有要顯示出字串,但是顯示出來都是亂碼
) |1 ~% o! m* c: x% t$ s
, E3 v- P  ]3 m/ v麻煩前輩給我一些指導,謝謝  ; Y# l7 y% y- k; n

8 ^5 n( s9 l: v( G4 Y# g$ x; |3 Q" n9 \  d0 j2 A" b9 m
.model small; w$ {; F8 N  ~0 A  A
.386p
; Z+ \8 |* Q# q' ?/ m& Q- [;------------------------------------------------------------------------------------------------
0 U" t4 b" G; c7 D& a* GDSEG SEGMENT USE16'data'  4 L& [) Q9 o; l( w

( X! V2 v' [6 p5 J, o: C" jDESC STRUC0 ^' D; }( i2 Q; w" @% c
  LimitL DW 0  
/ O! S, b- d1 x# f9 ]3 w$ U  BaseL DW 0  8 e7 r( j( I2 A4 a
  BaseM DB 0  0 A: O% K) m0 a9 ^4 u
  Attributes DB 0  / ~, G& f) \  Y( y! ~
  LimitH DB 0  
. n) p7 q# D7 E  BaseH DB 0  
1 \- @8 ^. P# H( j5 J* n+ GDESC ENDS! K5 Q1 p( N$ k* f: {# d
. L# n" ^. P/ q% g% g3 z0 i1 q! |% s
PDesc STRUC
; z; h6 u2 v' F, C- v; O) Z+ y5 a  Limit DW 0  1 f9 Q5 N+ W3 [$ i( o% f7 B
  Base DD 0  + g! Q- T! U% H
PDesc ENDS
( s, A2 [( R; b* `. Z# {7 _
( M. \" V- M% \/ AGDT_def Label Fword$ f7 w1 A0 S+ _" M) ~% D; J2 R
Null_Desc DESC < 0h, 0h, 00h, 00h, 000h, 0>/ ]1 A0 [% S2 W& \* Y. a* ]
Data_Desc DESC < 0FFFFh, 0h, 00h, 92h, 0CFh, 0>: x3 a- l0 L* @. p) U" x; q
GDT_Addr PDesc <$-GDT_def-1, >5 \# u4 d1 W4 {) M: r1 I7 d

  `; T* m9 j( V1 amsg1 BYTE 'The Input Address is'
8 j2 d8 b  [  `3 H1 k; P$ S: q; Bmsg2 BYTE 'The Data is:','$'
1 t! S- s) [* k7 H
2 x* [4 ^1 W* E1 c, G1 h! ^, B  Q7 t3 QDSEG ENDS; }4 g2 y: ?1 h# L
: F9 L1 `: i$ {2 U5 i; a/ y
% g2 Q* c2 C! L4 H9 p
;------------------------------------------------------------------------------------------------  
# B( J& I4 @+ V2 T: P1 M7 l* E% E  D& H
ASSUME CS:CSEG,DSSEG
5 ?3 j& t0 k/ c0 G; G* ]0 `! [4 J1 R1 x1 b7 U
CSEG SEGMENT USE16'code'
" b0 [. p& y( U2 L. @  
; H" p# `. b: \7 k6 S; H  push ds, ?/ B3 t7 o# a, J5 s! b6 W
  push es
' o% |" B5 X; h8 }5 `2 q/ D- \! ^" L  push fs; v6 z# y6 L1 o5 N8 T$ K8 _: M
  push gs, `) p& S- l" ?0 X) g# Y
  
# i+ p+ T4 V# J0 [, X  call big_real_mode
) I4 [- [7 P! [" W
6 ~- z6 E# F. u" H   
  b# ~" i! c/ G' {% x7 _. }: i  mov edx,OFFSET msg1;  W5 \2 w0 e# K
  mov ah,09h;   
$ P5 d; j5 K0 t, P  int 21h;
5 q- j  M5 m2 T% K$ K: I  mov edx,OFFSET msg2;
5 a4 c" B% L/ y% O/ N- c8 r  mov ah,09h;
1 W7 J* w8 D6 q, n& t: l' v7 e  int 21h;
  w+ p; F. O, l$ |. H/ S7 y, _7 Y   
/ U9 K+ T- E$ ?/ K7 e/ N  call PSP   
" }7 z. I) S( P8 k. _    8 M# {& H6 h: P0 \4 Y1 q# l- c
  call crlf   
1 D/ y2 i6 G* d& ~+ y) Z   
* m7 A9 o# j0 s3 K- J1 Q  mov esi,ebx
- ~% J& E- b# A. T- @+ ?9 H+ g  mov eax,fs:[esi]
7 {1 L% L1 Q, U  }+ K  out 80h,eax& t! W5 |5 Y8 b# o  f6 t
  mov ebx,eax, s9 j- \6 P. x4 o& y( H
  call _8bits
3 W$ S% z) o& |' ]3 p, t+ f   
6 C0 t! M4 O9 x) Y- V& g3 s  call real_mode
$ L) F1 b8 c" u( |8 P; e% W   
3 i& X, L- o  k% f8 M  pop gs
5 h& n2 Q0 E( A: O! S8 L" }% L& M  pop fs# U% e, A& g+ @
  pop es
2 J  W( Q0 N# N* _  pop ds
8 ?# q0 U7 t- U. }8 X      `! w/ }* G: Y' P# t( f
  .exit
3 F: a1 _8 V3 x& f( h7 X6 `;------------------------------------------------------------------------------------------------0 ^" {# ?6 I1 z
big_real_mode proc near$ j9 X! m1 O; X5 Y( [5 m
  in al, 92h& S; A  ^: K& |) Y" V% U+ |
  or al, 002
5 ^/ G4 A* T" E; Q; a, P9 D  out 092h, al7 M( b3 i1 j" `. H+ V& `( G0 {
  out 0edh, al
* I0 T' o, J# G1 l5 v  cli
2 c. \; b* F, O+ Q  mov eax,DSEG
* ~) D& T: @6 J3 T$ W3 O" m5 v7 P* N, m  shl eax, 4
" L) @8 s" K; L9 s& G  xor ebx, ebx
$ O! k* l. ]' p' Q+ I  mov ebx, offset GDT_def
$ R( G! e6 P1 H! Z8 w+ Y3 Z  add eax, ebx/ Z: g3 o# O  E' L" l
  mov dword ptr GDT_Addr.Base, eax6 e: k/ n' i8 Z5 {
  lgdt fword ptr GDT_Addr  s# v4 X3 K( T$ l9 r' S
  mov bx, 82 z2 O; w2 m9 `1 I
  mov eax, cr0: n7 a) ]! ]6 ^0 O/ ~
  or al, 11 L# v: @; z8 q; n0 z
  mov cr0, eax
* G- p! \+ n. N! q# i( v  jmp PMod
8 Z2 `8 [# D* ^$ W4 pPMod:. S2 l% K4 C0 A0 h8 u: Z$ V2 H( q
  mov fs, bx
1 r7 |/ F; e* {' V  mov gs, bx6 V2 f5 q1 I" g& \6 y
  mov eax,cr0
  J1 y3 u; m5 c9 H( w  and al, 0FEh
; S4 i, c' Y  J& x3 x" J: _  mov cr0, eax  5 T/ B9 G% G$ w
  jmp RMod, d+ {0 K0 U$ F: Q  P) s+ N6 |1 l; O
RMod:" l& v) E1 e; F- e+ j- b4 P
  xor ax, ax
3 ^8 I% ?; J9 L5 u" N- ^  mov fs, ax
  O6 G0 x9 @# L* }" {5 M; V3 f  mov gs, ax
  G% a5 Z& {8 u. n   
3 Z0 g  V8 P% Q" ]8 R  sti& M& C/ h: q$ L+ k$ J( c
   
  ~8 f+ H% Q4 G  ret3 ?" X/ E8 ^4 o
big_real_mode ENDP
5 E9 m* L- m8 P4 r1 A;------------------------------------------------------------------------------------------------, b, s1 w. s1 J3 }  x5 y% ?
real_mode proc near
$ m7 D/ F' r5 q  k: M7 x$ A7 n  in al, 92h( Z5 k; |" x9 ^1 G+ x6 F. j
  and al, 024 a' T6 l: p! V7 n$ w
  out 92h, al   * t- ^; L) ]% J  W% r$ L
  ret
2 h- A) [2 k  N. _$ s# e% xreal_mode ENDP
2 n, J8 I) W1 Y;------------------------------------------------------------------------------------------------
" b! f/ P& B0 VGet_Commandtail PROC near; M+ J* O5 w0 G* r
  push es  
# M$ Q9 ~; w  j$ H  pusha& V' x% @# s5 V! o! T
  mov ah,62h  
/ O: c9 F  |# v5 b+ F  int 21h+ _/ ~( q0 E& c, V' [/ v
  mov es,bx5 R% S. s; E# P# P: Q
  popa  - F7 U) G2 ]$ U' v" A! O/ ]! @' x
  pop es9 m) s  c. T( [6 E* x6 A
  ret7 F) [% C  H9 @1 y% z8 k
Get_Commandtail ENDP' R" C6 |# `# o& s3 V( }6 V2 E
;------------------------------------------------------------------------------------------------  y& d! Y' r. H1 L* @
PSP proc near
. _3 x# Q0 E+ v; @2 x6 T  mov ah,62h
; }0 F. o( b  k. S; k6 ?: b1 @  int 21h7 ?% |/ L9 L% l! H
  mov es,bx   
& X. ]$ v3 o" _' {& I) m+ i( G) O  xor ebx,ebx+ P+ D/ M2 `+ x1 ~1 ^! I9 A
  mov si,82h/ p/ ]8 Q; {* `2 ?1 n; I
  mov al,es:[si]
- v9 Y# U- q, e  call Change
4 c  \4 H. E+ e  G  mov cl,4
" v" C3 Y3 W3 {  shl ebx,cl
3 Z2 f* b7 ^  n$ {4 a  add ebx,eax" k0 W/ h( ~, r# {, O, ^8 a
  mov al,es:[si+1]0 Y% Q0 \+ F$ F1 Q
  call Change: D2 E5 U4 a+ ]: ~, T0 `
  mov cl,4
) [# ~  L+ Q3 ^( W9 c5 C  shl ebx,cl& c+ a; P) p% V0 `6 @# m
  add ebx,eax% c" }: @6 @' ?* I* y; U- I
  mov al,es:[si+2]
. I' F0 V/ C2 g. I  r6 t  call Change0 ~5 |% a  F3 y+ L" [
  mov cl,4% R8 {! L& C- Z; z$ }8 Q
  shl ebx,cl
  H- s5 [6 N/ b9 C$ {* Q) h  v; X  add ebx,eax0 D% J9 g7 f2 Y
  mov al,es:[si+3]) m9 s: }+ D8 S4 a# o) M
  call Change
: B+ g0 F$ U4 c- `1 T4 f  mov cl,41 c: _8 F3 |; C' o; ]+ v
  shl ebx,cl3 t# x& A, C: \4 J# v
  add ebx,eax
1 T4 r1 v: f9 `+ r0 S  C  mov al,es:[si+4]) h& z2 b8 Z, d0 Q
  call Change
+ _" M5 s" n  @6 I  mov cl,4
8 u5 v: `$ G6 V( o  shl ebx,cl
/ V1 _% @- |$ {  K1 G0 f  add ebx,eax
+ B! k8 v" B# T( |. l; ^! n4 ]  mov al,es:[si+5]8 j0 A7 u( _( e8 \! w
  call Change
* b; k1 b% I" s& u. ~  mov cl,46 h/ `& b2 u7 w
  shl ebx,cl. @8 _* ]+ b7 u5 \# y! U, {9 l
  add ebx,eax
3 i% [; o& k: a1 H" f  mov al,es:[si+6]
6 ^5 [& M' X/ O  call Change9 V) P# `) `- S. e5 }! b
  mov cl,4
: A8 z3 n( x( C# z  shl ebx,cl
( C/ }7 A7 P  u  add ebx,eax2 h; i) p7 \  S% r% k3 v
  mov al,es:[si+7]
7 u, X3 V8 x$ K( K# W  call Change4 H) u9 d% V' j5 T$ O' z
  mov cl,4
; \* B2 I9 e+ O3 r5 d; O3 h; N1 ~( n- H  shl ebx,cl
! j: ~: ]1 t* m, v7 U  add ebx,eax
$ x% D* {+ Z6 o0 w* P4 `  ret
$ f' E* r7 A+ O; ePSP endp
3 p& T8 X. [3 H6 p& O;------------------------------------------------------------------------------------------------
9 ~9 }8 p5 F* iChange proc near# c9 c2 p9 i/ A: u
A:   
' }7 e& o3 n/ H$ [* ~- y6 R3 a+ O  movzx eax,al
. Q6 U- w9 k0 N( t) E, X& k! r) t9 t  mov edx,eax9 {9 ?" a: o- B" e: p
  cmp eax,'0'   ( Z2 O. Q8 I2 J9 a, l6 N0 o
  jb A
7 r2 y; f% Y+ g) i* }  cmp eax,'9'   
# E1 p' ?! ?. Z# A& t  ja B
. O2 m0 a: ]# S  O- }2 t+ ]  sub eax,'0'
7 j3 O$ x& z, n# Q/ K3 \6 B0 R  jmp short E) M3 V9 ^9 x( g, ^) K
B:! y! |! \2 _5 V( r% {$ I
  and eax,0dfh   
. n) X' j& F; N; K  mov edx,eax$ Q7 ?0 s8 h) H9 B
  sub eax,37h   $ [0 q2 r. Y- j, ~' D' \/ f( S
  cmp eax,0ah
- B1 J, T" |1 b- @1 e  jb A   
% Z9 R# {3 ~  x$ l8 c  cmp eax,0fh
$ j. I: E+ B( H, e  ja A   
! D- k6 @" A# _. z! [E:
; J# n; z" D' `  push eax   
8 d. |- |8 G# t4 d) F  @  call PRT   
: A) D7 Z2 r/ n7 S( R. Y1 K, u  pop eax
' g% ^: Q+ Q$ W* {, ?. X% NCExit:* n1 D/ Y* c. b& W0 J+ q) G
  ret
- N: Q( i* N8 v' E' |2 w  OChange endp
( Z, w% X) M3 x;------------------------------------------------------------------------------------------------
% d& D" U; u8 |4 ^9 V9 n9 RPRT proc near4 M" U0 w8 Y( z' d  @+ d
  mov ah,02h
1 L& V- C) ?0 u: R) x) C  int 21h$ Q7 o4 R# A/ G6 G* R
  ret: x/ y, g* Z% t# ~( P6 T
PRT endp
% ]* p2 l5 C" Z' B, R( A;------------------------------------------------------------------------------------------------( l: |7 o. J( n4 }# B7 g
crlf proc near! u0 }& n7 x+ D! `5 H. ~
  mov ah,02h4 y$ V0 P  r' I! p+ z" ^! i" U
  mov dl,0dh
9 P* R* X5 y3 a9 p! t* }  int 21h
3 B( D7 B1 y% X8 n% T7 C! U5 L  mov ah,02h- c) F* I. R! ?  {1 U( J+ r
  mov dl,0ah1 b" E- R( p  h2 u! u# V
  int 21h
2 [9 a4 q* f( D8 n# T5 ?, X4 T  ret
7 r; ]& i! t1 y2 P+ V/ @* Lcrlf endp6 g4 s! j/ U6 j6 O% E% k; w; @
;------------------------------------------------------------------------------------------------
  g) L5 \& o$ d2 P) D( r7 m_32bits proc near1 U, [# }! [3 Z( {. e) {  v
  pushad
8 W: V' |1 D2 B7 G: Q) c1 l  mov cl,4- W0 H* `, e* K! R- R
  rol ebx,cl
% F& B% i: b- g/ e# K/ m/ c  call print_4_bits1 d( ?% @  C: d4 ]1 {
  rol ebx,cl
) g( S& Y8 h5 L" J9 _7 m1 K; w  call print_4_bits
* i& n% C& \$ Q# U6 z# c  rol ebx,cl2 @% J" x: a; G' T* H0 e
  call print_4_bits
7 ^! f( Y! n4 I0 z8 ~  rol ebx,cl
( _+ ]9 ^1 x2 L6 I) r9 j, v7 F  call print_4_bits0 Z. o7 `7 [2 ]3 x  T& _
  rol ebx,cl
" p7 G  z* X4 x5 \& P* l. g( N  call print_4_bits
2 a" I9 X2 _6 L( `. D! e2 y  rol ebx,cl' m2 X8 O- u/ D  d9 Z2 Z
  call print_4_bits
( y' ]1 b1 F, f: n! d! u4 H$ x  rol ebx,cl. T& x% R2 V- D+ x9 H
  call print_4_bits
6 `3 n) }; A4 a% {  rol ebx,cl
, }  ^& G& O6 o  O; m' L  call print_4_bits: C# A* n+ O; f
  rol ebx,cl
. ?. ~! h! e/ H( O3 m  popad
8 N" j* X1 @2 ?$ _" b  ret2 G. w, X' C( ?# j. R4 i5 X
_32bits endp
" i2 X" m2 {5 k: l. }$ y1 D1 x;------------------------------------------------------------------------------------------------
9 v. A0 U% ~* J! H% F* {_16bits proc near" V! M# L1 j- Q) V1 D6 k
  pusha     @. p& D" h% L% f) L( D" t6 C
  rol bx,cl
$ @: K% v/ M+ h  call print_4_bits" j* R- ?/ M8 _) {+ i/ g7 H' ^
  rol bx,cl
- w; ]- Q1 S' V6 j& }0 N  call print_4_bits
) _4 q- F& b; t; y  rol bx,cl
  h# W* F- Q& _9 M6 d  call print_4_bits
" Z6 I$ E: d. o/ V1 C9 J  rol bx,cl
! r8 O4 {9 n1 a) y3 h. T  call print_4_bits
# k" U* G% E3 s( J  popa: Q, p( k- e7 o9 A
  ret: M7 i5 C* e$ d8 ~: I7 t! l
_16bits endp' z6 I& h, x% r* y; E
;------------------------------------------------------------------------------------------------
( x" C  u& D2 F7 G_8bits proc near' K, ?' E3 ^! U5 r) m4 r. K
  pusha   9 b. Z8 F+ b& q, w# R7 }  k, {
  rol bx,cl) M* [% Z3 o* M# s" X2 m6 _
  call print_4_bits
: i2 G2 d2 G* t5 _, `' h3 }+ U) E  rol bx,cl+ m+ i' N6 i: ?: x
  call print_4_bits4 v. ~2 ^( i. R4 N6 i0 l
  popa
3 C( a6 o6 _& N: U8 Y$ u9 V  ret, V( }2 r8 V4 R% M8 P$ [9 h
_8bits endp
+ D5 j9 _$ o. x9 Y% v7 d+ F' Y;------------------------------------------------------------------------------------------------2 P  y( N- F$ b/ c8 V% F
print_4_bits proc near
% g1 U! u' Y+ x6 b9 m+ q  mov dx,bx  s4 K- y7 ~9 @0 W( R
  and dl,0fh8 i& X$ l% p8 B! k% d9 r9 N! I
  add dl,30h8 j' L$ q3 u; f4 y. I
  cmp dl,3ah
. a3 z* I3 z$ o! x2 B( w  jb print
, C8 d" [& v& \$ d% M: x- L7 N  add dl,70 p  Y2 i9 w0 o9 |
print:   
# @  {' t) |3 k- U( x' @! [  mov ah,2( E* q; p  }* p% S
  int 21h6 J# u/ [+ U% F- C5 E
  ret
. A9 E7 s/ L2 m! p: B; aprint_4_bits endp   9 x+ U- I: r) K0 Z$ O: J/ _% @
;------------------------------------------------------------------------------------------------
; A. J5 N0 }- r7 w' I% z) g6 @  MCSEG ends
4 h% S) z" y: b) r8 H  x; zEND
您需要登录后才可以回帖 登录 | 加入计匠网

本版积分规则

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

GMT+8, 2026-4-4 14:42 , Processed in 0.081593 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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