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

顯示string會出現亂碼

[复制链接]
发表于 2010-10-19 16:41:51 | 显示全部楼层 |阅读模式
各位前輩好,以下的程式為在 big_real_mode 讀取記憶體的值. B% B9 G6 O1 K5 x

; Z/ a7 e8 M: B! Z$ Y$ D例如: C:\memory.exe(程式檔名) 01000100(Address)
5 v7 k* f  o5 h) M* U% `8 g( n, e! I* T; D& H+ y6 A
則會顯示01000100位置的值
9 v$ m2 |3 D6 L6 u- p# i
& Q+ V5 _3 r1 h+ j' a但是我另外還有要顯示出字串,但是顯示出來都是亂碼
" w% U; T. r) N
: m0 E2 H% d5 ?+ g5 v  r麻煩前輩給我一些指導,謝謝  : s: r9 {" r* \2 k5 l0 g, o0 T! ]# q
9 ~2 {/ H- ]; g( J

0 @, [* H9 M2 A6 t.model small. b* B! A6 L2 f
.386p- U/ q9 `9 C" N0 u1 o; S
;------------------------------------------------------------------------------------------------
6 k/ s, T+ N% I. IDSEG SEGMENT USE16'data'  
- |4 l/ r4 y$ P# ^0 V4 N  d2 s% j* n0 ^
DESC STRUC
  b0 {' D+ ~) v  LimitL DW 0  7 N; Q( g4 ?4 f
  BaseL DW 0  
4 q. e2 o' N" i: f9 ~2 p% ~- b  BaseM DB 0  
. x. u9 _$ H/ C$ D. I" X* v  Attributes DB 0  + J- o* a5 Z  z
  LimitH DB 0  
7 F2 o  q: v0 G5 t+ A/ H' L  BaseH DB 0  & P  E$ t5 N7 k) E" B7 w
DESC ENDS
3 f3 F' n8 p+ f5 C; n* }' o7 m9 J; a
4 x' B, z3 v+ M  m! y$ r, k" sPDesc STRUC
, ^' K6 i& ]# i  Limit DW 0  ( [  l; N: D- e- |3 |' [) i6 V
  Base DD 0  
6 l0 S9 C+ u' W. ~% E9 k- {" FPDesc ENDS3 ?( S2 S9 ~6 K7 f* P/ o: B

# C! o; z9 ~3 @GDT_def Label Fword
) k# a6 N7 N. w+ h9 e; k! P. m1 ANull_Desc DESC < 0h, 0h, 00h, 00h, 000h, 0>6 E6 i+ T3 u3 J! Q# @  p; L! g
Data_Desc DESC < 0FFFFh, 0h, 00h, 92h, 0CFh, 0>
  p: Q. f# H' I) bGDT_Addr PDesc <$-GDT_def-1, >% ?0 p/ A+ E. R( v* E# A" U

% N3 g, J2 o7 K( w" x+ W" [msg1 BYTE 'The Input Address is'
; E) E; v" @2 F  gmsg2 BYTE 'The Data is:','$'
& @) I8 u  B2 j2 g) d$ @! Q4 m. [7 o3 s* {
DSEG ENDS: y% L0 M6 i% g; Y) u$ T$ W

/ i; H1 j1 M1 d% O0 i5 t) A8 C$ m! B3 n1 S% _: V
;------------------------------------------------------------------------------------------------  
, R0 a9 }1 T1 [( N# t- o4 ^* D5 W# Z& v1 ?3 E
ASSUME CS:CSEG,DSSEG6 u' x0 |$ x! i) S

# q+ v* u8 L; i; [  ?* ?CSEG SEGMENT USE16'code'
8 z) l* U5 @9 L9 W9 e% U  / {* v) @  q6 K/ c2 w6 T
  push ds
; O" v7 X% V0 _  o0 g* f: J  push es
+ V5 J. }3 Z$ u  push fs$ v; E- w! _. o; A. f
  push gs
; d- V$ m8 Q) |+ W# X% `5 v# \/ X  0 d9 Z2 a/ J2 N5 W5 N  k0 G
  call big_real_mode  x% V' K1 H" m6 H1 P! R6 @% B
1 X" U4 o5 }; C  M
    # ]& `7 N. l5 G
  mov edx,OFFSET msg1;
% A2 }7 ~. f8 y/ o' I2 f( K  mov ah,09h;   8 G& m9 h0 n: j% R1 _' s' H
  int 21h;+ ]3 V$ u6 j7 S4 ^
  mov edx,OFFSET msg2;
) ?7 q- T! S# i3 [& {  mov ah,09h;
. a0 ^! w" R1 F7 p2 c  int 21h;
1 q. Y; B) t7 p1 I, l+ i    . B- E9 i/ ]  ?& ~( s: H
  call PSP   ! }. h: U0 W+ B# J
    + x2 p+ }6 s( u% B" T0 }
  call crlf   
  x* n! q8 z: b- I    4 V. N! Z* ?( f/ h% G
  mov esi,ebx
9 w- C# y7 B/ \* W7 a! D1 P. N  mov eax,fs:[esi]
9 c1 F9 j9 l, a$ h% A  out 80h,eax
, G' t' q! a1 E' n  mov ebx,eax
3 X5 s( l# e- s8 Z* q  call _8bits" W$ ^& E& K# r' P) ]
   
' ^4 g5 y  F: C- J& ~. [  call real_mode
& G* e. X9 B. L; Q" K, s7 s2 A: a; z# ~   
5 T/ t. N$ d8 H( {' l# z) @  pop gs, v3 {: m+ }! u' p% z+ {; u, {; Y
  pop fs
6 l; Q4 K  I6 i  o, w6 P  pop es( f! \8 E+ J1 j* \* h7 A
  pop ds
6 N3 x1 P, R- x    , h- c* ]4 D  ?$ r& ]/ H
  .exit& l# h0 }+ ?& z! `8 ]- _
;------------------------------------------------------------------------------------------------
/ J3 Q1 a# A) Q1 g/ gbig_real_mode proc near
0 G4 Q- u9 T+ q2 A+ K4 r0 ~  in al, 92h
3 F' E4 B! |; K- J- e  or al, 002  Z% h8 i0 s. c  h
  out 092h, al; }' [6 V& C6 U$ l
  out 0edh, al
$ h. |1 d8 f! O8 Y( e  cli' q  Y4 m5 j  m
  mov eax,DSEG3 A* N" @6 L. r/ y
  shl eax, 4' b- I3 A* R' V* H9 Q) P) H
  xor ebx, ebx
0 U( r2 d4 I% d" j* J' _  mov ebx, offset GDT_def
: e' K0 D- Y- O# W" l1 a  add eax, ebx
2 k" E7 l3 y/ Q" m. e6 D( W  mov dword ptr GDT_Addr.Base, eax; @3 n2 o' Z; e" y# D$ h( T) k
  lgdt fword ptr GDT_Addr  L. n4 ]1 p- @+ V) U; f: E
  mov bx, 8
/ w8 v" O+ A$ D  E+ {1 R8 E5 [  mov eax, cr0
6 I) W3 [! ]/ ~# p  or al, 1- o3 l7 f8 U5 s2 U6 C; F# m
  mov cr0, eax/ k7 S7 A7 K8 X, X
  jmp PMod5 v7 l/ T# R2 J5 c9 |& G
PMod:& ~  d3 U3 h: G4 a; ~( Z
  mov fs, bx
5 ^3 z3 _5 O7 w. E  mov gs, bx  }. J+ L& a/ x4 R7 |2 i: i, I
  mov eax,cr0$ h4 N* N# D' H& k% i, R$ a: W
  and al, 0FEh
/ t# D6 Q6 S* ^0 d% U  mov cr0, eax  : {! W+ X9 @5 q8 F& M
  jmp RMod
, L: |3 [6 y: G! g. B0 g$ rRMod:
$ _2 z( H& Z0 Q  K  xor ax, ax2 ]1 G$ P* T7 D% ?7 a; w
  mov fs, ax
1 s8 Z, c4 [6 j% V- c& j) h  mov gs, ax: r- R) v4 |3 {2 g# W1 R$ X2 O+ x
   
8 m  m% z/ s; `& j' L  sti& n; x- v1 B0 C: L. N! I6 Y
   
4 ?1 Z# T( `7 Y) ^) R# n, {. R+ L  X- B  ret7 E$ Z$ c! ^1 W6 K- T% m! e
big_real_mode ENDP
# x. a4 p3 K7 b;------------------------------------------------------------------------------------------------
  P1 J* F6 p& V' N5 qreal_mode proc near
  X+ u3 j' l- V8 Q  in al, 92h
* B& F4 F5 [0 x' _  Y9 d  and al, 02, @8 a+ C$ G. |* h$ x
  out 92h, al   9 f+ S$ Z) m# J+ y) w- R4 J1 i
  ret
' W2 j* [- \; ~; u5 {real_mode ENDP! J& R, S# r1 D6 v2 Y9 |, Z0 j9 O, B
;------------------------------------------------------------------------------------------------
! G& |8 S& _6 Z# g* ~$ KGet_Commandtail PROC near1 l/ F& s# R/ c+ j: T
  push es  
9 i& P) J; K8 p* T  P( U4 z+ P  pusha
: u9 v8 h% i$ T* ^# K. g  mov ah,62h  2 e4 b& U# E9 V$ ^( P8 i5 K
  int 21h! f( o) [6 g! A7 ~
  mov es,bx( P. X$ Y! W( J, V5 e8 }
  popa  - a5 y1 [( b/ z& h
  pop es( O+ ?* A" j* p( Z7 }
  ret
7 K) o: }  |6 G+ V" L- QGet_Commandtail ENDP
; W9 p; _4 t9 K. P( h1 X;------------------------------------------------------------------------------------------------3 E, t9 u& |3 O# Q% _& b' [' N
PSP proc near& G% Q. X+ e/ w- ^  A
  mov ah,62h1 G( d( j* F" c  z8 u5 h0 @
  int 21h' i& x% \7 v6 ]7 c& m% i
  mov es,bx   
$ o$ j& p! `* j6 I6 L  xor ebx,ebx' O4 X4 \/ u3 E  p- f/ h
  mov si,82h
) l9 ^4 w/ w: S! Q- `! @- q3 [9 J  mov al,es:[si]9 T; M! o# V* I$ z9 J
  call Change
7 E: |1 _% u) }8 l. J4 K  mov cl,4
! D; [0 |2 d' ?4 ?  shl ebx,cl
! g& F; j6 A& l* C& o# _1 V  add ebx,eax
$ }) |! {1 x8 s  mov al,es:[si+1]0 m* o; U0 U. d) Q
  call Change
0 t" S: ?9 p9 k2 A) c: K6 P  mov cl,4
2 G3 N* [4 U4 V  shl ebx,cl
" I9 b$ ^% e8 v0 r% v  add ebx,eax
; H$ _' @/ q1 m  mov al,es:[si+2]
! g% k9 s9 ^# S7 n7 y0 a; E$ j  call Change. v! F- `1 c' o* @5 ^' f
  mov cl,4
& h0 }  g, F& f  H# V0 J( \  shl ebx,cl
! z- M* z9 N# _0 N- A7 P  add ebx,eax, }; v- u* A) s0 y" D6 q+ ?/ W8 H
  mov al,es:[si+3]
- H5 t- h+ c: M( a1 [" ^  call Change; b$ b/ }1 d9 p  l) l
  mov cl,4
' q- Z% _2 G3 C! z  shl ebx,cl
6 `- L3 Z3 h( K: H7 c7 }! w3 V  add ebx,eax
7 n. D& k2 ]% L" Y. V  mov al,es:[si+4]
6 Q+ E  \1 }0 A( _  e  call Change
4 h% g) p+ g' N  K  mov cl,4* {* z& F( w* h$ n5 x
  shl ebx,cl
$ n1 l; _) G2 l# `3 ^3 P  add ebx,eax" q6 H; `# O+ ?1 P) W  `/ [
  mov al,es:[si+5]1 l' r% a/ W/ R% j% c
  call Change
4 O0 |2 h" t% n6 Y  mov cl,4
) A( V1 \9 N) n# E! a$ d* T  shl ebx,cl
! T5 F5 l: X  B  add ebx,eax
1 N2 W% G4 s& p, H7 @( c3 e1 E+ P  mov al,es:[si+6]
3 Q" p  H% J7 Y1 O1 p) N8 a: m: G; y  call Change* u% G5 E4 C* Q6 q% @1 h
  mov cl,47 A; ^5 b. p1 `) F
  shl ebx,cl
* m- \4 y/ [! N3 v0 R8 T: U  add ebx,eax
; i: E; [0 }/ Q1 o  mov al,es:[si+7]
. @$ A! v8 q% \  V  call Change% I- a% h$ m( [+ a* V
  mov cl,44 r4 V7 m9 i) n  h( u' I5 ?
  shl ebx,cl3 v9 S/ W1 o( G& T4 q/ e, N: i# k3 z
  add ebx,eax. K: r' l* H% s: Y- n
  ret) U$ @6 F8 G+ v# X
PSP endp
) M$ ~  P- P) ^) ~% R  |! j;------------------------------------------------------------------------------------------------
' E" }* ~3 s( m3 d* {6 zChange proc near1 X5 H( F, p' S
A:   , F% \  S8 `% h- n8 G2 `
  movzx eax,al
- c, f. T: r  G) i8 k  `9 f  mov edx,eax
8 }# p7 H! p, m7 ^1 {) I1 f4 P  cmp eax,'0'   
- Y8 u2 N' n$ r0 L- S& n  jb A' s( x6 p% V9 [  [  ~) `
  cmp eax,'9'   % _' E+ @# E) G' ?0 b4 ?% O
  ja B( ]% r2 ]" w  D* F" q6 a, D
  sub eax,'0'$ m# Z5 _2 i+ h* g% F
  jmp short E  k' m8 c* P7 H0 o3 U7 T4 V- D
B:
- {, T  N" A/ c2 }6 `  and eax,0dfh   
, s& r9 }: I1 J; `" a2 Q  mov edx,eax: s9 a6 z9 @1 A& h0 v5 E8 m, R
  sub eax,37h   ) l1 [( r  @3 b5 S# q
  cmp eax,0ah
$ {* ?! B; G6 b$ f! o- V& [" _  jb A   
; ~. G. a+ A4 z' {6 `' n3 U- V, g  cmp eax,0fh
3 s, [9 O1 ?9 `  ja A   
6 w- t+ d5 o! |' T  DE:
6 b3 N, O! Q% O% y7 s  push eax   
" g; }, M1 I" j5 l# L3 U- b! R  call PRT   9 T8 y# u' ?7 [* T$ F5 i/ c
  pop eax( h# h; {" G! X: c: v5 T' o% @
CExit:
% |: w: I# @" ?! Y3 f. S4 ]  ret
5 q3 B( O& g+ ^$ A- A) w% pChange endp
8 A* v+ ?3 e/ U6 i+ G1 M/ L;------------------------------------------------------------------------------------------------  H1 Z& t- m& P+ C: M) x7 n
PRT proc near
3 \: |9 w# E6 B/ [% }  mov ah,02h( {4 Y1 t( }3 R9 H7 v
  int 21h; |6 p" j; Z' f
  ret) w. i$ h5 H5 F( {  ^/ w( j
PRT endp
& y3 c0 O( ~8 [" j5 W9 e;------------------------------------------------------------------------------------------------
7 C: J+ {0 ]0 p; `" y4 mcrlf proc near
7 _. C3 l3 Z+ h5 v% K" ?( v  mov ah,02h' b# s. Q2 C, ^+ F  R: B: U
  mov dl,0dh7 x4 Q" k# S  \  A
  int 21h2 y: }  a* ?" k. {' i( ~0 N* F5 C
  mov ah,02h( T, A3 e8 D; X5 t' k
  mov dl,0ah6 j9 R8 J2 e) S
  int 21h& e; ^) U# S' z) B; E9 D# V5 \3 L1 a
  ret- {! i0 I! Y& j3 H" k
crlf endp7 X& @/ O: I. C! o6 A  i
;------------------------------------------------------------------------------------------------( r: r3 ?  ^0 J8 d0 s
_32bits proc near
' H7 _8 x3 g- H, u# ]  pushad
3 v0 S. K6 ^" S  mov cl,4
5 e/ j, t4 w" m  U! Q1 `/ [  rol ebx,cl
' P) v% f) d9 M( E6 I& |, m  call print_4_bits
+ z) P0 {6 _0 B/ @5 K# Z: I  rol ebx,cl
4 h; z/ ^0 _( n  j1 O; U" n# ]+ p  call print_4_bits
0 E* ]/ o2 L2 r7 U1 `& s0 |7 i/ `  rol ebx,cl
& d: x9 q& v0 H9 {) [  call print_4_bits
! f4 |4 O9 U3 D7 m9 l  rol ebx,cl0 `1 }3 l0 D, U
  call print_4_bits: `  i! X* e8 Z0 t% J
  rol ebx,cl
$ i% o; v" U3 l% `  ?, ?: J& Q2 U  R  call print_4_bits6 x; F, u' q7 K" f3 Q
  rol ebx,cl
/ q! Q1 w7 ]3 Y* ~% K  call print_4_bits
  E9 V. J8 b! d  rol ebx,cl. v1 Y1 ^/ |3 m! X  V& {
  call print_4_bits% O4 T& n  J1 B9 W
  rol ebx,cl5 T8 P- x+ r8 q$ b8 ]
  call print_4_bits
7 Q. u. M4 ]. S  \  rol ebx,cl
7 @+ H7 E. ]5 c# I1 S" Q  popad6 v  q& ]! F5 z/ O* n
  ret+ U5 @- o3 ^8 U( i) _+ q, n# B' ~
_32bits endp' M  q: I6 P8 _8 n8 j7 }7 R0 _% t; L/ Y
;------------------------------------------------------------------------------------------------
) y& I8 |( G! _9 r/ L_16bits proc near- e; ~+ r0 R1 g! P' _. _( ]
  pusha   7 s) S9 A6 r4 A6 |0 @5 `
  rol bx,cl
+ Z& Z. k  H4 Y9 r/ g! {8 L  call print_4_bits
& L) z: F! m2 D" v; T  rol bx,cl
% B+ w: T% T8 P/ V3 P; @& A2 }! d  call print_4_bits) b# ~: ^9 w# i" I# W) Q
  rol bx,cl8 k. i; n0 v8 [' \8 \5 o( i# q
  call print_4_bits% U6 C4 _  N  e8 j3 d1 {$ m- L
  rol bx,cl
$ z5 L- r5 f; x  |/ y) B  call print_4_bits
7 L. w: O, H1 r; k5 |  popa8 d) u# d, n1 r0 I/ H1 d, h
  ret
' O( Q3 B& K5 f) k$ B7 Y_16bits endp
1 @2 @3 \1 B) K% J& S;------------------------------------------------------------------------------------------------9 }  h3 w! }/ Z! J7 E6 R
_8bits proc near7 C' {' O3 [1 F& P' B" P
  pusha   
& C! j. E: Q, j  r' V  rol bx,cl# D1 I2 [0 Z& p# b, ^
  call print_4_bits
7 D) a2 f" c$ R: |: x, g  rol bx,cl
& E. O: V& _' m  call print_4_bits
' `, [# L, ?$ t3 t, a  popa5 A7 D, j6 f  A$ W$ P! ^; j: M' c
  ret/ T& W6 p7 M6 m8 M
_8bits endp# Y1 f2 y% u. c! w$ @
;------------------------------------------------------------------------------------------------: v8 r, ]6 a) n8 `+ @$ v6 F0 O
print_4_bits proc near
$ V4 Y; x4 l- u  J9 Q% w7 ~  mov dx,bx/ ^, p; K( Z: H. S* f
  and dl,0fh
( P' g. r/ f3 Z1 \- Y' p* g  add dl,30h4 `: [/ M0 d: P- [7 _  w$ p! f0 M
  cmp dl,3ah
$ Z% P" ]2 _  _  k6 p+ `6 y# |, V* \  jb print7 t5 h! {3 _, N( q
  add dl,71 W+ t! G4 H7 Z# N8 b& i
print:   * q% L7 }  p0 D/ ~( k
  mov ah,29 H# S  p# N5 \4 d  p% ]2 T% p
  int 21h
  i) J* t# R4 Q$ m* ^4 s  ret7 E4 x- i+ K; k; w/ j
print_4_bits endp   
6 h) ?) h  t, M1 |) v: F* F;------------------------------------------------------------------------------------------------+ G0 j  F6 K' q* U
CSEG ends
. j# \4 A" p( k6 ^& }. DEND
您需要登录后才可以回帖 登录 | 加入计匠网

本版积分规则

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

GMT+8, 2026-7-21 22:15 , Processed in 0.062284 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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