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

顯示string會出現亂碼

[复制链接]
发表于 2010-10-19 16:41:51 | 显示全部楼层 |阅读模式
各位前輩好,以下的程式為在 big_real_mode 讀取記憶體的值5 i8 R. p4 k6 r! p& B! ^
! p  E; f2 j& k) I4 o, r5 j6 S( Z
例如: C:\memory.exe(程式檔名) 01000100(Address)
! K' ^7 ?" o- D( j. c: t+ D: q5 ^4 G1 _5 O5 J
則會顯示01000100位置的值) G: P8 A! A4 D7 F# O0 L: _
- f8 Z0 n, l% R; Q- H; S
但是我另外還有要顯示出字串,但是顯示出來都是亂碼
8 R. p; ^6 u) e8 N' p  S6 F$ c( a% r7 X
麻煩前輩給我一些指導,謝謝  8 K  o, Y  a- ~3 U6 @" y
- V# M1 e4 `$ O- b1 \- H
6 J3 M0 o+ n7 Z7 `7 {
.model small
+ }; v  y5 ~% q/ ?+ b% d6 F.386p
. J* v" v+ d6 g0 T+ b6 H: u4 Q3 U;------------------------------------------------------------------------------------------------1 A* p; y5 d! Y' S/ G# K3 K
DSEG SEGMENT USE16'data'  
- M0 w9 X) p4 k1 c: E9 J2 A. ]
2 T) ~# N1 U" `9 }DESC STRUC) ~+ q8 K' j) d6 C  e3 O
  LimitL DW 0  / N% _: y3 n0 j
  BaseL DW 0  
3 z" ?4 K6 G$ L  BaseM DB 0  
" C( d( Z% p( a$ U- l  Attributes DB 0  
1 x( G1 z% `, M2 K  LimitH DB 0  1 v; A5 {" i% `( B+ I+ {
  BaseH DB 0  
" V7 n# n, V) A0 Z& ?* P7 a# ?7 GDESC ENDS
; A. ^6 n6 r! t
, f7 K! N. c! ~PDesc STRUC1 |3 d& o6 E' B! w+ y, S1 C
  Limit DW 0  1 |+ K- q7 Z/ w
  Base DD 0  
8 j) G' E% x, r: m& TPDesc ENDS
! C0 E4 T$ @6 s8 X5 A/ F& o1 m( ~5 C  [% y6 a8 t. T5 `0 H
GDT_def Label Fword  }. {# d! \7 g7 G. g  n4 c+ c
Null_Desc DESC < 0h, 0h, 00h, 00h, 000h, 0>: o3 e. P5 I. k( a5 a7 z( V. Q
Data_Desc DESC < 0FFFFh, 0h, 00h, 92h, 0CFh, 0>
: c) l$ u+ ~" f/ P% k0 k9 s6 P: TGDT_Addr PDesc <$-GDT_def-1, >  b6 k0 R, {' ]5 e4 T/ s
0 f4 R8 b( G7 j, i2 U
msg1 BYTE 'The Input Address is'
0 h3 g% F# B" ?8 ~# n4 umsg2 BYTE 'The Data is:','$'0 }2 u- w: d4 c# t# k- p5 C1 C

  Y% W9 q7 k3 Z' e* oDSEG ENDS( O: ^; \$ H: T; P+ R
' t4 c; o+ K) g& o1 K- F, e! f% E2 o8 O
5 g$ B) Q! V* E$ s% ~' I  @
;------------------------------------------------------------------------------------------------  7 c- R7 D' J5 w; F5 @
/ [* s0 ], @) O" Y
ASSUME CS:CSEG,DSSEG6 N% n# V# q; Z+ y' M+ q" v5 D
* z1 v4 @8 e! L) A. r0 O! e
CSEG SEGMENT USE16'code'2 s- x$ f/ r  f! F, J: x
  
" }& E2 P  g7 k- h  push ds* h# z4 @" e/ O
  push es, {0 C# q5 U6 N1 e$ M4 Q
  push fs' A, H7 f* y0 ?& s
  push gs# D) A) w; l9 L2 Q5 V- `
  " z/ p3 w) `( y
  call big_real_mode
$ @- S( y' h/ M- W; }
+ e0 l8 n2 k% l2 T  z6 y6 w   
( Y+ r  Q: t1 p- F' i4 g7 D& f  mov edx,OFFSET msg1;
3 x' B! t7 Y$ I  mov ah,09h;   / C4 a; a4 Z1 b3 u3 ?
  int 21h;
* {+ [7 y& d- X2 a0 n  mov edx,OFFSET msg2;
% s0 P2 n/ s& j  mov ah,09h;
4 H+ Y: N8 O# e  int 21h;
" s, n! `4 H' {   
% ?  ^* F1 g8 ?: U. x& c9 }0 |5 ?  call PSP   2 j) V# n  H3 n
    4 |5 k7 ^3 s" }  n
  call crlf   
$ ]/ h1 G$ \/ g1 [5 \    - ?# P" S% D$ x3 B# f
  mov esi,ebx
0 N5 t" {7 @: @  mov eax,fs:[esi]
1 h& p% D3 c6 y3 [% y0 t5 I0 A* h3 B9 @  out 80h,eax
  x7 D- H% d! N( ~0 O  mov ebx,eax
& j6 Z& l0 J  v( n5 b' C  call _8bits% z6 `$ v; v2 ~9 J8 g8 J
    5 t; t8 n# ~- [; w
  call real_mode
+ [% S9 i- f5 U   
& Q/ f8 W: |: s* ]: a6 U( a: Y  pop gs
! v, H9 ]) O% q! n" z, f  pop fs7 X; N0 o/ d9 s6 m& }) J7 N6 H+ B7 f
  pop es
9 u" B% u- G, y) O  pop ds& a: Z% g5 w* b0 e$ r& R' @
    % u. f. \- R2 s' F" ~6 L( P
  .exit
  j+ ^3 a$ c0 `) h, z;------------------------------------------------------------------------------------------------8 D; c3 m9 N8 R  E
big_real_mode proc near
$ m8 z6 O, ?* [. H9 f0 }7 _  in al, 92h( o2 M! z( u3 |* L- v$ ^% [
  or al, 002
) ]8 Z* `+ [! B  out 092h, al7 G5 [' t$ O( _& _* F7 {
  out 0edh, al
, f# [* w+ e3 H0 m  cli
+ c1 O1 q. ?( |9 u  mov eax,DSEG" q5 d7 P' n$ Q
  shl eax, 4
8 z& v  v) v) J: \( a1 G  xor ebx, ebx# ~1 n# [) d4 I: J# M
  mov ebx, offset GDT_def
1 D. b9 p0 b( q( J  add eax, ebx
% Q* d  d* R$ @2 H5 k  mov dword ptr GDT_Addr.Base, eax
7 P, O. Z2 H$ T: A9 k' R$ M. A/ l  lgdt fword ptr GDT_Addr
- @9 X2 G# n7 V( n- K6 }+ u  mov bx, 8  O- D4 Z. U+ _$ e4 y/ S9 e2 J
  mov eax, cr0. G8 v% y  N% [, H4 e6 q+ g
  or al, 12 j. C9 g$ W3 G  b
  mov cr0, eax
8 Y: y: Z2 T7 T  S8 \$ \8 Y. ~1 n  jmp PMod! k0 f" @+ h1 ~9 @
PMod:" N: G. z+ g/ k% w/ [9 B
  mov fs, bx9 C; Y- f$ Q! L! ~+ H9 m
  mov gs, bx
1 n: m; v8 q1 r  mov eax,cr0
1 Q: b9 p  A/ X9 l  and al, 0FEh, r, s: }  R% m
  mov cr0, eax  % R. [* i6 k) s/ I+ K/ T  v! ]5 E
  jmp RMod" E4 `6 ?8 g/ W! i" p
RMod:
; B% H9 M9 ~& J* _6 q  xor ax, ax$ Q4 z3 f; X) h1 o5 s8 d( r5 n6 M
  mov fs, ax
7 L9 l  k- `1 b! i  mov gs, ax5 E7 O$ X7 s6 M; I. }' B1 t
   
" C4 @( ]0 K- u5 _5 Z  sti/ E. K, V' D  g4 x
    ; W1 S, x$ _2 W( c% x
  ret
) r( ^: j# U  X) `big_real_mode ENDP& r" \+ f5 T  H2 P8 }% b$ ], X! v
;------------------------------------------------------------------------------------------------2 m+ z% P1 D/ [( P: W
real_mode proc near
3 r/ r  E/ b+ q; P  in al, 92h0 X* y8 `) ^! D- H8 Z% V
  and al, 02
. O6 N1 j7 U9 ]- t  out 92h, al   
9 S+ g( y/ ~+ i1 }0 t* a  ret
' q1 o& l6 e4 l8 Creal_mode ENDP
1 E8 _% h! C' j, V) i8 u; h;------------------------------------------------------------------------------------------------
% N$ P8 D2 ]; K$ W: G6 L( n% b9 nGet_Commandtail PROC near
3 L6 R1 Q6 Y0 b8 \1 p  push es  6 u% i/ v- x' d+ f4 ^  b
  pusha2 ]4 r. _. K( S% p5 ~" Q! J
  mov ah,62h  . _4 h6 o  U/ P" D9 F
  int 21h
. [3 t" l$ M1 f, o0 h4 g6 L6 D' D  mov es,bx- y4 y8 i* d# B1 o) Z; c
  popa  5 y$ f& u. {7 T4 B
  pop es, F0 B. n3 M. g" D
  ret1 l  B# c. P! j
Get_Commandtail ENDP
1 j. _1 J+ O8 [! v. v" e+ ]# g' \;------------------------------------------------------------------------------------------------
8 p  ^$ p0 O, X# s. gPSP proc near
- K- x% \3 J# J% S7 y( y  mov ah,62h( w( R' o9 c9 u+ }9 S3 w( N
  int 21h+ }1 _& R$ P$ b3 T  x1 p# k
  mov es,bx   & z$ q1 I7 b: {! C+ D( }% K! h2 N
  xor ebx,ebx
4 X" P/ x( T4 Z  b* D6 D7 T  mov si,82h: E7 F) `- @5 z/ k4 _$ u1 l4 r
  mov al,es:[si]
+ P* s  Z$ x* T" u  call Change3 j( p; Y% y$ j5 E. X
  mov cl,4
, T. |7 c& e  h2 G. B  shl ebx,cl! H; w; M  X6 J9 X- S
  add ebx,eax
5 t1 D9 C+ \; m/ q/ H  mov al,es:[si+1]
) |6 V! O7 o) x9 `4 K  call Change0 c; ]- ?" |: |2 j
  mov cl,4
- X+ F( h) M6 L  shl ebx,cl
( }5 |! b% S2 c% @  add ebx,eax5 L( F- l3 h4 r  q2 S
  mov al,es:[si+2]
- j( _6 l7 Q, v: |0 G  call Change
5 @" p9 z* s0 S0 G9 _  mov cl,4
% q' a: k6 N2 c* u6 J- e  shl ebx,cl
8 {4 D) B, o$ i( _  add ebx,eax; x8 M- Z" L- r- q
  mov al,es:[si+3]$ |! Q) |3 a  O9 e# z7 G
  call Change1 R& ~: r. s0 ~# S! f4 W0 i
  mov cl,4
0 V8 t" ~4 m( n  shl ebx,cl
1 q& a' R% X( i  add ebx,eax$ G  a0 s  y; g5 G3 M6 q
  mov al,es:[si+4]4 `- ^9 L: u7 e, W5 N
  call Change
4 x/ V' Q, y' q1 e  mov cl,4
+ \" Y- R8 l$ C/ |  shl ebx,cl. p+ I8 [! q  h' O4 z& D
  add ebx,eax
" ^& b6 s8 p: H' x  mov al,es:[si+5]5 k* ?9 C! L# z3 H
  call Change6 O0 n) k! ]) ~) A  n( ]  c
  mov cl,4
, t1 Y' I7 |6 L. ~( u  shl ebx,cl
5 v( b; \4 e: i; s! {$ m  add ebx,eax" F9 I4 w, F/ s0 V; q/ g' \; ]
  mov al,es:[si+6]
% v# F- L9 x3 o+ R  call Change
, N: a* b8 R. p2 k. w$ Z* P+ O  mov cl,4
2 Q( N( f" \2 H/ U" X  shl ebx,cl, @( F# ^) \: S6 f7 b8 n5 W4 X
  add ebx,eax
  U. i7 a0 C% |! ?! Q  mov al,es:[si+7]% K# d5 [  V1 M- U
  call Change5 Z& t$ Y7 k7 }) H" m' O8 s- x9 m
  mov cl,43 ~+ D1 Q1 A) h$ {" i" l' w. j
  shl ebx,cl
3 ?( S4 y" b# j3 A& x  add ebx,eax8 ?" l8 b2 f4 S  {5 ?$ x; y& I$ M
  ret
6 s% x: O  C. d4 t& tPSP endp
; u9 j9 f- O# F, C/ s7 g2 B3 J- V;------------------------------------------------------------------------------------------------
( f, @! Q$ y. z9 W+ h! G& c+ aChange proc near
8 L2 C( j% J7 Q! H! JA:   
. t" S6 r+ X7 Z4 t! p/ K* N  movzx eax,al
; N3 z3 m8 i$ L$ m  mov edx,eax
7 X( f2 x. A5 x6 U1 |# c1 V, Q  cmp eax,'0'   6 S" W6 g* O+ f% g$ }8 f
  jb A; ^/ h6 C+ G1 H! b+ W% n: k
  cmp eax,'9'   + b( l- M! V6 i- T- e2 S
  ja B
' a" H1 Y. q5 k" o9 I, a2 L  sub eax,'0'
+ d  g4 J$ ~6 B8 V& {( a  jmp short E1 Q* A1 b& x' u6 ~3 V
B:
+ W+ i* p& o5 {  and eax,0dfh   
/ G2 ~% ?  i8 Y/ S/ M  mov edx,eax
$ D2 \* m* V; r. g7 P  sub eax,37h   . {4 V3 [, s" T1 s# n! w$ e
  cmp eax,0ah" v. l, i! o* F8 e$ E$ ~
  jb A   
- V0 W6 J7 Z# v9 c# }" H( p  cmp eax,0fh/ a2 Y3 L( C5 t- V" d
  ja A   0 e( Q  ^" X2 H
E:
0 X$ F! q2 e( C; T, U: ?  push eax   ) E: }) ?$ b9 f1 W" p. W4 e+ P
  call PRT   
3 `5 L4 u+ g: L+ H4 @  pop eax
( r8 @& k3 M6 N/ s4 p( ], xCExit:
6 [0 @( Z; ^  E% v( T  ret% e* A/ V1 t0 `, p" u8 I; X
Change endp
- E/ [$ Z$ n  i;------------------------------------------------------------------------------------------------
' s+ u2 c; z( u# Q/ V* IPRT proc near! m! u( K$ m- S9 A* _# N& I
  mov ah,02h, @; r- x0 _2 b& t! Z
  int 21h9 [$ P- u/ [" m: f
  ret0 \& v+ j7 T# l' V
PRT endp
# p7 L; g0 D, j2 X5 w+ b1 f;------------------------------------------------------------------------------------------------6 P" L; R! R3 W% d5 \: ~
crlf proc near
2 o( v( M& D+ e# e% P* S  mov ah,02h
' z4 ?0 r9 T' ?; V* J  mov dl,0dh
! k6 S3 L7 S( D9 U' H; _  int 21h
% z, B( h" D: {+ h% F  mov ah,02h" z% w) ]8 m) F: m  h% |
  mov dl,0ah4 A; M( L- F! ?- x
  int 21h
  F( f) M3 q( F& \& G. M0 a% e  ret
! R! u4 t6 o, n& ~4 K  [  W- M* ~crlf endp
2 H2 q( W' z. w;------------------------------------------------------------------------------------------------  T) _/ z/ {/ {, ~; Z+ g
_32bits proc near" c3 P( E" R# \1 e" i( }& z
  pushad
9 \1 F) f" l: i& _4 E7 l9 V, U* _  mov cl,4
& {& p4 P8 @3 a, _  y) r  rol ebx,cl
/ u: |5 E  _+ v. i3 |  call print_4_bits
/ u/ z/ R5 D+ x' s/ [6 j+ R0 J  rol ebx,cl
" r& [, B3 v9 ^/ \; d  call print_4_bits
5 C! D% o% O$ ~: C3 d  rol ebx,cl) Y7 l( M4 A5 c9 q- |% ]
  call print_4_bits: E' \* _4 G" x2 S7 C- H5 ?- e7 F- F
  rol ebx,cl
  A* ~! ~8 M* `: ~9 u. s0 l2 I$ X! O$ K  call print_4_bits
4 I4 o- R3 k( S3 \" O: {  rol ebx,cl, d, e" S: W% b+ N
  call print_4_bits
) k, C: x) l4 h2 b, m8 r: g  rol ebx,cl
! K. w) Y. j& }  G: e5 g/ l( R4 G* A  call print_4_bits2 _" D0 \0 S2 j% ?% W
  rol ebx,cl1 t: _1 {% B$ N, O4 @% y
  call print_4_bits
4 }8 A! L% w# b; O9 G6 ]" K4 T  rol ebx,cl
+ U+ l" F, T# ]" I  call print_4_bits6 m5 w. k5 {, d& W9 d
  rol ebx,cl0 R% X+ E& \2 O6 s
  popad0 |9 n% q" h$ m: C2 T* s0 }: a
  ret
5 k5 t% Q2 p. q: R_32bits endp
5 i3 P) z' [; M3 y;------------------------------------------------------------------------------------------------+ O$ ?/ ^& T- U. G
_16bits proc near
+ _" p. D6 J1 L9 F4 e; p# E  pusha   3 E- n1 W$ M# D$ e
  rol bx,cl
3 F( u# T& E6 y- T. ^( ^5 g& R  call print_4_bits4 Q. [- i2 b, O: S
  rol bx,cl! T: h5 n# e6 e# ~
  call print_4_bits( p* H" L/ Z7 p$ o
  rol bx,cl1 j( i6 T1 M6 B& S4 e
  call print_4_bits
% T# C0 o0 x" \. ~& J. c  rol bx,cl
! r; P) E! @$ g! I5 C& B; y  call print_4_bits1 U0 {% [; u/ P2 L! m: K' {
  popa) d$ J8 S; N$ _1 L+ a
  ret
8 D- T0 b) T, F6 J* z3 k4 X- h7 b_16bits endp
* N0 M( ~0 ^$ u8 _5 f- U. S7 u8 d;------------------------------------------------------------------------------------------------
6 o" j! \  m$ g% K_8bits proc near; V+ i/ X/ ]$ e. B1 P
  pusha   ! c2 N& A9 ^+ q8 j9 C! D/ O" P5 P# a
  rol bx,cl
% y% G2 @/ a( k9 h& H& i  call print_4_bits
3 A: k$ W$ T  \  rol bx,cl" W- V2 ~; t% r( ]7 [/ l$ H' J
  call print_4_bits! m& B* u4 o" n/ p9 x
  popa3 m+ k: m! ~0 j7 ~; U
  ret
$ }! D$ Z% e1 k) g3 `2 x_8bits endp2 c; |! T5 ^* Q' t, q
;------------------------------------------------------------------------------------------------$ M* F7 `1 k% U2 z
print_4_bits proc near& A- \4 p" ^; }7 ~; U8 Y( E
  mov dx,bx! [1 {2 f. w, ?0 F/ o
  and dl,0fh
" D& u* _/ f; p7 O7 o+ F, V  add dl,30h! E2 d4 @9 I7 c& G& X% e
  cmp dl,3ah
3 }, a2 }. _& r5 r: F5 }& C  jb print$ r' j$ i) K3 L# M5 w7 U8 {
  add dl,7$ i. \8 }& e( b. R  C
print:   
0 I- K' u7 n# p! K, ]. T  mov ah,2
8 ^/ Z8 [. r  b! D! N# B  int 21h
1 q6 j  z; [% A* ~( I3 X! Y( {  ret3 n2 V5 Z' c# W
print_4_bits endp   
: d& U) D1 {  Q! @6 b5 |, y3 i2 V. Z;------------------------------------------------------------------------------------------------- [- a+ t9 f$ o5 }, z+ M! y% J* y
CSEG ends1 M5 N0 d4 d# A+ g" Y. ^7 @( R
END
您需要登录后才可以回帖 登录 | 加入计匠网

本版积分规则

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

GMT+8, 2026-3-15 06:46 , Processed in 0.293493 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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