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

顯示string會出現亂碼

[复制链接]
发表于 2010-10-19 16:41:51 | 显示全部楼层 |阅读模式
各位前輩好,以下的程式為在 big_real_mode 讀取記憶體的值
0 p5 S2 h3 z1 D; W) g# o" D# L: m' c3 R2 r. |  E
例如: C:\memory.exe(程式檔名) 01000100(Address)
$ p- }! O/ `# d0 b3 [) w2 V7 d% j- Z, z" b& P
則會顯示01000100位置的值
) N8 I; D, D' ~/ P6 _6 f) s0 X  R" O3 I8 i7 |
但是我另外還有要顯示出字串,但是顯示出來都是亂碼
3 v7 x) C( ?! @& n$ [- M( G" t$ l: ^& C1 F/ T
麻煩前輩給我一些指導,謝謝  
0 t- G4 e/ p( U& ~3 i9 V3 J+ ~
( t" z- m' {, S& @
7 i2 U9 i- O4 {& W' H6 l2 H.model small
! f  x2 h  P& V0 p. ^5 N9 u, i.386p0 ^2 t5 v, t5 F
;------------------------------------------------------------------------------------------------' z3 K2 B+ |- l7 d3 e
DSEG SEGMENT USE16'data'  
+ B7 R2 k, X2 p2 Z, d5 h9 ~2 b- K1 `1 A6 J% t
DESC STRUC! V5 O9 t4 e& P& l* h* Y- @4 W
  LimitL DW 0  
) u3 O$ B- e3 {2 Y  BaseL DW 0  / j: B1 F& N$ b' H7 }/ T( U
  BaseM DB 0  
# [0 x+ r4 B  r+ b  Attributes DB 0  
  V0 O' g- s7 I9 h8 f  LimitH DB 0  
' N# F; h# t) y6 p( r7 E  q  BaseH DB 0  
1 w: z0 z8 F4 ]: P! H" |DESC ENDS
( o+ j% ]* u, r9 t& Q: `& Q
# Q1 `  v, \; B& i' ?! Z. h9 gPDesc STRUC
/ T* ]7 T: P& O' K+ i  Limit DW 0  
$ l9 n1 c# b- }& q0 c/ ]  Base DD 0  
9 }( ~4 @* D7 q8 K3 IPDesc ENDS1 ]  Q8 v4 i' r% C) ]: [
4 ?# Y# w9 ]5 U
GDT_def Label Fword" Q# `' W2 ~8 `( R
Null_Desc DESC < 0h, 0h, 00h, 00h, 000h, 0>( S& M7 Q" j$ l: }- T
Data_Desc DESC < 0FFFFh, 0h, 00h, 92h, 0CFh, 0>
2 ]' W9 h7 q# g. B1 dGDT_Addr PDesc <$-GDT_def-1, >
: E5 _1 ?# e3 R9 o2 m+ ^; O4 }# s) O; W; Z
msg1 BYTE 'The Input Address is'. i& v  ]4 j2 o1 M# q
msg2 BYTE 'The Data is:','$'
. ]9 f8 [8 ?8 u
3 w, d* M5 f0 K  P5 ]. G" vDSEG ENDS
, e( W: L6 a" P3 U$ ]0 p% Z, L- Q3 u' h
. _) Q- b: d0 g
;------------------------------------------------------------------------------------------------  ) l8 g  t/ D$ E

) T' Y+ W8 Y0 K+ X! ^2 ]/ O, jASSUME CS:CSEG,DSSEG
' \: P: S% L' m: G7 e5 r
6 |9 e  I* K( G$ lCSEG SEGMENT USE16'code'' m# A; d7 }- ?, K1 z5 M
  
/ E8 B; O1 k5 ]; ?( |$ |. ]5 ?  push ds' U  n: v1 u6 L2 W6 `
  push es! \! D8 D+ d' [# E
  push fs
# c, ^5 y6 P* @! Q3 @  }  push gs. v% m, K2 U4 T2 T6 F0 J/ D" E
  
0 ^- A+ c% j+ a0 x; Z/ Y  call big_real_mode$ v; Q- {; h/ @. Y  R8 Q

$ Y9 R8 R+ l/ |, j: m      I$ Y2 @/ O2 t2 }3 @
  mov edx,OFFSET msg1;" M; C1 K/ |6 `6 P
  mov ah,09h;   " J' Z% R$ E* p8 N& k
  int 21h;
0 q) M+ o0 z# _9 i8 n# `0 u! m  mov edx,OFFSET msg2;
; h" T& R* R- [9 |  mov ah,09h;
; Q/ t- j: h: X) N' B4 {" O7 A% I  d  int 21h;
' t/ n8 C1 o) |% w" ]   
# k3 a/ S* E) V0 f7 m  call PSP   2 ]4 p/ z6 p' f) |! Y: G: u- |) W5 L
   
, o5 V4 a: I& I- i+ T' y5 v  call crlf   5 o3 H1 e( s& v( L) s7 I& P- u
   
- f0 w0 l, z7 P; K  mov esi,ebx
$ l0 {! ]6 F' D8 h  mov eax,fs:[esi]
! u$ ]4 Q$ c, V1 c+ T$ O  out 80h,eax/ P6 x! G  T" A2 Q- E, s
  mov ebx,eax
0 \' e" N- y! q9 D) @  call _8bits
" B0 U6 o$ l. p; j5 y8 n    : l3 w# c6 N0 F6 l  T: }  {& ~
  call real_mode3 b+ X) e. b1 Z# {$ ?
   
: x7 ~# t/ q' s$ T0 V9 u  pop gs
- O+ X' g1 T+ F' {  pop fs& h6 W1 V3 N0 Z, O
  pop es
$ j- w4 n4 ]3 P$ c8 ~1 }  pop ds7 q: O# G. b% Z; O# @. q" @4 X
   
- {* K9 D# Z5 X( @  .exit
2 ^6 o2 b4 z0 ?2 @8 P8 S% J;------------------------------------------------------------------------------------------------7 K, n8 s/ }5 x) ?/ \. E* u; W
big_real_mode proc near! T! h/ A% j$ I& k! L# Y
  in al, 92h
1 c* E* t4 V3 U8 n; A  or al, 0027 |( @( i; s( m" r6 h& D9 G
  out 092h, al
* u* H: n) h6 t3 \7 g2 X  out 0edh, al$ B2 b( }. m8 Z5 C1 N
  cli8 [9 [, U6 l7 q$ P! w
  mov eax,DSEG
4 ^+ K) A( _( D4 W, `% {  shl eax, 4# u0 Y  g9 i9 ?6 _# m
  xor ebx, ebx
7 M; d9 V7 F. o& K. v  mov ebx, offset GDT_def
0 g9 J' ~" W- G6 L. ^  add eax, ebx3 Q  W9 M/ [) X  s
  mov dword ptr GDT_Addr.Base, eax
. ?  x: s$ H) G. g/ J; |  lgdt fword ptr GDT_Addr
; ?( |- H! S7 ]% K) `7 P  mov bx, 88 b  X2 i* u9 f" }
  mov eax, cr0- ]# ]+ [4 ]: Z5 m$ [- j8 {9 p' v8 ]
  or al, 1  r$ q0 x, K: R" B/ Q
  mov cr0, eax4 j9 H+ k, N, q9 l) g7 r
  jmp PMod" D$ u5 j8 P+ A
PMod:
3 p: d3 [  w. C1 Y  mov fs, bx6 S* _0 Z0 v2 S( `+ C
  mov gs, bx
+ u' z1 j, N. Y  mov eax,cr0
. E! o( M8 ]- |9 ]6 N! W2 v  and al, 0FEh% C, }' I' `' K
  mov cr0, eax  , y; a' j$ W' C  a  S- u. b' U
  jmp RMod% C/ Q5 ]* t" o" f* V2 y
RMod:
& R7 |- U6 Z# G9 p) }" s# m  xor ax, ax! P8 z$ O- x5 Y0 R6 D
  mov fs, ax
4 {1 j. d! |: Z# G7 Q2 X  R  mov gs, ax! n" D7 @: i2 e4 B5 v( d6 z
   
( P, o1 u  s9 o6 ?( H  sti
% h5 v, X) h; Y    % d+ i/ d- _$ _
  ret
% G& X9 @& X% i( Y* _' C* ubig_real_mode ENDP
1 m, Q& i' x) {0 I* E7 g+ C, x6 t0 Z: t;------------------------------------------------------------------------------------------------/ I# t9 `6 w2 `5 p" l
real_mode proc near. ?" c9 b: A) L0 u
  in al, 92h
4 {3 Y* @6 P) ^$ `4 N  and al, 02
. t0 t$ M: K! d) s# E: g  out 92h, al   
  g8 C7 ?. a/ M. J! y# a9 n  ret$ R4 _: L& a) ^3 S/ h4 J
real_mode ENDP
& Y& Q# ?+ \" e( o- W! V;------------------------------------------------------------------------------------------------6 w" m- r; l( q( ~% J- J
Get_Commandtail PROC near; Z9 o6 ?/ C+ ^5 C
  push es  
3 ~% S2 d' b$ ^! B  pusha
- B8 z& n1 R; `' @' B. ?  mov ah,62h  
, R* o4 Y, v' T& E4 y! h( G  int 21h
- [4 X9 |2 f9 ~; B/ a  mov es,bx
8 u& Y0 b! |2 T. [/ w- r& Y  popa  7 `7 ?& t) ]* C( B0 |2 k5 J; R
  pop es% R, Q7 q& r$ D6 F
  ret
3 O2 t9 u$ j$ f! r4 UGet_Commandtail ENDP
& s; ~$ C  R, _9 T;------------------------------------------------------------------------------------------------) l2 V% M; K* ~& a& z' V; z" r
PSP proc near
# G; n1 o, f$ R% L% e  mov ah,62h
6 t/ \, b  n. P  int 21h+ E$ E, l* G% x& D( ]4 U
  mov es,bx   
8 s; i- c8 ]9 Q  ?& X  xor ebx,ebx
( V. {5 W5 g& T4 A3 Y/ U  mov si,82h7 V! Y3 v( }5 D( n
  mov al,es:[si]
2 F. w5 ?2 W3 j4 @5 O& s  call Change  l, B  u/ c8 t) g
  mov cl,4
& w1 o. Z& `( K7 K: q3 l6 s  shl ebx,cl
& f" u# ^3 x$ N" s  add ebx,eax
! T9 m* i# r, \* G3 _# `( K  mov al,es:[si+1]8 {7 ~- h+ R- f  ?: @' p/ |
  call Change- o& j& m( Z6 P% R* o
  mov cl,4) h: x, K" Z" V$ P0 J
  shl ebx,cl
3 x* O& S5 D# Q) B  add ebx,eax
( D! }3 |0 U3 z( H9 K7 @  mov al,es:[si+2]
; J8 u- [& B) Z1 _, {" k  call Change
4 `! h$ S' G; X7 s1 o  mov cl,4( _' ?$ e# o6 u
  shl ebx,cl; z# \  R: w2 e& m- ~* U. p
  add ebx,eax
( h; p+ ^4 M* c5 b& \2 R  mov al,es:[si+3]
9 A4 {2 e$ I: N3 `  call Change
2 d  @6 l5 l' K# P* P6 ]  mov cl,4
. T. I1 B4 L1 h3 K7 M  shl ebx,cl6 z8 M, l' A1 @; \" G3 s& E
  add ebx,eax
% i/ z) V$ \1 h% X  mov al,es:[si+4]% p% }: D7 P( i0 s0 i; s
  call Change: T* W: k3 c$ ^7 V, w# j& X
  mov cl,4
: }; Z0 Z5 J# C) {) Q4 x/ H( n; S  shl ebx,cl
. X4 {5 j, @6 Q; z* a, l2 i  add ebx,eax- {- R. f. F6 ?7 x. P
  mov al,es:[si+5]
; P2 k6 x; C8 V# z  call Change9 X7 {+ w3 G5 {% |9 F6 L7 B
  mov cl,4
2 i, o6 O( [4 C  shl ebx,cl
! ?1 {5 j" o8 T! g) Z  add ebx,eax2 j+ f4 d% D' Z& U, m* K
  mov al,es:[si+6]$ O: w. U5 c% W' U
  call Change) }7 {2 i1 n, C9 ~
  mov cl,4
1 V6 W+ U9 C/ G  shl ebx,cl
$ _) R9 V" d0 d  add ebx,eax
0 Y2 J+ M0 t" v; O  mov al,es:[si+7]
/ \% V0 y) g6 K  call Change
# H$ D6 J4 w: h- o; l! e  mov cl,4: Q4 z( P$ A# B1 S8 V+ f
  shl ebx,cl1 x! J3 Z6 X; N! P- f
  add ebx,eax
; I7 x. W7 Z8 F0 J* i  ret; t% N" v" W3 k' B) T
PSP endp, y8 F. t$ u0 d. z
;------------------------------------------------------------------------------------------------6 a3 f. s) l- c' O( k9 E6 T
Change proc near  x+ n. c5 ~7 k, c' Y) Z& K6 ]
A:   / C; K5 F/ n/ X8 A8 u
  movzx eax,al& R! k+ b: Z& ?+ I
  mov edx,eax# q3 b# F& _+ A, q1 S
  cmp eax,'0'   : f* F0 x% x2 v/ @) ?; l
  jb A+ i% t7 I$ v' ~) \  F" u: u2 k" F4 i
  cmp eax,'9'   4 p) V' g9 v& A8 K
  ja B
- j: t+ Z0 A3 r/ `+ e  sub eax,'0'" T+ G& ?3 F) J7 b# ~5 H
  jmp short E
/ l5 C- [" C3 K5 N  h; |B:
; u: U- j7 l2 l( ~: H* y6 K$ @  and eax,0dfh   
! N* \3 T1 b' ]0 B% a; Y7 H  mov edx,eax. z7 G* W/ b3 O# y/ |
  sub eax,37h   $ N7 P6 W7 n1 I0 d) B5 a
  cmp eax,0ah
; h2 z. h; X( x# l3 P  jb A   
$ f2 d  G4 \" f9 B  cmp eax,0fh' H& d3 h  y$ {( E. n; F
  ja A   / a' s& X: V" X7 w
E:
0 m$ T8 O2 [. W, q$ L  push eax   6 t) T5 S# q( I3 c7 G# g4 G
  call PRT   
  ]  X- C1 k# T  A  pop eax# _; D% u2 p; M. E: y( C- _
CExit:
2 F3 g4 L3 E& x6 ]% q4 y3 W  ret
" d& g  p: r. E1 C8 iChange endp# H4 k, \2 ?6 D' c7 `
;------------------------------------------------------------------------------------------------6 S4 r( \8 a- r" T
PRT proc near0 I5 C, _0 @1 u' _9 i) o3 F& w
  mov ah,02h
3 X+ q5 J* v) X: p( e  int 21h
" J4 c1 I+ r. e, M7 z  ret1 W4 l$ f7 U" ?0 A6 h9 A( ?
PRT endp
* l2 h% F# F. D2 y8 A/ q- b) ];------------------------------------------------------------------------------------------------
( b6 m: q# v& e3 G: X! dcrlf proc near
6 g, o; r6 O' H" k- L: L# s  mov ah,02h
; @8 R; x. c: T: R; m1 f$ x  mov dl,0dh
0 a1 |# O0 g, k& x/ A- O  _  int 21h+ l0 H1 Q$ w. G" y: f
  mov ah,02h  j/ N, L; l1 [6 L
  mov dl,0ah! X1 S6 b+ Z' J, b) r1 O) l
  int 21h
! s! ?" d! K# R; u" B/ n  ret9 }3 v+ Z: ?$ \& r
crlf endp  U" E* Z+ Q% l5 S
;------------------------------------------------------------------------------------------------
7 O% Y4 I& S" U: P- F/ v_32bits proc near. R5 E7 P5 ]# c2 C
  pushad
9 ~/ R# R) E' v' N* X  n  mov cl,4: o9 e4 Z- s: z) E# {; N
  rol ebx,cl
4 q) K/ U! b# Z  call print_4_bits
0 \6 U6 p. z& r" j9 _7 O  rol ebx,cl1 ^/ L$ o3 [, h" }5 R% p* g
  call print_4_bits
. ~# ?- n3 Z4 y1 z  rol ebx,cl7 w1 V% w6 {- t# h8 [- q
  call print_4_bits
, }" b0 _% I* u" M  rol ebx,cl
0 K& a- v5 [7 I* o6 [4 z( T' Y  call print_4_bits
# j  W7 B: Q4 n  S4 P7 B0 d- `  rol ebx,cl7 |' S- D  `: h! S6 K4 z. |
  call print_4_bits
) T, ^3 d# n4 ^/ i9 C! @  rol ebx,cl+ X. T8 W& T, x, C) q
  call print_4_bits; x* h/ Y& ~5 v% }& x; L9 {
  rol ebx,cl
% R6 p, U- Q% m- K, I  call print_4_bits
" n: ?( z' U9 Z% ?$ Y  rol ebx,cl' x$ m" U2 S% |* m+ ~
  call print_4_bits
$ J" N# ?( ~. z  [/ j7 ~9 p' v  rol ebx,cl
; _. T0 _& R- i+ S  popad
% e' d1 n# C2 |( `  ret, r- _5 ~; ~/ Z, d
_32bits endp
' s+ x. }3 G7 o' K;------------------------------------------------------------------------------------------------
9 F+ v8 i& w+ b6 p6 P- e_16bits proc near/ {' [" Q  p, X1 U
  pusha   ( k5 D# `  ^9 R6 x# ]" b
  rol bx,cl
( y* y8 E3 {3 s& I: U$ A  call print_4_bits* I* _3 F6 `/ y' D7 N' n; y
  rol bx,cl
1 Q) @  ~7 d8 g  call print_4_bits' T* E$ o$ p/ A
  rol bx,cl' N& T0 @( @: o4 ?* F
  call print_4_bits
& I2 I) x5 e3 P1 f  rol bx,cl
* u+ ?2 o3 z0 I! q$ x' i+ d  call print_4_bits
3 Y( i8 i5 m6 [8 k) g6 }0 L; Y  popa2 A# @6 c+ ]* l& O
  ret
5 V0 A3 Y3 T% G& Q5 X  ]! E# x_16bits endp
! y; O9 I+ n4 T. P9 y) K' F3 A;------------------------------------------------------------------------------------------------
8 b; F0 ^2 x9 e( x. D_8bits proc near
0 y6 H, [. Y6 ~  pusha   1 f& P) {! {4 x# u* v8 Q6 Z
  rol bx,cl
3 \: h/ L. S9 C3 V; `0 p  call print_4_bits& F& J0 Z& P' {7 x* @6 q+ B. ~
  rol bx,cl& A$ P- t3 P$ j- X9 v8 @
  call print_4_bits
) x0 I1 _3 w4 ~- k9 s. M  popa
' D, t# @! ~2 W) b  C8 E  ret
' V; {8 {5 _( a_8bits endp
( q8 \7 w6 u8 O# i7 `;------------------------------------------------------------------------------------------------
( N, X7 c2 G" n  ~  O9 ]8 P5 T5 e- jprint_4_bits proc near
* e; H& E: x0 z  mov dx,bx: X4 r$ C+ G/ J  k4 G. P
  and dl,0fh
  a( e# z5 v% \0 H4 H( c  add dl,30h
# v' q0 |% ]% P' S" V! T  cmp dl,3ah
2 `/ r5 Y4 S8 G9 C' h  jb print
/ u; |0 s2 g& y9 w- U! U  add dl,7
- R, H! z2 }$ Q4 L) Cprint:   
% ]3 ]3 j1 A* h! e$ [  mov ah,2
) @' V! K; X# x! Q! J3 T0 e0 s  int 21h3 I: R- M, V" l( C; c8 [& ^- p
  ret5 W! z0 \% {  N3 j9 C
print_4_bits endp   
- z: @3 w) N* {% l;------------------------------------------------------------------------------------------------
$ S1 \9 V  c$ ~( k8 a( }( T* mCSEG ends
  [' N5 l# J9 ^# TEND
您需要登录后才可以回帖 登录 | 加入计匠网

本版积分规则

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

GMT+8, 2025-2-19 06:21 , Processed in 0.034419 second(s), 16 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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