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

顯示string會出現亂碼

[复制链接]
发表于 2010-10-19 16:41:51 | 显示全部楼层 |阅读模式
各位前輩好,以下的程式為在 big_real_mode 讀取記憶體的值
) b3 ]2 t2 g! J% K' X; j" W9 V9 N9 c: B! M. ]7 j) s
例如: C:\memory.exe(程式檔名) 01000100(Address)
# I* N6 J$ t; u) a2 o
/ v" q% h* ?4 [: ^. [+ K& s則會顯示01000100位置的值; x  g+ N! K1 b2 V6 F  z
/ _# f9 h4 [9 W. P
但是我另外還有要顯示出字串,但是顯示出來都是亂碼
* y4 k/ s- y/ X* ~. T
4 x2 F; C$ H  N% m  ~7 K0 P4 }: u; n麻煩前輩給我一些指導,謝謝  , l( t5 T* S7 G  i5 D% z3 [! o
4 V5 h  i: `1 _" Y

$ [! {# O, G1 p0 M2 F4 Q+ i.model small
6 ]; K6 h* D  |" q) A' k) O' q5 f4 c.386p
7 Q6 w" S# k2 m5 F- U;------------------------------------------------------------------------------------------------1 i4 q3 c  S6 T( r* F7 }5 ^6 O
DSEG SEGMENT USE16'data'  
6 e$ P- A, F' r8 u4 x8 C8 t
/ Z9 V+ L; B. L  @& @DESC STRUC9 j( n; v+ Q5 K6 `( ^2 n  H
  LimitL DW 0  " o7 {$ p8 b7 l1 \$ d1 G! U
  BaseL DW 0  8 @) G3 Z) ~, q5 n
  BaseM DB 0  * A7 {' }  C! {; q) d0 d7 N6 Y3 |
  Attributes DB 0  7 l1 b4 w5 R" L7 ~# ]$ f( W
  LimitH DB 0  
0 L: K- R" \4 v" T  x7 w- G: P  BaseH DB 0  
( l5 `( m% A6 w2 |DESC ENDS
# W* |8 d* N7 h6 d6 ~# X
2 }. h) ^. z8 b4 j6 yPDesc STRUC, h$ A& k) o9 \
  Limit DW 0  
5 u+ k5 G0 Q! c6 s7 ?' g" z" Y: k/ F  Base DD 0  
8 ^: ]- t" w, mPDesc ENDS  a2 f5 D! @" l2 o% \

( W) s/ y; z% H4 @; I6 i+ ?GDT_def Label Fword" p" `& {7 _& ~
Null_Desc DESC < 0h, 0h, 00h, 00h, 000h, 0>& ^5 h+ l8 w5 c. I' J$ @
Data_Desc DESC < 0FFFFh, 0h, 00h, 92h, 0CFh, 0>2 J4 i: x" |0 u
GDT_Addr PDesc <$-GDT_def-1, >  q& M# X, l# e5 [& e$ X1 L& F
6 u3 u9 o7 B# Q: I
msg1 BYTE 'The Input Address is'
, R% Y+ O6 i% P: x  e$ s* ]msg2 BYTE 'The Data is:','$'
4 z4 p* ?( Z* q& C8 i" Z! U5 s! A3 G: E4 X& |
DSEG ENDS
0 j. J4 p  L8 S: F' z# R6 k# g* ]* ^* k- s$ z+ x2 J& p' |

: y- A# j- e8 {: O0 J* ?6 w;------------------------------------------------------------------------------------------------  * y" e2 P3 c3 f  H0 w# y% r' H

+ v$ |; {# k' m' WASSUME CS:CSEG,DSSEG
  }( B' G  W  I5 t, G& H* b
8 u( b- f3 k" vCSEG SEGMENT USE16'code'
8 ~4 W: B' f9 ]; Z- Z' W5 F- B  ' C) J& y3 [/ E& I' \
  push ds
) q5 I- k8 m0 z' E0 ]  push es
( H: f$ l9 y9 {  Z" B7 ~3 E4 s& S  push fs
* l" K, G+ F6 t  push gs
6 F* B# |' E: m4 u( H8 H* O' `5 c  & b8 I1 }/ N+ k# q3 y* N
  call big_real_mode6 _3 l! B1 G7 {  n; H

2 @1 t; D  y. _9 ^9 f" N. O      x4 _4 t& A) [$ u
  mov edx,OFFSET msg1;
; O/ @! Q3 R3 S( c) @; D  @5 M  mov ah,09h;   
) a- o! l$ f5 P% M  int 21h;
, W2 v# P& \+ S; z/ k4 l  mov edx,OFFSET msg2;
$ k$ H' q+ i- Q# I+ \  mov ah,09h;  E- C& M" A! W, _" m% L4 p5 r
  int 21h;+ I* N0 \7 h# g1 ?7 ^% e
    1 n: a7 D7 m+ Y% l: U
  call PSP   
( o# @4 A- J4 l4 }) ?- o2 k9 @+ {   
& [! {  l4 N. G9 T* B% X7 ?. b  call crlf   * h+ X& R& ~  }5 f; y! U
    9 |3 _) c) w1 C, p9 X
  mov esi,ebx2 `- \) S( V  }% v* Z
  mov eax,fs:[esi]/ B- h& n; P% Z# J9 K
  out 80h,eax( L0 x4 E" o0 x. P$ b( G% A; P8 i9 x
  mov ebx,eax
" C7 [0 P/ K5 G( A( f$ |  call _8bits
3 J  W: Z3 i5 w& q9 y/ }    % \% B7 W& O/ V
  call real_mode
7 Z8 N: W% K- B- F# T   
8 C9 ^+ ?) i& N/ B& ?2 g9 i  pop gs4 d. p. E$ ?4 H$ Y* `' u; X* y
  pop fs) \1 D% H2 \  m" N& D
  pop es0 H' K6 j+ @3 X" p
  pop ds
1 Z/ T4 g9 `9 D3 p0 p: ]$ t   
7 p: {: s# Z2 a" n' J+ C" @2 L; _  .exit+ r, E+ n. e) N6 C- I$ X
;------------------------------------------------------------------------------------------------6 P  P# W1 i$ ~0 ?
big_real_mode proc near
7 l4 f  H2 F% n3 B5 [  in al, 92h
& Y8 h' t% |1 O- c2 v  or al, 002
- w& h* }! ?. U& b' |8 w' Y# q1 P: V- }  out 092h, al* z& i" v. v) Y  n$ @
  out 0edh, al- |- k9 s+ o& Q: S/ f
  cli
* p- E8 V5 L1 d% X  mov eax,DSEG; f) n& |& H* `6 ^; p$ [
  shl eax, 4" d: `2 y$ [5 ^3 l" |) @+ \- j! Q" a9 }
  xor ebx, ebx! j* y' ?, O* `4 d
  mov ebx, offset GDT_def9 {' A2 b& J- ^' L. B+ ^# C
  add eax, ebx
  V5 B$ L1 ^8 a" U/ s) W  mov dword ptr GDT_Addr.Base, eax5 g1 w7 |0 u- r" B  a
  lgdt fword ptr GDT_Addr
4 Q' b( T1 U3 S' F4 D/ G  mov bx, 8
1 n5 y3 C% h. @  mov eax, cr0
$ F; t1 I: V6 a, G+ V  l1 Q  or al, 1
1 w4 V- A  V# z0 H( N* E  mov cr0, eax% d3 Z5 T7 U- Q
  jmp PMod
9 \. ?$ P0 ?, c6 s& P5 YPMod:% ~0 i1 R$ o' p$ b  f! h3 K  [% v
  mov fs, bx
4 q- {" u8 {8 \$ d. A1 C  mov gs, bx  {  V3 A* ^1 C4 Q# q
  mov eax,cr0
% |/ R1 ]: g5 I' o% H9 E7 s9 Z  and al, 0FEh. t6 _+ P4 r# r. I7 `
  mov cr0, eax  
/ h8 w5 x4 x1 I  Y3 j' I7 m  jmp RMod1 ?; {4 R$ L* ~0 S7 G/ M
RMod:
4 Q3 \6 \/ W1 z* S! G6 l  xor ax, ax
  P' u+ N! q9 i: e6 m+ u- p3 g  mov fs, ax
/ [* q& L& w) g- {) I( `6 I  mov gs, ax& T. K' Y( ]& E
   
! d& a" @6 c& X  sti) O# K8 ?& T1 S# ]( d1 }7 _( \
    2 ?4 c) s% _3 a. z
  ret5 _' E& v4 u  R& L! q
big_real_mode ENDP) `1 r" l( o; n: e9 Q+ R1 m
;------------------------------------------------------------------------------------------------
9 }5 z# P" R; {1 }- Z' }real_mode proc near
5 i+ `6 y$ Q- u( ~  in al, 92h
% P" m; O+ B/ h( |5 a4 f/ A# F  and al, 02, S7 Q; v' m' ]- Z5 f2 f  N
  out 92h, al     H3 B" Z6 N7 w5 K) |
  ret  L4 A9 R; c6 }8 J0 [. L% I
real_mode ENDP  b& x  q+ a. m" w% f# U2 G; l
;------------------------------------------------------------------------------------------------
4 C" T: F1 V1 `: \! v* GGet_Commandtail PROC near
! o: d5 T# O) o, L  U  push es  4 u; A0 i& m6 H9 {, E7 D  f' @( u1 @
  pusha, }4 D5 y4 L4 Y5 B2 i" o+ k
  mov ah,62h  
2 f! N" K+ N, Z% _  int 21h
0 |: P' B8 m6 [  mov es,bx
! ^: V  h& p; j+ U  popa  
# Z  T7 a+ O# C- P4 v  pop es! \# J6 Y7 z: w- z
  ret' i7 b: y% T0 A. S" g# u4 ^
Get_Commandtail ENDP2 N" r  @9 Q( U% Z. Q
;------------------------------------------------------------------------------------------------' q0 P" o$ O* f7 N
PSP proc near
$ C9 ~) |2 H+ J2 u  w  mov ah,62h
4 S5 y5 W) ~# u/ L- H4 y" C! g5 V  int 21h
& k) u# K& ~) l& W6 F  mov es,bx   
2 _5 L* `& I* r$ N3 x! M: _# C  xor ebx,ebx
: G( J4 V# z/ v' ?1 Q) T  mov si,82h0 x+ [+ ]. k  d; c; a  Q
  mov al,es:[si]
8 t8 ^; U# v% K  call Change- x( M% V# p$ `& ^
  mov cl,4+ f6 l4 R) T5 x
  shl ebx,cl5 _$ F; M( O  K* g, x$ B
  add ebx,eax# B, b5 a! n: V
  mov al,es:[si+1]
) S+ ]5 p& p  U$ Q  call Change
3 D' S' Z& u4 A  mov cl,4  x) f# e5 Y' u: u
  shl ebx,cl
" H/ l* e) o( O. C8 ?6 ?  add ebx,eax. K+ S8 q# W1 V6 K4 F- X
  mov al,es:[si+2]2 [2 N, L2 J6 t/ [) s$ x( N2 e) e
  call Change
2 u4 i% }$ |$ L  d/ I) y% u+ |5 h  mov cl,4
4 i# }1 E: _# [: ~1 w1 a: ?  shl ebx,cl
1 A1 f1 o5 T. h$ g) B% t/ ~/ r  add ebx,eax
( e2 F4 i6 l2 `0 |1 ~  mov al,es:[si+3]
2 b" F' a+ d1 ]) X2 D- U  call Change
% ?2 W! i1 h, Y, Y  mov cl,4
! ]9 G6 K; {* v7 i/ E. [5 t. a  J; H  shl ebx,cl
" h( e% I6 Q9 t- e  add ebx,eax* s, t/ l8 f$ z& N
  mov al,es:[si+4]
( F$ q6 u" c% C7 Z  call Change
7 n' O# k; P( K2 \  mov cl,4
0 s. w. Z& o3 Y! x  shl ebx,cl
3 T! ]' m& {, ?  add ebx,eax& g  i5 w9 m6 o
  mov al,es:[si+5]9 `1 c5 I4 O8 i6 G* y1 c
  call Change
' P1 p% |, O7 _! E, B1 R% Q# u2 {  mov cl,4
: @% Y* G4 |1 u$ [+ q: ~; p. \  shl ebx,cl
8 {9 K4 W1 U) O4 o6 o4 S) t$ \: i  add ebx,eax
) J* @9 s' w3 Q! R% f  mov al,es:[si+6]& z& k: K) E9 h, u* a" }
  call Change
5 ]% W  @; T. k* `  A& [. h- U5 b  mov cl,4
$ I, O4 J0 ~* }8 H& B0 O7 p  shl ebx,cl
6 w! [9 @( y. b# T, \2 W8 y! h  add ebx,eax7 A3 t) g' c! P5 D# \. ~
  mov al,es:[si+7]8 G$ `, e0 {6 L
  call Change
; z$ f; E9 |6 R9 o3 ]5 R) t  mov cl,4
) T: t. s5 B. i, w' W* Y4 M  shl ebx,cl* l  Y; K: E  `6 E' f
  add ebx,eax. z& i- `& X1 y) v1 X3 A
  ret
6 R" }  H0 i7 W; |4 K6 lPSP endp8 h' o+ k; V* B$ o
;------------------------------------------------------------------------------------------------! j; G2 I; S7 ?
Change proc near
& V$ D& `( t  M- U. y! W) Y; aA:   ' D- U% w( z, e5 x: q$ `0 o. }3 i1 Z
  movzx eax,al; z0 ]6 w/ t8 D* |* W6 f! q/ w
  mov edx,eax
- c( n9 K! k- E. `+ y7 o4 b2 o9 _  cmp eax,'0'   
0 I9 S$ f2 l: q  K  jb A& z6 @/ O9 M- L! _( M6 J/ _2 T5 B8 x
  cmp eax,'9'   ' w* G* I2 y' H. y  s& {: I; L0 {( \/ I
  ja B2 \) t2 e! Q4 X1 S5 E( t
  sub eax,'0'
" A' T# `# [5 C! ]& `, e$ @) J  jmp short E
. X; z, M5 V$ Q; J; oB:$ {  Z6 E* A6 n& [' b. x7 z
  and eax,0dfh   
! x6 F3 ~+ q: J5 u' Q% B: G: U  mov edx,eax
" U. h3 K1 z! c  z" I! u9 E! {  sub eax,37h   
2 E9 I2 _& R, G( z5 J  cmp eax,0ah
, F" ~# A1 Y$ g4 [& O! W  jb A   $ C8 k  v9 K+ a( z+ Y  n
  cmp eax,0fh
( _4 [6 Y$ `, b( I  ja A   $ r5 {9 a; F, N! p; W/ v, c: M* _, x
E:
8 U' x# l' y% i' U- ^1 W- `+ y1 n% n! v  push eax   6 ]4 N2 H  J+ g& r; \. G
  call PRT   
% D! y1 q! |/ ~* S& H  pop eax
. C1 |( s0 X' h! r' c! W  jCExit:6 V% n- C) w- A) d: x1 L: @8 t3 U
  ret
+ k* t- T7 b% GChange endp: d9 k8 u: Q" o0 [3 W
;------------------------------------------------------------------------------------------------
0 N( ?$ `. e% v6 r/ D- CPRT proc near" ?1 n8 b& u  b  ~1 b* @
  mov ah,02h
$ }: L( l1 t  X5 a; t# Q  int 21h
) ^/ s* z) ^) e9 f# e& f  ret
6 ?) }1 h. h9 Q  ?% C- V+ t" h: b/ YPRT endp# P/ a- ~1 \6 S) }/ d1 _! T; c
;------------------------------------------------------------------------------------------------
2 e% J  H6 d( w' N# a0 kcrlf proc near7 f, _5 ?! ~2 B9 d" E0 I
  mov ah,02h( o! A+ x1 F* W
  mov dl,0dh
! R) C3 R& e% b# y% t  int 21h5 S. L7 \& r7 K9 e/ z# S" D
  mov ah,02h
; E0 p  f9 e: m6 g+ T  mov dl,0ah4 d; N; {0 @) r% E- c5 X/ U
  int 21h
' V9 l5 _5 l5 S  ret
( J7 y' U/ d4 \1 s, U% c3 H# Vcrlf endp' a. ^; U6 @6 ~' Y
;------------------------------------------------------------------------------------------------
% B, a# T7 O! o" Y! P, v$ _' H- N_32bits proc near. e7 c: r, k( Z0 J1 d
  pushad
) Y+ s9 ~- T. Z) _" C  mov cl,4
; c* n1 n) O+ }1 W  rol ebx,cl
' X: o4 g( Z' Z5 a: r& a( H5 Y  call print_4_bits
' ~8 G( n3 }0 k8 I" ^  g# n! G  rol ebx,cl
. g# p6 @# h; ]1 V( c1 j  call print_4_bits. t5 S' c8 s0 b: Q& }: U3 L' X3 Z- ?
  rol ebx,cl
; J4 G9 h! e; ^  call print_4_bits  V0 |4 E8 u8 e9 `/ S
  rol ebx,cl9 z% o  N. L' u: ^6 L- E# ^
  call print_4_bits9 q. X3 ?6 P* ]9 C# g8 [
  rol ebx,cl" K0 M8 A) |  x# g" k/ J$ C
  call print_4_bits
% u9 I) d0 ~. x% ~6 D# [  rol ebx,cl
. |+ O# V, ]& t, R% u6 A) A  call print_4_bits7 W' @: t* R" i7 P+ `1 D1 _
  rol ebx,cl
  J* b) d$ M4 E' J  call print_4_bits1 j! I: H" D* r1 t: N4 ]5 T
  rol ebx,cl
! I1 g) M2 t6 S# e$ `- e  call print_4_bits/ C+ u/ e( V' a5 ?" r- K, C, v7 R
  rol ebx,cl
# h5 ]! Z. j+ l6 \4 c1 D1 `3 ]+ T  popad/ D8 a4 t: q0 ~7 `+ _
  ret
* e5 }. g% K9 i1 S_32bits endp
3 \1 W! h* e9 T9 X2 \9 S;------------------------------------------------------------------------------------------------1 y1 I9 ~( @' e; S  x, A2 s
_16bits proc near! C, V4 m% U: ~7 [! V
  pusha   # Q9 x( z4 D0 N9 v: x; p6 A7 J; F
  rol bx,cl, t# R3 @  {. o+ Q2 A
  call print_4_bits8 q- {% v6 s6 n& U' Q1 ?
  rol bx,cl
+ F! Z% x+ s3 x  call print_4_bits7 _; F9 b. W% ]( X4 Q2 y; h7 Q
  rol bx,cl
  y6 Y/ [3 |* c8 W8 R  call print_4_bits
) F" J0 w4 H  h4 k+ ]  rol bx,cl6 {7 g" T: }0 f$ X! B
  call print_4_bits* D4 X& O1 U. C: }. P
  popa
5 b; S: J/ h& `/ S8 o  ret
$ c' n, r) `' D4 h_16bits endp0 G- |" m3 Z- U+ r* D8 O: C
;------------------------------------------------------------------------------------------------: P, h' s, k0 U
_8bits proc near1 K% R# ?2 G" [* o5 C( J
  pusha   : W8 z, X8 T2 V6 l$ t, k8 L! G
  rol bx,cl
( F% Z! ]2 F( D) n1 \  call print_4_bits
  s  Q* G: G8 x( l9 ~( p; S  rol bx,cl
* f1 j- v( }' E9 Q' |: H9 q7 X  call print_4_bits: P$ y* D- E) O0 S: W; c
  popa/ k: e( e& x  P$ ]
  ret6 p$ b" Z: q' t# D  W. E0 I6 n, t
_8bits endp0 W  y' \. `/ [& g, K" v) Y
;------------------------------------------------------------------------------------------------
/ K* ]! R1 Q$ n. D' ^print_4_bits proc near
! _9 w, u8 q1 x9 [& m) G( v  mov dx,bx& t! e8 K( B+ w. N- g
  and dl,0fh
2 ^- v% P9 @" H7 s  add dl,30h" H: h& j2 D# y+ ~6 M
  cmp dl,3ah1 A1 k  _! k: f& ^6 T
  jb print
3 t; N' ~' n% [  add dl,7  d4 [* j1 R0 S$ ]& `
print:   ; s: p. h. D$ i0 E/ s& a2 i
  mov ah,2
- B) }: Y! e7 Z8 r  int 21h
5 g3 ^0 w! {  X6 p; M  ret+ [# O% _2 i, x6 M' V+ x
print_4_bits endp   
3 l! R: U& v" s  `1 {7 [  i( A5 f;------------------------------------------------------------------------------------------------
) @1 _5 p8 ^# Q$ U: DCSEG ends+ l6 `! t/ G0 H9 q6 a9 e
END
您需要登录后才可以回帖 登录 | 加入计匠网

本版积分规则

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

GMT+8, 2025-4-12 06:56 , Processed in 0.032629 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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