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

顯示string會出現亂碼

[复制链接]
发表于 2010-10-19 16:41:51 | 显示全部楼层 |阅读模式
各位前輩好,以下的程式為在 big_real_mode 讀取記憶體的值
6 Z# V7 K& @7 Z: x) s& o
. o2 [7 p  X  V! F, w" q9 s例如: C:\memory.exe(程式檔名) 01000100(Address)
. P4 T/ k; y& ]5 [1 ], B, j' G- W+ T
, U9 Q/ D" I6 D- ^* P% @" L1 E- _2 l' D則會顯示01000100位置的值
# Z/ v+ @3 i7 u- i1 [. G8 C% W: h+ x1 ?3 Y: H
但是我另外還有要顯示出字串,但是顯示出來都是亂碼2 y- G3 `5 z: N: p$ }, T

6 V: ~' S% y7 F3 [) u  b麻煩前輩給我一些指導,謝謝  5 i/ |' p- R  V/ I$ P
. O* g" [- Q+ E

0 n+ Z+ H! C" A* a5 O  K0 {. s$ A- E.model small: s, c; ~( e( j8 @- l' R  b
.386p
9 Z9 X/ c9 Q- e0 ^+ h/ Q;------------------------------------------------------------------------------------------------
. u) T5 n& E/ K/ Z0 `$ MDSEG SEGMENT USE16'data'  6 X! J3 o1 K% z1 t6 ~' _4 f
1 s: j/ @$ n, N. g$ T
DESC STRUC/ d" H# x) s, r6 }
  LimitL DW 0  
5 r, Z+ w, e$ R) z. e  BaseL DW 0  7 Q, x" ?- x$ l- c
  BaseM DB 0  % J' y  {9 d0 z1 L; s1 O6 o4 X
  Attributes DB 0  * O7 ^" m+ f; o- B- Z. r" \
  LimitH DB 0  
# Q, z) C. z" T( Z% \0 J1 u+ n  BaseH DB 0  ( w* r8 D! F3 i9 K2 T! }
DESC ENDS2 ^" F  a* _0 l, f7 S0 ]
! \: _& E# z9 {' X, n4 _8 ~8 r0 D
PDesc STRUC
+ u6 U- v& z/ F- v: w  Limit DW 0  ! m; ^' o% N1 c" K* O2 I! }
  Base DD 0  ' z$ b+ a/ W& w3 q
PDesc ENDS
" b! A2 a: l1 h+ {  e
9 V; x8 h+ K8 tGDT_def Label Fword
/ w5 Y- q7 D9 t* N8 MNull_Desc DESC < 0h, 0h, 00h, 00h, 000h, 0>
6 b6 \2 i$ N) p" @* F/ dData_Desc DESC < 0FFFFh, 0h, 00h, 92h, 0CFh, 0>
; ^2 T: c" j8 i- ?5 \' a, c- OGDT_Addr PDesc <$-GDT_def-1, ># M; w" I5 {8 v; Q; N. O3 Q/ r: T
9 Q& ~3 ]/ t9 T5 P+ `1 j
msg1 BYTE 'The Input Address is'. n9 M) q/ C; F) P( A+ F) V
msg2 BYTE 'The Data is:','$'
: F: T8 s, V. o( I
0 m7 e. I2 y1 f4 v9 rDSEG ENDS9 H( i5 K: U2 E' K7 C

9 f/ m' N4 ^1 V% f" m0 M
1 x& g1 V9 X$ N/ o( v& p' E9 h;------------------------------------------------------------------------------------------------  . X, ^: S. \9 h- Y' \

# O! ?& \1 V5 p+ w7 t4 G1 U3 n2 XASSUME CS:CSEG,DSSEG( m7 V0 G; \" a: a% r& B) S

& I; {- }. I" y! ~4 @5 W6 rCSEG SEGMENT USE16'code'
9 L- H' ?% L7 N) |' B5 b( F% x  
- D& L( j: i  z2 [# P  push ds
1 M6 I8 S& G  \7 V6 [" W" E  push es
3 M5 b. W3 f8 G& s; ?9 ?  push fs6 L+ i7 g; g8 M# ?$ j) o3 J7 F" i  o
  push gs9 `9 ^% L( G" r! a
  
) F4 [0 x  C1 X3 d- o% N  call big_real_mode" R5 u- U0 x/ H& P) H: {) ~- x+ C
, _" z: {' T  u; K# u
    3 n0 n6 G* B! a3 e
  mov edx,OFFSET msg1;/ t3 a( B: p6 e6 y% d
  mov ah,09h;   $ n8 M8 s) {" t$ ^4 p
  int 21h;$ L2 z- E' P- u$ Q0 x
  mov edx,OFFSET msg2;
7 r" _- b# E2 S2 n  mov ah,09h;
4 f% i- f" @% F5 a; Z2 T  int 21h;
3 H: f, C* f' i5 C* u% L8 J: z) P) h    2 _! `# ^) p8 ?6 L2 C
  call PSP   : ~; {1 K2 i, f0 @; t3 e$ N. r6 b
   
5 ]% P& i8 R6 v9 E6 g. I9 ]  call crlf   3 j8 p& x* N% m
   
, k  H2 F( u. C  mov esi,ebx; N0 u; \1 `1 f5 @, e% O
  mov eax,fs:[esi]
" u/ o* I; v/ J( |! a. l+ B  out 80h,eax
9 W, K4 K: y" D% \5 {  mov ebx,eax
; b! W6 d) m% i0 J$ X  call _8bits% V' t8 v" q' ?3 m, d, C9 Z
   
# g8 q+ u/ \- @: ]! H/ |  call real_mode
* K" _" ?, U, i9 d6 T' |   
; |. |" g; L( \3 g6 I: N3 w3 e  pop gs0 H  c* Z! w( v# s6 j' O6 D
  pop fs9 G) V( v) X: A- I
  pop es5 i. [! }' x( X) M0 U4 B' l$ T9 m+ b- b
  pop ds$ V$ B( O. d- L8 p
   
4 y; D# p3 }+ |1 U4 u. T  .exit* `% E* b/ u' b' o3 z+ ^+ G
;------------------------------------------------------------------------------------------------
5 Y1 }7 P. j6 _4 ^big_real_mode proc near
) K. Y, {3 w: l) M0 Q1 `- r  in al, 92h
8 V& y; [% t$ d; F; h+ w  or al, 002
: j) |& ~& _( D  K; K% h  out 092h, al( t9 X/ l: S3 ^. j
  out 0edh, al2 ]/ Q& f( Q; E! E1 m
  cli6 }8 H  [+ z' K
  mov eax,DSEG( }4 V! h- i0 b1 y- U2 x
  shl eax, 4
" |; O) h- e  M% T+ _  xor ebx, ebx
7 Z0 q1 M' h* Q0 Q, J& s& g: ^: m  mov ebx, offset GDT_def! v, m' c+ `& d2 }9 t- ?
  add eax, ebx; K! f$ I( x* c6 Q7 i  ?4 ]8 A
  mov dword ptr GDT_Addr.Base, eax7 L3 _0 x% J/ S+ G& }
  lgdt fword ptr GDT_Addr
. K* p4 _1 r( ?6 h. V7 h$ Q! I" J  mov bx, 8% c  i* P; Y. v" @' }
  mov eax, cr0- Y$ u# T2 x7 M/ |) e; A" g4 j
  or al, 1+ I2 f) K& q8 w1 W
  mov cr0, eax' ]0 t! }; |8 v/ G8 E  z$ R  }
  jmp PMod
  Y. v7 y- q4 S6 bPMod:0 i/ G! c" i6 l( @8 t% f
  mov fs, bx/ q  D: r; Y" G. `2 I. o
  mov gs, bx
% C) U. p! z+ z$ B3 s" C8 X  mov eax,cr0
) O; ?/ l2 @$ K' x  and al, 0FEh. F+ _  Z% M. z
  mov cr0, eax  . K+ b- C  T5 @1 O7 O) k& q
  jmp RMod( Q( V# Z; Q9 K; _
RMod:
6 ?4 T2 `: x2 P2 \: L' Q- _+ L  xor ax, ax0 n, W% _8 R' a; |3 p& m, ?
  mov fs, ax2 ?! x9 c3 i; c: i8 m5 N
  mov gs, ax
. e: g2 V  V% F3 W2 @/ i+ l/ {0 H' ~   
) r1 w" d/ c  Z2 }# z  sti) _: f/ Q9 i# N1 d& f
   
$ S5 c% d1 u" {1 ~) \+ n  ret6 }+ s5 Y! V1 Q( l" N& C) d
big_real_mode ENDP  w1 K! n$ v2 M7 n1 U$ V6 Q! t
;------------------------------------------------------------------------------------------------
7 O4 P  P3 }0 W" h1 Lreal_mode proc near
7 e5 M7 u1 n( c  in al, 92h
9 T! \' ]9 G0 ^0 L: f) ?) B2 N  and al, 02
) I7 P. p. Z9 N2 L1 j% |  out 92h, al   
* t  L- L& p1 N, E. E9 B: r8 H9 r  ret& c# L; l* Q' e7 O- \
real_mode ENDP
9 x( m. v* s. m$ D;------------------------------------------------------------------------------------------------8 N0 E  j: b* K5 m1 z
Get_Commandtail PROC near. `4 b' [3 a! |$ z+ e" c6 E
  push es  ! ^. A( ~( Q# d0 g  k
  pusha
$ [+ S" Z/ o2 C. d! Z  mov ah,62h  
7 G7 v4 A% `# t% A! U  int 21h
( H  v* O. C' i+ S  mov es,bx4 y! z4 o5 g$ ^/ p
  popa  
& o& F5 x# l* ~4 m$ w+ G; ?/ B  pop es
5 @' r, Q( E2 W: @8 v  ret
+ w& d1 d/ l0 p$ w( O7 X' TGet_Commandtail ENDP
6 S! X6 C3 I- x$ X;------------------------------------------------------------------------------------------------# m" u- U- `: C; @
PSP proc near
5 d4 U9 V9 c6 j  mov ah,62h0 _. z6 t# c9 A* O5 v4 i# E6 k+ k
  int 21h4 F# E3 ]- F" z8 Y. o& \/ K
  mov es,bx   + {0 W1 l4 j' |" R) B
  xor ebx,ebx: `- C. h; J( X. G5 k" f
  mov si,82h' J7 O5 h$ U/ `7 W
  mov al,es:[si]
2 H! S# D& c8 _7 g4 d  call Change
, F/ S7 I7 J  c+ n2 G  mov cl,4. C9 \& L% ~# v: o8 t  [& l
  shl ebx,cl
' _! Q3 O) k! }% R  add ebx,eax, O; G7 _7 y$ i$ u; P8 }8 K9 ^3 @
  mov al,es:[si+1]
% _& v/ I* N) ^2 V! [  call Change- R; {8 Y- Q. I/ w
  mov cl,42 h% a5 b8 d& e/ q- x  l. Q' d
  shl ebx,cl
- Q4 g' v/ `  P$ {: }4 g! U( p% Y  add ebx,eax5 s) d4 J. V4 [4 ^' }( Z% W( _
  mov al,es:[si+2]) R: L* ]% J/ u; P& S2 u
  call Change
; n; V$ x, W+ S$ R* y0 F  mov cl,4
1 B) F3 l  i$ W/ p& l2 s: S; w  shl ebx,cl7 N6 `& e7 V( U+ X2 _* K
  add ebx,eax
2 m- N* Q4 a7 m0 a  mov al,es:[si+3]
6 ^& `3 E+ p) G' z  call Change( d1 Z/ x& ]* _7 A% t9 C
  mov cl,4
* [- k6 i  O# d2 c  V$ q" J  shl ebx,cl
3 s. r  u6 ?* E4 C8 F  add ebx,eax, v; g& m& o' u+ P
  mov al,es:[si+4]
9 v7 @1 `( A) E4 E( g  call Change: D# U$ G+ ^& O
  mov cl,4
" S2 i7 ^0 d  {0 [8 E9 H& j  shl ebx,cl& u- G$ x' P& ~9 Q0 l* q5 V/ P5 w
  add ebx,eax1 p7 K8 W+ i& n" D% Z5 ~! k1 g: ]
  mov al,es:[si+5]
# ]: ]. q# u( p0 ^. R) V  call Change) M8 t; {6 ?0 G
  mov cl,4+ c7 y- h& F! G1 Z
  shl ebx,cl$ e& Z; @2 S6 H
  add ebx,eax, E* G5 U* g: y8 W$ \$ C5 k& |
  mov al,es:[si+6]. ~8 f( H# h1 \- ^2 A6 K6 |) e
  call Change
/ X2 Q/ k2 a  g0 m; \6 W  mov cl,4
" e# P$ H: `8 j& C8 O  shl ebx,cl
; }) k! b- D9 B' q  T  add ebx,eax- s* M( Q4 A/ R- ]+ Y
  mov al,es:[si+7]
8 }2 R+ T; ~. C7 I  call Change* O. h6 v) i" x0 ^! U
  mov cl,4! F! F$ J3 X# g- G
  shl ebx,cl
! ]; U- K0 \7 q  add ebx,eax
' e: ?+ I& z$ p) t0 G! |/ l  ret
9 ^: j& }4 Q+ s% i, G* O9 K* ~PSP endp
( r- b: F* |/ M! h! A;------------------------------------------------------------------------------------------------5 M$ y5 J' ^* E* J
Change proc near
" J: z" L& K$ H9 A- \4 }* iA:   
; D$ t$ p' d7 k; b6 X3 E$ j! J7 r  movzx eax,al, o' Q& d9 \2 ^2 f* x' Z1 G
  mov edx,eax
- F7 b; ~8 i' X6 k  cmp eax,'0'   
# [$ n# v, O8 z- q) \7 U  B  jb A
3 ^4 ~/ {/ @* j: i% k  cmp eax,'9'   
/ y- ?5 D$ c  ?& S  ja B6 i; t6 S! |0 q( P2 H. `' n; z* b
  sub eax,'0'5 a# _3 ]+ g  H, E1 c) E; `8 R
  jmp short E
% ?4 m6 L4 e5 A% {1 V+ pB:
9 w* @  G8 i- F. E1 m: H  and eax,0dfh   8 \: V( T% u/ `! L: S) p! h6 M
  mov edx,eax6 I# ?" n% b- E
  sub eax,37h   
& K( r# v% c: x" E  cmp eax,0ah
) W/ O2 A# t: b: Z4 d! E' u  jb A   4 q8 M5 U6 o$ d
  cmp eax,0fh
* F; f6 r: z9 _0 X2 A' a9 K  ja A   + c! ~5 f3 s4 R. i) `9 t$ o, Z% _# I
E:* ^$ p. B8 U. }  c9 l- _8 e
  push eax   ! N1 J" o  w7 ]# ~5 P9 q( ^
  call PRT   
6 ?& ~  I) j) v2 ~  pop eax
7 w8 x* ^  K1 u% Z% Q+ t$ cCExit:
$ M* H4 A7 ~9 M  ret
% W. u+ T# \4 ~' gChange endp
* l/ Q. p* v; O;------------------------------------------------------------------------------------------------
/ s, A# `; N* V1 a# ?& g4 vPRT proc near
- a  b: X  @: o: @1 G  mov ah,02h: O' ?6 A8 P* `* T0 O3 X
  int 21h% @# M4 w# M0 X* }1 s5 E- @
  ret
- J7 R  {1 `4 YPRT endp# H- r' q* B- L1 p( Y5 @3 E# f
;------------------------------------------------------------------------------------------------+ H; J' Q. P, ^
crlf proc near4 i" t2 ~  D9 e# e
  mov ah,02h
& Z+ v0 S- K% X8 |+ D9 T  mov dl,0dh. g9 v& v2 v' M. y0 N
  int 21h  L. [' E- M7 K5 p
  mov ah,02h
7 r/ j6 |/ C* y% E  mov dl,0ah
! w3 J# i1 G- k; w0 d  int 21h7 L: W: L1 L* p) |
  ret; a1 R- g( W+ O
crlf endp7 _( A5 t7 C* z$ u! E3 k& ~8 d
;------------------------------------------------------------------------------------------------
2 B8 X2 P9 Q% V* T$ k" ]+ p_32bits proc near
) a$ \9 f/ Q1 O  pushad& B4 m$ y: m& Y" I' T5 Q7 l- ~3 ^
  mov cl,4
+ w! }6 `/ ^0 d  rol ebx,cl3 }/ }. c0 e4 D1 F
  call print_4_bits
9 U2 A3 ~- A# ^' x  rol ebx,cl
$ @- P. s4 Y& I% Y! F; w( ~6 }  call print_4_bits: G/ z& L; w! ~6 f2 M, b
  rol ebx,cl
( Z+ r7 @( G* J  call print_4_bits/ s- }9 K* H* F+ d; i
  rol ebx,cl& H4 j( I6 K6 u
  call print_4_bits
; Q/ y' V% M% ]# j  rol ebx,cl  L' a* B& b0 z, C
  call print_4_bits: ^( o1 e8 L4 @9 n( l# F  s0 i
  rol ebx,cl3 C0 f  c( q" e! R9 i3 A- e
  call print_4_bits
! ?" b: A+ H, B2 Q  rol ebx,cl
  h' C9 O+ U4 e8 b; t  call print_4_bits8 x8 ~, \+ X7 q" u
  rol ebx,cl
# @% T! [3 a" e& @4 _  call print_4_bits
& j! z) a4 k$ e( d8 M" |  rol ebx,cl7 c' m& J# b7 k" z, S% x  U
  popad+ c4 `/ Z. C1 u, Z/ T1 ~
  ret
8 ]. S- S: h% W, @  u_32bits endp' q; ?# m9 Y4 t6 r5 E. t
;------------------------------------------------------------------------------------------------
; j  J: t: k: m' \, p_16bits proc near
8 z- }& r. N- V0 ~2 S2 @# z  pusha   2 A8 W" f6 T: d$ }$ k; {
  rol bx,cl
9 K1 \& _6 W6 y. q8 |- H0 j5 \  call print_4_bits
/ A2 _1 n' r9 u  rol bx,cl* [. h, i/ d: |6 D4 Q+ v4 V
  call print_4_bits+ t: J" X0 j# Q' q; M3 E$ I
  rol bx,cl" r0 n4 [+ F4 b; C' c
  call print_4_bits
5 Z" I4 t4 ?. [1 s& |. |3 G  rol bx,cl) E6 M' R0 u5 |9 T( l# n# ^
  call print_4_bits
0 g, _# B& W4 ~  popa
8 ~4 w" _3 C' G7 R9 w  ret" e& a7 d# I. @& L' ]% n* ^$ S
_16bits endp$ G8 O# I2 u3 H! D4 m2 T
;------------------------------------------------------------------------------------------------
% t! G; o, F2 z1 t# c_8bits proc near  w3 _5 K* x5 X( ^' K6 R5 x4 L
  pusha   % P' t9 {3 Q% z: J4 n
  rol bx,cl. n8 j; z5 F2 w% D/ `
  call print_4_bits
6 ]0 y0 Z# ^6 l8 N  rol bx,cl  q7 m; Z( E. y: \9 ~0 Q
  call print_4_bits) R2 W; e# {2 Q- z9 Z. `8 ?6 n
  popa
+ _) y: V" P. f7 |  ret
# R% G- J/ l- b0 U' N" Q_8bits endp1 ~& r4 p: B+ n6 M4 u& q) q
;------------------------------------------------------------------------------------------------' y& r3 u" B3 b. X& r& h! v0 R4 q0 Z
print_4_bits proc near% T( k; s* {/ U- H8 s) t
  mov dx,bx
6 c" ~- f! L, i* c  and dl,0fh
" `4 i; f6 L% h3 v; N  add dl,30h7 c5 S5 s& l9 c1 x: p/ G- f" Q
  cmp dl,3ah) H8 V6 s0 ?6 s0 `
  jb print
2 U  @. y$ g' T7 o7 l- }  add dl,71 L1 n) D/ ^# Y7 ]) R
print:   ( p3 {' n+ `% l, C! j( K! v( Z
  mov ah,2
) c7 m8 @! ?: _. P* s- m  int 21h0 Q6 e9 i/ r) T1 d
  ret% ^# q9 \; |1 r% o" ]) A: q
print_4_bits endp   3 _6 y. z/ h5 y: z( P
;------------------------------------------------------------------------------------------------7 T' K0 J+ `" c1 U
CSEG ends
, D; D+ F- E( z# K( vEND
您需要登录后才可以回帖 登录 | 加入计匠网

本版积分规则

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

GMT+8, 2024-5-20 20:22 , Processed in 0.022262 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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