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

顯示string會出現亂碼

[复制链接]
发表于 2010-10-19 16:41:51 | 显示全部楼层 |阅读模式
各位前輩好,以下的程式為在 big_real_mode 讀取記憶體的值; k$ h) c- e- I( {+ E8 N
+ x; {, E4 ]7 m- l* z/ V/ G
例如: C:\memory.exe(程式檔名) 01000100(Address)
( L) A4 z+ }2 e9 Q$ B& B9 a
# P# ?3 F' e2 ?, C) \則會顯示01000100位置的值4 D0 q! ?) b/ k8 j! h7 s
3 _; N& o% z2 h4 U
但是我另外還有要顯示出字串,但是顯示出來都是亂碼( s- u+ B3 C5 M: Z9 S: D% u/ o
7 I# r7 T$ B) z7 L+ [" B0 o
麻煩前輩給我一些指導,謝謝  
' p5 [& ^9 q9 k3 y  L: f) Z: M1 ?0 L- \" s1 {9 I" l8 T

7 h8 }6 _: K% E7 i7 H% ~.model small0 ^9 Q  A' j. @( W/ W0 q
.386p
' @8 B1 V6 i- M. }! w;------------------------------------------------------------------------------------------------$ n& O' A# z" j$ r! I5 J
DSEG SEGMENT USE16'data'  
. J' F+ Z0 j" Q3 I5 p
+ Z  ^; z8 B" z9 cDESC STRUC
7 M' I& {. y% @" {& |) D* f( P- S; d6 }  LimitL DW 0  & H' z+ w% P, l4 ^4 _* S6 r! {
  BaseL DW 0  
3 C# x+ V' c% y6 \, }  BaseM DB 0  8 Q" g) K4 `" j* |5 A0 c# m
  Attributes DB 0  
  X7 i; L) w  B! i( v& ~3 U  LimitH DB 0  , W& J$ ^6 C3 y
  BaseH DB 0  
5 {! l( X; W2 N+ a3 z3 V& dDESC ENDS5 f0 P  O' P$ ^6 x# d
6 ^4 D8 |7 X4 F* n( o  z# a( o
PDesc STRUC7 Q$ N+ H& r7 F% q7 J
  Limit DW 0  
3 G' V# m# G) ~0 j) U  Base DD 0  
( u* w' V8 [4 iPDesc ENDS
3 L4 q$ u, i6 \' Q* F+ X8 |8 g* g
GDT_def Label Fword
+ B/ \" s( f% q# U( ~Null_Desc DESC < 0h, 0h, 00h, 00h, 000h, 0>
* r3 O" |% w9 p4 DData_Desc DESC < 0FFFFh, 0h, 00h, 92h, 0CFh, 0>. M/ v% c; ~, G7 i4 G4 K2 }
GDT_Addr PDesc <$-GDT_def-1, >& \" e) T) H. I3 u
4 G0 V$ v3 d' }1 g: `
msg1 BYTE 'The Input Address is'# \9 l! E+ o. j/ A8 L
msg2 BYTE 'The Data is:','$'7 R6 O8 p  O" d. I$ n; r( L
# R9 W, Y! _9 R
DSEG ENDS$ N: f! J+ X0 I* }7 N
( _. C* K0 x: d! M2 r
1 y/ _9 G) y# f. M, S/ _
;------------------------------------------------------------------------------------------------  
, N0 e# D' W0 T2 C. g3 j' L# R' q  N
ASSUME CS:CSEG,DSSEG
+ m* S5 S! V6 ^$ g0 _% {9 j9 [/ t0 J- T: l
CSEG SEGMENT USE16'code'
5 E2 }1 M  r7 f7 V' d  
( f# V' f6 T0 X  push ds- \- r1 z; M; Y: c6 {# q, J( ?
  push es& ^3 P% Q5 v- d; g5 U+ d
  push fs
* W: X5 ^! \% j' b, E4 }4 `  push gs/ k2 t! }( m! K1 H" S
  ' N, U+ A# K; ]* p
  call big_real_mode
# ^! w7 o8 `7 V! O4 L' e
8 a9 w4 ?. L8 g5 b6 c    0 S1 q! w) q- x
  mov edx,OFFSET msg1;' B, C& F; f& E# K$ \# m5 \
  mov ah,09h;   
3 m/ r( I# d+ g8 ^5 V  int 21h;
2 h; M$ H2 x8 _9 `2 ?) n4 \- `, K  mov edx,OFFSET msg2;
/ ^/ t$ V) i0 F7 S1 f  mov ah,09h;
/ S' |0 F" D9 z6 M& E( |& `  int 21h;4 a. }6 H8 `# A  ~  O2 O, S, {: d
   
% [9 Y! o% `1 ?8 D+ E  call PSP   - B+ \6 h" |- `
   
: O! O. w: p( [- ^& p" [  call crlf   
4 A& Z! a6 o/ m/ h    / L+ H; t+ p3 O+ _
  mov esi,ebx( ^% ~# e. |( {& J- f* s. y
  mov eax,fs:[esi]  d% |" X. [7 w8 ^. S+ w
  out 80h,eax
" q4 e! h* n1 ^) ~& [  mov ebx,eax
$ {9 U; U/ i* c+ P4 v: n: X, o  call _8bits+ b) _7 h) t5 O! O' x4 K
    0 _1 ?  g0 e/ r& r  w
  call real_mode
: n; \0 r& k$ D6 x$ d) Y0 ]   
7 E6 ^5 n3 v5 u6 ^* l5 U' h9 v' P  pop gs
& _9 w6 v' b& a9 V" g5 g* ?  pop fs9 {7 M, d& V4 ~$ F+ Z
  pop es
$ y9 `6 v* v. ^  pop ds3 ^6 [, z# k3 ?. }
    0 e% J6 G4 _- B
  .exit2 G! k3 G6 U. K) h& U
;------------------------------------------------------------------------------------------------
4 f2 o9 `& B( n, J" L  Wbig_real_mode proc near9 B- V: _8 p! d6 ~
  in al, 92h
9 G5 `1 N3 }' F  or al, 002: V8 L! I& f5 Q& c- w
  out 092h, al. B% N( g% B* D
  out 0edh, al# V* K  _: y, U+ I
  cli
1 y; E6 @) k& E: i8 g# N  mov eax,DSEG
! G) B# h3 k5 y$ }+ q8 w, J  shl eax, 41 E- Z* }8 p; ?/ h
  xor ebx, ebx0 I2 U+ c$ ], a7 j# n3 u
  mov ebx, offset GDT_def
- f  B, b7 T0 N; I5 v0 [0 C: `% w  add eax, ebx. s" H5 b2 I5 c
  mov dword ptr GDT_Addr.Base, eax: N; T% _! W+ F' Y, M
  lgdt fword ptr GDT_Addr* g9 \4 X$ l* A1 w* A
  mov bx, 8
- z7 W4 \& a/ B1 {% e9 W- T) k6 P  mov eax, cr0
+ |8 K0 R  b6 `& R" J) b, b  or al, 1
6 V$ \2 H  f3 Y6 E* j  mov cr0, eax0 w; f- [# N- i
  jmp PMod
+ r8 Q. G0 b1 [+ SPMod:  l! Y4 H% Q' N1 w
  mov fs, bx
" O. Q6 ^2 W3 s3 Q5 ^  mov gs, bx
0 T% U/ \; ^9 E0 p; m" P+ a  mov eax,cr0' m( P& |. B4 _5 w# F" N4 T, H
  and al, 0FEh
2 k' G$ L) ]: D- \$ z5 ]  mov cr0, eax  
3 y) |* k& s3 y6 R& N! O. c  jmp RMod( z/ |/ E# w7 O9 r( Y
RMod:
: h* h2 P: r/ e  xor ax, ax
, j( ^, _: c+ A5 u( ^& Z" S; u5 e7 Y  mov fs, ax
4 `2 z  ^1 s$ q( p! \3 }6 q  mov gs, ax. L3 `2 {6 e; F: Q
   
, }3 I; h$ F% T2 R; q  sti
" ~, d) K( r; E9 @9 `% j3 F    2 y5 e3 Y! T8 G
  ret
+ |2 i# G: o8 Z; [; a3 Abig_real_mode ENDP
  t5 a% Q* \! h;------------------------------------------------------------------------------------------------9 F4 V8 J* V& ^- n$ F4 j& J
real_mode proc near
5 _) K4 K* V, B% ^4 Z1 B/ Z  in al, 92h: I+ R$ u% \) c3 m9 P3 x0 y, T
  and al, 02
) W2 H1 W2 f  M3 K3 d  out 92h, al   8 ~4 W7 p2 u, S2 T3 Y
  ret! z$ {0 S$ t( ]; a! N+ S
real_mode ENDP/ H. w  F! |9 y+ }/ p
;------------------------------------------------------------------------------------------------
; ]' w2 n9 T4 k- o9 x& AGet_Commandtail PROC near
5 _# [) s2 h4 c* H  push es  1 a$ R; }0 x1 N# P5 L- }) w& H  @
  pusha
0 F( c$ ~0 _+ A3 m  mov ah,62h  
3 w9 G, U! d: u- v  int 21h
" _% V3 x# [. ~  D  mov es,bx
/ E7 x3 G1 j! O$ Y# U5 C& Y& D  popa  
" O6 }) L) _" V' E8 W- y  pop es7 o; _6 V7 J, S6 N  W
  ret
' I1 P7 i6 i3 y: DGet_Commandtail ENDP  x! w4 Q" D5 j
;------------------------------------------------------------------------------------------------
; [) |% J5 J9 X( fPSP proc near# v5 g" s, e) c/ F  _9 d9 b2 X
  mov ah,62h
; ~# E% e0 J3 N+ t/ |$ T  int 21h( S  h3 W) d' n& @
  mov es,bx   
7 I1 ]5 [/ U% `! e  xor ebx,ebx3 S# _8 {$ c: {5 @% S! L0 x
  mov si,82h: i) G/ \  t% r0 ~1 E! ^
  mov al,es:[si]
- D9 j* C$ s5 g, M; T7 e  call Change
: l/ {1 C8 z0 q" h& d  mov cl,4( X' U( O6 Z; W4 a" x
  shl ebx,cl! }' ~6 i9 N, S. f' {7 h8 w
  add ebx,eax) U1 P, n9 k2 Q9 H/ [
  mov al,es:[si+1]
8 r% ?! |, V! B  call Change& m' `/ X( M6 l4 ?8 u. Y
  mov cl,4
& Z6 L8 L9 ^/ i( v+ W# N  shl ebx,cl
& z7 P' \" ?0 U* s) T  y  add ebx,eax! i  C3 _7 ]' V4 \' i
  mov al,es:[si+2]: n" Q! _* I" g- c- P! p  K4 I0 m
  call Change
0 G* g# {, w4 t  mov cl,47 b# x) {. g0 S5 b# v6 a2 c
  shl ebx,cl$ m- r; E! P, s! K8 x
  add ebx,eax- j5 \( ~+ {' ^$ g7 Q
  mov al,es:[si+3]
. `  d+ x* t/ N7 ~/ ]5 A  call Change0 |, C3 @! j3 n1 M
  mov cl,4/ P! B; ^4 q9 g0 U  D) p
  shl ebx,cl
5 y9 h; h& H0 `2 i7 y+ J  add ebx,eax) X6 z* j% F" \  ]3 ]& F: x/ C
  mov al,es:[si+4]! ?; N- w) y' w( _
  call Change
3 K. w6 P) X  R1 M* m4 h* P  mov cl,4
4 P% z: h9 K% |+ k  shl ebx,cl
' f* x4 `8 ~! p4 z+ y3 i  add ebx,eax( l% x( g3 C: f
  mov al,es:[si+5]( {! s* O- ~: M' ]9 G
  call Change
# l3 j6 M. F6 `3 n0 V& y5 S  mov cl,4; {9 d- {2 L" L6 j
  shl ebx,cl' m) W$ S' u- T9 T
  add ebx,eax
( L/ y" R" I$ l& {* s0 n6 ^0 |  mov al,es:[si+6]. O4 s" k: _! U0 l4 e, @" c
  call Change# j7 ?$ H1 J1 m( s% _
  mov cl,4
2 O; H% ~/ f- Y  shl ebx,cl
3 y% j7 i+ d" s, \! R9 [2 e  add ebx,eax0 |( Q" }, P6 l& }
  mov al,es:[si+7]. m- y# P# E6 y5 V* ^4 {
  call Change
# n5 U2 c# [6 Q, T! z, I  mov cl,4
+ b0 T4 |2 x; ^" {  shl ebx,cl+ }( a% k+ c  u! b) b* |$ B3 q3 \  G* D
  add ebx,eax
" q% s& i$ g$ y7 P% S) x. O  ret
, B; @" v* i& X6 e$ {; j& {) |PSP endp
7 h" z* S! z, g- O2 y; h: \3 Y;------------------------------------------------------------------------------------------------
' S$ y% Q1 q7 |  V: h5 MChange proc near: R, e5 M9 W" B, D) V( J
A:   
$ O6 J: X8 b6 u0 \( S0 I: J  movzx eax,al
: E  h  Z( Z6 C1 z( \8 _  mov edx,eax0 W, J' x$ t0 H$ E6 W
  cmp eax,'0'   0 D4 a5 n& _  a# R
  jb A( H# V9 l" i- g- F
  cmp eax,'9'   
( A& G4 ?* ]7 B1 I$ c  ja B
' M8 G9 _/ N* u. u6 E- c$ J3 Z5 @  sub eax,'0'
# a1 @9 k( F1 |! C  jmp short E+ _% O1 j1 \0 P* {% H: ~
B:
5 M* v; ^& y$ F2 A; s& u  and eax,0dfh   ( X" f0 m! ^9 S% v5 e% W. d
  mov edx,eax
# t# M1 R, Z! z) h  sub eax,37h   
- t: U5 z& W* E* x2 E  cmp eax,0ah# ~1 g2 g" c9 v2 w, ^9 p7 }6 q
  jb A   
: c3 _: O' ?3 h- `- U  cmp eax,0fh
3 z+ @2 E4 H: u* g  ja A   
9 P. f$ V7 q- kE:
( K2 T+ L1 u% a0 I* O8 d2 v  push eax   
7 J# ~7 U& t0 n: W. `( g  call PRT   1 `8 {  E2 c: M# u0 Z$ A$ f
  pop eax0 P9 V  @: w, h1 i0 m
CExit:
6 u! D* H+ `1 G8 B& [  ret, k1 t1 H! d2 p0 b5 [8 @6 B+ [
Change endp5 n9 S' {7 C  V, L2 a( i( b
;------------------------------------------------------------------------------------------------
$ ]( l7 w" w6 B7 P; T! ?& p, VPRT proc near, R1 s7 E( H& Z' `2 p; _& W4 Y
  mov ah,02h
: S+ u1 h, U  N  U. A. E+ ~  int 21h1 \& F: M  r4 E4 h4 E$ w- D
  ret
* V/ W/ k, c. H! I( q/ q6 BPRT endp- V; f5 Q% T0 u$ z
;------------------------------------------------------------------------------------------------
. Y3 k( c5 A2 Q7 g6 i) Acrlf proc near
" O: u  _$ f; P6 G: B  mov ah,02h' w5 D% \0 V3 u! ~- O
  mov dl,0dh1 o. `9 \' Q( ^% A
  int 21h
  e8 ^$ q; \+ q$ J" M: p  mov ah,02h5 l! V0 B% Q' m4 f
  mov dl,0ah1 N8 ~" C; v9 R( L1 x
  int 21h
6 e. o8 J7 s% E% x1 L& h: C  ret
  |3 G! M% F8 h6 @  P/ g, @1 ccrlf endp* M4 ^, t: h' Y4 c6 l7 R7 n
;------------------------------------------------------------------------------------------------4 }2 N4 @2 k; `- v# l4 p  n
_32bits proc near
  P5 j/ N$ X8 z- R: G' i  pushad# y: |! ?4 T* z! e; S
  mov cl,4# x; }% W3 [1 Q. Y
  rol ebx,cl' X# a2 [7 m: p% `
  call print_4_bits
* C& n- W# x! c! ]9 i  rol ebx,cl
* \- q8 |, f8 ^8 F& b" I5 s  call print_4_bits: `2 Y5 Z; [3 G6 t9 _
  rol ebx,cl
) \* V* o$ m% m6 c" C& H  call print_4_bits7 B) H% c9 B9 [* P$ @
  rol ebx,cl9 j5 {" ^( D; j1 Y( t) ^6 g
  call print_4_bits* x/ V+ b2 l, z+ |8 f
  rol ebx,cl
  i7 y( a6 ^; Q$ O( R, F  call print_4_bits
0 N5 n+ D+ y7 Y4 V* n' P  rol ebx,cl' ?- J' v! S8 F9 W- I# N" _
  call print_4_bits
# u  l; A" v* ]/ B0 n  rol ebx,cl
, @2 q$ `& f" F: R0 D  call print_4_bits, {5 _5 f' T4 e6 C  o" ~8 z
  rol ebx,cl' w: z; y! t" o5 }
  call print_4_bits2 M' C" }2 j# U  `- k& W$ ]% o
  rol ebx,cl7 G% G/ a) W9 T: E* F
  popad. ~/ ]! K% ?% U6 K# U
  ret) s+ E" L6 t: o4 I8 A/ ~
_32bits endp
1 \2 I: w0 t7 j& H+ T; t8 ^;------------------------------------------------------------------------------------------------4 T* L! \4 T9 c- R
_16bits proc near6 x7 x) J$ _3 e
  pusha   . x* j) r& Y# D
  rol bx,cl
& n2 Y( r/ H. j, h8 s1 Z  call print_4_bits) \6 q6 \8 \# m+ ^
  rol bx,cl) S% T# ^# T4 O. H
  call print_4_bits5 S! S- o, ~& @% N
  rol bx,cl7 k0 k( K- ]; ]3 @2 U( n  j
  call print_4_bits* U% A+ n  C1 P) v
  rol bx,cl
, d+ K8 h* n2 z7 N" t  call print_4_bits
+ t  d! S8 X9 p7 M4 F  popa! a2 e; ?0 T9 w6 }7 j! _
  ret  [, s& c/ d2 D
_16bits endp
0 p0 L$ l* P8 S* _* d% d6 n;------------------------------------------------------------------------------------------------
. ]  E( B% l+ z& o( T8 A_8bits proc near
, w0 z: A) Y: v  pusha   + W- X0 v+ v2 U/ q1 \7 Z
  rol bx,cl
. h( t  D. d9 ^) R  call print_4_bits; q5 V* m, g3 c. F1 U
  rol bx,cl
7 d, Q1 B6 o% v* N# B  call print_4_bits
6 c! }6 s8 }6 s6 T- I0 y6 _  popa( f1 ~( D8 @2 C2 Q2 i: J1 M
  ret) f$ k" \( d, h0 e* h7 T
_8bits endp
+ C/ t, X$ L& F9 q9 [# H( {. R$ [;------------------------------------------------------------------------------------------------4 n5 S9 ~7 h+ {' W* w$ p
print_4_bits proc near: G, ~4 w$ e& x
  mov dx,bx' `/ I. N; ~7 h( ?+ [0 Q
  and dl,0fh/ W; p; t7 D& D+ F$ t& U
  add dl,30h
/ m) W3 ]9 T( L( i) [5 p( p  d  cmp dl,3ah5 i/ s0 ?( T& X$ j- S- i. J6 V0 U
  jb print
0 `: S  E: {8 F4 }* U9 {* p  add dl,7& e+ q" D% B- _2 e: ?
print:   
- u* d$ A: p9 R: p+ U; r  mov ah,2, h, `9 a6 j6 H. k
  int 21h
7 @/ R9 g$ x# ~8 ]" C  P  ret  k" Q6 P9 g& u9 O4 i
print_4_bits endp   ; J& b8 o& k( I
;------------------------------------------------------------------------------------------------
9 @, Q" h( L8 b4 wCSEG ends0 h% j7 q8 }+ W! |7 `7 q, ~
END
您需要登录后才可以回帖 登录 | 加入计匠网

本版积分规则

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

GMT+8, 2026-4-25 03:29 , Processed in 0.097884 second(s), 16 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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