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

顯示string會出現亂碼

[复制链接]
发表于 2010-10-19 16:41:51 | 显示全部楼层 |阅读模式
各位前輩好,以下的程式為在 big_real_mode 讀取記憶體的值! |5 |* J# i* \/ x; m6 h' _3 M

: Y, S1 P/ Q; N例如: C:\memory.exe(程式檔名) 01000100(Address)  z6 t- f: o0 U7 y' a  Y3 e7 ?0 ?
: d4 Z9 P  X* W6 l+ Q. u
則會顯示01000100位置的值
0 ~. G. K0 r, _: v7 o! C; B1 Q
# T! `, n% U5 G但是我另外還有要顯示出字串,但是顯示出來都是亂碼
" ?" n; M* r2 f  F# z! Q6 ]5 |" O3 d9 H' A
麻煩前輩給我一些指導,謝謝  + i3 C: |$ T% e0 @* [

: ]( O. ?! x6 j# g9 K! v3 ]6 |" b! e/ `5 K" {
.model small2 a  L7 ^0 u3 f* g" d; p5 E! ?2 T/ e
.386p' n5 l5 }2 l5 \8 x! l
;------------------------------------------------------------------------------------------------% S4 E* ^8 z' f" w4 B
DSEG SEGMENT USE16'data'  
# m4 R* a' [" G( e7 i. B, _$ L) f1 b. z, ~
DESC STRUC, w; S% `; k% }. _
  LimitL DW 0  ) m) N* x) g& V( F3 A
  BaseL DW 0  : ?% o& ^) C4 z3 F8 b' N& Y4 Y
  BaseM DB 0  $ |, M( e8 ?8 G# D
  Attributes DB 0  1 u" D  W" `  d
  LimitH DB 0  
; S: i% h" ]+ j- h# W- t6 Y0 P0 v4 x  BaseH DB 0  1 S' J/ }% b* N% [
DESC ENDS8 ^: W0 ^  m3 i
  L- I; M5 m' x" p0 t* x5 v
PDesc STRUC+ ~0 S5 R1 k* ]
  Limit DW 0  
! l9 d# n$ e' Y3 t7 C  Base DD 0  
8 w7 h- D" X3 B! t6 U9 S  T2 {PDesc ENDS
. x" ^( y8 D9 r4 h& D  u
4 b1 Z4 e: B7 g: T+ ]GDT_def Label Fword
7 V  N1 b5 f! y7 C2 n5 {8 ^2 pNull_Desc DESC < 0h, 0h, 00h, 00h, 000h, 0>1 A" X2 ^5 Y1 z  H; z6 O) s% S
Data_Desc DESC < 0FFFFh, 0h, 00h, 92h, 0CFh, 0>5 z5 r7 ?4 b3 K/ [. t/ D( c+ ~7 u* R
GDT_Addr PDesc <$-GDT_def-1, >
3 t  s9 V8 `9 H: n: z0 [9 n; N/ s6 J; I# n
msg1 BYTE 'The Input Address is'
1 `' J& f- ?( J, Amsg2 BYTE 'The Data is:','$'- P1 }  {# n8 U
9 r1 H  G9 _2 U) t  `' i" i
DSEG ENDS
& }$ v. n, v  d  [& i/ l) E, }' X
9 |5 h. s1 m% Y  z( L: W
;------------------------------------------------------------------------------------------------  
3 J4 I2 d, W; u/ Q  L, ?% u0 z2 S% H; ^/ I6 R" h
ASSUME CS:CSEG,DSSEG  z7 W) A3 p2 v4 b* r
+ y9 q; W5 i9 [+ v, G& e5 ~
CSEG SEGMENT USE16'code'
) s( ]1 ~) D. D2 W  ) S; f1 ?/ C7 o0 j9 p! J- s
  push ds5 E# m4 `8 U0 s0 P; i: c" I( }
  push es
! C# f: P. [' h, g! o4 U% v  push fs: a4 Q, i" `* s# r8 Y
  push gs5 k8 ?  N) a" \
  . ]$ O! \4 I5 o
  call big_real_mode# X  d5 e5 W# n% M( k/ b

1 T  z5 G! `/ t4 W' r8 u   
' \) o. {( }) p% t) A  mov edx,OFFSET msg1;7 E+ p8 l7 k+ o2 q
  mov ah,09h;   
( @: {. R% b! u% u7 Y2 v+ e# d9 u) K  int 21h;. T9 E! u9 Z/ P/ p* Z
  mov edx,OFFSET msg2;
- g" ^" m# n/ Y  mov ah,09h;
- d0 _3 q8 _! Z! n# D  int 21h;* {: p7 f1 l3 W2 R8 v% w5 j
   
* g& {, O* T  M8 l8 G1 ~  call PSP   
4 A0 E. d" B  B    & e" E4 f/ }4 M! M. e/ k5 b
  call crlf   
/ u# t- R- y. i' W! d   
9 O( p; i/ N& ]' y  mov esi,ebx, l; r+ q3 B# n* Q, T
  mov eax,fs:[esi]
+ e$ Y; h8 H4 R& T( r( H9 E  out 80h,eax+ i$ }% {' }; u4 @
  mov ebx,eax
$ Y9 b' k7 Z/ I% S# Y7 l" e) `  call _8bits& i& z' t1 p6 `. q+ s
   
- _0 i5 L3 ^/ d( P& y: j  call real_mode
; ^% K5 ?( q: ~; U+ g; J) _. W1 V) N% N   
  w% d& \# N' P6 Y; j: W  w4 D) }7 U  pop gs) ?: k7 i( A% H
  pop fs
$ x" c% q) c" l  pop es) }  f2 v6 Q& G! u) w& z9 E+ e3 ]
  pop ds) F+ j. b& u3 \" z! Y( u
    5 U5 Q6 E( N& l, q- o1 }2 w
  .exit3 L! ]1 P( i8 r& _- l  h' g# L% t
;------------------------------------------------------------------------------------------------
9 |) u( F# V) r" P4 l) dbig_real_mode proc near
" y6 z+ j" a" k7 `' j: x: S0 P  in al, 92h
! s, f) i' `, j. s  or al, 002; J3 r! x5 h7 M' t, a2 \5 S4 f
  out 092h, al
' S% p9 x! t& f; X$ ~6 |: ]: V: S6 F  out 0edh, al
) S+ B) g( t  @% `& A4 s  cli
5 m; M0 M/ C) X7 P0 V  mov eax,DSEG( T2 Q0 ]8 s4 ^. F' V: {3 D2 z
  shl eax, 4
7 J3 G; @  f, H  xor ebx, ebx
8 J& e. f8 U' D. m& l; j  n( L" v  mov ebx, offset GDT_def
3 H6 J% c1 ^, p/ X% s/ S6 [  add eax, ebx+ _% g& ~, }# Q
  mov dword ptr GDT_Addr.Base, eax
! Q. d. e7 N0 j( Q7 X+ u  lgdt fword ptr GDT_Addr
/ N3 g: }' k% O! n  mov bx, 8
& H0 o- ?6 F- {$ \$ s+ B  mov eax, cr07 O' [* G( c5 V
  or al, 1; H) U: h4 A* y3 J' O7 f8 U
  mov cr0, eax# Y2 E. {8 j# i: d; X. q3 ?* V& X
  jmp PMod! Z/ x  W5 }% X7 u! `
PMod:
5 Y, q3 l( p+ _4 w  C9 Z  mov fs, bx: D3 e  Q6 t$ r( y% B1 z# [- Q( N
  mov gs, bx$ C7 ~0 m6 b+ f5 ]7 P- M- G
  mov eax,cr0! f' R0 ]. _# a# S3 N# G* K- y
  and al, 0FEh8 d  M8 t9 U0 s2 @8 ]( [5 t
  mov cr0, eax  
& f8 U9 g9 d  q( a  jmp RMod' f' M1 L  U# O4 T5 g, |
RMod:
! l0 G. J3 m" n, ]9 m4 s" i  xor ax, ax
) ~) i" o, D# k  mov fs, ax+ l( x- P0 E' a/ `( z* l
  mov gs, ax, s$ I$ j8 q& H% _! G
   
9 d6 o' X$ r$ `' H& R' r  sti
6 z+ c# V$ ?3 [$ N5 [2 U  {2 s, ]    , ^# R' ^  O' v5 [0 F2 y) f
  ret& x6 C& p& H; Z7 t$ J# t3 L
big_real_mode ENDP3 K( K' q" _7 C* f, u2 N: Z
;------------------------------------------------------------------------------------------------
  ]6 L9 |6 ?& {& R; t- areal_mode proc near7 |8 q( r6 I  W0 Z
  in al, 92h# |2 i% s8 U' o2 _8 k" _$ i
  and al, 02: ^4 e1 k& i9 z1 p9 z/ O: y
  out 92h, al     j2 `# V" F7 x% @. D; x$ G
  ret
& G$ m  `) {5 breal_mode ENDP4 I! n7 o. w" l
;------------------------------------------------------------------------------------------------
7 M1 P5 h, W' Q6 XGet_Commandtail PROC near0 b, P1 C+ y4 B9 P" f8 Q
  push es  
: i; w9 i& ^  e  pusha
8 A1 A5 h; O+ ]* U/ k( Y  mov ah,62h  0 P$ l6 q! u* t8 H* d8 Y
  int 21h0 W$ `# h" i' b/ A# S
  mov es,bx
0 P; ~( y1 p6 B3 j% n. U7 }0 l  popa  
/ _8 x! h" m5 e# y( k  pop es% X# D; b  p# @, d
  ret# D: C" v, a$ E8 S7 p( b
Get_Commandtail ENDP1 e: G# u& i4 @; \" M
;------------------------------------------------------------------------------------------------3 \4 |# H+ r/ \
PSP proc near- U/ m+ s+ @5 \+ l- _: h
  mov ah,62h
/ I/ i- ~. X# x/ w/ s! R# b- n$ J4 `  int 21h( }- C7 Z: V: n( P
  mov es,bx   
$ b1 T- _) E/ }" Z1 R  xor ebx,ebx$ O7 o7 i: {. |: b, o: |' ]4 @. f
  mov si,82h
# }( z+ k2 r  o+ F4 S  mov al,es:[si]
+ Z% b7 v5 B4 e! J9 e7 u* c  call Change
& {+ v5 C6 q  I  mov cl,40 S1 A9 l) O& U5 |
  shl ebx,cl
* q' u/ B8 ~; ^% h  z) F  add ebx,eax
: {, T% d# c/ |" B9 I  e1 w  mov al,es:[si+1]7 A# G2 ^- y" i$ y0 V( {, K8 N( C: S
  call Change( ^* Q  S, X( ^9 O4 I; Z! ^
  mov cl,4  e' ]) M8 C8 i6 }7 v6 j3 ]2 G
  shl ebx,cl
8 B; B) ~' r5 H  add ebx,eax
  E/ C/ Z8 i: ^! O$ G  mov al,es:[si+2]' d& ~; o. w7 p
  call Change, U+ M1 u% c8 D
  mov cl,4
5 G% X% O. z" K. A3 w0 X4 g/ h  shl ebx,cl% E: k$ u/ c, O. R$ @6 a$ p2 @
  add ebx,eax6 u5 ?/ U9 C) M# z
  mov al,es:[si+3]
8 s0 K0 V2 t* X! T1 g2 h* f6 p  call Change  b" c1 y: A6 j; e& O0 T
  mov cl,4
" Q0 l  s' I- a5 ^* v9 Z, e  shl ebx,cl
* ]( h% i9 p, D2 g  add ebx,eax6 j' c& y: E( P' w7 T# s( D/ m
  mov al,es:[si+4]
( g6 y- f1 v7 @4 j  call Change
5 g1 t9 n$ b% I  |+ Q  mov cl,4. W, U8 H  V& `3 n7 V0 p' p( b
  shl ebx,cl
. ^/ R  D% n6 Q; T! P) H) V7 Y  add ebx,eax
4 n- X1 L% O9 W5 J  m  mov al,es:[si+5]% |8 }) n0 j3 Q9 o$ \
  call Change2 X  w# {1 E0 n( s" G
  mov cl,42 U$ d: S( y! k% U2 `
  shl ebx,cl+ i5 c, j# B2 N- H# J' u0 _
  add ebx,eax* t; S) e1 a8 I# Q/ ?, W; `+ t8 }6 X
  mov al,es:[si+6]
9 t& g/ R" ^9 j1 u1 L; h) u4 u  call Change
" H. G7 F7 @1 o+ j1 i  mov cl,4' y6 q& z( ^! l2 s
  shl ebx,cl
0 P0 ?7 ?& x5 @; p( e# @  add ebx,eax: i2 {! O: l! T- H& L
  mov al,es:[si+7]2 R) o* W- s6 J! V
  call Change
4 B: F2 a; H* z8 R  mov cl,4
8 }; c7 M4 A) O& i) t  shl ebx,cl/ W" @- i3 U, g
  add ebx,eax
! }9 V" P3 \' U8 _5 J5 z' {3 L  ret
7 Z% }1 C0 V8 B9 B/ d) a5 [PSP endp
4 Z2 O  i; U2 B7 [$ p+ H;------------------------------------------------------------------------------------------------
: s% H3 s) s  r% C1 n# jChange proc near
2 c1 U: P/ ^5 j4 Y: cA:   9 y8 t( D9 V+ l: ~
  movzx eax,al: ~. M& o  o6 p
  mov edx,eax( n. u/ L# y* d
  cmp eax,'0'   
% K0 D- I+ c9 [% E8 a* g  jb A
8 }7 e1 |6 o9 f0 M% N& S  cmp eax,'9'   
; P1 o0 H2 e; y& L1 H$ _  ja B
" l& {2 D) W$ d( F  sub eax,'0'
6 N/ @/ {" D5 N( D  jmp short E
; i  v1 p9 e/ bB:# q$ `( O1 P2 N
  and eax,0dfh   
! q9 y' X0 f1 Q8 ^/ n5 [  mov edx,eax
% D6 Q: c) P; J: X  sub eax,37h   
6 P0 G* l3 K( [- Z, V& ]; x  cmp eax,0ah
" g9 [& R# n1 p& A" p% T  jb A   7 K) H: {7 F0 e9 p/ ~9 C" _1 V
  cmp eax,0fh+ |- y2 X" o/ ?. X1 @* Y
  ja A   / l  d9 L/ }4 \& _7 A
E:# H- _& m' o# \# ]4 J. I/ ?
  push eax   % B- P: y* `9 ~* q, u
  call PRT   
* S6 z1 E0 a4 x* W: R9 ~/ n  pop eax
2 K, z' d. p) i3 Q0 M0 FCExit:
% x/ n; b2 j7 W0 o/ i* j  ret8 _! J8 x' ?/ j0 I
Change endp8 b4 @7 _! C: _' H% {7 d7 U
;------------------------------------------------------------------------------------------------
% A1 i  ?- i! X  e: i: x: u& o/ I- y* nPRT proc near# N% K( N1 [4 k7 O1 K3 ]& S
  mov ah,02h* J0 B- `1 n2 c4 i9 r; S
  int 21h, n6 u3 D0 m# E4 v! x* U
  ret
/ d0 P$ G: U1 _! {8 @0 B) kPRT endp6 O. C- @! h, B* f9 O$ G
;------------------------------------------------------------------------------------------------/ D# z: f& M# e5 M' r' t. z8 j8 r; d
crlf proc near
; l5 S5 S" y8 n8 ^; q  mov ah,02h
% L# w8 G8 m1 O: B) T  mov dl,0dh1 |) J% |; A' k
  int 21h' \- P" a& u. E) F7 d
  mov ah,02h3 N4 p- ^4 B* R9 ^9 E* T; a4 c" b
  mov dl,0ah2 w. \6 D2 l* j- K- r
  int 21h3 \0 Q- m. j* e. w$ L* v, ?
  ret* d2 ]0 ]& V& E+ L: V
crlf endp3 u) [/ H9 m9 Y4 F& p0 ~
;------------------------------------------------------------------------------------------------
: _* I4 z/ w0 K( {6 b7 O/ I_32bits proc near# v1 g' [7 {2 d+ x9 y# X
  pushad
% |5 n0 O8 P/ L2 p  mov cl,43 M! q# R5 \* _& P
  rol ebx,cl
8 t& h' U1 y' k; y. }4 }: V  call print_4_bits
3 r* i2 S' Q+ Y: Q  rol ebx,cl
. D" U2 v/ y; w  call print_4_bits
; }3 F6 E, [! L# r  rol ebx,cl3 E/ X$ C8 u! {$ ^: b  h; X. X
  call print_4_bits
& h0 q6 @" J+ P) v: {: w( `$ v  rol ebx,cl
' j  o2 I+ E  j  call print_4_bits
/ N) [% S; n  k9 t1 O/ x8 I  rol ebx,cl2 U7 w+ P( R- {8 V+ @9 [: {: D
  call print_4_bits
- J% B6 g, a1 r$ B6 {4 o  rol ebx,cl/ h* @: ]0 |6 Y% v" q
  call print_4_bits
; i' p( o+ y1 }( F1 j0 L* h, l5 L  rol ebx,cl
  P/ }2 x  c6 C8 r, O1 i9 {  call print_4_bits2 z: l- u' _: f; U; l) P
  rol ebx,cl
5 [5 ?( S' W7 y1 V5 e  call print_4_bits
9 v, ?4 B% p  v% _  rol ebx,cl  D" y6 I2 j! Y( \' G
  popad
  l& E) e% C/ E* O% p: l2 y  ret$ U8 @8 }& O' r3 u0 c4 X' e
_32bits endp1 J% h! u& ?- u7 m/ N# e
;------------------------------------------------------------------------------------------------/ ]+ ~$ v2 I$ a  R7 f  l  v
_16bits proc near
% M$ ~$ A/ M! N) J  pusha   9 S8 t3 ^- N6 j5 @  @
  rol bx,cl
: [# g) f3 o- d% G: s  call print_4_bits
  {3 C$ w: z$ i' L  rol bx,cl
8 F- Q" ?, S  v- s) N  call print_4_bits
; q# L( G, Q+ K- f6 N  rol bx,cl
/ M, N1 E; K2 L# S0 c/ ^5 i5 l% ]  call print_4_bits) c& _! X% F6 ]$ h2 c# e6 U  I  n
  rol bx,cl
+ p+ D  w  F2 m; F5 Y1 r8 l3 n  call print_4_bits4 a* T; n) O6 ~1 u9 @. q
  popa+ J' Y  [. |3 ^7 S6 `0 ^1 }$ d3 d
  ret  o8 h$ N+ P4 Q; ]% G) V, K1 I
_16bits endp
9 i; {: Y8 N+ N# n7 a' ~& o1 z;------------------------------------------------------------------------------------------------$ u+ Y; T" ^' ~+ D5 b3 v/ E2 U" p
_8bits proc near) m8 ]2 D4 y/ [( `8 [
  pusha   
' Z. V4 n8 B* w1 y7 |5 {/ w4 c3 r  rol bx,cl
; v* I0 P. A7 T6 J. H" Z  call print_4_bits
3 f0 f4 i9 {$ R( G5 t  rol bx,cl; v& h* `7 o! t6 o# A% B) {
  call print_4_bits
7 ]9 X$ x7 k' Q0 T* g' ?' U+ l  popa3 E8 O  k: a0 x' E, K- ]+ e
  ret& g+ q. R/ c( S" b
_8bits endp3 g4 T  f# s! \
;------------------------------------------------------------------------------------------------
9 Q9 s/ q8 L, Z, Q% \print_4_bits proc near( ?% l: z  R, A4 F( g0 C( x
  mov dx,bx( Z. k6 |$ P6 v! `3 p5 M
  and dl,0fh6 J/ m" l  o- A( }
  add dl,30h8 Z/ Q% p, ~8 W* J
  cmp dl,3ah/ |  R0 c9 t8 N' Y* l
  jb print, V% d% M! }( B* Y- [6 H/ @
  add dl,7
) n2 ?6 R% _$ y6 m. J0 Q" g- S0 aprint:   
+ L; q: A  Z+ t1 F) {/ \  mov ah,2
2 V! J! q7 r4 |6 `* E& N; z3 u) {  int 21h
3 M, p' `, U3 }3 T  ret
5 |  v7 D9 J+ e! r' ^( u9 B/ Vprint_4_bits endp   ) W& v1 W# ^" M5 K- Z+ a3 \% |+ Y6 @
;------------------------------------------------------------------------------------------------
; `3 k1 X" |1 n+ U2 z$ z) ~CSEG ends
  P1 L3 @2 u3 E7 B% c6 FEND
您需要登录后才可以回帖 登录 | 加入计匠网

本版积分规则

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

GMT+8, 2026-7-19 21:26 , Processed in 6.533267 second(s), 16 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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