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

顯示string會出現亂碼

[复制链接]
发表于 2010-10-19 16:41:51 | 显示全部楼层 |阅读模式
各位前輩好,以下的程式為在 big_real_mode 讀取記憶體的值4 P* l& C& p, @5 B- o. A+ N

: l$ n" t* G& w例如: C:\memory.exe(程式檔名) 01000100(Address)
; d6 ^  \  Y* `
* ~! B+ F! {( c/ C5 O( Y" f則會顯示01000100位置的值/ d+ _6 [0 H9 O$ g$ N. j5 \3 q5 w0 r

; r% x: V% V$ W/ l5 v& Z$ E5 A7 R但是我另外還有要顯示出字串,但是顯示出來都是亂碼" `# O% T0 W3 I6 c# a2 f

: G6 }! r9 l, C# q麻煩前輩給我一些指導,謝謝  1 T/ ~: I1 r1 O" o

6 b/ E  V1 J0 C. p
) v5 v0 t9 ~3 e9 V; k.model small* C  g% y1 H! s3 G" C/ M4 c( C) b5 }
.386p3 i) U% T# S. y3 w4 y
;------------------------------------------------------------------------------------------------
6 v5 z4 M7 l9 v9 z' \DSEG SEGMENT USE16'data'  
) k9 a( k, p1 G
8 B* I* ^; h* X9 P, ]$ r6 K8 vDESC STRUC5 I. M8 q. |& [: [# ^4 o6 ]
  LimitL DW 0  
' _: ?3 E  `& c" B  BaseL DW 0  
$ l' }) v6 B1 ^! i  BaseM DB 0  
6 F% V. Q( P% T0 Z  Attributes DB 0  ! k5 T4 `+ V2 e5 ]# }3 Z
  LimitH DB 0  
. d" o3 i, k: x/ g5 h- ?  BaseH DB 0  
% d; ?( m% h: T- g, U/ L9 g" hDESC ENDS, Q; _2 u7 w: M& h7 w  _! L+ i/ r+ ?

& ~- m4 w+ n6 P/ h6 B! UPDesc STRUC  l) G+ r8 ?. c: u; }
  Limit DW 0  
* R6 j3 M% Z8 W* z2 S  t  Base DD 0  
4 k1 r* A2 D) o( O  @PDesc ENDS
8 c0 Q  z( @+ G1 w3 h6 k# z2 k1 M& q% P
GDT_def Label Fword( c9 f! e, O% V. L" A4 V
Null_Desc DESC < 0h, 0h, 00h, 00h, 000h, 0>9 f" f) C/ u7 Z, r, V
Data_Desc DESC < 0FFFFh, 0h, 00h, 92h, 0CFh, 0>
1 h1 X( L$ m, Y" T: S' v9 w5 b0 ]GDT_Addr PDesc <$-GDT_def-1, >( z0 P/ O' a$ G3 P6 V3 F& p
. _8 \# F, n+ L1 b
msg1 BYTE 'The Input Address is'
* I" f+ s( R7 r0 {: q9 R3 l. C6 Amsg2 BYTE 'The Data is:','$'0 g0 A% B, u1 I, ?8 f) K3 w

& y; _1 O# ^- p' Z' qDSEG ENDS
. S. d4 C" z6 q! [1 b" e' v% @/ B8 V# Z" D% U: M

1 D5 B/ \8 ]( }: s0 b7 t;------------------------------------------------------------------------------------------------  6 \) `9 h0 F- W! z
. r2 P  T7 F# w
ASSUME CS:CSEG,DSSEG0 @7 I  a0 I7 Z/ m
& X3 O1 X7 z4 r2 [6 y/ M
CSEG SEGMENT USE16'code'3 _, i" u7 i1 S' L5 ?0 L. u
  
- k+ I' j& J8 x: p' c, @9 ]  push ds, ~: F! f9 P* Q2 S
  push es
4 E# G( {" e0 w/ ~. ]8 f' ^0 P  push fs8 O! H' e* Y# E& z
  push gs0 p& j+ Y4 M$ n
  6 }, q7 |% ^7 Q
  call big_real_mode, g! |( E, b4 k4 {- I. i

' n# c3 ~2 T3 |   
; L, p5 r; X! t) u& d, u0 }  mov edx,OFFSET msg1;
! l, [7 }' ?$ \7 A# R2 [4 m4 l* f  mov ah,09h;   
! a# f# c" [- ]2 G  \: J1 c* J& E  int 21h;# A8 ^1 M+ f% N  l
  mov edx,OFFSET msg2;* L; c2 }+ z  }* u$ Q) k
  mov ah,09h;0 G, i2 Q& C- b+ s1 L7 y
  int 21h;
" F1 S, X3 `8 m, e    2 y( x6 _% ~& @' t' O  E
  call PSP   6 J' ?/ _( z# ~0 r
    ; R9 C; m6 x: V
  call crlf   : \" A" Q& [2 W% W
    0 R+ i9 m/ U3 C0 ^, ^/ W
  mov esi,ebx
% k0 ?( Q( T# w! \1 k; L0 X  mov eax,fs:[esi]6 Q* K# |, R4 _5 U4 i3 j/ k
  out 80h,eax# V4 m: f% ^& s: G$ _5 ]
  mov ebx,eax
" {; L0 y: \) A  call _8bits4 O' k& t( l# M
    ; _/ o8 f/ f, _& H9 o8 b/ B: L6 @
  call real_mode
2 o6 b; }! P; r4 \/ B1 m3 Q    ; v+ e" H2 G* L: o6 d0 o/ x& W
  pop gs9 q" L+ p' t; b) G7 _7 I
  pop fs$ e: b. H$ g/ H
  pop es
5 ?: f$ D5 a  X/ Q+ |  pop ds* j: o& Z4 k: c* {  B
   
) K: ^1 m1 C2 a4 F& J+ S& P  .exit/ c6 W6 g; s0 U7 m+ l- \# ]4 E
;------------------------------------------------------------------------------------------------
. N" }+ j  w+ [6 {  Z/ R$ @big_real_mode proc near
- d/ T$ N5 z5 q# Y# j: Z* b8 Q0 @  in al, 92h; ~4 C# v+ m) Z& _- ]6 G' ~
  or al, 002$ u# ^& `7 B, n1 A, P' b3 K0 t+ W
  out 092h, al$ T6 J- |. I( ~5 T
  out 0edh, al
9 T/ S# z3 o; a3 H& J% f  cli
! q; a/ I& z8 _  @6 _. m" C  mov eax,DSEG
  ?7 F; U- \; I" w% Y8 v6 g4 N/ j  shl eax, 4! @, y& U" z# ^, g7 G- b7 C8 L
  xor ebx, ebx
) {) F& n" j4 P9 c& f  mov ebx, offset GDT_def
, k: T+ @7 o. x+ G0 M8 J& ?) |7 g  add eax, ebx
6 K* z( V  s: e( }: X5 E  mov dword ptr GDT_Addr.Base, eax
' k& ?& U, A1 |- Z  lgdt fword ptr GDT_Addr5 c) H6 E3 t( I- |7 E" \
  mov bx, 8
/ _7 A) ^+ V' N0 ?. O+ o  mov eax, cr0& d+ P9 A, T7 g' P) o
  or al, 1: i" C; K& _# @/ \4 U
  mov cr0, eax! z* z; Q0 G) R* M% E' n
  jmp PMod
% f" N* z8 B6 E' m( C: \0 UPMod:; `1 n' A- r  W3 Z
  mov fs, bx) K* o# J! |' w& E
  mov gs, bx
- f5 e3 v4 d5 M( k4 a' c. o  mov eax,cr00 ~/ `: U# t5 h) }+ D4 Q5 M1 C* m
  and al, 0FEh& _3 O2 ^6 ~( S3 [! O; G& E6 K
  mov cr0, eax  
6 y7 b( x* X  B" j  jmp RMod1 g% X" k. Y' V2 O
RMod:
9 e  r7 x" c; y3 n( {  xor ax, ax' y7 v! e+ V+ x
  mov fs, ax
- g) [% A4 c' m* w- ?0 w& }  mov gs, ax
- |& G0 O9 K- _1 p% P   
7 t. J+ S; h" x# D1 R  sti9 p1 e1 k; B# \0 f
   
. r* ~* ^5 m- r9 E4 |  ret6 _* R$ k; e: Q6 j
big_real_mode ENDP
0 W+ u. |* ?9 M1 P2 v) ]/ H2 o/ b;------------------------------------------------------------------------------------------------
( S" q5 o" |8 hreal_mode proc near
- ~2 T' i! `) z  O, @$ B, a  in al, 92h
. l& a$ g; W/ X8 D* _  and al, 02
3 x* ?0 W8 f2 \6 e  out 92h, al   
+ O4 d2 ^1 Z; Z" g9 V) O  ret! f$ H, `! w" O2 e4 S3 b6 _/ E( L
real_mode ENDP
# A6 L. t; X: G- K;------------------------------------------------------------------------------------------------
) V' b9 X3 {4 Q  |$ lGet_Commandtail PROC near
5 a8 m5 T7 u1 D. l8 E7 q  push es  & G+ P7 C) y+ t6 Z8 q
  pusha- q8 y# A5 w# t( {) l' o% W# |
  mov ah,62h  ( ]1 [; y1 q7 l! ?: g
  int 21h- ?0 f* B: L; A; _7 [1 N
  mov es,bx
* @1 \9 a2 i9 p) y7 Y  popa  4 p2 K& e9 b: u4 A4 C& c
  pop es9 t! o7 R4 i! O0 X% H- t/ _" D' F
  ret
- ?* l. F5 n6 x  N" ^8 X0 FGet_Commandtail ENDP
7 A- Q; g: Q7 t) b! R2 c;------------------------------------------------------------------------------------------------2 X+ h+ }, ?+ K) v. B  J" V
PSP proc near
9 m& S+ `! @2 b0 l" [) T  mov ah,62h/ D3 H' ?# i2 i& q1 [
  int 21h/ ~+ o- J1 x/ I0 ^% _0 S
  mov es,bx   " d  H$ n: m* m! h' v! o. e3 R, ~
  xor ebx,ebx! a* C/ n- v0 C3 ?0 h% e8 R
  mov si,82h
* W6 c" y; C  d7 A  mov al,es:[si]
5 a$ O7 \3 ~& T# t) m  call Change
9 M' F; U4 X3 R) m  mov cl,4
  q8 H7 ^2 c0 z+ g- N' a  shl ebx,cl
5 u# ]" G1 P2 D* }8 a# F  add ebx,eax0 W: t$ S! Y6 E- a
  mov al,es:[si+1]
' e' [. C: g% V- ^, x  call Change7 ^8 j8 n# y6 l/ ~
  mov cl,4
3 @' h, m, S6 f0 S9 {! h  shl ebx,cl7 W, J3 g& \/ ~' C
  add ebx,eax
- ^& G2 h$ r) ~3 }  mov al,es:[si+2]# J. p4 s5 ?- Y) X- B$ V# S5 ?
  call Change4 f- r  D0 e: Q1 L1 `
  mov cl,4; d; e7 n! i$ F0 J2 G
  shl ebx,cl/ y* _) h' \/ _$ }) u
  add ebx,eax
; H) Y  b# o$ ]. u  mov al,es:[si+3]
% m- o; U7 u1 P- B$ c  J# w  call Change
1 I4 T* K! l* v  mov cl,46 M' L4 Y/ L0 U; p; }
  shl ebx,cl
6 }# O- R* k; \) `/ A" ^: v  q4 T" [  add ebx,eax
. i7 Y7 O# y! m% Q( U& U  mov al,es:[si+4]
2 f2 ]/ I6 i6 ]3 i. v& _  call Change( R9 ?9 C( E5 K8 L/ X
  mov cl,4! t. n0 I1 Z3 X/ H
  shl ebx,cl: V+ I% D$ t6 _9 B) f
  add ebx,eax
* \. j& q7 N5 E  mov al,es:[si+5]5 P, A' ?" N$ U+ ?4 ^
  call Change9 J  d6 M8 ^, C, o
  mov cl,4
5 k+ l1 V3 |3 p# T7 U7 Y9 i  shl ebx,cl
+ P6 l0 `+ r7 R  A/ K7 d" h' ?4 M# m/ {  add ebx,eax
$ D4 k# O4 v; ~; P3 i, s1 D  mov al,es:[si+6]
9 \* Y; E' ^; f) y" [  call Change/ v8 h! V% J& h+ U( A
  mov cl,4: R" u* V5 N2 F4 N; I( d
  shl ebx,cl
. n# h# w8 G7 J/ J6 a  add ebx,eax
" T5 \; p/ _6 z  mov al,es:[si+7]4 E+ `0 w# J" t  l/ `/ l7 k& p
  call Change
5 v' J; a" k9 v( l/ b9 y  s  mov cl,4# Q* {: A' ?$ P( z
  shl ebx,cl6 w, A' Y4 G* c, g/ d
  add ebx,eax  |) [) o4 W; F9 ?
  ret
/ J2 C) ~) ?# l# NPSP endp4 i6 r, m( K4 ]0 q
;------------------------------------------------------------------------------------------------
2 t1 `4 Z& y# ]: p+ R4 B7 |7 RChange proc near
$ w! F3 ?" \( F3 YA:   ) l2 n8 ~% T. \1 X, c# P, l. Z- n
  movzx eax,al: b5 ?, E- I8 K$ S, {
  mov edx,eax7 w( E! d# r# S6 h
  cmp eax,'0'   
9 {4 z/ t& I1 n* T  jb A
$ I7 t& t$ p, o9 G6 o0 D  cmp eax,'9'   
' I% G# N$ v/ v0 C/ q: X  ja B# X* Y! k" l# i9 d' Y
  sub eax,'0'- O, {# m4 n+ Y5 [- O+ ~! y% X
  jmp short E
, L: l5 ~+ a0 n8 ^: G  B; fB:; y. M3 s- V( m
  and eax,0dfh   " E2 {# J4 R9 w/ O( T5 V& ]" n
  mov edx,eax+ A; T$ U% I# c+ ?
  sub eax,37h   ( L) a  I3 S9 ^! m% |0 X
  cmp eax,0ah
2 U) q6 J/ t# h, O: I  jb A   
9 K4 z) r0 S+ d6 V; X3 j, u  cmp eax,0fh$ e  S4 G/ d5 }/ L- K
  ja A   ; l* N5 x" Q9 }( a1 n1 `. F
E:! {; ?' v4 z3 u8 a# i) p
  push eax   
! L! b7 ^+ J8 {* f4 Z% g" n  call PRT   
! O9 d' Q8 n. R( [2 N) k  pop eax, e# n* O( T: h* g
CExit:% J: N( I, {7 m
  ret
0 I% K9 d* O5 C" w* K; T7 gChange endp4 y2 n9 E& c- p
;------------------------------------------------------------------------------------------------
  V0 K( y) y& @" B) o/ RPRT proc near
4 n& ^# ~) d7 Q6 `  mov ah,02h
; D0 S. @" n( `  ^& A  int 21h
+ y& O) @0 X4 d  J  ret" m, Q2 N# N* X  i3 h
PRT endp. F+ g# b, }* `; \, \! r
;------------------------------------------------------------------------------------------------" p3 ^( e3 i6 I( P% M. b# a
crlf proc near& T( Z3 a1 `$ B* Y
  mov ah,02h  b  j- Y5 [3 L. b8 g& K
  mov dl,0dh+ P7 `/ N9 n  A% c* [
  int 21h
, w; |+ O% k, w9 L" |- V  |' ^  mov ah,02h- V. q0 o  [; p& |% h
  mov dl,0ah
$ {- v% a+ Q! }5 S6 o5 [  int 21h
2 A& k. j3 J2 D; O# \9 l, u% H9 s8 R  ret
  q& G. m) D* o! o- d- m- hcrlf endp4 Q* k9 g- z6 [  s5 q
;------------------------------------------------------------------------------------------------# B8 `) |& f9 k& z; T3 G
_32bits proc near- h) {! b/ n6 P2 f# v
  pushad
& t/ R3 z  {8 }5 I$ i6 O, Q) [4 i  mov cl,4
; _) ?0 `" @1 R. ]9 v8 v  rol ebx,cl) c, M8 A+ D8 S4 Z6 r, ^( u* H
  call print_4_bits
, J4 ~; q# ~, Q8 p& j: G  rol ebx,cl
" w3 h/ q* B. m9 r; k& z' D# \8 B3 M  call print_4_bits
7 N! }9 w7 b% d" _  rol ebx,cl
0 `6 ?( R" }5 W- T  call print_4_bits, i* R8 o0 U$ {
  rol ebx,cl
" j$ [' S  P: i  call print_4_bits; k' @* V# D" Q5 S+ y
  rol ebx,cl
$ e7 _, J: |( X6 Y  k0 M  T# |  call print_4_bits/ U6 v: @/ [7 E+ t  }5 W
  rol ebx,cl+ x: N( M: \5 I3 V( ?! L, Y2 c
  call print_4_bits" l/ c: D7 G( t+ b8 E
  rol ebx,cl
- ^6 M, a- m$ |/ O8 z  A  f8 t! e  call print_4_bits* b3 w6 |: b% ]0 D9 q
  rol ebx,cl
% D0 Q% x/ I. j6 w- A: a  j: ^/ Z  call print_4_bits  h! a7 ]; k( w- E  d
  rol ebx,cl+ l- |7 w/ M* j6 T
  popad; m7 o1 _8 F) v( ^3 e
  ret0 e, X+ d* G8 r0 D0 T5 r7 y
_32bits endp1 K" N! c) }4 ?: h
;------------------------------------------------------------------------------------------------! w7 R  A6 R  k2 g7 l
_16bits proc near- m& Y) |  D* |4 l+ g5 i  V# G; P
  pusha   6 u- U; i1 G$ O- g/ e
  rol bx,cl9 L) p; F9 t& c
  call print_4_bits: x3 K5 |+ V7 Y, \7 v/ }5 n) {
  rol bx,cl" B) v6 j1 y6 l0 o
  call print_4_bits9 V% }0 Y$ G! N) G2 d
  rol bx,cl
6 X, `) S! R2 w* r5 t# h  call print_4_bits( B$ J+ L6 J- D
  rol bx,cl7 z4 Z1 p8 e9 `, s! P7 L
  call print_4_bits* h: q) T0 U/ t% Y* l  ~
  popa
0 K9 i6 @  K- W1 G& V  ret) u& s# R5 P  C
_16bits endp( q! w) o1 C! \. v, P) Q
;------------------------------------------------------------------------------------------------
+ c% w" Q( _3 j# P_8bits proc near
) d; X$ ?& K; l3 i2 ^$ ]3 U6 @( {  pusha   
  Q1 M* {" p8 V# V4 c  rol bx,cl
9 H2 a/ k) |0 A6 b7 I' ?  call print_4_bits
  `+ N% Y. t# y" @( y1 O0 R  rol bx,cl
: C& K9 A" i) [" v, ?  call print_4_bits; A3 k5 W/ R, R. b% F0 r
  popa
7 S; z1 A; y! k/ H; g  ret
, K- g! O$ @, |0 B) e_8bits endp7 y- {2 L& r& t4 @( B
;------------------------------------------------------------------------------------------------0 P) R9 E, e& B
print_4_bits proc near
" i1 _9 M3 W9 L6 x; c  mov dx,bx$ Y& l8 ~) M( m5 q6 v
  and dl,0fh. }/ J1 e! A: i
  add dl,30h6 a) i0 |, b8 U# N5 v( c
  cmp dl,3ah; M2 t+ p# A: x% c: d
  jb print
. Q7 d2 K) Z9 z& z, c  add dl,7( V3 Q  c/ i6 ^) J" `
print:   
' ^- V8 T: C6 h/ f6 s) @1 S  mov ah,2- U0 ^' Q; b, F6 C
  int 21h  S0 I* s; I* Y1 i
  ret
. ~3 j5 n# J! t! g. vprint_4_bits endp   
6 b- u: {# _$ n' s% J;------------------------------------------------------------------------------------------------
& o! |( E, f4 r! ~$ R. uCSEG ends' }" n8 `- z; L" k! e0 t
END
您需要登录后才可以回帖 登录 | 加入计匠网

本版积分规则

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

GMT+8, 2025-6-17 14:03 , Processed in 0.053795 second(s), 16 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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