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

顯示string會出現亂碼

[复制链接]
发表于 2010-10-19 16:41:51 | 显示全部楼层 |阅读模式
各位前輩好,以下的程式為在 big_real_mode 讀取記憶體的值
4 w& D* V  y1 C' [! ?1 Y7 k, U/ L$ Q0 Z+ f
例如: C:\memory.exe(程式檔名) 01000100(Address). n% g  _. f& Z- s

7 t) b( n( l' a- S$ U則會顯示01000100位置的值' B0 U/ e& c7 S# ]$ p

& @$ f' {5 c  W- u: r但是我另外還有要顯示出字串,但是顯示出來都是亂碼) C8 ]& m' Q- b) ~1 J* h9 `9 _6 b

3 p  x1 i3 f" J$ z麻煩前輩給我一些指導,謝謝  
' x9 T3 C6 c8 D3 a3 W  y# V; M) k4 k4 X, d5 H  V8 Z( R
+ q6 J9 a$ }3 S. s  b/ [# q
.model small) Q" s: M6 R* B, v0 K* w6 x9 O: y
.386p& y" |+ t) z" @/ j/ ~
;------------------------------------------------------------------------------------------------1 b  H5 Y: l  ]0 S5 U
DSEG SEGMENT USE16'data'  
0 S1 i8 n. {& R- o9 ~4 z. N2 f  Y3 i( Q7 M) d
DESC STRUC
+ P4 h  c  A1 h8 O  LimitL DW 0  # w4 G3 r6 v' S6 b
  BaseL DW 0  
! J: w0 I' }4 }( {/ r. x  BaseM DB 0  
- g0 L! |2 F8 ]' [, x  Attributes DB 0  
5 N1 J* y! G; @2 U0 B# N8 K# M" z. j6 f  LimitH DB 0  3 ^$ e5 b7 q! v, n" y
  BaseH DB 0  0 E( @" }" `( R
DESC ENDS
, r9 X6 g5 _' b& m0 T4 Y( ^! A# ~7 e' _* g* Y8 l- b  r
PDesc STRUC& f0 o8 _4 |* \3 _' x0 y) o& F. v
  Limit DW 0  ) p3 `9 g7 A8 w1 T
  Base DD 0  ! w4 |3 i8 ^' @# Z
PDesc ENDS+ k/ l, o! r6 P3 s7 z+ \
! N* x. B, m" z! i& h
GDT_def Label Fword8 X( c! [' q' r# j9 x
Null_Desc DESC < 0h, 0h, 00h, 00h, 000h, 0>
; \  b. O9 Y5 `: R- A6 B% ~Data_Desc DESC < 0FFFFh, 0h, 00h, 92h, 0CFh, 0>
+ J" k$ F) v5 R' r0 }, S- ]GDT_Addr PDesc <$-GDT_def-1, >2 \9 ~5 J1 ~! H/ e
" {2 E6 j( {6 |2 i, h2 u& P$ a5 Z
msg1 BYTE 'The Input Address is'3 l0 u& f) x! ~2 y4 G& o; l" W4 V
msg2 BYTE 'The Data is:','$'
2 \* c5 A! H0 @6 r% W  ~0 F6 i0 w2 D# q
DSEG ENDS
$ c; [( v( `5 C0 \% X( V* v
: K) |% m' c2 w9 r# v  d
( D. s# o" a4 i# K* C. t;------------------------------------------------------------------------------------------------  7 ]* q: X" |7 k

  s+ O- {8 f. G; [; X4 |" ]ASSUME CS:CSEG,DSSEG2 N! z  ~  z. x8 k) m1 q9 R1 |

# Q. |3 r9 W# @) YCSEG SEGMENT USE16'code'' ^0 n, P- Y/ x8 H6 i
  
1 T6 t4 {" H1 d  @8 s( Z) e  push ds$ f6 a! R* D7 J6 F! J( }
  push es2 w& t& }! x/ [2 s( ?$ y4 S
  push fs
$ _% |& A2 R+ l3 q( D  push gs
3 O4 c7 o. q; y, r# `/ W% q  
0 t# H# k0 c8 s/ N  x( k1 V) b  call big_real_mode: |; N3 H4 E# s1 v; G

; [3 k; H; q% t    5 g3 j) p/ a7 ]$ `3 ~9 P) ~& C
  mov edx,OFFSET msg1;% n% n; v$ Q* L2 N, j* i+ I4 U# h
  mov ah,09h;   
- f; w; B3 w& z2 ?) n! R. c! j# e  int 21h;
$ Y6 k( u% I9 E$ s  mov edx,OFFSET msg2;
4 Z, {9 J" X2 q' t7 P  mov ah,09h;# l( i5 T) b& N8 o
  int 21h;9 a% G9 a. A+ v2 G( R) D& `* @
   
! Z/ n& [8 P# n3 ^$ w6 [! u  call PSP   
$ ?# l8 b3 e  w: Z  r- v- v   
; e& P4 d1 Z* x' I" |  call crlf   , T) |; x- {  U" V9 w
    9 E2 }5 @, X) G- Q- B; V$ L' J: y
  mov esi,ebx
( V) `& G% l4 n9 E2 I  mov eax,fs:[esi]
* D+ M. ^0 o0 K) k% [  out 80h,eax  @. M, C) ^5 n; Y
  mov ebx,eax6 }# \% ?# l3 T+ [) `
  call _8bits
; {9 U+ n# x& f6 L, S5 W$ I   
2 ^: {4 d. ?/ T' x# t. i: ]- W  call real_mode& d1 [. G1 y+ m" T, d
    % I$ u7 S8 Q+ e( U  }' j5 J
  pop gs6 s- A- V, |+ N# `% J$ B- N
  pop fs: |! l1 q& W: Z+ d( U( v. [0 l
  pop es) V8 o; Z8 q- }  z
  pop ds
. K+ u( p+ l3 ?' T. T5 h    $ B4 m" ~: o- X
  .exit3 r% Q) G$ [; p0 S7 l5 z: H, W' {1 T* E
;------------------------------------------------------------------------------------------------2 ^1 D$ u' ~% j( Z+ g
big_real_mode proc near
1 h  g5 f' u& d' W* l2 K/ n+ B  in al, 92h2 [9 j! F( d9 S
  or al, 0023 W( \( }$ |/ C, l" Z) x
  out 092h, al
# C  T. x- P( }" a  out 0edh, al
9 y! Q+ K% h) ?" W, D, m# E  cli+ c3 D& T1 a+ r5 m& j0 R
  mov eax,DSEG
1 p# a+ z2 b* ?% K8 `  shl eax, 4
9 A- c  ]. Y9 e7 p0 @  xor ebx, ebx
4 k7 e: |% q4 u  w5 W+ b  mov ebx, offset GDT_def, Y$ s5 \2 {7 o  `. G; k
  add eax, ebx
8 |8 t! z# Y2 F3 C$ }# Q  mov dword ptr GDT_Addr.Base, eax, d; @' u, c! n7 u( w
  lgdt fword ptr GDT_Addr9 o4 N- z9 P7 l' M$ H  ^" c
  mov bx, 81 ]* b$ [( i4 Z4 \3 l2 \0 r
  mov eax, cr0
" Q; c7 o* b8 x* a& x: q! e  or al, 1% P/ i6 @! o) t
  mov cr0, eax
) G- ^5 o5 |4 T: m! K) O  jmp PMod7 T8 s+ L5 f/ [7 j5 l' g
PMod:! `, z0 p) E$ |2 Z& d) N
  mov fs, bx! }0 K7 S" t5 \/ i7 m
  mov gs, bx7 j% `& X. W  c
  mov eax,cr0
( k- P( ^7 g# A' w  and al, 0FEh8 z( t* L! `& p3 S
  mov cr0, eax  
8 O- L, V' S; C# v1 V) N" D& ~  jmp RMod
1 v8 M( P  M- @6 z/ [  Y' l9 h( nRMod:1 [' @. Y3 y! Y. o5 x
  xor ax, ax3 q7 g1 K8 l* S5 O4 t3 P* l/ {& d
  mov fs, ax% ~7 Y; v+ u3 O2 C$ y# j7 Y5 z
  mov gs, ax
: y+ I' w! E/ B4 H! g6 Z   
) Z8 t* M  q2 P% P7 D! ]  sti/ M" ~7 p$ J' e# j0 X
   
" S4 h1 L% B; y) {1 n3 E4 i7 |8 e  ret+ x0 n  b& U6 X( |. G4 S
big_real_mode ENDP
8 m# t* N2 [( X7 k;------------------------------------------------------------------------------------------------
* u, r$ V% J" T0 ?, N1 B& g3 G5 b. oreal_mode proc near$ f* Y% v: u/ I
  in al, 92h
6 K$ K! Q5 x! e# e  and al, 02' l: \% B" `; a5 o/ l
  out 92h, al   ) b0 A; {1 o  @/ m  d
  ret
  v# b0 y# _/ H5 O5 }real_mode ENDP" Z! f% y5 F. a# Q0 R
;------------------------------------------------------------------------------------------------6 g, o( I& L. ]% f# T
Get_Commandtail PROC near
3 |' U1 @- t2 z; P; p$ a1 R  push es  ' [4 z* g. [2 j$ a
  pusha& \: M! ]* ^7 ^2 i! a7 ~# h: d# W2 B
  mov ah,62h  
  A# f( n" D8 e2 D! M$ |4 a  ~* t  int 21h
. F# \! N: z1 v- F; H+ q  mov es,bx
6 B1 p! m' T: `6 o  popa  1 c' L1 q+ M) O' _, ]+ o* S% J3 J
  pop es8 e' g( Y7 G5 z6 G3 M4 y- Q& K
  ret0 _  i, Y5 d; b3 H* C- o  E
Get_Commandtail ENDP
/ O+ {- k3 K) G* k0 ~;------------------------------------------------------------------------------------------------! I& ~1 P( B$ m4 g! i2 ?; D& G) I
PSP proc near" q3 k+ W6 y. H' ~% C8 q" o
  mov ah,62h
; K  |8 _. _; z/ k* ~" @6 u  int 21h6 f; D& X# W; e/ G# @& u. D
  mov es,bx   
1 |5 _+ @- M3 u3 i  xor ebx,ebx) ^! c* u8 F$ p
  mov si,82h& E2 [. X0 k  p# V, b  J
  mov al,es:[si]
5 q3 g& b6 {+ k; S* K3 ^$ F  call Change" [$ {& o5 g  h7 S
  mov cl,4
0 N! q! S& _: ]9 D* ^/ \6 c  shl ebx,cl
- J/ X/ e* L( R2 H. U' h/ _  add ebx,eax
9 v) b! D0 U5 ^! [! t" d0 x0 y, G6 i  mov al,es:[si+1]$ b# V. H0 w/ X! C
  call Change$ c$ Q+ N- {$ H7 d( J0 l. Z3 ~
  mov cl,4- ^2 P% T- _7 C1 M
  shl ebx,cl
+ x- y& ?3 x! `* }, I  C  add ebx,eax$ d. n( g2 O. g; t# @! `
  mov al,es:[si+2]( i! G" f! \* `; q6 y& t2 t% M
  call Change
( [0 x$ o5 n8 a4 ^  mov cl,4: T0 I" ?  L- A
  shl ebx,cl+ N( r$ k+ x8 f: j+ H
  add ebx,eax
+ }: ?8 U3 d7 p  mov al,es:[si+3]
, T5 L+ D' C& c; r5 F& X$ T* r  call Change! l) J" y; V3 }( z7 E4 y
  mov cl,47 }4 }+ O. j5 D( T
  shl ebx,cl
) c! @6 C: w) C+ Z0 f- \  add ebx,eax/ S7 l) u2 z0 [2 P4 S
  mov al,es:[si+4]0 Z; [$ o2 \* Q* t4 I, j8 S9 h
  call Change- `3 O1 h7 @, t* d1 c  |
  mov cl,4% d* @6 g! `/ q5 w, h
  shl ebx,cl
% T: ~  ?; }. o/ Z+ |$ ]- Z+ O  S  add ebx,eax
8 Q9 g# A8 I& b6 @% p" i. a  mov al,es:[si+5]( N2 e  H7 l4 p- X
  call Change7 Y! _' V; n( D/ l" d* c, _
  mov cl,4
8 F* y& r  T; k  x1 x2 ~8 E  shl ebx,cl9 v  Q1 V% U) R. K9 f
  add ebx,eax
9 e- K  `0 M3 Y7 _8 C3 t  mov al,es:[si+6]% u* Y0 D# T0 e% i9 U1 o
  call Change3 Y% u0 S. g& a1 X$ k
  mov cl,4" v$ x. D! k. k% k
  shl ebx,cl. |7 U, D+ r! n5 v" u7 }" j# |! k
  add ebx,eax
- s- x6 W' |0 ?0 x3 M6 y  mov al,es:[si+7]- g- @0 G0 A% K3 @& s
  call Change
# k; Z1 @  Q: H1 [/ ]  X  mov cl,4; v5 C6 W; I- E8 B) F
  shl ebx,cl
% H& n4 J, v! B. a5 F  add ebx,eax4 M2 m# x. u- a3 v$ s9 Y0 T0 z
  ret2 M( q% p! X# F8 b! z: ^/ z0 ~
PSP endp
% x% A5 Z* ^2 ?;------------------------------------------------------------------------------------------------
/ a1 H$ j/ E! q) f# j- J* lChange proc near) d9 Y& u; b2 u  U0 B& `
A:   
( s  o9 C# l6 i7 J6 B  movzx eax,al7 u  L# Z+ Y0 g& o
  mov edx,eax4 `8 o' l  N: r' S& W# n# Z. |
  cmp eax,'0'   
  o# R, `. [# U* W  jb A
( P, F1 D5 O- n' E! u  cmp eax,'9'   
+ {) p! l2 y/ A1 ^8 N  ja B
6 t5 g1 }/ X; U( K4 t4 w  sub eax,'0'( `3 @4 J; h3 T" I. c! J
  jmp short E* o* z' d5 a: ~0 x- ?! G; ?& n
B:
- z: F' |+ Z% R4 Q4 v  and eax,0dfh   
- {, `4 f3 I. a9 G5 X  mov edx,eax
% I3 \6 k& k3 ~  sub eax,37h   8 @2 W' c* |) w& a2 h5 \# \  b
  cmp eax,0ah
) e3 F5 Q1 Q, s; ]6 W- t  jb A   
  F4 ~/ y- K- s7 L  cmp eax,0fh4 r; z) {+ X* `+ P- }$ ?* C
  ja A   9 u- T9 ]6 k! r5 d8 U$ s( M* R( ^
E:
" U6 e- ]& S' |  }7 I3 p" E  push eax   
% S; G: l" i* i  call PRT     L  k3 H& K- y# ~- ~4 E+ A: b
  pop eax' `( P- V2 v* \4 N
CExit:3 d  n6 n4 B+ [! k7 [, q
  ret0 X- M1 p- a5 L
Change endp. l+ Z6 N( a# T( X- ^
;------------------------------------------------------------------------------------------------: h/ J; \# O. o2 c
PRT proc near
% \, o$ c4 |9 _& Q7 ^, k$ {8 y  mov ah,02h0 N; k  I0 d  R/ {5 j' L( c
  int 21h- ]! t* G) I5 z) r6 I
  ret
2 @; J. ?- j5 i) g" A; _PRT endp# z. D6 H5 N. R$ ]) W. M- _  _% x
;------------------------------------------------------------------------------------------------
4 h& ^. f6 V: q% Q5 `crlf proc near
2 p6 k; [7 \  W  mov ah,02h
8 C* J# }! ?+ d+ X* I  mov dl,0dh5 I# O& c) @/ ]0 C  k
  int 21h
0 l+ r# x4 N0 C8 m" z2 k# v  mov ah,02h6 D! z  s0 P, B9 F/ ^& `, m' U; J4 C
  mov dl,0ah5 ~% h' r. M. k# B1 \/ o
  int 21h
8 X: g. y7 E1 C$ f7 v  ret( d+ ?& w- d+ x9 w
crlf endp1 i6 I9 ]9 `5 Z1 K5 O5 P
;------------------------------------------------------------------------------------------------
0 t, Y: I- Q/ k# L& F9 y4 D_32bits proc near. y- q2 L- ?( T/ ?0 Z
  pushad
9 K& x2 U8 ^) c. G# X& b  mov cl,4/ ~2 M/ s& o, V  Z4 c
  rol ebx,cl
# t5 U1 ?3 n5 w8 t' r( d. }6 l  call print_4_bits+ u" c6 T- z$ p( Z% R
  rol ebx,cl
% N. v$ x4 t" ?  call print_4_bits0 b7 K. c0 C+ Z0 s; p* {2 y8 U
  rol ebx,cl  r; q+ g' H8 l) o6 `# Q, B0 }
  call print_4_bits- @/ m( @7 ?+ X" b: }
  rol ebx,cl
" b+ D/ s4 j: W5 A9 j2 ?  call print_4_bits' S$ G& k" W" b5 H" v, R, I. B
  rol ebx,cl* N% h% s, l' C$ A
  call print_4_bits
8 V1 k3 r0 |& K+ G  rol ebx,cl3 a( E" }+ W8 A2 u( N- ?: Q
  call print_4_bits% D/ Q2 a1 j- y4 G
  rol ebx,cl
' U8 u  k7 X2 I# |" _( g  call print_4_bits
' L6 j4 D. [, }3 X  rol ebx,cl$ B  o  g2 R) W3 o& r* _
  call print_4_bits
4 B) U: `* z& ]- Y' ~: ~  rol ebx,cl& [3 Q& W1 ?7 S! _* V7 M( h
  popad. @( x- h7 z& R* x9 _( N" ]3 F# z
  ret0 [: I9 x: O9 B! ^- I6 k: \+ t& \
_32bits endp9 l" H; K4 M& R/ |/ l+ I
;------------------------------------------------------------------------------------------------
# z9 v2 E9 k' n( a0 ^0 P_16bits proc near
4 @7 x( N: U/ r1 S% x7 t" M  pusha   
4 m6 @" F6 ]8 ]0 u  rol bx,cl+ ~  y# l* N9 t- R- P$ z5 l
  call print_4_bits
' Q0 h1 z) @5 K" O4 N( {# t6 ?) i' x  rol bx,cl# w- I. K, ~  ~% D5 G3 @& D( U. q4 d
  call print_4_bits
) Q8 B2 B5 v( C' t  rol bx,cl$ J% A- E; z: \- B
  call print_4_bits- \& V+ _7 p' N6 w6 Y6 q* ~+ ~
  rol bx,cl- s% `' M+ b- ~) x! Z5 z
  call print_4_bits, {" k+ s% j6 Z; G
  popa5 B( @- o9 z! Y, b% b8 z
  ret
% _0 s0 ?8 B. T9 |2 G5 F% |_16bits endp
* c, ~8 w' |) z% m/ J9 ?( [% P9 r;------------------------------------------------------------------------------------------------
; @1 w  q. c3 t$ n5 L_8bits proc near9 {, ^7 b) C* O( H
  pusha   9 @+ S* _; v' X! b1 G
  rol bx,cl" ~1 N! a, J* E# J- i
  call print_4_bits
" ]7 s6 c8 W/ r" b  rol bx,cl1 Y8 _# z1 _( l  o
  call print_4_bits
* m( }3 ~' L" F& l( B. R  popa3 l& W7 X; A. U7 {# m2 h0 a
  ret2 H5 F3 L* j) z9 [/ D. _, g, L
_8bits endp1 I$ _2 X7 J- s
;------------------------------------------------------------------------------------------------
% \# n5 ~7 G$ j6 sprint_4_bits proc near
% W: L. ~6 g- i4 T8 S% S7 P0 U  mov dx,bx
: D0 R* U% [8 c7 i1 V  and dl,0fh
  E, `5 g) o  C+ {& X2 G9 d6 b+ {  add dl,30h
; L$ m9 q0 x: h4 d. E  cmp dl,3ah4 x1 f' s( b2 Y; |: p, m; ?
  jb print$ k4 u5 A2 f5 H1 W6 W
  add dl,75 ?( ]; }. v2 L% }
print:   2 z% v$ L5 q" a7 q; ~
  mov ah,2% I: E$ r6 X% J* L' F  w+ e7 L, Q
  int 21h
& L+ _; U; |0 k  D0 ^$ u. Z0 G  ret4 \! d& l$ K) }, C$ l$ W& W. d% }* ], N
print_4_bits endp     S6 k1 U# z/ S' [' z
;------------------------------------------------------------------------------------------------: k5 L* P$ t1 U, {/ G1 L
CSEG ends4 }0 ~* L* l" d) E" @
END
您需要登录后才可以回帖 登录 | 加入计匠网

本版积分规则

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

GMT+8, 2026-11-3 23:08 , Processed in 0.111973 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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