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

顯示string會出現亂碼

[复制链接]
发表于 2010-10-19 16:41:51 | 显示全部楼层 |阅读模式
各位前輩好,以下的程式為在 big_real_mode 讀取記憶體的值2 E0 [9 U+ O+ S, A1 k9 l  H
1 \9 v. l5 @/ E
例如: C:\memory.exe(程式檔名) 01000100(Address)
" b" t1 Y* R" `* Y# G- E4 x: N9 I: u7 K" F. `) M" h
則會顯示01000100位置的值$ @& _4 S7 K- ~3 T( z* D2 z/ t

7 s) A& c( k- {2 V+ {. E. x! y1 D但是我另外還有要顯示出字串,但是顯示出來都是亂碼
9 Z# \0 {+ z0 g' `; T% P. @7 L% [6 s  W' H* `! K) [
麻煩前輩給我一些指導,謝謝  ( c; }5 X7 }" ?" I% \

# H) v0 V- m/ O! D6 A! u6 }# r4 s/ u+ _' u2 D
.model small( m% P! s0 Y3 u( X
.386p1 U9 k, C$ m) e; s
;------------------------------------------------------------------------------------------------5 a. W# p% L9 z$ s0 X% ]
DSEG SEGMENT USE16'data'  
9 q: G3 P* r+ d! Y) y2 L: g/ T: L/ w7 B0 V& f# A' H! Y
DESC STRUC( h6 o3 x, @/ ^1 z7 l
  LimitL DW 0  
4 y% q# f) M! g! Q1 x* V+ ]  BaseL DW 0  
( a6 i: J' R6 b/ E) ~/ K9 A8 C  G: T6 k  BaseM DB 0  
  X7 H# \' E6 c" H# i0 q  Attributes DB 0  7 }; v; @8 v  ?) U3 M# ]6 d: w
  LimitH DB 0  
5 j" T/ T5 U2 d! \  BaseH DB 0  5 [1 {2 e, y' ?* ?' H; C3 ]
DESC ENDS$ U! k, c2 B" [- X% e
) O: Z* ]% Q/ @" D
PDesc STRUC  }) r, R# ^  l' }4 [! {
  Limit DW 0  : M. i: Z9 w. D* }3 a' X7 o
  Base DD 0    l' D. X9 P. U3 _+ R/ H  }
PDesc ENDS4 j1 `3 h- P; b  b$ T$ \1 v

5 Q2 s7 l. G8 v  o4 iGDT_def Label Fword/ {- I; {) y. T" K
Null_Desc DESC < 0h, 0h, 00h, 00h, 000h, 0>* T. k' ^- }0 z; E# j+ z
Data_Desc DESC < 0FFFFh, 0h, 00h, 92h, 0CFh, 0>
" `! j" W) }3 y( `GDT_Addr PDesc <$-GDT_def-1, >, h/ e! `  _! n3 C* f) O

8 A$ C$ L+ H; y8 umsg1 BYTE 'The Input Address is'* R6 f- F- ]6 p) @# n8 I, w  ]
msg2 BYTE 'The Data is:','$') F' |  P. V1 E1 D3 t$ s1 v

6 s9 C7 F5 v7 Z* @# B. n. d2 SDSEG ENDS6 l- A3 s! U6 G" n

% b# x% D! N+ R8 j
# ?' J/ T; w- [2 {;------------------------------------------------------------------------------------------------  
1 v, P2 |' p: C  n$ y* ]" \
% A8 ^$ X: f; s  K/ TASSUME CS:CSEG,DSSEG
/ q; s4 C6 R) C! E* p+ Z' Q- R+ V9 z$ {2 U. o% j
CSEG SEGMENT USE16'code'
- w. y& G: g8 }5 ?2 u  
$ @4 g+ Z0 C& g1 X8 \  push ds
: V8 W0 ^/ M/ R  push es
; J: r( B3 T$ [6 ^/ G# @2 I, }: W5 J9 W  push fs
! n# ?: \5 u: e& _3 L+ [  push gs8 k( o4 u) J6 @; u$ f
  & J, y* R5 m8 O& L3 z5 c; |
  call big_real_mode4 o2 q) d+ s8 Y( C+ C4 P- y3 E' Q
+ W7 ]7 r/ x3 o- n0 t7 {7 n
   
. ^. O! F4 R& }; R0 {  mov edx,OFFSET msg1;1 l4 J, A* G' U0 X5 E
  mov ah,09h;   
) o7 z) I# g3 u* l- N  n  int 21h;
: N4 Z! r+ C. e# P  mov edx,OFFSET msg2;1 l% C' O+ S# }/ k
  mov ah,09h;
& v4 ?8 G$ a0 S% \$ L! \. z  int 21h;
3 A' k7 j! C, w+ C* e5 h: g" J0 i- g    7 y7 g  v: K4 E* @
  call PSP   
1 }; f, M/ {3 z/ v' `) F    ( u5 Q8 p% h" U; Z
  call crlf   
+ X: n4 D9 f: g1 S% S: m, |    : T# x1 S9 R8 u5 a# P& H  R
  mov esi,ebx& R! Z. X% @* n; j& R& D
  mov eax,fs:[esi]
% X% l5 Z2 `5 s" D: i  out 80h,eax
2 x1 F. I* A  \+ g4 [  mov ebx,eax
( V4 Z7 m6 ]0 p( I! I8 x4 J  call _8bits
" n# G7 F( A3 }7 S    ! f& ]# r" u( i$ O8 f# g8 g
  call real_mode
  j& t$ y5 c' {' r1 i" t9 }   
9 O) t/ g, d5 K- d0 x8 l9 m* A5 c) i  pop gs, q  }$ a. j5 G
  pop fs' c7 q* F; j0 W$ b5 a2 m
  pop es
- F  z6 H( S4 ]7 b0 \  pop ds
8 L1 ~2 Z# x) ~& L: g, x    * c" @- M9 q: O8 r( M
  .exit
- |% }# F- O  M* z2 M;------------------------------------------------------------------------------------------------
8 X' F# n  O: B. v! }0 k) |( ]  L0 Obig_real_mode proc near
1 Q7 v8 e1 k+ z1 H& ~  C- i4 x' V  ]1 u) @  in al, 92h5 `. ]0 q, R4 E2 z2 B
  or al, 0026 Q" g9 T: I" C0 B8 C# G
  out 092h, al
: P+ i4 S: l3 h2 M  out 0edh, al; r" v+ c' @8 i6 d5 f
  cli
' c$ n( t) v8 j, o! u% x  mov eax,DSEG& n! @' J) a6 [
  shl eax, 43 e* ?7 w& v; d. `: Z
  xor ebx, ebx
  n, Z7 m3 |0 M1 `/ [0 F; B# o  mov ebx, offset GDT_def
9 ?. p6 m: P3 w9 o6 J  add eax, ebx0 x, C* D* K3 }+ O: `4 }
  mov dword ptr GDT_Addr.Base, eax/ \& e# ?, E( m( o7 Y: v/ P7 q
  lgdt fword ptr GDT_Addr
" }1 J; I8 n3 z) ?/ ^0 o  mov bx, 83 `, @% a& J( V. v% [/ X3 q) W
  mov eax, cr0) {6 A; p/ Y# L- l& L
  or al, 1
* _6 `% v& b! C0 J, _4 |  mov cr0, eax( w6 w! u8 F& v. H9 m; C
  jmp PMod
: C$ R! ^/ U3 ~- t3 A9 PPMod:
. k" ^6 Q9 V1 M6 H) F+ V! I  mov fs, bx8 X1 W: j' x, U. k% e: V1 D$ n$ l
  mov gs, bx7 K+ ?1 A; |* x) F0 M5 @& y- U' h4 I
  mov eax,cr0  `0 K, Q# M9 m. l
  and al, 0FEh
$ G) G- x, V$ V' t: g  mov cr0, eax  
$ X) F% e- g& ~3 a; N$ W( g* b) T  jmp RMod* G) ^1 O$ X% h7 p3 U7 k7 [5 [7 E; m
RMod:
; E. \9 v9 D5 E& \  xor ax, ax% ]- w# s& X+ M/ T& J. R+ v8 `5 |$ Y2 y
  mov fs, ax1 s4 \# Y& o. l4 h2 m
  mov gs, ax
1 X& |& t# |( |5 _9 G   
) L4 ~9 Y0 U1 |. Q  sti
$ {6 [) n( |. {. a- S+ n: ?! J, h" k   
, @- h% M0 ~3 g- S0 V% i4 u- w1 ]1 U  ret
! ^. ]6 h9 b  o8 i( @big_real_mode ENDP9 k& ]4 S; @2 Z5 K7 O; Y( }
;------------------------------------------------------------------------------------------------
( T$ j! U  ~7 E" H6 U" Z: ]real_mode proc near' ]- z5 Z  M4 G: R; V# g1 v
  in al, 92h
0 @- i, g- K" ]! T3 X. p( G3 w  and al, 02
  d0 o' i$ R( T, Q/ F" e  out 92h, al   
0 ?# K2 [# T8 A) T  ret
% L- `8 K5 B- z. F6 Greal_mode ENDP. G1 p, S; Y2 p, y, J8 j5 D
;------------------------------------------------------------------------------------------------- \' S- j7 M1 l6 ?
Get_Commandtail PROC near, r& Y; k7 D$ ?2 t0 v8 Z
  push es  
: ]2 i) p% Z' B( M, W  pusha
. R4 J$ M; j* E; O  mov ah,62h  - C& \" `/ ]2 B0 ]
  int 21h
8 s  J& |) G  K" {! a/ v  mov es,bx! Z- c" @1 H  |
  popa  
- l1 q, ?- p( w2 N  pop es
9 Z/ n: W; n5 Q/ M4 Y  ret
2 A; l" c- X- m0 ?Get_Commandtail ENDP
4 x# n8 |+ k  C4 f;------------------------------------------------------------------------------------------------
& s, p) |8 Q+ q& r  \& w8 MPSP proc near5 ]. w1 C* L4 ~1 }, I1 {6 L' ?
  mov ah,62h
/ u0 m. {7 O& a9 ^  int 21h
  I; H7 m2 o5 Z' q$ \' |" f4 P  mov es,bx   
! y# b1 X& D8 K  xor ebx,ebx
  L" N7 o) c' o' b" t% Y4 j3 q/ g  mov si,82h' B4 g% E+ |# ]+ s; h5 W  Y
  mov al,es:[si]
4 ^& q% u/ x# c2 L7 O" b  call Change( g- g3 m0 ~/ l  c
  mov cl,4
/ b. r, F% [7 x9 R4 P  shl ebx,cl4 ]( r+ [8 L! |! ]& f
  add ebx,eax: D. O/ j8 |2 K
  mov al,es:[si+1]
. F1 k. O4 M2 N. e$ q' F  call Change8 U0 [6 w) F0 c, |6 I) T
  mov cl,4
7 }$ F( |# P$ ^: Y$ A% K  shl ebx,cl
& h0 ~* r: s; z  add ebx,eax' N% [& E$ w5 G& b
  mov al,es:[si+2]
. y4 Y8 _+ c3 B) j6 j3 j0 Z  call Change* H3 f8 u5 n9 `* z7 A- ^" ~
  mov cl,40 A0 {8 L' {' Y% s" j
  shl ebx,cl
% a' l. l, g3 P  add ebx,eax# @% ]  b! e9 w% m
  mov al,es:[si+3]9 `% f4 W- y! G8 l
  call Change% V0 p2 h1 `# H
  mov cl,4
- k  [4 x& g' i3 [  shl ebx,cl2 A+ h0 A, n# B% [0 p9 A7 S
  add ebx,eax
- u! A( O3 W: f! ?# E$ ?5 E. P* o) |. _  mov al,es:[si+4]  }! D+ |, \/ J3 T
  call Change+ R2 w+ |( a) b" [* f& h3 ]/ w) G$ A
  mov cl,4
7 w$ f6 h3 c% \, q* E8 X* I  M  shl ebx,cl! s7 H" S: g5 W( R- F
  add ebx,eax
' g* P% u; P  l, p% T- k6 T  mov al,es:[si+5]7 c$ r  N7 B3 Q  M7 t
  call Change" E. U5 g7 }, c# k" u+ `' J2 b
  mov cl,4
8 O% F  r  s3 ?; ?  shl ebx,cl
; @  k8 Y  _2 E+ F7 x  add ebx,eax
" E- h0 l' b" r( f! I$ \' o  mov al,es:[si+6]
2 @$ l& U  n. V9 O; ^& G  call Change4 u- D% [; X+ X( n* i7 g. \
  mov cl,4
' ?7 G$ L# f& y) V6 M2 h4 v9 e$ w  shl ebx,cl
4 s5 f  t& N, y3 i1 Y5 [. g0 Z+ t0 x  add ebx,eax
. ~) c  `7 S4 g" W6 D  mov al,es:[si+7]
5 n+ a  V5 n7 Z3 c' F% ^  call Change) ]1 y/ L- K- L7 ]* J1 A3 p7 a
  mov cl,4
' z* y, b# c0 F5 V7 @) X) S5 G  shl ebx,cl' O! Q' F5 D) @$ A4 h0 M
  add ebx,eax0 m" M# g, m) Q( Z& U/ M
  ret
# A2 h3 R  W7 lPSP endp
6 U3 Z4 m$ E$ @% P+ X+ \( x4 N; Y: K. ~1 R;------------------------------------------------------------------------------------------------
$ a7 ^/ \* w, z/ y5 FChange proc near
# g9 Z' d6 _1 @+ b! B  U: OA:   4 d. {5 x( G( d6 N. w
  movzx eax,al$ L" R) ^! Z) _0 c
  mov edx,eax
* f& H. B& t6 R  {8 e  cmp eax,'0'   / g/ i1 t* ?) m5 \% S1 r* A5 Y$ X- ?
  jb A
' G4 X: y) ~4 U1 z" C  cmp eax,'9'   4 n1 G3 J8 X$ G
  ja B
. J: j; _, }, G, n% G' V' h: \  sub eax,'0'! i9 x9 N* B: N! X* `- F! g  \
  jmp short E
5 O" n; C, p1 mB:
" i: c& t! z: `  and eax,0dfh   4 y+ N4 [0 j7 a$ k. N
  mov edx,eax- C" L4 ^' W) J; ^
  sub eax,37h   
# l' U7 v- a! r3 u7 P& q2 F2 k  cmp eax,0ah
* D2 }' E, T' n! k8 e  jb A   2 W4 b, N9 k& Q* X
  cmp eax,0fh! t# m2 {* B7 `
  ja A   
+ z* r) V8 f; _2 g, J: t3 l, HE:
. q4 e8 E. i) g" ]6 B9 U! K  push eax   
  l5 V+ b" L& I8 c9 \  call PRT   
& c. f" R- K$ q( }  pop eax1 M+ o3 }. v4 b" F& m  ?- y& p4 x
CExit:
5 o: g! I- k" u& k, F6 H  ret! m& Z, }# z7 s/ z, t
Change endp# o3 X6 W! I" O
;------------------------------------------------------------------------------------------------
' [, ]+ ^# ?  B  a* Z; O8 FPRT proc near+ q/ b+ W) k' E4 ?: W! i3 A: X
  mov ah,02h# j9 B7 t) f. r  H4 b; s
  int 21h
7 w8 e0 }2 N& E9 y7 O  ret
' p" M7 V1 i* R2 bPRT endp
; g5 t! C2 D: ]* ?;------------------------------------------------------------------------------------------------
6 v/ L+ B) }, D+ V, ~crlf proc near1 Q, m/ N* ]+ I; Y4 @. |, d  E
  mov ah,02h- j0 Y5 n8 y# r, W
  mov dl,0dh6 m0 p- b, F- ]$ n
  int 21h/ ~% F+ a4 a: E7 }/ k
  mov ah,02h  I0 a2 G" |; ]; E4 @9 Y
  mov dl,0ah) i% ^. N6 N7 Z4 N% d) b
  int 21h
0 F5 A9 i& m/ e' ^' o7 x  ret) L4 z! S: f8 J! i8 O% @0 i! n
crlf endp
& b7 R. |& t3 i$ G, X;------------------------------------------------------------------------------------------------
/ J$ Y" k6 V" @1 Y& c; t( g4 L* v_32bits proc near, @8 L0 M9 X" q+ e! I" W: p
  pushad) o  E  E* q. _
  mov cl,4
) q& t$ D5 H. U) }' s6 ]  rol ebx,cl
% s* Q/ b) F" |) F  call print_4_bits. r% z  Z; x. P7 P
  rol ebx,cl
. \- Y; p, {" h' \, r1 N/ w( E  call print_4_bits& E: }9 s& i6 o1 o
  rol ebx,cl
! [1 n) o! X( l8 D  call print_4_bits* ?; g2 `* p) c2 V+ i$ {* P" p
  rol ebx,cl
; x/ F& ~! q4 E: P' I  call print_4_bits  e9 v& P, U% B$ a, [! V) V; q
  rol ebx,cl
2 h% K& k3 s) z+ w3 k; Y  call print_4_bits4 G  x, u# R# G8 Q8 m8 K
  rol ebx,cl
  f/ l* d9 ~' P) b0 F2 U( }) i  call print_4_bits
% H+ M+ M: M" s% t1 e  rol ebx,cl, b  m, H; |; x( ^/ V. v. u3 \
  call print_4_bits6 B' e4 Y: h$ |; Y* G
  rol ebx,cl  T8 H, O! p0 d% S
  call print_4_bits* y9 \5 I" T( O/ [$ p
  rol ebx,cl! @# p& B$ a/ F3 _) C2 e) U
  popad4 @( o4 r) b7 R% S6 K
  ret  U+ r0 x* ^- k$ {4 n6 y/ D
_32bits endp; f5 C8 V3 \: M4 o+ q
;------------------------------------------------------------------------------------------------
1 P7 H- N5 |9 u: {  e8 U_16bits proc near
  {9 J' w( Z0 p9 y  pusha   
9 _4 {3 Q! l# H: R. ^" P  rol bx,cl: z7 R# x$ ~' g; h; n
  call print_4_bits: k# F$ Y6 f7 y1 O8 ~1 h
  rol bx,cl$ q' ]- A( }/ x0 d! Z! K. L
  call print_4_bits
  j0 \; y3 R9 t% M  rol bx,cl3 S, \! {1 U8 l$ S; E
  call print_4_bits
: \; o% f6 T& I$ T  rol bx,cl( }/ W5 ]; F/ A2 X% `
  call print_4_bits$ j8 _$ _6 b* s7 O8 c
  popa# f6 y3 l4 ~  \/ P8 }
  ret
. [1 j$ Y6 Q% ?; p+ m' m( W& ?3 {& g- a6 h_16bits endp
; }+ F. S9 e& ^! N0 p$ x;------------------------------------------------------------------------------------------------/ x0 [, A! f! p, z0 a
_8bits proc near/ q5 X5 t& Z! L9 i7 Y0 G
  pusha   
. I! T% ]% {: h6 k$ I8 W& v% i  rol bx,cl
/ {( J: \8 Y) |! \, I1 L, K  call print_4_bits5 [( ^- w2 Q  i1 G) S" U( @
  rol bx,cl
% S! x' f+ c. a9 S% c7 a% P  [, i  call print_4_bits
  Y& U  l% [3 b6 e, ~  popa
+ n9 e. V4 ^9 H! |  ret
6 C( N# A4 V7 Y" ~, s8 S5 ?_8bits endp
' p5 K( F3 I, E" Y) d% ]# e;------------------------------------------------------------------------------------------------
6 o. H+ E# Q2 T2 @print_4_bits proc near
& B: F$ M# x* N! P: [: @" M  mov dx,bx
- B) O) e/ s  L. j1 I' _* S. X: z  and dl,0fh
. S: C, b8 W( q  \6 k! L8 `- x. G  add dl,30h, o, w* X5 d7 W. I: Q: K
  cmp dl,3ah# p$ H$ K6 N! B. t& b
  jb print  F) G; o9 c/ _0 D5 M3 l
  add dl,7
; V# u+ g8 N; xprint:   5 j9 t1 w# l, `1 @$ P
  mov ah,2+ m' h* s8 l& r! e  R# Q& M
  int 21h: M: `, n, j: z  f6 Z
  ret
  ~. d* B) _# W" @print_4_bits endp   7 s: a4 L0 G4 R
;------------------------------------------------------------------------------------------------. P1 G5 z3 S0 E& m
CSEG ends
: x2 J9 d; k/ {! ?, h* U9 oEND
您需要登录后才可以回帖 登录 | 加入计匠网

本版积分规则

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

GMT+8, 2026-1-19 00:18 , Processed in 0.057601 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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