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

顯示string會出現亂碼

[复制链接]
发表于 2010-10-19 16:41:51 | 显示全部楼层 |阅读模式
各位前輩好,以下的程式為在 big_real_mode 讀取記憶體的值
( y7 [: C7 u* X6 P
9 l  u/ v+ q2 D3 n例如: C:\memory.exe(程式檔名) 01000100(Address)
1 x" N( ]6 U6 `9 W  W& a, r$ w6 v$ |( r* {) ~/ Q
則會顯示01000100位置的值0 b5 H5 O' |7 k' i

& h- d8 t4 n& `% q6 |* |8 L/ b3 u但是我另外還有要顯示出字串,但是顯示出來都是亂碼6 P) d: O& r: K( h. ?( I( m+ S3 K) _
- ]/ n/ }: w6 t$ j! _6 M
麻煩前輩給我一些指導,謝謝  
' w; s2 C6 Q! S5 C; }
5 x7 C- [' l' ^
( T6 j9 b' ?9 P9 @.model small7 F6 W, {- a* g
.386p
: ^( o; Z& [: O1 ^;------------------------------------------------------------------------------------------------/ ^7 r! v# _& Q  \
DSEG SEGMENT USE16'data'  7 z8 L9 ~- `  v+ S2 O& ^% k

) S/ {8 u. z4 i6 B( \) cDESC STRUC
0 e0 m  G0 e% I; v! F( b  LimitL DW 0  
5 E4 i+ e( r1 r- ?  BaseL DW 0  
" w5 A+ o9 C' \; |; f: K% B  BaseM DB 0  
/ A3 E! b3 B( `! G  Attributes DB 0  1 x. W  p4 ^' U
  LimitH DB 0  ! ~' h3 Q& ~( y% d( E' {
  BaseH DB 0  5 g% l, E; o4 n5 c/ [
DESC ENDS
# b) A+ g5 M4 v
2 Q' f) N' u! B! i( Y" Z4 NPDesc STRUC
) `$ f) E( K$ R( C/ v9 [# c& U  Limit DW 0  ( C# b0 h) M0 e8 W0 T
  Base DD 0  
! W  @# E( I  FPDesc ENDS; c: [9 r; V8 X+ Z2 I/ ]3 ~

- J% ]9 z& h: cGDT_def Label Fword
$ B6 [6 `# Z) G, mNull_Desc DESC < 0h, 0h, 00h, 00h, 000h, 0>' h7 s) p, t1 T
Data_Desc DESC < 0FFFFh, 0h, 00h, 92h, 0CFh, 0>0 j# D) H, z1 `4 K
GDT_Addr PDesc <$-GDT_def-1, >+ I! q( V6 J  ?7 K: K
. b% ~! F' E1 k7 n( ~% T8 p
msg1 BYTE 'The Input Address is') h' u9 G7 E( |9 e
msg2 BYTE 'The Data is:','$'
* B4 K% s$ a4 ~8 b0 m/ @# h# p, }; G' ~2 d7 c! I
DSEG ENDS
  Y, E' w0 a. t7 ~. b) w% ~1 ]. }( @" P, S

9 E; N* c  L  d; d- H2 R5 l;------------------------------------------------------------------------------------------------  + }6 i5 S* s7 M7 Y6 q5 G

1 V: k3 p0 q7 i6 u: RASSUME CS:CSEG,DSSEG. U$ l. t2 b0 I, \, t+ _

" K9 ]' d6 A  s/ k! |CSEG SEGMENT USE16'code'
6 J5 p6 ]& n- g/ C  
, C7 H% m8 r# I% J; j! f0 l  push ds
) Q6 o5 y5 A( Z  push es' M# E( P- y$ _9 c  n, ]" E2 y
  push fs( |: e& g- z5 G( O8 C  ]( J& p
  push gs
" x9 L, D5 x' \" w  & |  P0 A  l) w1 X
  call big_real_mode: w% m  R$ N; K7 w: o9 R

$ o9 G- |  e' t4 ^$ j: O) G   
3 ^( q' i) m% x2 i  mov edx,OFFSET msg1;6 w3 ]! l/ c3 j4 A9 k5 |
  mov ah,09h;   . M9 M: S* \' v; C6 M$ i* b: S! v& _
  int 21h;
) e: k; T$ o7 b( j0 b  mov edx,OFFSET msg2;
$ v/ w) R' b2 ]  mov ah,09h;$ k; o; [3 F+ U. V" e7 J
  int 21h;+ }) A( b2 W, y% m4 i# h
    # x& n! k. X& p# b+ }
  call PSP   ' p! E& Q2 c; s! C  q* x
    5 M- g* `5 @) S( Y  M; t4 S
  call crlf   5 f+ i) U# n! X; f$ v1 Q- J
    2 \! ^6 g- T; v% }
  mov esi,ebx4 y/ O7 x3 u& h+ k  z4 D$ w
  mov eax,fs:[esi]1 q$ C4 C3 Y8 H+ i! U$ y" u
  out 80h,eax
( v) u# K9 H( b5 ]  mov ebx,eax
% }' U3 H- l1 R% P  call _8bits6 o) X0 a% X' ?4 w: h2 U
   
: ^) l1 l; j5 y  call real_mode0 ]& ]& H, E. @# c& x
    ( C* I' I' Q# _9 F, e4 s  U
  pop gs$ d; ?! }, R3 K* ]
  pop fs
$ V' d' L: B! `: Q  pop es# |. f, C1 S# s# I
  pop ds9 M$ b( w4 V- ]& y
   
+ ?; F( v1 I# L" b- l4 w  .exit+ A8 Z3 J& ]$ ^5 k$ x0 k$ J
;------------------------------------------------------------------------------------------------( ?0 g5 y9 i& g$ j0 n% q& D
big_real_mode proc near
: _; y; A. I* \; f8 L  in al, 92h5 p: j/ l% m/ t7 L* m
  or al, 002  R+ M8 Y- ^! a/ @% z
  out 092h, al
; z6 Y' {6 U3 e! Z4 ^3 w: n. F+ Q  out 0edh, al! i1 z# q/ h, B" ?
  cli
" |) Y, ^8 ]6 x6 ~  mov eax,DSEG
& C4 n9 |& J6 L1 l% l8 r  shl eax, 4
2 i+ d9 I9 Y' X* D# g# ~  xor ebx, ebx
0 u6 {& w9 ^) \, n  mov ebx, offset GDT_def
* I- k( [& i; i6 O/ W+ b& `0 j  add eax, ebx
) `+ j! E0 S% w  mov dword ptr GDT_Addr.Base, eax) J! h' K& P" g0 t6 _; }( W, `
  lgdt fword ptr GDT_Addr! \; G% K# s) B; y. C1 O- Q
  mov bx, 8
" v  U$ `7 K: g' z  mov eax, cr0
/ R( |/ m( m$ Z  or al, 1- [! ~7 E; m! O8 X, E0 E
  mov cr0, eax' l: j+ A6 W" G# G- S
  jmp PMod9 U+ E  ]% {2 V( M5 l7 \
PMod:; p, h, W! p$ S1 S+ q6 j# ?% M0 s) d
  mov fs, bx
! U" A% F# S9 P5 r  mov gs, bx
. G, n* ^* b4 O' R  w, ?& }  mov eax,cr06 a# C  S) j6 _6 c" U
  and al, 0FEh' v/ T0 _* \3 L
  mov cr0, eax  
* f" X2 Q) b& s& L  jmp RMod$ x" _+ b: A* B7 X  I  c
RMod:6 Z! q9 \5 |) b2 a
  xor ax, ax/ {8 M0 Y: D: M$ x
  mov fs, ax9 O8 Q6 G, r9 l2 G( a
  mov gs, ax7 R  d' m, Y. k+ K9 F: j# G8 R
    ' J& U& x9 Y% M/ x' L: o. w
  sti
1 X2 \# C; k3 Z$ l' P    : f9 b% d& \6 i/ ~* F
  ret
1 P& o( S) ?5 E+ T: abig_real_mode ENDP
$ J( V, h3 v+ e8 u: U3 `. a& o;------------------------------------------------------------------------------------------------
; e+ @' @/ X; H) D& Vreal_mode proc near
3 a! Q+ u0 K& h, w1 B# d1 \  in al, 92h% n0 A' x+ E" b0 G* O) S
  and al, 02# f$ ]$ E8 v& z! }  \4 p
  out 92h, al   
. {2 G! ^" E7 O( u  ret# h% V2 z1 ^" x1 _; J# c$ ~0 T
real_mode ENDP4 W2 U5 f, N! `) q
;------------------------------------------------------------------------------------------------
: \  J5 O" M9 T* qGet_Commandtail PROC near
0 Z6 u2 O& c" L$ w+ z  G7 {2 L  push es  
% U5 v3 h/ ]  G! {" R$ z! _' f' `2 S9 w  pusha
2 A9 @1 R8 \9 I# e9 t1 R  mov ah,62h  
* \/ B4 p/ C; h2 z3 V2 N  int 21h
- p! M) q( A2 s  mov es,bx+ i0 _/ t& b& _: x; }$ {: `
  popa    a5 U, w' w8 c
  pop es; P7 N+ v" g' X5 j5 g; F) X
  ret
5 T" y( j8 |- o0 X$ P( LGet_Commandtail ENDP
" H- _7 W. d! W+ D3 G;------------------------------------------------------------------------------------------------
' j' H3 l# u0 D/ u& i( YPSP proc near
; H7 G: _& ?& Q) ?6 @4 \  N# Z  mov ah,62h3 p" v$ F1 t" b" W
  int 21h/ q6 N/ z/ s) U7 {- k0 m. `3 q  G
  mov es,bx   7 X1 K  L$ K' {
  xor ebx,ebx4 L& k6 M! e( D, @3 i$ @
  mov si,82h
7 G) l+ d2 ]' A3 ^5 L5 G3 L  mov al,es:[si]& X" n6 q) r0 N" ~
  call Change% x/ f/ g6 J& M7 ~7 \
  mov cl,4
( L* K+ q* g. L3 c- h  shl ebx,cl- E4 ]& E3 w( j& b% q
  add ebx,eax
) i6 N* x7 A& N2 ]1 P5 `  mov al,es:[si+1]5 s4 F1 {2 X/ g: R7 u
  call Change
- d3 V! [- W4 c8 s, r7 {  mov cl,4' x( P* \8 a7 k2 e
  shl ebx,cl
, x* c3 D4 z; E% r  add ebx,eax# k, ]4 H1 _& @. G; D& C
  mov al,es:[si+2]
) c0 C$ _( J6 o. _  call Change
. k& [: {7 A5 L8 a  mov cl,4
1 F  ~% N5 \9 ?/ [4 F1 P  shl ebx,cl5 U0 G% s5 C) g1 Z
  add ebx,eax. ~8 _  E" O# R7 X6 U% K7 d
  mov al,es:[si+3]- a2 O  D( ?, y/ m1 A9 E# u" h4 ^4 A
  call Change+ w) y4 g! k7 \# @
  mov cl,4
. y: g- Z4 x: g# }  shl ebx,cl3 w7 h& h6 D& c) z
  add ebx,eax
. y! j6 l2 b/ ^& x  mov al,es:[si+4]; N; U  u1 {7 Y
  call Change
5 f% F: R2 {  ?# F- `4 p! U  mov cl,4
0 }4 a: x  b7 U; j3 T' t9 @  v  shl ebx,cl
( v7 E8 O  G, b2 G! i  add ebx,eax  M( _8 T: C4 P5 M# X# y" w
  mov al,es:[si+5]0 b+ h. t! ?  w" S' ^! J
  call Change
  x4 A( _" K/ `  mov cl,4
3 ]; }3 z- m  @8 d" B. ]7 V0 i  shl ebx,cl- H4 ]3 S0 n! z
  add ebx,eax
  ?( c/ `, a3 G' \  U: F" j  mov al,es:[si+6]
, m' B" y4 p: ~% A# v: e4 Q9 B  call Change2 P  U' m- o& d9 x) L
  mov cl,4, o. ~: S5 V3 d7 G: F
  shl ebx,cl
' `8 p" w: h' r; p  P  add ebx,eax  U3 c" n3 w" S
  mov al,es:[si+7]$ ^4 v1 K$ `% P7 o' o% R5 N
  call Change
3 d& [( T. x& x9 y* m  mov cl,4
  d9 B+ Y- M" B& r$ X+ l& |, w# J  shl ebx,cl5 M. t/ k$ Y( U' h5 p
  add ebx,eax" b0 v. p' R' P( n
  ret
" o( ?2 n$ @* j# k8 Z- [5 u/ QPSP endp
! e$ K( x$ T5 X- N* N6 b) c* V9 x8 x; K;------------------------------------------------------------------------------------------------
0 R) \! F! |, O" ~! cChange proc near) E& Q/ v. i& B8 {( J9 y
A:   
& D+ R) `) q( ^1 h+ F9 Y8 K' O( d  movzx eax,al+ b9 P0 r, k; ^' {: v
  mov edx,eax
. b* D5 C, ~# s6 C5 p, u  cmp eax,'0'   2 b  M8 v# e5 P0 g
  jb A
3 W9 v9 O& s: y$ z2 B0 }  cmp eax,'9'   
7 X1 U1 {8 J. u$ b  r  ja B
$ S3 [/ ]6 n3 b# \9 y  sub eax,'0', P0 v9 h( l0 L8 d3 \: [
  jmp short E
0 a# i, {" F; a9 x6 a; w3 EB:) a; O) y8 P! F6 h
  and eax,0dfh   9 X2 d6 s# w. A' @$ {
  mov edx,eax
. W6 _3 \+ P9 Z- }, U* k$ S  sub eax,37h   
% A" G; u. I, ?' X# N% Q- a, G. C  cmp eax,0ah
( d' v: i  V+ ]8 c  jb A   
! ?, u6 _: c" O! s( _0 v$ E  cmp eax,0fh
: ?: r2 d" ?* a. F! t/ d- R  ja A   
3 v$ H7 W7 k7 M, ~6 fE:+ f$ z+ {$ k. n0 Y$ ?4 _' Y
  push eax   
# s. p* x+ V$ q$ Z# S$ N1 K: C  call PRT   
8 I4 U+ s& T3 C0 b6 I  pop eax
) g4 h8 t1 n- N) g  k5 _0 XCExit:( A. p5 J7 u& n* S" g
  ret" K9 r& d# }% L2 Y9 b6 R/ g
Change endp
  n0 Z5 {6 L. w) ];------------------------------------------------------------------------------------------------
  H( w6 U: ~0 G- rPRT proc near
. V& x6 ]$ a& j4 O# J/ ^  mov ah,02h+ ?% }  w* l2 d, K% r8 [' Z
  int 21h! [: @( y7 I6 m, b8 f
  ret
* b3 u) I4 K( y/ V- kPRT endp
3 W- `2 @( O) z* M2 T7 d;------------------------------------------------------------------------------------------------6 c" ~6 d! m5 p$ u
crlf proc near
; S% T. o$ U2 c2 J0 t  mov ah,02h" S, L/ M9 E/ S- n' u8 T1 u( w
  mov dl,0dh7 W2 w" v& p1 E9 |8 q! G) d
  int 21h. L/ s1 @6 D6 l4 ^2 n
  mov ah,02h
& T- h2 |  w# `) o( G2 y. C  mov dl,0ah
7 M7 R) g  W6 |; N) A: d* {! S" a( Y/ O  int 21h
) N- h5 |6 y/ f6 [' M& u6 p  ret: F4 n- R9 B7 K
crlf endp* \% B8 D& T& d
;------------------------------------------------------------------------------------------------8 Q7 Y9 m4 i; V
_32bits proc near
+ M+ P% L) q4 n" l, o! l( e  pushad  u% Y5 c# l" K% X$ F
  mov cl,4. l& l$ l) w: ]/ i4 \' R
  rol ebx,cl
" P+ \! Z2 w: z+ ?4 Q  call print_4_bits
* s! P% Z5 Y7 t0 O) G+ G' l3 [  rol ebx,cl
0 v1 C/ R- o8 z- J  \  call print_4_bits
" X) q- T5 _4 w3 l  |  rol ebx,cl+ ~4 |1 s  @" ?1 T* z# Q
  call print_4_bits
: A( U# G% Z5 M  rol ebx,cl
/ ]# c7 X0 i0 F& I- |& J  call print_4_bits
& k# ~. f' C) N3 p' j* E5 ?) n- M3 h! c  rol ebx,cl
6 k9 u5 p( w8 [% `  call print_4_bits
$ _' Z/ a9 q4 i5 `3 U! v  rol ebx,cl- }! q8 G& F6 l+ _# a5 P4 n5 t. {! u
  call print_4_bits
: G5 I4 H' C! O9 _  rol ebx,cl0 L' n+ r6 g2 F/ P5 P
  call print_4_bits  {# I, x5 U1 A
  rol ebx,cl. f) S" G# O8 ~3 D5 F: a2 A
  call print_4_bits
6 X8 O1 S0 t) _2 @$ ?- `& A  rol ebx,cl
- ?( L/ l2 W$ C$ M. Q1 G2 J0 H  popad
$ F# B* n6 s# \: n1 N9 ?2 f  ret% h/ b/ H. T& j+ F* d9 I; M
_32bits endp& U" {/ Z# i. O  f  n: B, S6 Z" n
;------------------------------------------------------------------------------------------------; f) M% p$ ~* X
_16bits proc near
+ ^7 V% b" n" S0 G- v  pusha   3 c% t, |0 g0 |8 R- T
  rol bx,cl
" o2 o+ J2 W0 ?  F  call print_4_bits& c5 W5 H; E7 U; M. u3 e, H. v3 N. G
  rol bx,cl: ^5 i) U: p# \. C5 O
  call print_4_bits2 Z3 ~9 T6 T- x4 {% T) x
  rol bx,cl
1 L) q$ Z& I' q  call print_4_bits7 n& \& l! N0 K# X# y$ L% S
  rol bx,cl
+ U' f7 U$ d: u0 N& W7 {  call print_4_bits9 M  Q; H  @# `# u6 W8 e
  popa
- i& G1 E7 v% v. H  ret2 W- T- V' b! P, M6 r7 j+ g
_16bits endp
- N7 S; c  b- `- s;------------------------------------------------------------------------------------------------. f4 e) }+ D# A5 `$ h
_8bits proc near
0 P1 b' c( F; o5 n$ e9 s  pusha   
" j* m) w( y* n8 D; ^: Z0 u4 @  rol bx,cl
$ v# H5 c1 f+ k/ l  call print_4_bits
" }5 ]6 a/ o! g+ i8 P  rol bx,cl
6 y6 V4 |* q1 }, L, z! t2 |* d, m  call print_4_bits
/ y  d. D, X0 ]8 v# L  popa
; @0 Y% T2 V3 T" B7 ?' E' y. p9 H  ret
, Y4 u* ]# x/ y7 y, X; S4 \_8bits endp
: Z, _2 {, c/ h# t( b* @2 v! R4 P;------------------------------------------------------------------------------------------------" r( N- j; Y' h/ k
print_4_bits proc near
& t3 y/ \& q+ P+ r  mov dx,bx! R9 Z' F: c* w5 `
  and dl,0fh0 s4 o/ W/ N% n- t5 J5 u
  add dl,30h
; t! D, I2 s$ p2 V5 E) V0 `  cmp dl,3ah- s0 K+ i* a2 y, C4 X9 u9 ^$ Z
  jb print
) K7 w2 U' ^5 a9 A% W: K) N  add dl,78 y# a& a1 r. ~  l
print:   
& C5 R2 ]  ~: R9 g) _  mov ah,2
2 z. t# T6 m$ G% A7 r  int 21h
! A) D3 d/ R6 ^. }2 K  ret1 a; z: a* R* n1 ?. A, \
print_4_bits endp   
* [9 t8 D' Q! h! z" E. I;------------------------------------------------------------------------------------------------
- c! w% H$ t, ECSEG ends
& m3 A1 m8 I. IEND
您需要登录后才可以回帖 登录 | 加入计匠网

本版积分规则

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

GMT+8, 2026-4-26 20:37 , Processed in 0.046232 second(s), 16 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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