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

顯示string會出現亂碼

[复制链接]
发表于 2010-10-19 16:41:51 | 显示全部楼层 |阅读模式
各位前輩好,以下的程式為在 big_real_mode 讀取記憶體的值
, p2 s) V7 ^6 ]' m7 b/ Z: c* _
例如: C:\memory.exe(程式檔名) 01000100(Address)! R8 R7 }+ h4 C2 s5 M0 N/ @

$ e3 [% L6 c3 V, C  J# }" K3 y0 f則會顯示01000100位置的值
7 \) ~5 l- V. l7 J& c* {7 I3 a3 J+ p4 ^0 O" O
但是我另外還有要顯示出字串,但是顯示出來都是亂碼+ \7 R; E' v5 g! z' y  C  d1 I3 _
* F, b% B# C" X* ]6 L
麻煩前輩給我一些指導,謝謝  ) K; H2 ~7 i2 n3 v. b: [
# }" `/ T/ c! ]

/ B( N5 t6 S) S- e! S.model small! D' A0 n" B. k" ^
.386p
1 K" a7 P& G7 X2 [& D2 q( {;------------------------------------------------------------------------------------------------/ D$ _$ m; s1 T, [) w' U# Z
DSEG SEGMENT USE16'data'  ( `$ X# l  F+ ?! M$ ?
6 I4 {5 M9 W7 n$ {  J. C7 P
DESC STRUC! G4 l) ~5 O2 ?, C: V! {$ d- |
  LimitL DW 0  & a4 i5 L3 Z$ E% c. W
  BaseL DW 0  , i6 _, |( J, L. H& m3 J. b' v
  BaseM DB 0  
6 N3 ~4 y2 _/ T8 S4 t* {5 z  Attributes DB 0  ! \$ `7 u% Z2 U& H) N
  LimitH DB 0  
3 I0 L3 T3 m$ k) I  BaseH DB 0  % P6 i$ p) H: g
DESC ENDS
7 X' \0 z: f6 m" W9 _: _: @3 F4 Y/ d8 R2 U/ ]- M
PDesc STRUC' |" P$ g" r  ]! T. N4 L
  Limit DW 0  % }5 @; e1 u( j. J
  Base DD 0  4 t+ Y5 {  h& I( W- g
PDesc ENDS
% E# w" v  P# o
3 f# c' F2 y6 b& L7 aGDT_def Label Fword  F% m# y* o; X, I* w& \
Null_Desc DESC < 0h, 0h, 00h, 00h, 000h, 0>; u% J" Q! s8 l+ V, \+ p5 i
Data_Desc DESC < 0FFFFh, 0h, 00h, 92h, 0CFh, 0>0 w3 {6 a8 d; ^3 [* `
GDT_Addr PDesc <$-GDT_def-1, >
( V  x0 k4 G. k+ ?+ @
0 V2 K- j6 U2 ]5 o6 y; tmsg1 BYTE 'The Input Address is', D4 G) l  r8 |4 v* C& P
msg2 BYTE 'The Data is:','$'/ Z) x5 |% i0 \8 V5 [2 @

5 U- C# _1 w3 E! y1 xDSEG ENDS
3 T  B5 |% p! ~1 ^* A
  \& X! _, d& W% E6 J0 H6 ~6 X) T; v; ?# a/ T5 b. n: _# Y5 b2 I
;------------------------------------------------------------------------------------------------  
: D3 _  W. L( e9 W% a$ J
7 P4 k/ a* p& C5 i( x" M7 bASSUME CS:CSEG,DSSEG
& Z, N9 g& f* U1 f8 p* I: m
3 h) a& w& e1 W9 c/ O. c- }) }CSEG SEGMENT USE16'code'
/ m' C" n+ D! E7 p  2 U0 X# h" m' G  g  H
  push ds
1 q- k, v2 t- I! y6 s. g  push es, U/ l9 M( N" W5 B( |2 G
  push fs
1 M) F, n' E1 w* S9 S! Z  push gs
6 Y! o2 l% c$ r7 U! A# M  
! H5 F3 t! ?4 R0 ^9 N7 i3 o: X  call big_real_mode
1 D* D' a2 A) Q# H6 _% U6 `' @% [. H1 J( X  k4 y
   
+ k; D- J4 F$ b2 q' n0 j# K  mov edx,OFFSET msg1;
; Q' T/ R) I% Z; I$ a- W$ h  ]/ P" S  mov ah,09h;   
! P% Q& {) i+ E) C  b. N) R8 c  int 21h;; ]& L/ |: Q3 j7 k* S- W  }) m
  mov edx,OFFSET msg2;  Y; ?- Z9 ~' U; X6 o9 T! A
  mov ah,09h;- {# A; ?/ S) k5 t# u7 T& c
  int 21h;
+ [3 {, m' s! a, D" u   
8 v3 L8 A: b- w! D; k. h0 S  call PSP   ( {$ R) r9 g  G  D0 Z6 w4 M2 j. E# F  C
    7 Y* V* h- o: E3 e/ D- p: F
  call crlf   / t% l# U: E/ P* {8 M0 [) ?; t; H
   
& t7 a3 @# B* w4 R) Z) T+ l, _  mov esi,ebx9 q0 k) y/ G( i0 f  ^' e% c- j
  mov eax,fs:[esi]( @! M2 M6 X  f( s' Z6 k
  out 80h,eax
" c# l$ {  p! e; M' h% X  mov ebx,eax
9 z* h- T3 E8 F+ ^& R$ {- t% t, I* S  call _8bits! s' w3 K; ?- S  p7 \
   
# H! K1 a: V0 Z! K5 J  call real_mode
. w+ E5 [' _0 \/ y   
% b$ a- Y* n. z5 s  pop gs
) ^3 j& I' L3 p+ u+ t. Q$ }  pop fs
) v# V( o! S0 X, A# `6 Q5 Y  pop es
, H- ^- V5 @( m% d+ d. w  pop ds
0 A7 v2 e" t  @& i9 p   
- }2 f1 F' _; w3 R1 [$ ^  .exit$ F( i8 V; Q3 o- M6 B5 H7 _
;------------------------------------------------------------------------------------------------
- L# U/ [( T# d! Q' C$ J4 d$ l! g+ y/ ibig_real_mode proc near
5 h/ {' `/ G! c, u' f' S  in al, 92h
+ z  {+ J& G& a) F  or al, 002
8 S  G- |; k$ E/ n! W  out 092h, al2 ^) S" W/ \6 h! i
  out 0edh, al$ V! e$ O! E$ k) @" j9 @( q
  cli2 O$ q8 U: ]( Z, H! X
  mov eax,DSEG2 O4 [% U6 U! Q+ D  ~3 [
  shl eax, 4
% f$ @, P1 y) A9 n& b" l' G8 L6 q  xor ebx, ebx% {, j$ I& x/ m
  mov ebx, offset GDT_def
* Y  ^! a# o9 R7 I9 H1 B  add eax, ebx
+ j4 g* R5 k0 ^- R; l; b& }  mov dword ptr GDT_Addr.Base, eax& Q3 Q+ {' S# [! ~* c# l
  lgdt fword ptr GDT_Addr
7 i. T4 E. s& m$ x/ f. A  mov bx, 89 D# I! ]+ V6 v* ^
  mov eax, cr0
8 l3 M; J$ ]8 n# G- H1 T* J+ a  or al, 17 E  s4 c" _! S
  mov cr0, eax
2 \5 ?3 Q+ g' C' X  jmp PMod- }+ ~' H+ @  Y& B) C3 b8 a; C
PMod:
9 s# p9 ^: w6 f' S" H  mov fs, bx  t& ~- W! T1 e5 n; T6 o
  mov gs, bx
& f' a/ @+ Z0 ]: l7 W  mov eax,cr0
! S* I7 E, i# d  Q7 c; }  and al, 0FEh! ^6 J5 I3 c& H% o6 T& B" D2 z
  mov cr0, eax  0 ~5 y" {2 p: a! n) n1 i
  jmp RMod- H* `- A" ^! p( N* @
RMod:/ Q4 i% U; ~. a4 A( x
  xor ax, ax
9 l& ^. A* t3 b! ?% z2 r' f  mov fs, ax. S# t# R2 E4 W3 j$ }5 x( [2 s
  mov gs, ax2 F+ \* J& _+ U+ f- t# K
   
6 q: H" w) q6 G  v/ [/ d  sti( `- O' o2 |% A4 M  Y
    % _5 @+ F" w9 _" m8 c1 L
  ret& a, N) c- J2 M
big_real_mode ENDP
* t( x" o/ B# r$ Q  L" v;------------------------------------------------------------------------------------------------2 \+ G, ]$ F% s
real_mode proc near
' P5 W+ f5 X1 W$ ?$ W+ H: q  in al, 92h
9 ~8 f3 W* L& ]3 N# x0 D! X  and al, 02% v8 r5 L" @  J0 `& ^$ I( |
  out 92h, al   
( A* N, h. }; m( D5 R  ret
4 E; X( @, e6 ~% b3 c, z+ `real_mode ENDP
) H3 `9 E, Y- M. B( [- }5 [;------------------------------------------------------------------------------------------------
' D; Q: n6 N3 Y$ [0 q6 wGet_Commandtail PROC near8 s3 e  Q  A- z/ o' i* F* C
  push es  
8 [' w" I* ~& |  pusha
8 v6 c; r9 m$ d; \$ T  mov ah,62h  * Q0 Q8 i0 U+ @& l
  int 21h
) [" r9 J, Z# G  mov es,bx' i: [" N! ~- z6 P. _
  popa  % j4 ?+ Z  G  t
  pop es
; Q0 d  ]8 @& P/ }  ret7 r, ]. m5 Z/ w* {- ~2 n3 I
Get_Commandtail ENDP' |- F2 b! J( `9 {/ K0 Q6 _
;------------------------------------------------------------------------------------------------' R9 f: v: C1 Z) X
PSP proc near
! M+ G9 x2 {* n# K  ~7 ^0 B  mov ah,62h
% `) D2 ?5 n2 M% D  int 21h
; `, n! Z$ P/ e) W% J1 @! Y0 J  mov es,bx   ! o- B$ w' K1 d, D
  xor ebx,ebx4 G& ~4 P) t8 L8 ]/ R1 ]) E
  mov si,82h9 O( s6 T( N. a
  mov al,es:[si]
+ C1 J3 H; i* t- a. U* Q  call Change
0 _% n' @" J& _: b  mov cl,4
) E. C; {' k$ l) ?8 G  shl ebx,cl$ O1 X% A- m, _/ R. T
  add ebx,eax
2 N0 n9 I3 T1 k2 f( n9 d8 i$ A( G% }8 H2 S  mov al,es:[si+1]
; A/ u( \/ m% I8 D  call Change
, |- W( p, x" @  mov cl,41 h% x9 O. o* @9 m
  shl ebx,cl
! P3 L) g1 Z/ I2 V% v" w  add ebx,eax- _3 p6 G5 y- D* {
  mov al,es:[si+2]( m; `6 Z# e- m7 f$ _
  call Change
- L& v6 E4 q5 `+ i3 _4 d  mov cl,4/ c2 Y: z3 j8 C0 ^1 s5 i
  shl ebx,cl
$ _" w2 `+ M  J! K! T5 Z. j  add ebx,eax* ?& n+ Z( V+ \' I2 D& I# Q  D5 _
  mov al,es:[si+3]+ T7 n5 G$ C7 @4 _! D; }8 u
  call Change+ N. Z1 E. \; N, L" [' o$ \
  mov cl,4& L5 U5 s! I% l: r$ \* p7 q9 ^
  shl ebx,cl
* n3 S" {" R4 h! l6 b' Y  add ebx,eax
/ O% V9 `# q1 F+ L9 F" d  mov al,es:[si+4]
$ N: z8 b. t8 M" O( g  call Change
! r* m* V" \( t3 L% U  mov cl,4
* t# b6 V5 w' ^$ V* ^1 ]  shl ebx,cl
0 w# Q" w" O, W# G  add ebx,eax
" {, u/ V: v/ r; h- }  mov al,es:[si+5]
) W# }# D; a% X6 r/ C# X  call Change
/ @7 X0 W  ^3 L: M& K  mov cl,4. x" n! }3 w, R4 d: y' Z
  shl ebx,cl
8 f1 B* |1 q7 e* s/ W; ]+ D$ ?  add ebx,eax2 T0 b6 N) t6 V7 j! l
  mov al,es:[si+6]
: `9 b. b5 C; H) D$ n  call Change1 x' |6 O  L0 ?4 w- |
  mov cl,4( w& t( ~+ w6 s0 [* o* E9 Y) }
  shl ebx,cl
7 p, K3 i+ \4 Y; ?& k  add ebx,eax
  V9 Q' }+ J, g$ D( R  mov al,es:[si+7]
. c: a% q1 j1 g, [. }  call Change
* j9 |% o7 j+ x8 a3 U" ~  mov cl,4
( q1 q& \% O+ {+ R  shl ebx,cl) y; {2 K. @% q/ V* x2 N
  add ebx,eax7 g$ c0 _/ K& d7 r1 Q
  ret
% |7 W( D4 }- s( ]$ _( X- ^* \& Z0 FPSP endp$ A, O( V0 i; L$ |: B- {$ z1 l
;------------------------------------------------------------------------------------------------
0 B, m6 ^+ J! p2 ]Change proc near  |7 ]% K5 Y7 e" S) ?5 t
A:   $ m, H( F# m, {- |& M6 I) U/ {4 H
  movzx eax,al
5 |6 _2 t# r% v  X: q  mov edx,eax. M7 ^& e/ `, H. c4 a6 r
  cmp eax,'0'   0 _& _) p+ `) F# u8 k" e! E. ?
  jb A
$ X" Q. u# L; H$ H1 D  cmp eax,'9'   ( J5 s6 x  t9 B  r: X
  ja B
1 g/ R3 C* |) p/ D  sub eax,'0') }. F" D# {  B& ?0 i5 E9 a# S
  jmp short E! L, P. t: Q: ~2 M8 ~
B:! a8 v* c+ \: N' D, c
  and eax,0dfh   
0 }5 _' R/ d5 K' D) s  mov edx,eax8 W) ?! E, o+ f! J" ]% H1 Y; T
  sub eax,37h   
5 P% l  b/ r: ^% C9 L5 H- _9 Z* x  cmp eax,0ah2 s& L# v% t" A, y( ]
  jb A   
+ Q/ U; o$ H% D% _9 Q  cmp eax,0fh
+ q. d9 s. P4 w7 P) J  ja A   $ i$ k# e2 A( s4 j0 H- b4 h* T
E:# h# o1 S) [- V; V  t9 n; ?
  push eax   3 M6 g9 t% {: \! e; W
  call PRT   * B4 o1 U, Y! ]" l
  pop eax+ t  ^: R; X1 w. f
CExit:
% W2 @; k: d# c  W5 @  j  Y& V  ret  I. R" q8 m3 S; Q8 ^
Change endp
, l0 g5 l' [9 A5 [4 U( T;------------------------------------------------------------------------------------------------- T; G1 @% _* z
PRT proc near8 T5 a( m) ?# s# k" B5 J
  mov ah,02h
" m& U4 B$ k- W! B9 K  int 21h3 M7 M  Q9 M8 e1 ~2 C" L6 a
  ret% f: s; {; Q/ M6 s& r( [. D9 q7 |+ c
PRT endp7 D& \8 V5 E, h# b* V5 v  f8 l
;------------------------------------------------------------------------------------------------
3 D6 r& d6 E' W, A/ ocrlf proc near
& w/ x7 B0 _& r2 ]4 [  mov ah,02h  D3 l/ ?3 R+ E" w1 P8 H" j
  mov dl,0dh
: I# v+ j! q6 N% k8 R8 d  int 21h
% m3 `: L2 U# ~! n5 Q! L. W  mov ah,02h
) z' y( v9 M2 F& H! u  mov dl,0ah  ~: [5 y, W0 M1 m: ^# R9 _9 h
  int 21h- B0 z! T6 ^& N* h3 s2 V. Y
  ret5 q! G1 Y$ x/ k* E6 K! z; K: f
crlf endp
6 b( s6 a* I+ J. O  k/ S;------------------------------------------------------------------------------------------------$ y6 N; f5 Q1 u5 r, w
_32bits proc near
  L% z$ O9 `4 D$ b/ x  pushad
& K, n$ `1 I4 P4 u; V  mov cl,4, u7 V4 i& f3 u9 r% k! C7 V% Q
  rol ebx,cl8 v0 E% u* A# W: \8 a; k
  call print_4_bits; o0 V1 o" ^. M% Y" ?
  rol ebx,cl
, J" {. V7 q; G/ @. i  call print_4_bits% J: K; B! a* ^# G+ n) v
  rol ebx,cl
1 U4 Y' O; c# _  call print_4_bits
6 I- p; _% c" q& Z: e$ F  rol ebx,cl
- r) }* N# q5 a0 s4 ]% b  call print_4_bits( x, p: G' n  |3 R! ]
  rol ebx,cl
; @/ B2 [/ Q. ]* {. l( d  call print_4_bits6 H7 n* D* }6 q
  rol ebx,cl& }' k) H& k# X( I$ @( M) W& ?5 D
  call print_4_bits0 u" p5 n9 M+ `1 ~, O3 y% z1 }9 w
  rol ebx,cl
1 R4 w1 c' E2 Q* l  call print_4_bits
6 i1 G/ g, @/ Z5 [9 F+ R+ K; u( g, H  rol ebx,cl
" j( G! K5 g3 U% K6 ~  call print_4_bits+ k0 |$ [) q& m+ D5 S2 d
  rol ebx,cl  j1 b- x* i# _, a% b! ?: d
  popad
% c5 W2 S9 [# P$ u/ j2 O  ret1 j! i" m+ f( N2 y9 u5 S/ [
_32bits endp
8 G. W" Z1 h- Z; ~- s8 d; l;------------------------------------------------------------------------------------------------
" @% s. J) x9 `" C_16bits proc near( @) O! R9 q+ V
  pusha   
" h! {! w, `& m! x! i, A: ], i  rol bx,cl
. f( o$ Z+ y& I  call print_4_bits1 E3 P1 J. d8 B. N( H
  rol bx,cl% o! ~" ~5 O. {, v" z( W0 j
  call print_4_bits
0 E9 Q% M# K! c% L2 Z& g% n  rol bx,cl
: }4 r" e2 n( Y  call print_4_bits
3 l2 `9 f1 a! i7 g  rol bx,cl7 Z# R7 k( D) `* H: T6 ?& [
  call print_4_bits6 w- s* R" i) L3 f! {( y& h
  popa" b* v& E( d' J) D# \
  ret
9 I  ^' F; x0 r( Q_16bits endp% T' `9 ^- z" B
;------------------------------------------------------------------------------------------------; ^% s9 W: ?  ~
_8bits proc near; c: k! d: l* J5 J# u  C' E
  pusha   
5 F$ h! t5 ~2 W$ h% C- |" e4 p  rol bx,cl
; A8 Y. V, n! {- Q" L7 \: Q  call print_4_bits+ x- U+ b" Y( l& b; p  T$ T9 ^, V
  rol bx,cl
& Y0 @2 c9 ~/ @- W5 n. M  call print_4_bits
! c# j/ f  u5 H2 l9 |/ N+ t  popa
/ a  M0 d' B  j2 J) p# H# b  ret, ]" [2 q  L  ~# f3 x
_8bits endp. n3 P( G$ P6 T& \$ W: u: e4 ?+ ^% Z. n
;------------------------------------------------------------------------------------------------2 N* K! ^* z9 {7 C/ p
print_4_bits proc near
. q* x. ~- ?2 n7 G9 J  mov dx,bx
7 J, m& i, p' D5 j; t  K  and dl,0fh% m8 r$ }! [" O: s: m1 w
  add dl,30h
* e( ?! L; q8 [" U  cmp dl,3ah9 u, @) X3 V! v( [! S
  jb print1 ]8 S, w  I* B) y1 d* _: x
  add dl,7' \# Z! U8 c4 e! f+ U
print:   
  u/ z- y# W5 q, e4 W7 i% g  mov ah,2
# j2 ?9 `$ _7 W! O" z5 Y  int 21h' `% m4 N( ?7 i, F) {
  ret6 e; Z8 o8 q6 [
print_4_bits endp   / i) t& B& M3 w1 d0 R3 l
;------------------------------------------------------------------------------------------------5 j8 K4 Z- p& S, m2 Z$ w
CSEG ends
% t# z1 E  ~8 k1 D* nEND
您需要登录后才可以回帖 登录 | 加入计匠网

本版积分规则

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

GMT+8, 2026-11-1 21:26 , Processed in 0.141374 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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