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

顯示string會出現亂碼

[复制链接]
发表于 2010-10-19 16:41:51 | 显示全部楼层 |阅读模式
各位前輩好,以下的程式為在 big_real_mode 讀取記憶體的值
0 w' q# ]/ r9 t( H
; W: g8 R2 _3 A6 \$ p* x& X例如: C:\memory.exe(程式檔名) 01000100(Address); U$ x& l3 I' n  I1 _* w
' S! u7 B* t) t3 b
則會顯示01000100位置的值
( U) W& W) |0 h0 O" w" t0 A+ N1 P* n
但是我另外還有要顯示出字串,但是顯示出來都是亂碼3 r4 z8 B8 P0 g, r9 @; \2 j

- q3 Y  ]4 {6 R) P1 R9 G麻煩前輩給我一些指導,謝謝  
6 W2 e. A$ u2 y  \1 b# D6 o' N) r0 `- p6 G# k
1 y4 O1 o! B# [) e
.model small* P3 J+ [# g2 }8 ]
.386p6 q! _" q3 {: w  ~  s) ~# V
;------------------------------------------------------------------------------------------------
5 o7 m1 z1 {6 _9 d  B2 b0 }7 U% S4 uDSEG SEGMENT USE16'data'  ) `* ]# w8 H* @, o. W  x
2 X( Z5 z) w0 s2 _6 l& F0 y
DESC STRUC
- |4 M3 B) a* q- `  E0 J  LimitL DW 0  9 u, V' J$ K* K8 F, ]6 _& R
  BaseL DW 0  ; x6 x" L! o' b1 q1 z
  BaseM DB 0  . K, I3 ?7 E) z. t
  Attributes DB 0  
0 q. i- g% a$ g  {& E  LimitH DB 0  / E* L* \' P( l% }0 |  K: F; ?
  BaseH DB 0  
" g, @- z" s5 Y. w; A9 `DESC ENDS2 p+ E, B/ N' f6 \
- ?' H! z! u, ]/ ~7 M# L
PDesc STRUC. a% k9 E* d) D8 c! b6 B
  Limit DW 0  
* g6 E( z% B  @3 y  Base DD 0  ! Y. k. _  F& ?- a. h7 t
PDesc ENDS
4 W% ^. _3 B, x3 \- I2 Q5 D1 Z; B
( D3 p6 ?! C( g# H8 I+ UGDT_def Label Fword6 [8 h0 `" q+ w* C: Y
Null_Desc DESC < 0h, 0h, 00h, 00h, 000h, 0>
3 p; g& z# Z0 N3 \0 _Data_Desc DESC < 0FFFFh, 0h, 00h, 92h, 0CFh, 0>% ^$ n' p4 K$ U8 t# w) s
GDT_Addr PDesc <$-GDT_def-1, >5 v  E- }9 t) \7 U) P8 I
' E2 h( z. {- h, z  u$ a2 K3 Q
msg1 BYTE 'The Input Address is'9 }: F: R% v4 U' f+ _
msg2 BYTE 'The Data is:','$'/ A' ?1 I0 C5 r( b

7 }3 e5 X3 V! r- d. J4 R* F" S  \DSEG ENDS
. P+ E4 D7 z* a! {, J" T# o- E- V, z: Z$ O# E0 m
- F; R. O7 L6 q( ?! E
;------------------------------------------------------------------------------------------------  
8 J0 D4 ^0 H$ n- x/ z- G
7 I+ B5 y2 v) y0 A9 X& F! L% LASSUME CS:CSEG,DSSEG. W( p7 |& ]  A/ ?

9 D' |- ]$ [" H. Y5 a4 B( u$ CCSEG SEGMENT USE16'code'
9 P. C' F. K; j0 w  3 I+ D2 a* L4 j
  push ds
# r# c, T7 J0 h' m8 `3 V. @  push es
/ h. \* F, G% C9 i8 ?  push fs
/ `$ {; L( `8 |/ {$ E9 R  push gs5 o4 q7 f5 Q; @9 {3 J
  , V% ]/ e& {) R' b- `% d& P4 c
  call big_real_mode. v7 T5 f' w# M/ h2 n

: y0 v. Q0 k0 e/ e4 X2 |+ e    . u$ {6 I) j: _  s3 T2 ^" P
  mov edx,OFFSET msg1;
( h( ^4 N! ?1 y) A+ |  mov ah,09h;   
5 N+ w0 Z* e$ ~$ x/ u  int 21h;
' }, B2 D# I& W6 I, E4 l  mov edx,OFFSET msg2;
" ?5 e) @* k: v  I+ Z1 K  mov ah,09h;
/ r, N! b2 K" c7 ]( q# [  int 21h;! W) H, g7 s% ?8 Q8 n, y( G7 s
    : z, ^- z/ A9 j3 k* j
  call PSP   
% x1 @5 r* Z0 h   
: c$ q% T% e. I  call crlf   
7 c; H0 }) \9 ?1 O4 W: \   
3 L* @7 N5 D0 Z% L/ {( a  mov esi,ebx
  c5 `- P# \- F% I& f  mov eax,fs:[esi]% T% c0 Z  D$ j, C3 l4 [
  out 80h,eax: j/ u% b6 M" ]( J( M6 }0 M+ u
  mov ebx,eax4 O  P8 ]% W: N6 l; L# H7 y
  call _8bits, ^( Q( L) w/ S
    1 D9 ^( b' x. F! `
  call real_mode
' o& C1 ^  U$ M1 H( {! d; C! N% J) R   
. U  p! d, k: d! u  pop gs1 _& }" d* s% \! A
  pop fs" M& A% W% Y( z5 S( V3 R
  pop es
1 r& E- D9 a( ^5 j5 K" Z  pop ds% W  V; V7 g6 N. e2 ?: b
   
; s$ M' ]* o* I0 k% m  .exit
" @# d2 y. V. \# v5 M( z;------------------------------------------------------------------------------------------------
4 t% U7 J# o3 gbig_real_mode proc near+ p3 L! a. X% s! F  m
  in al, 92h; A4 D6 Y3 J, ?8 F
  or al, 002
% f) m, c! F7 U2 A$ F  Q. L  out 092h, al
# }8 f$ q: f6 V6 {  out 0edh, al
, |8 @. s# W4 n' I: w  ~  cli
) y5 }* v# {3 h# S  mov eax,DSEG
2 u: Z- g7 O/ n) Q5 h/ i  shl eax, 43 c8 s, n/ ?9 ?- J
  xor ebx, ebx; e% D4 a/ [" u- t& E8 L& D
  mov ebx, offset GDT_def
9 b* q) d$ D4 _& b  add eax, ebx8 x/ D# Q' P4 V- m7 g
  mov dword ptr GDT_Addr.Base, eax! D' m6 q) m) w' i1 M
  lgdt fword ptr GDT_Addr6 m, m* Y% j& `7 K/ ?
  mov bx, 8* \, R; F: G* d3 h
  mov eax, cr0
- S" _, N/ {4 o! p3 ^6 j  or al, 1$ M, H. z+ u3 o( Y% ?' {) F" g
  mov cr0, eax$ |" g9 I1 H( }$ s
  jmp PMod
9 S/ A3 k6 R1 J" @PMod:
7 s' t7 O3 ^; \/ ?9 z3 y, |  mov fs, bx& y, r; X. W" k6 g8 ]5 R
  mov gs, bx$ I$ z3 h7 C+ H- U
  mov eax,cr0+ x1 q$ ?2 l* m
  and al, 0FEh
0 R# O6 o- T6 Q5 V6 j. v  mov cr0, eax  
9 U8 b/ `( ~+ L4 W5 ~) f4 v  jmp RMod! r2 s# t* [4 W9 M' i
RMod:* `9 a8 X8 Q) ^: ?3 ]% q
  xor ax, ax# h  o$ |4 \8 K  |6 U% H& n+ W
  mov fs, ax) A2 m) v/ j- V. I  O
  mov gs, ax
! V% l& @, e5 u. m/ B* \" H1 t   
7 u, G2 |6 W( n) A" d  sti1 Y8 {5 R5 C+ N* v
    ( H0 i3 a, ^( ?, r- p3 T& _
  ret
+ M5 Z5 A- H, z" k8 O9 K. m% ]big_real_mode ENDP- x% ~% t/ Q3 Q! \5 Q; ?
;------------------------------------------------------------------------------------------------
8 ?% T. E# g7 ~. _real_mode proc near
8 K5 f- `4 r- ~) n+ u6 W  in al, 92h
. n# g3 D, U* j7 C/ U6 t, g- `  and al, 02
3 b, e" B3 c+ {# `5 c( i) {  out 92h, al   
, o, s2 |* U) b7 w# N+ }7 O" Y  ret
% |: F# g* _3 r( \- P# treal_mode ENDP5 N- R4 ~1 u7 F. d" Q& g
;------------------------------------------------------------------------------------------------) F; k  m5 d/ x$ V9 {
Get_Commandtail PROC near3 g$ u9 `% d; k: @5 _% W: K9 b+ K
  push es  7 Q+ g; C! p3 L& g+ Q
  pusha7 Q! Q8 n, L2 F6 f2 |3 S4 j
  mov ah,62h  
/ d" q4 }8 [4 ^8 s9 \3 b1 K1 k" l  int 21h
# f; `2 c8 I2 ], m0 y  s  mov es,bx$ m. S5 i- a3 n( H1 k
  popa  
" z9 }" n6 P0 Q: e. G2 s  pop es  e) Z2 O" O, X4 L; K; u% `  i
  ret2 Q  i3 k2 d- Q/ A
Get_Commandtail ENDP( P$ f: L: O; P2 e: j
;------------------------------------------------------------------------------------------------
  `* j  D8 D0 Z& q# t6 @PSP proc near$ H; Y! C/ e. ^  c: v
  mov ah,62h6 L" O% r, ^( ^2 W$ Q+ W0 R
  int 21h, g1 z+ S: s5 S5 [! \& N) ?* h
  mov es,bx   
* s  B# q1 _  d: c' e& i7 Z( s& N  xor ebx,ebx
  b8 W) X; j5 }) C' }$ Z  mov si,82h
5 T% a$ `/ f- @3 w* S1 s' Z  mov al,es:[si]
0 k+ Q, F- V3 f# @: l0 D& a8 J2 M, R  call Change: c- Z5 Y, @# _" n. c
  mov cl,4# ~2 m: Q, [( K: G/ [5 p2 V& S* p
  shl ebx,cl
: n# L8 J, W  j7 M8 K+ [  add ebx,eax! h) C6 ^$ k+ g1 g8 U
  mov al,es:[si+1]
2 q0 P0 V. d# ?8 Q" k7 `* ]/ f  call Change
0 @- `. D. Q- P2 ?5 t8 n0 w  mov cl,4
+ h& o( f6 r/ J0 y' x; J5 M# g" W  shl ebx,cl
' Z" W4 H" W4 L3 r) Z- o  add ebx,eax2 k: ^0 l; `' H- z/ r& u
  mov al,es:[si+2]
+ v; k3 @; J; i$ Y0 @" P  call Change! _6 A, ?/ X2 R5 C
  mov cl,4
& G% A& T. E3 o& r6 w2 ]' }  shl ebx,cl
7 c+ _% P+ _4 x9 i* i' y3 x  add ebx,eax6 q) U, ^3 m$ U
  mov al,es:[si+3]3 T7 ~( j7 B; D6 d) C) r
  call Change3 Y' K4 B& T$ d- }
  mov cl,4  L8 Q7 I) `2 G6 S! O4 Y1 J: R
  shl ebx,cl
9 S' {' ~& @9 B' \  add ebx,eax
4 T8 U) S" H6 Q1 d0 o  mov al,es:[si+4]% [7 ]4 w* _2 e$ S2 \  C  Y
  call Change( F; Y  g  I* S
  mov cl,4
1 D8 ~5 u0 C5 g) f8 ^+ `- W  shl ebx,cl
, F& w& l/ \: \; L7 h; f4 Z9 j  add ebx,eax( ^5 T, A  y: }2 g; g
  mov al,es:[si+5]  z: {' q/ t$ M& J  s
  call Change
1 V' l0 ~7 J2 s  mov cl,4
/ U6 m$ Q6 Z" K! c8 q8 N+ l0 n: h& e  shl ebx,cl
# p/ i* I' D' p3 [  add ebx,eax, ~+ q8 _- ~2 l
  mov al,es:[si+6]2 M( m6 n  a0 w- c: }
  call Change
- b4 C# I  o. F  mov cl,4
9 |% ?# E+ W; h# L8 j3 O  shl ebx,cl
7 H# O" g2 T; V. @2 X- J  add ebx,eax$ D" k' {8 Q0 K3 m: O8 D% b
  mov al,es:[si+7]
; f1 w6 x3 X) _8 a- X) U( z  call Change. `8 n1 d2 p; E& o6 A/ ?
  mov cl,4
/ P; a& M2 Z7 |  shl ebx,cl
$ r0 U+ z2 G% y# S  add ebx,eax
! f! s6 j) \0 J  ret
4 j' {1 [* `& o5 U/ J( F( E& m! N& I; GPSP endp
% |7 F2 \1 U4 j( I;------------------------------------------------------------------------------------------------
8 i+ t# h( h! R: z8 }& x" X9 WChange proc near2 }. {8 Y) }: M- S
A:   ' X* N9 O8 y/ Q$ Y* u
  movzx eax,al" y1 j/ x  \/ W$ ~# ^
  mov edx,eax
/ g: ~4 D2 F; K3 |8 n) _2 b  cmp eax,'0'   
: H& P9 i4 D/ R7 r$ z) D  jb A
( T$ a$ ^; @% Y9 |  cmp eax,'9'   
1 Q9 M( P( B+ n4 Q7 u5 L2 W  ja B
" e% o) b7 m9 [) n8 ]7 W4 t  sub eax,'0'
) {1 z4 U9 t) }  jmp short E
( r3 R- Z: L) xB:) F6 u* ?$ N* S, E2 @
  and eax,0dfh   + d, k- B4 N9 A/ n; Z( E4 k
  mov edx,eax
5 d2 g' |2 t  f9 u6 }( e6 C2 J5 B1 L  sub eax,37h   - F% P* K  h# {/ }
  cmp eax,0ah( p( ]) E* M- `& Z  O8 F) m
  jb A   ( W1 Z0 \! {& r. ~
  cmp eax,0fh! p, _- L4 ?% k
  ja A   
3 ?8 R" g% f. {1 `E:
6 {0 s: C" F0 P  push eax   
1 }2 E, R* W4 V# @5 `" t/ O  call PRT   
4 S# b; F1 O. ^2 \- b  pop eax
5 R' E8 j; {! `CExit:( S4 x+ u$ ~, q5 h" }
  ret+ x2 z$ }& T+ c; C* Y$ y( A
Change endp; U/ I* n) Y& P. i
;------------------------------------------------------------------------------------------------
3 z/ ]" d" _8 \2 Q: n$ E2 pPRT proc near
) o: |6 |0 G+ \5 E; V7 Q  mov ah,02h
; K9 P/ n" ]0 ]* |% x+ H2 Y( x  int 21h
( ]5 R' x7 c; M/ b9 y+ ]1 D  ret
# m  U9 e) j9 A% b5 \PRT endp
2 @3 h: ~( I; z7 };------------------------------------------------------------------------------------------------% E0 ~8 G7 Z5 F4 R# r1 }3 P! f
crlf proc near1 ]4 @& ], R; B" F4 b+ l1 G
  mov ah,02h
! j% q7 ~& ~3 ~  h1 B" {  mov dl,0dh
% ^  ^/ O& G, `2 D) V9 u9 {, U; A  int 21h- k6 P: A; @0 z* ?# v( T
  mov ah,02h( d' U: W9 ?* c5 m
  mov dl,0ah! k  e0 u8 U+ X; i2 N
  int 21h
! S+ {+ |6 p! ^" S  ret; |  K  S7 M( O- l' P2 o
crlf endp
4 M8 g/ I0 a; B;------------------------------------------------------------------------------------------------
: U: m; d8 x$ r0 D* q6 l_32bits proc near2 O2 b7 K  P' o8 p/ ?% v4 u8 w
  pushad
3 e+ ^" R: p; a2 r. E1 E  mov cl,4  \5 N6 f' v1 a& H+ Z
  rol ebx,cl% M4 y( @- s  ]6 e  |
  call print_4_bits" D! c4 J. y+ t9 B2 V- ?
  rol ebx,cl
5 T9 s7 J9 E' k  call print_4_bits. g7 }! d3 o2 h7 f9 S* m, r
  rol ebx,cl& x* Y+ H4 \: m
  call print_4_bits
& p- x1 n' _: B0 c) V  rol ebx,cl
) F# [5 y$ |4 c9 C/ E9 s  call print_4_bits
& y" ^+ ~, K3 i3 F3 v' o/ ?1 Z$ @  rol ebx,cl
4 j, c7 k, z) O" h9 B3 A  call print_4_bits
* z+ G' |( u7 _7 a* l& O8 T  rol ebx,cl
' T: ~1 I% a% ]3 n; m0 y. h6 x9 y" w  call print_4_bits; W; k+ [' q4 t$ K
  rol ebx,cl! r- Q  m- v' p9 C
  call print_4_bits. S" t1 _4 }$ {! a- W# Y0 t
  rol ebx,cl! y1 H, h2 m+ V8 `- c
  call print_4_bits
- |0 @+ \! A8 T- I& `3 U" Q' R  rol ebx,cl
. G1 U) k  M" m  r! L0 p! m/ t  n  popad
2 @6 ?) v( @+ c% O% U! v8 L  ret
0 T/ S7 @$ m8 W& P_32bits endp
/ E1 s& z% e. ^* F  r3 F7 w. g: G;------------------------------------------------------------------------------------------------9 O; ^3 q3 @( T* _& Q$ R2 e# V$ f
_16bits proc near- W1 R" T% T& b
  pusha   # R, A' i, P/ J. [) P) s& Z
  rol bx,cl! G" X# p/ K+ {! U3 p2 j; M* L
  call print_4_bits9 C) S9 ?9 E) {, i7 f0 O: C( K
  rol bx,cl
8 e& D0 O9 V1 O/ U8 Q  call print_4_bits9 a6 }( \1 ?- b% p% T) L
  rol bx,cl
, ^3 ]. w9 l- a% X  call print_4_bits* q/ D3 O. V7 o  _- _3 U1 o
  rol bx,cl
+ V! F8 y% g/ l1 [  call print_4_bits6 z+ n& @- u2 w' ?( ~/ F# Z
  popa6 F9 r1 ^4 Q7 z
  ret7 {4 l( S% g9 ^4 C9 O" |0 q
_16bits endp
! }5 k5 j- c, Y% G& w;------------------------------------------------------------------------------------------------
4 }& y! m; V6 |* a$ i+ E+ g5 F+ Y_8bits proc near
1 M5 K4 g% {+ ]4 ]0 C$ q1 `& ~$ A3 `  pusha   ( s6 e7 o3 L% r- c
  rol bx,cl4 z1 T/ y- N" ?7 U/ J
  call print_4_bits
% ^0 b, `5 B; E. ~# }# x  rol bx,cl
% O! A! F% R7 v& v  call print_4_bits
2 z6 G' w1 b& _  q  popa# M2 n$ T& z. Q3 n9 D' |: `# `
  ret5 c$ m2 [' `9 [2 b$ g/ d
_8bits endp
3 F* d5 @9 m4 R% W/ U;------------------------------------------------------------------------------------------------, W$ c' N) d5 P  b+ {% [/ V( {4 e
print_4_bits proc near
& s4 \  b: `7 _3 h7 j8 X  mov dx,bx
& c( t3 g0 c% Z$ n) B; W  and dl,0fh
3 F/ J0 l# ~# U  add dl,30h+ \2 q5 e4 o; I/ n) J. q6 T- M
  cmp dl,3ah
8 w5 V8 j2 `+ r, _7 e7 w  jb print
# F# A  H; _( S  u  add dl,70 j% e. U" G, Q
print:   2 w* ~3 _2 }, i& o0 R- L
  mov ah,2
: D, @. p' F! }6 Q0 p  int 21h
3 V5 D7 u: J7 z( D  ret* `( D/ Y8 z2 J- g; `4 {( ?; [" g
print_4_bits endp   
! |4 p1 l# V, |4 N8 j;------------------------------------------------------------------------------------------------/ F$ M) U# n: R( z! C$ c9 e- B
CSEG ends
+ \8 p" X. V( y) f' j$ i# jEND
您需要登录后才可以回帖 登录 | 加入计匠网

本版积分规则

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

GMT+8, 2025-12-1 08:33 , Processed in 0.069007 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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