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

顯示string會出現亂碼

[复制链接]
发表于 2010-10-19 16:41:51 | 显示全部楼层 |阅读模式
各位前輩好,以下的程式為在 big_real_mode 讀取記憶體的值9 q, @7 s7 B# r; D3 Z+ l
: f/ {) M7 D. a: R6 X1 }
例如: C:\memory.exe(程式檔名) 01000100(Address); b5 b9 `2 ^* b# ~

) }* W3 `2 s+ g: x則會顯示01000100位置的值
; s! R5 d/ V) B( C+ C# h! o7 f- ^7 n) r, d9 `
但是我另外還有要顯示出字串,但是顯示出來都是亂碼
; q' b6 q- B6 r9 m) v' M  l; I/ r% G$ C+ |0 _: X
麻煩前輩給我一些指導,謝謝  % p! ^  m3 X, ]. P
' b* z7 n3 U2 q: ?% R; U% d! T

  L- v8 P+ s& w9 A& u  h/ H8 |3 E.model small
9 a) T; @4 U! `.386p
" M5 s( B1 \7 e;------------------------------------------------------------------------------------------------. L* x0 q8 L8 X
DSEG SEGMENT USE16'data'  ! z. D  J' u( l

. w: ?: m. P4 C7 E% Y5 VDESC STRUC$ M1 n+ R+ k9 |1 s: t' J
  LimitL DW 0  
7 j1 Y; ]2 c, ~6 K6 H) r* c  BaseL DW 0  # p+ @% y9 ?& Q" q
  BaseM DB 0  4 J: f" |; D2 W7 A) W
  Attributes DB 0  - O+ H. x& D& h; B) B
  LimitH DB 0  
* D2 C, ]' ?3 |" E& G  BaseH DB 0  
% I$ l% W& r- L% \2 P5 WDESC ENDS
# u# [& _/ O, l$ H/ |: ^" A  c' R0 Q# F* I% J3 o; A5 D5 I
PDesc STRUC- `0 ?: e5 K& ~0 x8 j; g
  Limit DW 0  & t* }/ P; w! m) a
  Base DD 0  , o: ^& A, a1 F% Y) N4 F
PDesc ENDS; v1 f' Y% P2 B& ~
5 h$ D, w$ O' M& j
GDT_def Label Fword
0 u; v8 ~; b, W) |Null_Desc DESC < 0h, 0h, 00h, 00h, 000h, 0>
6 \: V. g& U* b- d9 hData_Desc DESC < 0FFFFh, 0h, 00h, 92h, 0CFh, 0>" K- H/ A: s  ?1 W0 g
GDT_Addr PDesc <$-GDT_def-1, >
9 q% M4 u6 m5 J8 R$ q  _/ K3 k- P0 ]; ~* K* i
msg1 BYTE 'The Input Address is'
% O) b2 M7 a1 m9 I8 h8 N0 K* qmsg2 BYTE 'The Data is:','$'
9 l+ r8 e$ g" U7 n
# u& N9 N" |7 Y6 i6 L- [* ^6 a3 R" PDSEG ENDS
5 e# M- S; V1 |( L& z, h" U6 O1 b5 c- f: }  _% M& v

8 y! s! K5 t: T+ G; X- |;------------------------------------------------------------------------------------------------  8 G6 Z' [( ?2 ^8 d, f; ~+ P& n% A$ A

) L- @( Q2 ~$ r4 |5 O" l5 i! i: c$ RASSUME CS:CSEG,DSSEG; C2 _- K- I+ ?2 N2 n# Z# u
% I- p! o( N, a- y
CSEG SEGMENT USE16'code'. ?; D# a$ D! v# j
  
+ J3 U4 ]7 A9 u  push ds
: W* O$ {* G# h2 O& l  push es) H0 R+ `1 P+ N0 {9 u
  push fs; w! W8 i7 e# S. J( Y
  push gs
! Y' H% d, d' f0 v  
  f& {" n! R" ~7 ^  call big_real_mode
9 G) F, _! |, s& D+ r3 ]* H/ ?( L0 `. p: ?1 k3 a1 \
   
$ o( d& A6 `5 \8 Q$ b1 _  mov edx,OFFSET msg1;# l% c" a7 d: ^4 V* Y- y- c
  mov ah,09h;   ! u7 X; z. {7 k. ~, R
  int 21h;3 f: Z$ K) H7 C9 d# g( @
  mov edx,OFFSET msg2;: T" N, u. n0 Q% v
  mov ah,09h;
' d: W# ^$ d% {0 `, w  int 21h;2 u: C$ w# L) n+ Y; w* M
    9 D0 U% z3 o  Q+ N
  call PSP   # B' ^0 b! h) t: V( u
    8 w+ Q3 C' K& W' H% S+ ~
  call crlf   ! q- z* E. a9 T
    ! V' f% K/ d% k( ~
  mov esi,ebx
; f, ^! J" A# K3 B1 a( J. M& X3 W  mov eax,fs:[esi]
* x9 k$ Z  \  |! J; i7 S$ V/ \& C  out 80h,eax
& e- d) q" V8 A* s  mov ebx,eax
+ n4 h6 e! U! z. n. H# G7 `+ @0 r' u  call _8bits# n) M8 H7 z" ]0 l% _/ G- n" J+ X: l
   
. O+ b1 x8 L( I9 f2 _( X. x/ \* v2 z  call real_mode- b, E7 h! ]8 f: C9 M2 G0 C
    1 e- S* R6 ~$ {! O, L' ~
  pop gs
! q3 j( @) E4 q" j5 u  pop fs: D! Q& H# }# X
  pop es/ ^* K9 U) A9 i% z% I
  pop ds& I. V( c( ?6 R+ c  D: P9 N7 f
    * J1 a5 u5 L- w$ [- K$ [4 x
  .exit1 V7 {9 }- C0 @. x8 C' y
;------------------------------------------------------------------------------------------------
' O, T; h7 {; i! X# \" }big_real_mode proc near+ Z3 v1 J2 |% V! p4 Q( }
  in al, 92h$ \2 ~, N5 S% S0 z
  or al, 002
$ ^# Y1 k/ H6 T  out 092h, al
" X- g% c0 o& q2 i8 c% s% H  out 0edh, al
. A4 G9 d- z' i% X  cli  x: ^- u' U5 g* C6 ^6 g+ ~
  mov eax,DSEG
6 @3 s# U& f: F6 p; ?( ^6 w  shl eax, 4
; Y- @  k# @* U- I1 x1 g- d  xor ebx, ebx
2 s8 ]6 l  p' B9 d  mov ebx, offset GDT_def+ h- w1 X1 {) G) p* Y
  add eax, ebx
+ H7 t6 H& b# s  mov dword ptr GDT_Addr.Base, eax
0 v" L2 O+ d2 `" t  N" ~# T. N+ H  lgdt fword ptr GDT_Addr
! t/ Y$ o) n4 d- d, d- n/ c- r  mov bx, 8
& E9 L  i2 O% |' ]- f3 @  mov eax, cr0
9 g4 K0 r1 M& |" V  or al, 1
; t# A" ?! `2 c& H5 b) S" G  mov cr0, eax" P6 F* O$ _& P/ I. p" \
  jmp PMod/ C. f1 k. b! L7 ~
PMod:( F& `6 j: `( M) y! s: m
  mov fs, bx$ p! ^* ]1 h  y- w. T; B* m
  mov gs, bx
# U5 J1 X  y' f7 @, t  mov eax,cr0. R  }* C8 {* H
  and al, 0FEh* U; O; F! _2 E' P
  mov cr0, eax  
" P4 E$ a0 ]+ u5 x  jmp RMod# u6 A. x1 ~& @3 |$ I
RMod:( K8 l' Q' B" X0 P! j: t/ E
  xor ax, ax
/ |# {( |8 i6 l0 l; _% W7 T  mov fs, ax& ~% c# l+ F; o( N& e3 W
  mov gs, ax. {3 w# E6 \: l1 `7 W* I; S
   
$ d( j2 r/ l$ d3 C  t* [' w8 ~9 S* O  sti# [" G& r" E) J: {  ]1 u& [
   
4 t+ `- r. {: Y# K" J) G" j  ret# [$ m3 q" [' Z; N
big_real_mode ENDP
" Y' d' b; d$ i: O* k4 K;------------------------------------------------------------------------------------------------
$ W' Q- v2 E4 M6 `$ c$ kreal_mode proc near/ M! _0 r8 K& w$ K! `4 t
  in al, 92h+ q6 K  ?- J" f2 h6 x
  and al, 02
2 L# O( j3 ~. D  out 92h, al   ) a6 O+ j# g" @& U: N7 y
  ret7 p. u. k! V8 X' ^
real_mode ENDP* S/ ~5 C2 k* n- [$ M' L" d
;------------------------------------------------------------------------------------------------
6 w* D6 J2 }/ I* FGet_Commandtail PROC near" P# _6 @: s1 |4 D2 S# |
  push es  
1 v5 B2 G$ y  Z% p# i  pusha/ O6 E" K% A6 T
  mov ah,62h  # @* w# V$ I0 ^0 i6 ?3 R' l
  int 21h; o1 M% h/ }1 M& A0 |  e
  mov es,bx
" M6 I8 Q" C# a* o  s  popa  % t6 T* l% I" K
  pop es  o# ?/ M' n, x
  ret$ _% T) }" I) j5 z. v, m
Get_Commandtail ENDP
9 U6 U& k  z* m;------------------------------------------------------------------------------------------------
' `% L# K" a  |4 APSP proc near- T3 d( i, J1 `5 I: ~- T
  mov ah,62h
% V9 [1 F1 ]6 M; |* A  int 21h" G' E% s* Y" r9 s, M
  mov es,bx   
' C8 f3 y7 K1 M/ g3 U; X  xor ebx,ebx2 y$ C0 B; ?' \  H
  mov si,82h
2 a3 u" a1 b% a" C$ E  mov al,es:[si]
  f# X8 e% P" N6 p4 `  call Change7 M( e/ Y7 l! G
  mov cl,4
" n& ~; p* N: Y  shl ebx,cl/ `" z* q$ u  P8 @5 |
  add ebx,eax, |4 U8 z" L* n3 n% Y
  mov al,es:[si+1]# u+ Y% a1 v( K; P9 m
  call Change
, V! T- {3 R  k( V) R; M4 i  mov cl,4
4 w! S0 X+ n& Q  shl ebx,cl# F) n5 y( l/ Q2 c
  add ebx,eax
3 z& D5 q  Q( N3 U2 f9 I  mov al,es:[si+2]5 P; ^, `  A4 u3 M
  call Change
* a: X% Q$ j: V  mov cl,4( @; l$ n7 n6 j1 D6 D
  shl ebx,cl. ~/ F0 n& O) k+ A. s) M, `/ u2 T
  add ebx,eax: t; ]4 H9 T5 q
  mov al,es:[si+3]2 Y; t$ x. j, L7 N8 b3 `
  call Change  X+ S+ ?  {% R: u6 ~* }5 B  X, E
  mov cl,4
5 ^/ W, F. s3 v2 C/ C- b  shl ebx,cl
1 i5 a3 Q% {% {2 c8 F: X# n! h  add ebx,eax, W. b: ?& N. N
  mov al,es:[si+4]
% S; L3 ?, O1 J% w+ m  call Change
8 F* y9 t7 _* {  mov cl,46 D# {& E1 y  c, c/ B2 `$ f1 y7 m9 o
  shl ebx,cl
6 u5 {; @2 M7 {- L: H! i  add ebx,eax; z/ K# \) _" ]. ~& N+ N: T
  mov al,es:[si+5]6 H4 s* I( F- q! d% z7 ?
  call Change, C8 s& j1 ~" i+ Q* U2 H4 T
  mov cl,4
. \/ L+ x3 T- G7 L4 t  shl ebx,cl
3 m# C2 v3 D  S; |9 w3 |5 \  add ebx,eax
) l, q: w' p0 j  mov al,es:[si+6]
% A% C+ Z5 _' Y+ Q- T: g  call Change) l' E! T* q" `3 N. m) I
  mov cl,4: V6 o2 l' U% f6 ?
  shl ebx,cl+ u; l! x6 q; P- y# e
  add ebx,eax
+ u8 ~& z* d9 q7 f: m' `. d; O  mov al,es:[si+7]
7 l3 X7 l( C8 s2 F4 C9 D; K2 W9 O  call Change1 l( u7 t3 w6 j8 U" Q3 T
  mov cl,4
9 M7 D8 T, J6 e  shl ebx,cl- k- |+ L6 {) `
  add ebx,eax& }2 `* B" x2 x- C! R
  ret
3 S/ |8 f  o0 V0 A5 h0 lPSP endp
( a* m) N6 w' Y) ~2 A( a6 E3 Y; m;------------------------------------------------------------------------------------------------
' [$ T# T! F' R: j6 rChange proc near, }% ^( f4 K6 }
A:   
; H1 d! b0 U7 C# K, t2 I  R/ @8 p  movzx eax,al
) n" I3 I& D) @% m  mov edx,eax% O. {$ l2 i, G% s
  cmp eax,'0'   3 H, [- h* d1 M' h" O3 ]8 M
  jb A5 `/ `, C& ?0 @* b$ \* ]
  cmp eax,'9'   
+ X1 k' [# F9 B( j; ^  ja B
( v" ^8 y6 W- k1 h% r& r2 z3 H  sub eax,'0'* M# K1 M; _* h, W. N# e- g
  jmp short E
/ t2 C! b7 S' j" |B:1 T" w; |7 U7 a. E
  and eax,0dfh   
' p% O) D3 I& v2 e; c' \5 e* P; t  mov edx,eax0 d; j( j3 `+ \. Q  W, f4 g! n
  sub eax,37h   
% i% h9 J6 c4 [  }+ ], K  cmp eax,0ah  F, ^5 b4 r* m: q9 g0 M6 L. `
  jb A   
' n9 s& N" i) a* R+ u( M2 W  cmp eax,0fh1 P) O4 u3 ^- c/ u/ t
  ja A   
' a; o$ B  V: l/ sE:  C/ {5 f# t0 u
  push eax   ! [4 z4 D. k9 y( I$ `
  call PRT   
6 A5 E- o9 G% _. x. x1 f! p0 x  pop eax( g  X# N2 N  V, {, Q, ?
CExit:
9 e9 s  V; U8 ~, D9 t6 D% l  ret
$ X4 A/ X" y7 ^8 K1 PChange endp; U* a0 }6 e, K
;------------------------------------------------------------------------------------------------
* Z3 z$ I7 ?) f+ s) h& E; Y) n* pPRT proc near7 g& j5 W5 ^, |/ ^. H% {# [
  mov ah,02h( u7 |5 g# ~) Y
  int 21h
9 Y" k4 Y  u# \  ret  Z5 u* G% z0 ]9 J! ?7 k
PRT endp
% O* t; G3 ^/ Q5 A;------------------------------------------------------------------------------------------------
( Z7 ?8 E# t& ^6 c* ?( ecrlf proc near
7 I0 j5 W7 f5 y  mov ah,02h; o1 |; w! F5 ?/ u) _+ ^  L
  mov dl,0dh% w( X" S3 O0 T& Q( L! \
  int 21h6 W4 Q$ V) I: j% ]! E6 P
  mov ah,02h8 T" e# g' F1 e6 F. G3 T
  mov dl,0ah7 b& q% f8 @, ~9 h, W0 @5 j
  int 21h, |- |! m8 ]& }# V( v4 k: n2 X7 X
  ret" @6 X7 S# E! m) \$ O
crlf endp2 ~  ]6 h. S" V3 C
;------------------------------------------------------------------------------------------------
( O* ]5 n' c' }7 R  R9 i* a_32bits proc near  M% u. T$ d. o. G+ r& X. l
  pushad
, h" X* ?; ?( T# H) y' T5 ~; g0 J  mov cl,43 t& c7 d) b& y' l) I
  rol ebx,cl( B8 Q: D! a0 u4 `6 k
  call print_4_bits
- B0 I+ H& q! U/ R  rol ebx,cl/ p$ {+ @  H3 d% d* Y/ o6 G
  call print_4_bits, `2 s( v; X9 a, e4 g& c3 a3 C
  rol ebx,cl5 o9 z; n3 U" |
  call print_4_bits0 q; b, R/ H4 d" \' u, y
  rol ebx,cl- R% L/ [) m; r7 p
  call print_4_bits
, u; k) v( O5 O! d' l# E6 R  rol ebx,cl4 W. x" `# u! m. w" P1 h
  call print_4_bits- K7 r: c5 H6 s; O  m8 a
  rol ebx,cl  i! m: p2 H  m+ `# y9 ]" w
  call print_4_bits
. Y; y, v( |6 I  ^2 E# \8 O  rol ebx,cl+ `2 V( {4 D4 |+ k: {; h8 S" O
  call print_4_bits
" S) m& y3 b: b' }6 @! u+ U9 y  rol ebx,cl
' e6 }% L  }& e* K$ @$ n  call print_4_bits
$ N6 Z4 g9 @1 `4 r1 q  rol ebx,cl( }; o' I) B- p$ U8 `
  popad
# J% v# b4 Y) d% L$ c  ret# F1 d& W( H" ~$ Z- B
_32bits endp
5 f9 N* s; J/ D2 \7 M; S;------------------------------------------------------------------------------------------------8 G& Q9 x: N, i! x3 |
_16bits proc near1 u: X% h) E2 ^: d4 I
  pusha   6 {" l! D, G1 D$ x% d% D
  rol bx,cl* k) G4 ?+ o' x- H+ h0 r* B* W- [  Z4 a
  call print_4_bits
. L: u  x" u9 ?3 ~4 G  F; r  rol bx,cl% h& v) m0 W1 M8 K
  call print_4_bits
, F+ u9 u7 `0 G8 y# k+ |: w9 _5 a  rol bx,cl
9 C2 n( s% b& _5 p  call print_4_bits8 x5 g9 y1 @* J% k
  rol bx,cl
+ T$ |2 }5 b3 ?' X  call print_4_bits/ M" @6 {# T; S2 Z
  popa
; `3 b5 B: j: O, u0 }; A  ret
8 v/ F1 r$ D, R, T9 Z; |# I_16bits endp8 o7 ^% Q/ O5 T# B+ x0 ^9 s5 G' |
;------------------------------------------------------------------------------------------------
. @# f% l1 A  O3 X, `/ L( x# e8 o_8bits proc near
+ ^/ b4 V$ |: o$ s$ J* |  pusha   
0 o; ~6 k1 s+ y6 v) ?" P( B- P  rol bx,cl# u# f9 t  D* j/ z& H* f
  call print_4_bits
: D* F( ?) A- d- f3 _& r  rol bx,cl
% L1 v& e6 q2 F8 b& P  call print_4_bits
/ i" p/ P5 @' H  m: t, Z0 T  popa
- u) N0 @! r- N  ret
  |; Y& Z- L) ]- ~1 o4 d4 ]# S2 [- }_8bits endp
0 g) c( T# p6 G;------------------------------------------------------------------------------------------------
0 J8 A/ O! g" s0 Q5 C- s5 |7 k1 U' v; nprint_4_bits proc near* h' F9 G9 @7 s7 G3 r! J* D( j! _" }
  mov dx,bx
& \" x+ l- m* U! \8 u: ]1 m  and dl,0fh  F: @' q+ A: U! n
  add dl,30h
3 S; _7 X/ ~+ t  cmp dl,3ah
, ^+ Q  s/ V- X+ y+ i  jb print
* }4 V1 e) ^9 O  @/ D. Y3 x  add dl,7# i6 N# [/ H2 W, f! Z, _
print:   ' W# I" X% F4 O4 B9 e9 L
  mov ah,2
3 B2 Z! z# I( b4 W! Z8 R  int 21h0 {) F9 n4 w) g) T
  ret# p# o* d6 {7 g1 r
print_4_bits endp   ! E  Y7 T. Z6 G0 ?5 H
;------------------------------------------------------------------------------------------------
) E. x6 _1 P% M  L7 }% |& XCSEG ends% k3 s" B! O& N& ?! g2 o
END
您需要登录后才可以回帖 登录 | 加入计匠网

本版积分规则

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

GMT+8, 2026-11-5 02:40 , Processed in 0.093436 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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