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

顯示string會出現亂碼

[复制链接]
发表于 2010-10-19 16:41:51 | 显示全部楼层 |阅读模式
各位前輩好,以下的程式為在 big_real_mode 讀取記憶體的值6 G4 ]7 t* v6 o# r7 [
7 F3 n& W5 c* [0 p6 C
例如: C:\memory.exe(程式檔名) 01000100(Address)9 F3 t; l2 W9 J& U( Y: u

  u1 Z' i; ^) q3 d6 Z# l/ `7 P則會顯示01000100位置的值: v* G; i/ \5 l1 N& M6 s

! z8 s) c* `' s& G* U但是我另外還有要顯示出字串,但是顯示出來都是亂碼4 J4 Y3 ]& `; P* k1 U
! M& o, w) F' x/ K+ t
麻煩前輩給我一些指導,謝謝  3 T  S$ D' q& R

$ \9 @( Q( w& z9 |) c( j0 ~7 l4 g9 [. P% P) |
.model small
: ]4 ?) q/ x- \8 N% P.386p& \) R' a" i- ]0 D6 g2 [
;------------------------------------------------------------------------------------------------4 X, T# Q7 h/ ^. }
DSEG SEGMENT USE16'data'  
% X% ?2 {& j, d% m# w+ \: ~: W0 Z0 ^% N: o8 R. }0 e
DESC STRUC4 X9 ?, j5 p4 I
  LimitL DW 0  5 I# y( y+ z  O/ \; ~+ X
  BaseL DW 0  
% M) ]8 E) e& v( H5 t  BaseM DB 0  
" W  X" S- @( J% S/ O& U  Attributes DB 0  
9 P: }/ q9 s- M# I6 e! H( O( X  LimitH DB 0  
( Y& L, S! R% L# K1 \! m  BaseH DB 0  
+ x5 U+ }1 k) f" B$ q- V; [* EDESC ENDS! j/ R7 S- N  C! W! i( D+ t+ _
! E9 J: k- i: z- V: W6 q
PDesc STRUC1 z: n9 }/ n1 ]3 E
  Limit DW 0  . y$ E- r' a% g& Q9 q+ l
  Base DD 0  
( z* g  f0 s! ePDesc ENDS
, R1 T9 w, a& w$ v) N. K8 e; P  I; `8 s1 @  |  i5 _
GDT_def Label Fword
" K5 g) M. s: JNull_Desc DESC < 0h, 0h, 00h, 00h, 000h, 0># E0 M( v. R/ ~- h
Data_Desc DESC < 0FFFFh, 0h, 00h, 92h, 0CFh, 0># w9 G; q9 j9 P2 z0 r2 }7 f* V
GDT_Addr PDesc <$-GDT_def-1, >
: O2 b% a, ^4 T- G" Z! M7 T: b# E2 h7 D% q% s8 S% k3 K9 {
msg1 BYTE 'The Input Address is'# @6 {) f7 p: W) J+ Z0 J
msg2 BYTE 'The Data is:','$'
4 F5 U0 x2 p# h! I
' z, R" n7 A) U! i( w; G+ iDSEG ENDS
: a& k- A+ y$ W4 F
" C4 p; ?1 U3 f8 X/ {. m8 w8 g& W4 l
& f0 V8 u) j. {7 n;------------------------------------------------------------------------------------------------  . l6 s9 |$ L7 q+ [4 [( J" a% c
. o* z, [$ C: R3 U& u0 x+ F  |" G
ASSUME CS:CSEG,DSSEG
& i4 J' D; t8 M! D8 x5 k& b/ }( [- B) z
CSEG SEGMENT USE16'code'
! y( G( G8 [, L# C  
) d$ ]% r* E/ L; M+ R  push ds/ I, A/ x& x6 w( ]: f
  push es" s0 ^  g; O; F$ w. r6 ]  k3 x; G8 g2 s" R
  push fs
2 E' }5 Z3 Z6 K$ q. P. b; N6 h" |! n  push gs
/ n$ _9 U/ v( H5 Z7 x/ B+ o. M3 H1 S  
, S9 W; x/ T, f& {9 g  call big_real_mode/ n# {% L+ Z3 q) H1 z$ F6 t
9 x8 h3 c$ z- @6 c2 n
    5 Y4 {9 D# x; T
  mov edx,OFFSET msg1;
6 ^  A* t3 x' n; I5 [7 I5 G  mov ah,09h;   ! t6 x# n, \# ?
  int 21h;
- P9 u9 j, M. W6 q$ V4 H0 z. U  mov edx,OFFSET msg2;6 e. y9 ~4 ?, e% v
  mov ah,09h;
3 D9 D& h1 z) b* A! p8 ?( @, I. |  int 21h;
3 v( \) N% |8 r/ O   
# ^6 B  D$ k5 Q. }, f0 I; E  call PSP   
5 v/ e% N* V) e8 y4 F9 g/ \6 F   
& z" p0 A* k5 L/ I% @  call crlf   + }" C1 r, O7 N) Q% b  c' `
   
& E/ ~, m" H! E# B% v5 K0 ^8 Z  mov esi,ebx/ `) m6 _. t9 C7 W0 g4 ]8 y
  mov eax,fs:[esi]
5 w8 N' q0 e6 S% Y/ ?& N  out 80h,eax
. O+ C2 x  e0 Z& r5 {8 w  mov ebx,eax% b: ]  u. ~) ]2 r
  call _8bits
0 s/ q/ F) ?& |! c  |2 b7 }   
- t$ x; m4 g& s& L. G9 }( K  call real_mode* A3 S% c& c& g8 }! p0 z# N
   
' R5 s5 V5 K, X0 Q% K% d. f+ K  pop gs( C# ^! Z' F# J% B
  pop fs
2 w  u, P& S; }  pop es7 p) _- h% w1 A! W- b' U
  pop ds8 E1 T, d( C8 Z5 Z
    8 a9 c' m; e0 C# q0 @7 |
  .exit
. ]1 Z# L. @; n% b$ y( S3 e% p) E) p;------------------------------------------------------------------------------------------------  ]. a8 }! E* ]. _
big_real_mode proc near
+ J1 e' K, O. Y$ S( u) {+ x  Z$ k# R6 @  in al, 92h% c% B8 e3 n9 O+ ~. U
  or al, 002
6 I/ J# _$ `- U/ L! p! O  out 092h, al
* P/ z/ y1 p  I" e6 J7 q: F  out 0edh, al
/ L+ Q3 b( @. R$ r# J- u  cli
! f4 O7 g( O. z1 m; T/ v# s  mov eax,DSEG
5 i; u- Z6 H6 q6 y$ a$ W  shl eax, 4
: {! h% V1 x0 ]' ^  xor ebx, ebx- K$ M2 o; D- K# o# G- ?
  mov ebx, offset GDT_def$ c% S8 `/ `' ~% \  M
  add eax, ebx
0 D( {9 S% r( q2 @  mov dword ptr GDT_Addr.Base, eax0 o  P; `5 b# @7 J# d  F
  lgdt fword ptr GDT_Addr
  O; O5 g  Y- \/ b/ p# w  mov bx, 8: r+ Y# G  J- D! r' f; z, U# |
  mov eax, cr0
3 [/ Z" j1 O5 A  m  or al, 1
. ?# @7 G$ P0 }8 |0 U8 _$ ~7 d  mov cr0, eax' b6 v" y4 V& k4 Z" b7 ]- `' ?
  jmp PMod
" ~. u* [+ t% w6 s8 `5 p4 XPMod:
. _8 ?. A7 t; S  J# f+ t  mov fs, bx- T: L; p0 J9 `. z- {9 n# h
  mov gs, bx
  I5 ~; U* D  n3 j$ _$ V2 U% _  mov eax,cr0
- L4 D; S5 j% q5 M0 j8 I  M  and al, 0FEh4 S& M9 N( l' G0 ?1 Y" f' ]: i
  mov cr0, eax  
7 ?0 [$ w" x9 a  Q/ B  jmp RMod
  x* X* F2 y) b! }" l* `) q( URMod:& X3 ]. N" `1 A. e. G- l! k7 x
  xor ax, ax
' C. m" e& }/ i5 j2 G- G0 G  mov fs, ax
' C. ?4 P  L! ~! c. r/ P  mov gs, ax& c3 g2 D7 ^. I- c6 E) @
   
1 G2 Y7 b+ X! z% H6 x5 B& S  k" N  sti
+ {* s. m% J8 W- S0 g    ; G( s/ P! j8 ]8 w% C8 u
  ret
+ w9 z) R1 A; v8 J& J8 L" l5 n2 \big_real_mode ENDP" n0 _& U9 N1 e1 P0 O" {
;------------------------------------------------------------------------------------------------: _2 U% O: W4 D# K# N1 `+ d
real_mode proc near8 M2 F! H- J0 X1 k0 z% q- h5 a
  in al, 92h
# f) K; S: m* X7 O  ]2 m  and al, 02
- j6 k( `, Z1 g9 g  out 92h, al   
: u* r+ N8 b1 v: m+ h  ret
- m+ }2 _* x* Y- ?& g' N7 Z  p$ z/ nreal_mode ENDP
* U- {  u3 M- N) F" J7 |;------------------------------------------------------------------------------------------------
/ B7 Y2 Y& S2 M) d7 O% BGet_Commandtail PROC near5 Z, F9 y/ ?, g; \7 N( R4 R# k+ h
  push es  
" d3 W1 N2 \0 O3 \% C1 S  pusha
' g: A/ l. V* M) x8 Y  W( W  mov ah,62h  " k2 h" E/ q& z/ k/ j; Q) G  a  f
  int 21h/ W: x8 T" ~" b( H7 \% b, [; U5 h
  mov es,bx. k9 `$ f. a* s/ h7 S0 f/ z
  popa  
. ^; m6 G( v; u! K. c& A3 Z8 g  pop es
9 a! @0 g- ]! d' [" A8 w1 Z  ret. ~) _" ?6 M3 V  M
Get_Commandtail ENDP
3 `6 g0 o5 k$ q;------------------------------------------------------------------------------------------------
" Z  J: ~, G9 A$ ^PSP proc near
1 k) f% }  T1 q) L/ V/ s6 J0 x4 O  mov ah,62h
9 x, L: x4 m* W8 X; @( u  int 21h+ E5 ^/ o) ^0 E+ s2 Y
  mov es,bx   
6 N' c6 a/ l1 h, E  x  xor ebx,ebx) K, {8 D/ o5 }" H# x/ P% t, Z- s
  mov si,82h' w% b' ?) M. {5 O: X7 `6 Z
  mov al,es:[si]
1 q  @* S# g; }, p& y9 E" y  call Change
* q% K1 d; J. V6 _. A  mov cl,4
$ k. C( b2 t7 D, F& L) W; [# j  shl ebx,cl
# U7 b, B0 y/ l9 y  add ebx,eax
1 t. T9 J- w" J& ^1 j+ q  mov al,es:[si+1]' Q* {3 Q0 }9 K" f* r+ L! B  w
  call Change) [1 s; @# R! K
  mov cl,44 A6 Z$ j1 r$ B. \$ e
  shl ebx,cl, I" K7 m' l7 L7 ~  [$ h
  add ebx,eax
3 H% L6 V  j+ V6 X  mov al,es:[si+2], b8 P" t$ A  c" M& G2 w, _2 L
  call Change9 V5 s& S3 A. l  M( S) X' {# {
  mov cl,4
6 s, ^/ ~  {2 R9 k+ h  shl ebx,cl
" s9 y2 Y3 f8 ]7 ?* z  add ebx,eax# a! C* y4 O) J0 U
  mov al,es:[si+3]2 y  m* m1 f5 p" E: p$ z
  call Change
, `0 b) m% G0 R# M" c% y# z1 j! I  mov cl,4
# }: ^, I/ {. a! U8 g  shl ebx,cl# J5 C' M3 u' R' g
  add ebx,eax1 o- u: g. E& `9 h
  mov al,es:[si+4]  A8 c& v7 q" X' n0 M$ M/ x- e
  call Change% Q: M' o2 w% {, n; n$ O) h
  mov cl,4
; B: T3 v6 E5 T$ U  shl ebx,cl7 ^( g2 v. M7 v1 Z  R3 ]( ]" G
  add ebx,eax
3 V. e: I9 [* Q& V3 m  mov al,es:[si+5]+ X) k. n* W  D, p$ H
  call Change
3 b. L" U8 }) h: r7 F  mov cl,4
* ~9 p% Q; T! n9 D% W5 P+ k  shl ebx,cl4 n9 O3 t  L! r! j! d9 y) ^
  add ebx,eax6 L. H8 m3 P! e6 g7 M
  mov al,es:[si+6]
8 |2 N% g# T& n" C/ D2 y  call Change
( @/ p! ^3 P  D  mov cl,4
' {4 S5 ?; _9 A  shl ebx,cl
$ Y1 e! d" a1 m+ T, e9 M  add ebx,eax
- Y  c- N' Z3 Q+ {8 T4 a+ Q  mov al,es:[si+7]
# Y# g6 Q6 W- Z  call Change
3 S: {: z+ s5 W3 T  mov cl,4# V) K: g2 y  s
  shl ebx,cl
% \6 N/ m0 L6 L( u' d  add ebx,eax
3 R& }0 T2 ^2 M$ }% N! D  ret
, b' B# M  K8 ^$ G& m; S. T, H+ Y) @PSP endp4 a$ p) o- O! q$ K4 }6 k% [) X% w
;------------------------------------------------------------------------------------------------% j2 c, s1 F# g4 ~
Change proc near
' g! g- O: C4 b+ aA:     f8 j% H- ~7 `2 ~1 L
  movzx eax,al
" v+ @5 T: U" @+ N& c  mov edx,eax7 @& b  J/ X4 [. d2 |! F1 W- B
  cmp eax,'0'   
: b6 R5 K2 `6 a# E  jb A
# ~1 n! w2 I% B' G: j! i  cmp eax,'9'   
7 d: J. Z! G7 H: d: s  ja B
; a7 }' S" R  E  \1 {  sub eax,'0'
0 L; E( u/ L9 V7 {  jmp short E2 w- e) V9 E' p1 W( F2 {4 p2 u8 d
B:
! u+ I& ~( ]# R. w% l0 _6 s  and eax,0dfh   . c4 E0 e+ f+ P. s4 S
  mov edx,eax: i/ t) A6 Y0 f7 _; d" N( `4 P
  sub eax,37h   
( g( `6 I" P  [' w  cmp eax,0ah
% w; {0 ~$ a1 ^" x! r  jb A   
9 v1 V  ~8 M+ _) J: j6 d  cmp eax,0fh* |9 o2 m' w5 ?; L5 O4 ~
  ja A     P* L: V5 x6 V. f# \* V
E:
6 w  W, `9 M- A& X  push eax   
' a: h+ `6 C% v: o, ~3 H  call PRT   7 D, }8 M+ `: _( y' A. p
  pop eax
& @, S; k& v( l* V- }CExit:
( J* g/ y" ~6 L7 q9 a3 f  ret+ @9 i" `2 i* w2 r8 Q
Change endp, h7 a" U) |# G8 y- f8 ~
;------------------------------------------------------------------------------------------------6 D3 L/ e8 g3 ^0 Y( }: T0 T/ r
PRT proc near' k  `  R' Q, i' n4 z
  mov ah,02h# o% [6 _0 M; D3 ]6 S9 D) w
  int 21h/ v# u* v0 R  ?$ O
  ret$ g9 n& S+ a  C7 Q" n
PRT endp5 ]0 @4 q  C. [# s( R8 A8 k; L
;------------------------------------------------------------------------------------------------
! F7 Z4 }4 s0 p, X+ `* ]crlf proc near2 G6 Q! V5 L3 E8 [+ C% o
  mov ah,02h; Q# c3 j. P" B& p
  mov dl,0dh( O9 \5 ^+ \# v& q
  int 21h
' R. O" i6 e% j  mov ah,02h3 r# c2 J7 _; O5 L' {& G4 q/ M
  mov dl,0ah' v6 V: r; \' B, e2 O$ I
  int 21h/ c. O1 q1 W( c0 W5 p
  ret
5 c4 a$ A8 m' h3 X* |: Z9 ncrlf endp
; U& k% M# x% G;------------------------------------------------------------------------------------------------
+ `) o' Q+ v3 L8 V3 O- c_32bits proc near/ i2 d) T% K. v3 g6 s- v3 [8 N
  pushad0 T0 r" h% k0 K; |% m
  mov cl,4
. J: U/ X! f* d" |$ e0 \  a. P  rol ebx,cl
: ?0 l4 S2 `. f; r; y  call print_4_bits
5 D, D) w7 h2 Y0 c& b2 V  rol ebx,cl3 m/ K5 `# I" r' |9 N! l* s. B4 g
  call print_4_bits
& k" O& H- _" v# I0 ^; u3 l. `  rol ebx,cl' e( |9 T) x  s3 b; |( x
  call print_4_bits( @1 E# m4 [# G; `# B
  rol ebx,cl6 B( e8 K* x5 I' a# v8 h$ `# p
  call print_4_bits
* E! v9 J. b1 C. c$ F; d- u  rol ebx,cl
9 i. Z3 x* e, p- L' `% ]  call print_4_bits+ R" G' S4 j' Q3 O' k* h3 O
  rol ebx,cl
2 V- _1 C0 N9 s  call print_4_bits5 x$ B& ^' M* Q8 O3 d
  rol ebx,cl2 X8 C% c- v- S  k9 A+ R% S
  call print_4_bits
( I" A+ e7 t( i/ G) c4 W* T  rol ebx,cl
$ ^/ D6 {2 {4 u7 |  call print_4_bits
5 |4 M5 _4 U- v6 T. m  rol ebx,cl
4 c- b3 e8 l( ^3 p4 b/ D  popad. Z$ ?# v3 Y( b5 W) Y
  ret8 V* S6 ^* ^* A
_32bits endp2 d( B+ c5 Q2 A  @  k
;------------------------------------------------------------------------------------------------
& w7 s2 G9 L( i_16bits proc near
- q, q' H3 [) j/ V0 j" _  pusha   
0 _8 j$ K9 O  O  rol bx,cl
8 r! E! j! j/ r  D  call print_4_bits2 v# @. |8 U& f" b9 `; [
  rol bx,cl; I& g* s- ]3 x3 ~1 r' o  l) o. Z
  call print_4_bits- u1 E9 U3 V$ ^- ~
  rol bx,cl
0 C8 ]- v" e$ t, V1 w  call print_4_bits
6 ^" [+ U$ u; E' V4 S  rol bx,cl
! q# t! d  A& _+ m/ r3 e  call print_4_bits
0 P) }4 w8 i# {& i  f2 j$ q  popa, r/ j- d. M+ e
  ret3 J/ n  x) R1 M0 F; _" F  y
_16bits endp5 k+ b/ W. S& N' j3 F. k
;------------------------------------------------------------------------------------------------8 B/ a; B+ a4 B  D  J( {
_8bits proc near
9 [: a& g6 M, ?  pusha   
: x* d8 J1 Y6 J) h5 T, Z7 U" @& Y4 Q  rol bx,cl
# \4 w: ?6 e( t5 r  call print_4_bits
( A5 n) s- T- @/ k# ]) A  rol bx,cl- J3 y) a+ d+ D& n  g
  call print_4_bits
4 D' n- w/ X" |( X  popa7 A6 @9 H3 o! u- }3 A5 N
  ret# h6 \8 }2 J0 x* c
_8bits endp6 \) ]  k- U, Z; R) X& {
;------------------------------------------------------------------------------------------------
) u' {- W5 p/ B5 j. W  J: o$ C% nprint_4_bits proc near( J- G3 D; N& a: D6 a0 W  M3 Q. g
  mov dx,bx( X0 R( A9 M  T. v
  and dl,0fh: |" `/ w' c4 F, l+ l
  add dl,30h
; D& e; i4 Q( A! q  q: e5 C, Y  cmp dl,3ah
& j' x8 ^/ [2 x6 X6 g; [0 [  jb print
2 [( b5 j2 C# f$ |& C8 B0 T) l  add dl,7
& H2 n- h. b/ hprint:   8 u& A5 l7 f4 O9 C* ?! C2 T8 x
  mov ah,2
( K  ]+ q$ g* E2 v4 G( E4 ?  int 21h* S& g/ t# y7 P2 v; s) |% q, ~
  ret/ a8 F& ?0 E  d  T7 t, b- S
print_4_bits endp   2 X- E5 B  c; e) `
;------------------------------------------------------------------------------------------------
( E6 [% r6 }4 C' X+ [% R* wCSEG ends! [8 C  g/ Z  f4 c4 W; F- `$ \
END
您需要登录后才可以回帖 登录 | 加入计匠网

本版积分规则

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

GMT+8, 2026-1-12 05:37 , Processed in 0.054473 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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