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

顯示string會出現亂碼

[复制链接]
发表于 2010-10-19 16:41:51 | 显示全部楼层 |阅读模式
各位前輩好,以下的程式為在 big_real_mode 讀取記憶體的值
" j2 }" W; W6 G8 I% n- k7 Y( E5 B5 R# U! c
例如: C:\memory.exe(程式檔名) 01000100(Address)1 x  ?& w5 t! S
  u/ e. u9 k7 k5 z
則會顯示01000100位置的值7 t$ u& K7 b% g2 Q. q5 V. K1 P/ k
( ]$ \( {: K) g) i' @
但是我另外還有要顯示出字串,但是顯示出來都是亂碼
' ~: L; Y& l8 z' D/ M
. n8 }' c( R( A# e麻煩前輩給我一些指導,謝謝  
3 s0 Y' D' A: i+ C
5 v+ s8 E( {5 C$ @% z7 v" q$ a8 k
5 Q/ W# e# |% J.model small
! g5 A( U+ j! K3 L1 s8 V- M.386p
7 R2 k9 v$ m+ B  }6 n7 w" w;------------------------------------------------------------------------------------------------
' I8 p) Z$ C* }3 O6 ~DSEG SEGMENT USE16'data'  . c; k, S: Q8 P, v- n/ a9 F

/ b" [5 k7 h% LDESC STRUC' T! q8 Q1 @- d7 r/ V) B; V
  LimitL DW 0  
  d. G4 O9 [: k+ L' D$ ~. \3 g! d" O  BaseL DW 0  
5 O$ W3 }# K% e" F* L& X% P  BaseM DB 0  7 Y1 Y  W' F, Z; P
  Attributes DB 0  
8 [, N" I3 B0 X" p& A" q  LimitH DB 0  , l+ V) ~- @) a$ e. K
  BaseH DB 0  
* C; r8 e6 u1 n7 Z+ hDESC ENDS
# Y$ A/ o  Q% k: o
& d( d; b5 A, j; v; }+ A$ iPDesc STRUC
1 d9 p! s/ |) H% s6 D  Limit DW 0  ) s4 s) y; d; ~( j2 h
  Base DD 0  6 M/ S) x% W0 ^. E* K/ w
PDesc ENDS
" ?9 Q* Z5 [3 y- Y2 p, V* h" Y9 \8 l+ ?5 m5 A, Z$ d
GDT_def Label Fword
8 j# g& G5 R. O1 xNull_Desc DESC < 0h, 0h, 00h, 00h, 000h, 0>5 R$ o6 K1 ~# T9 z+ a. Y. d
Data_Desc DESC < 0FFFFh, 0h, 00h, 92h, 0CFh, 0># D# `# l4 h; h
GDT_Addr PDesc <$-GDT_def-1, >
* N: X1 p% H7 m! r4 V) {# ^6 u7 [, b: y
7 J. ?, R8 S; W3 ^! \# E1 Cmsg1 BYTE 'The Input Address is', o2 B2 j) k( y, a1 H6 T
msg2 BYTE 'The Data is:','$'2 n/ T# [& ?$ {  }6 x9 `, p
. C# F# P6 X8 s9 \( _( [
DSEG ENDS8 U6 U& `" Y3 H
' H' D3 q3 x9 _  ]+ R$ g

' I5 d6 p3 f- b+ |;------------------------------------------------------------------------------------------------  / {! P- _3 }2 e8 l8 c

/ c* a/ G/ W& \5 AASSUME CS:CSEG,DSSEG
4 M, l- M9 l/ j) ?! R# N' j
' i$ b7 w/ B. q5 u% L+ FCSEG SEGMENT USE16'code'
' A0 y, x1 Z1 `( }1 U  
% c+ h' g6 D, ?  push ds& d5 ~/ s) t" j; I
  push es, w) C# U( I: J* f" B* w
  push fs
0 s+ ^0 u6 v1 }- |" @; z8 R' {  push gs1 [9 R5 a5 c5 F
  
( K  I% Z' _+ ~8 _0 {. g6 `  call big_real_mode
- O1 K4 {- |9 Q5 {4 n8 \
" }( }6 x' G0 t5 D8 M4 c    : L& F4 k! u; A+ O+ \
  mov edx,OFFSET msg1;
+ ]" R" {. F) Z$ h% D8 S  mov ah,09h;   3 y9 N4 Q& p8 q& F- e- h# q
  int 21h;
* i& g9 b& i6 K2 {/ M  mov edx,OFFSET msg2;
7 ?. t' u7 q  W5 d9 h- f2 v  mov ah,09h;
- K( g, P- M" F/ E$ d/ ^# i& a3 E  int 21h;* \  j! O4 _$ u0 p$ A
    7 x* Q, f/ ~( h) f4 V
  call PSP   
* b: C/ e- S: `9 u: j    - k9 S7 [6 [! \1 i. \
  call crlf     I! ~# g9 ]" z. Q
    ) h# c. ~" U  B+ D8 d/ M  l3 }% ?
  mov esi,ebx
' d0 q( f7 r) G% V' b3 F  mov eax,fs:[esi]
& E) }+ U  E- h/ h  out 80h,eax2 z, f1 m0 \, D
  mov ebx,eax
8 c5 [) G3 a6 U3 @. n1 s  call _8bits
8 E" m" a$ [  E   
2 v* w) T, i& f+ m# B: L! B  call real_mode
. S* W4 `: _( ^9 P   
) }+ j% g; L6 I  a  pop gs
. h3 L; m1 E6 t* h. Y  pop fs
1 y" g, `" d" u+ K2 i( c! y: k4 _  pop es: O/ L9 |" _# D4 Z& m
  pop ds
$ n; b+ d3 W0 b% `- Y    5 M* ]/ m: o  {# [; |0 A
  .exit
7 x9 U0 N+ P* i( X3 w;------------------------------------------------------------------------------------------------! ^. D( m, M8 z' A% T" Q* P
big_real_mode proc near
4 E  [+ ?& N7 m7 T5 `" A  in al, 92h# Y* l( \/ v5 g! a9 O
  or al, 002
1 G# K0 Z" ]& j/ V& `  out 092h, al
2 A! u0 ^% L7 {6 Y, s5 g+ g  out 0edh, al
! {8 R: W$ W6 ]7 t0 ]# C+ O  cli9 N- e# N7 _5 E" l! W
  mov eax,DSEG( n$ c0 N0 R7 q2 `# D
  shl eax, 4, i3 T  |* d2 h' f/ l
  xor ebx, ebx' T# l  A! n  O
  mov ebx, offset GDT_def; v- |% ~' Y" W. ?* @7 A- d
  add eax, ebx4 w! R; V" T8 X8 U- Z3 H7 m
  mov dword ptr GDT_Addr.Base, eax" F3 P5 k% m, N( J# n) v6 f
  lgdt fword ptr GDT_Addr: p, L. f; v7 \, D2 k5 N1 F1 n
  mov bx, 8
$ O- Y  i; t7 f' h  mov eax, cr08 m3 b- e/ N3 h' A
  or al, 16 ?1 F% u4 [3 w1 y) n9 k4 w
  mov cr0, eax
$ G  o& o& K: ^8 v  jmp PMod) m$ ^: J2 N! L: S8 Z8 u$ f
PMod:
" e0 Z' T# x3 l6 @  mov fs, bx
7 e- d- |) y. p! L0 V  mov gs, bx) n8 O. E# r; D2 V2 g2 p
  mov eax,cr0
. ]/ U8 j( E& q  and al, 0FEh3 {* j: P& G0 m9 T; L4 h
  mov cr0, eax  
2 K6 I3 v1 m2 ]/ ^  jmp RMod1 Q0 m  ~0 r  z4 k  o0 `+ Q( _4 y
RMod:$ t7 b/ v. ?/ M/ u4 z; ^% o- `/ f
  xor ax, ax& q! r7 x9 Q0 w6 `3 E* o
  mov fs, ax
, [& @- w2 ~2 c2 X8 d  mov gs, ax, {9 I& x/ ?9 h
   
7 X0 v9 H5 _# v& J  sti
6 F' J" @8 Z" S# Q" v   
. C% v7 t9 x+ z8 x6 \  ret
! k8 i; K& c  o3 ]. ^* U. U0 r( obig_real_mode ENDP" ^$ z7 p6 I% W$ b0 K
;------------------------------------------------------------------------------------------------8 a+ _2 `) N0 q+ `$ I+ O
real_mode proc near
& T$ N3 Q* E) ]4 d. _  in al, 92h
6 ^" R& S& |0 F) B6 l0 J/ o  and al, 02
( y; d, S( ?1 ^; G3 v  out 92h, al   
$ i4 T6 F0 u# Q  ret
) B: a8 g1 x6 E! W' c' F8 Yreal_mode ENDP
# t* ^7 o4 |( \9 G) n7 J;------------------------------------------------------------------------------------------------
2 i( i* P9 t' u' p. ?' t4 cGet_Commandtail PROC near' \: A3 x! c' ~3 H- Y! c9 V
  push es  - c8 X. R3 @$ i8 [! K5 ?+ a
  pusha. O, A/ e( }; z
  mov ah,62h  / o/ J- i2 r( \% f* ?7 l
  int 21h
2 [! ?% N( ^# E5 N  mov es,bx1 J( |/ r; L1 [3 ^
  popa  
$ A- o" l; N  p- n" B4 N  pop es# ]; S+ h6 E6 F- Q0 ?
  ret* N# K7 k/ V& `1 s2 b% [+ C3 B# O
Get_Commandtail ENDP
. r2 k% h! [: @3 [& V2 s;------------------------------------------------------------------------------------------------4 f5 u- B' L* D4 \' |
PSP proc near" g' p* ?9 t* H! C1 a3 E+ |% W3 a/ ], W9 w
  mov ah,62h8 S% z4 p3 o" A! O2 Z7 i
  int 21h
6 A' f8 G8 S8 z, D  mov es,bx   
& ?9 k: H4 G) T3 c6 D! Z  xor ebx,ebx2 h7 ?0 f8 q1 V" j1 H
  mov si,82h9 w2 ~- a2 q" J" {
  mov al,es:[si]
/ P( m7 c7 n" |6 O  call Change7 t& @7 G, c9 p1 b" W& M
  mov cl,42 Q- c7 T4 D/ h
  shl ebx,cl
- `' S% q: E* J  add ebx,eax# b7 I+ \7 H( |7 P* g! @
  mov al,es:[si+1]3 K! ^* Z" k, L, q
  call Change
8 b9 U% [0 u: ~2 ^$ R3 b( u- m  mov cl,49 {! q" [+ {+ e4 _
  shl ebx,cl. ]5 ]: q9 h7 N" }8 `( B( Z' m
  add ebx,eax& b9 `/ z( J, Q7 V; D$ Y
  mov al,es:[si+2]
% x) i- j9 w$ P  call Change+ Q1 Q. ~$ f, x9 R/ O: }
  mov cl,4
5 M4 v  B9 b& s7 S  shl ebx,cl( R8 K8 @. ~2 T3 Y" _3 R% a
  add ebx,eax
  O% Z; s8 G* O! ]# d  i  mov al,es:[si+3]
1 L$ W# i. R2 V+ ?1 m7 N4 \, o  call Change
3 Z) A2 _9 ^* V  L. H. {  mov cl,4
, l! e% }8 j9 ?: L  shl ebx,cl* b* c) B: o' p: S; j
  add ebx,eax
/ V( u" u3 S' t" y1 S4 }5 h3 a  mov al,es:[si+4]. ~% J4 k9 Z* x9 R
  call Change
' r/ h* z& a( g/ w5 o  mov cl,4
- i, I( w) `, ~0 l7 O4 t) v  shl ebx,cl
* r6 u1 w7 J2 e2 K# p  add ebx,eax
) l$ G8 N1 S8 _. N6 y+ N& E  mov al,es:[si+5]+ s/ t$ _* L; b
  call Change1 T' K: C& Q9 D* f# y* z! q
  mov cl,4
, W, y# c5 c! Y+ Y  shl ebx,cl. e) D5 b8 C; E. V" B3 W
  add ebx,eax: W5 [( C+ s) g: J0 h" b4 ^
  mov al,es:[si+6]
9 _* A( h' w+ Z; z  call Change
# V. k) U6 n+ {+ j! w8 I  V  mov cl,4
* F) ?1 E, c2 C4 B" F  shl ebx,cl! o4 w( ?9 u7 y: a
  add ebx,eax* D* [2 W7 r. \1 y: i
  mov al,es:[si+7]
- i9 x+ s6 d- z& n% s2 y% F  call Change
/ `& v3 F" x5 T5 `5 a1 m4 U" B4 N; p  mov cl,44 R7 w+ d& `2 a# f! F
  shl ebx,cl% ?8 g/ Y" K5 s$ h4 t
  add ebx,eax. y- j3 g  J& s3 a+ y5 Y: [
  ret
5 O# C+ p5 B2 v* i5 @" {& HPSP endp
/ h7 v' I( Z' H6 O5 @;------------------------------------------------------------------------------------------------
* N1 P  Q4 W: i% H, z3 CChange proc near! m  p# g% i6 I1 q8 l; O
A:   
3 h5 D+ R5 K+ x, Y0 C! }  movzx eax,al9 j" n0 Z: b1 r9 x$ L
  mov edx,eax5 q4 l, `* i  E6 x
  cmp eax,'0'   * k7 P0 ?3 w# @( x2 ], Q' q
  jb A, `# S8 Y6 ?# {! i8 q
  cmp eax,'9'   
  d( S+ z: D- b  ja B# v% N$ |7 ~8 v% b) ]
  sub eax,'0'8 Y7 H, ^  Y& {2 \
  jmp short E
5 t7 {& }% R/ l5 c. oB:
6 R2 v5 P& o* l% _' R/ X# `  and eax,0dfh   
, \% d% j. s1 T; x  mov edx,eax3 _! K: O, F% @' T1 s( }" d% g
  sub eax,37h   " b' t: {6 d% L3 m# y" R" E7 @
  cmp eax,0ah/ ?/ n, p! z: w2 L; {+ p
  jb A   5 y, ]) c4 X( S" l5 x* n
  cmp eax,0fh
" ~0 N0 [8 n# h; L/ Z; c( |) \! k  ja A   9 W7 [, z" c" G3 M
E:
& ^; F" A8 L# }3 e# E  push eax   
6 K. Y7 d8 e* U" T2 V: a  call PRT   
9 r7 j: F( a) l3 P; `  pop eax' i, ?/ }; F2 H% G  I/ M
CExit:
8 E1 v' I9 ~% ?" U6 o- w7 ]- y' C  ret5 Y: G% |: r* B: y. A' r+ G& r$ M
Change endp+ i2 C- _" f, u. o- M3 a* g2 p
;------------------------------------------------------------------------------------------------
2 W( l" m/ n3 x+ X$ y  ~0 [- L7 QPRT proc near
! L3 }. h: m' e: j( y  mov ah,02h
6 U, w8 N0 f8 W( `  int 21h) Q7 Q  z# @/ ]" V$ v
  ret
. D' N2 q7 I; J! MPRT endp$ D( Q- @; s% m9 Z  M
;------------------------------------------------------------------------------------------------
+ f  `+ o# m0 T2 Dcrlf proc near" U6 {) V$ v$ S* Q
  mov ah,02h/ ~+ ~  {! {# {/ w8 t
  mov dl,0dh$ h4 ^; R5 f; T' d/ p
  int 21h. B& L. e; j9 L# L4 t
  mov ah,02h
, |" U8 R" v* I8 `' U' X  mov dl,0ah
) Q& V9 w  Q7 `) S4 y% W  int 21h, h& B5 @2 }( d; o" K4 T
  ret% d2 e& F. Y9 l! F" B& B* i
crlf endp
8 U2 G5 T) F3 `6 q;------------------------------------------------------------------------------------------------
  _" U* K! t0 P5 D" U_32bits proc near' S$ J% B0 @3 H8 f: h4 L, s
  pushad
# i6 F6 v( M- O  H) w  mov cl,4
. ]  M$ m8 B1 `, J8 J6 n( |  rol ebx,cl
" _2 G6 P+ j, m  call print_4_bits
) W9 {8 Q1 F8 X  rol ebx,cl
, ~* o. X/ P2 e7 u  call print_4_bits
) E- k/ W# \7 i. \8 u  rol ebx,cl
' I3 m3 W9 g1 O  call print_4_bits
; Q7 @. x$ R5 E/ f& h0 {  L  rol ebx,cl
; N1 l+ z: I& W! k' J' H" R  call print_4_bits
, g2 ^* t; E, o4 e+ K  rol ebx,cl7 m$ u/ f! n6 @+ a, E: a! A) l! |
  call print_4_bits: ^( W) M4 E# B( A3 t
  rol ebx,cl
6 N) p0 @+ T& P  call print_4_bits8 _5 w1 U5 _. l8 k
  rol ebx,cl
6 N: u# p& I1 h/ K" n! J  call print_4_bits+ {) l5 @% B4 }' Z
  rol ebx,cl
" B% T: O% }  X4 ~' Q  call print_4_bits: Y4 C1 W1 g9 j. L
  rol ebx,cl
8 O& ?. z* V0 t( F  popad' S" D. i& d( m% ^" \( w* Q4 Q
  ret3 ~) L5 }- e7 q! ^' f
_32bits endp) N6 Q9 G$ }8 B
;------------------------------------------------------------------------------------------------
, |7 Q  `% ?6 n* Q) q3 [8 M_16bits proc near" M: M6 D. P2 ?
  pusha   
$ F' @. H9 [$ G4 t% o0 E  rol bx,cl0 H( B; k0 B$ M; M" q! e
  call print_4_bits
& ^/ Y& X7 O7 @$ V# L  rol bx,cl2 O) c( n$ c: u, P
  call print_4_bits$ G$ K5 _, Z7 V4 @/ D4 R* A. D% p6 w* X
  rol bx,cl
2 }% l1 ~. D: i7 X8 g5 E: J2 Q  call print_4_bits
1 P  P% g: e/ z' ]# s) x0 Z4 `5 s  rol bx,cl& Q3 a0 {$ P4 w, p) z
  call print_4_bits( c  M4 k' C6 d2 ?
  popa8 V) l, e. |* Q. N7 F
  ret, ^  I7 N, Q/ o$ f2 C% s2 I5 f
_16bits endp
' p* Q4 B: A+ x;------------------------------------------------------------------------------------------------& e! r; s) }# E# z2 r( s, A2 l
_8bits proc near, ~- V1 s+ d3 M5 S
  pusha   
+ K; ?( l: X- v1 B( F7 m+ \% }! |% Z  rol bx,cl
: U6 u7 e0 H- n/ A' z  call print_4_bits
. ^  q2 B0 p7 M8 C( A; t  `' U1 O8 j  rol bx,cl6 X9 k8 u9 f) o; k) k$ C
  call print_4_bits2 R) P8 L( s# x3 ^+ K- M  C
  popa4 O. B3 b; p- x/ b" P% ]
  ret
! J4 t, O5 D( Z8 U_8bits endp
9 H- j! E+ d3 q) G0 O* k4 c+ t;------------------------------------------------------------------------------------------------
2 W) T5 z* l- {% u6 a6 yprint_4_bits proc near
& d, e) ?/ f6 b) b  mov dx,bx/ X7 `1 q! e# l8 b! _* l% ]7 ~
  and dl,0fh* ]  B& X7 J+ P
  add dl,30h! P2 _! X' ?$ J2 u: h* J0 H, J
  cmp dl,3ah. e1 ^* i5 \8 I( ^' t+ Q
  jb print3 D  |, D: a3 `* l" u( o6 f5 A
  add dl,7! u- G. C# n' _! s6 V& h8 q/ K% L7 u
print:   3 d: `8 e3 x# ?8 U
  mov ah,2; @7 o' h' c4 ]+ A7 D2 }
  int 21h2 I/ L' Z+ ]. J) X5 j9 }% _
  ret, D$ \! y3 W6 ^' l
print_4_bits endp   * d# C$ p8 r9 y: @1 Z( c5 R# ?
;------------------------------------------------------------------------------------------------- e* n  F! s$ H/ u' @* B! l# u. Z4 h
CSEG ends
1 L9 ?& x9 c+ H3 W/ ZEND
您需要登录后才可以回帖 登录 | 加入计匠网

本版积分规则

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

GMT+8, 2026-8-11 16:58 , Processed in 0.048673 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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