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

顯示string會出現亂碼

[复制链接]
发表于 2010-10-19 16:41:51 | 显示全部楼层 |阅读模式
各位前輩好,以下的程式為在 big_real_mode 讀取記憶體的值4 `! ~0 r8 a; i" {' E/ u2 L* B
# p2 o. I. ]( F' Z, |' n) a
例如: C:\memory.exe(程式檔名) 01000100(Address)
; \. c, ]& L- c4 `, {6 f3 j* a; n' C2 Y3 S* b3 f1 d
則會顯示01000100位置的值0 ]- H/ m. Q) {8 A- @: S
- E2 `+ `) B( S& s: j
但是我另外還有要顯示出字串,但是顯示出來都是亂碼3 s0 z* T! _+ b6 J

3 f& p7 y/ b; ^9 }% O( l4 K  c麻煩前輩給我一些指導,謝謝  
! |/ Q5 J) _  m6 N( Z" k
0 w/ k6 E8 Q  n5 U' x$ C7 ]. X& u
2 y0 D. f* x  V.model small
& b9 Z- R  }( ?  b5 }2 Y7 B.386p& O! e2 F0 q4 B
;------------------------------------------------------------------------------------------------
4 ]- D& }8 K  k% m1 kDSEG SEGMENT USE16'data'  & k# q2 m5 [) j$ q0 Q- K% Y) @! I

& c& c1 \* p- v7 P& ^$ l+ Y* K( FDESC STRUC$ l0 T  e. T1 k7 N. R
  LimitL DW 0  
6 t4 t! v& K9 g3 s# l5 ?; d  BaseL DW 0  
1 P9 t, A& |# O7 H$ I  BaseM DB 0  
8 Z' r8 P  [! L8 W/ t% H. ]  Z+ I  Attributes DB 0  
: z: L. n( x3 T2 {  LimitH DB 0  % k8 g3 J0 r$ o. G5 I1 v5 y
  BaseH DB 0  
- E1 |- j9 K: e$ v; J, w+ RDESC ENDS
  g2 {6 D" U- ^) M4 F, }3 i' w+ a  Y0 Y7 ^
PDesc STRUC5 [; @6 {8 Y' K. f" T
  Limit DW 0  
+ K/ S' ?8 F2 N# y! U' s  Base DD 0  ( r& h) a# `: a" r, F8 ^  O
PDesc ENDS
: Y& ]2 ~) F# }9 i0 P" I) a/ x, O/ \
GDT_def Label Fword7 W- n( M9 E8 \) h  T' s+ A0 ]: n+ `
Null_Desc DESC < 0h, 0h, 00h, 00h, 000h, 0>) N# V6 _5 M, ^5 l! h" c$ `
Data_Desc DESC < 0FFFFh, 0h, 00h, 92h, 0CFh, 0>
, R6 i4 m4 I5 b0 }3 e! `8 BGDT_Addr PDesc <$-GDT_def-1, >4 s( U$ M& c: e7 x! O6 j7 r0 Z
' R) J8 f' a( {6 K) ~  p3 u
msg1 BYTE 'The Input Address is'
  B# w1 X; p5 d: k* f/ K+ mmsg2 BYTE 'The Data is:','$'1 _, q9 M8 W5 E) D+ e* Y7 W

) J- L( V8 g7 s. TDSEG ENDS' z) G- r* U) m+ M: E" [2 P& o

* C  ^( j; M- U) A8 {. O6 T; T
9 q6 E5 e# ~1 C2 L7 \0 I% y' N;------------------------------------------------------------------------------------------------  
( F6 s9 e4 n, j$ _/ L
- K) C0 j/ b) K+ k6 c( WASSUME CS:CSEG,DSSEG2 R. A  C  e- Y; p6 V9 i

4 C+ E: Q8 v1 o) {, bCSEG SEGMENT USE16'code'
& }& T' S) t! Y. k7 I) H  
$ E$ M, ?7 o; t2 Q$ ?( @( D  push ds
9 G( s* a, ]' L, e3 U8 M0 ]: a  w$ A! L  push es( G4 V! ]) K1 o  e3 V; w
  push fs0 `. d% z% j" Q; J
  push gs8 s+ l2 r& I& C6 ]
  , K; Y2 A3 M- s9 o/ F  l: b# j
  call big_real_mode6 h1 T: e- B8 _' c

; [4 o) L/ e# Y0 n/ P( A    1 |+ |' |: B, U3 }2 n  ?7 \+ k
  mov edx,OFFSET msg1;( }& i; K1 q: e0 T% F
  mov ah,09h;   
: [9 A2 j" H% ~# J  int 21h;: M$ s1 \7 o$ Y% |' l+ L7 w
  mov edx,OFFSET msg2;' Q: M3 g% W- s4 k( m6 N8 ]( q
  mov ah,09h;
  q- Z3 G2 x6 b; {  ?  int 21h;
7 _! w  k) ?! b% C: E6 B    + Y+ |1 d& p: ?' W# h
  call PSP   
! L+ J: a$ y. M* V  }    ! l/ s" ?4 I- W6 E2 q% T0 u
  call crlf   7 \5 ], N# {+ C5 M
    " d+ j) B$ P3 X: L8 `+ V+ u- y
  mov esi,ebx$ L/ r0 b! e0 m2 X, o
  mov eax,fs:[esi]
1 p( }9 j" q2 V  out 80h,eax
: H2 i- q. X; {: B  mov ebx,eax
" ]% u6 f) O- @8 S* v  call _8bits
! B3 @) P* u* ~+ D   
' y- k# A: |6 j. R% V2 d1 S  call real_mode
$ g5 T6 f% O6 u6 V    0 K2 a( P* A0 c# \
  pop gs
5 s8 h7 B1 ^& J* z7 B' j" u  pop fs7 e0 p8 T0 M4 f4 x( p8 J& g: X2 m
  pop es
+ z2 u4 P$ Y) p9 v  F  pop ds
8 N' F" [9 @; ?1 F. r* Q    ; |" P/ s* @8 m; ^' E+ i# c% Q
  .exit
% `6 j& n' w! `% S8 Z4 Z! A;------------------------------------------------------------------------------------------------
* q' z7 A* t7 Y5 J! E7 Xbig_real_mode proc near' ?+ d: B( e0 x( D
  in al, 92h- G0 I) b. S+ [' K3 y" R
  or al, 0026 q; ^2 p/ B) c/ H) }" y8 f; V
  out 092h, al% T  z8 I- F3 |0 W' ~- A
  out 0edh, al# e% [' J  t; z4 E9 f( t
  cli
4 I9 Y+ E- q2 J$ ?. k" M  mov eax,DSEG3 p& x( C! X% ?# X4 V- g
  shl eax, 4. I7 L6 X% g' |4 Q( J) j9 G9 U
  xor ebx, ebx
3 R, Z* W6 P& u, A$ F5 s( G  mov ebx, offset GDT_def
0 B1 y8 W" p& C2 x  add eax, ebx$ U2 |) V# g3 R
  mov dword ptr GDT_Addr.Base, eax/ H, u8 B1 l  i7 F
  lgdt fword ptr GDT_Addr
! A! u  W& G; x' m( K% i  mov bx, 8! ?# o2 ?7 s9 R! m) V: M; U
  mov eax, cr0
5 ^. j5 q9 C: l$ I  or al, 1  _, T2 K3 o! D4 {' E9 S! r
  mov cr0, eax" r* Q# ~9 c. a0 i
  jmp PMod
4 c! E/ U( A: x1 s2 h# n* {PMod:+ }6 q0 i3 Q. Q9 T; Y
  mov fs, bx
' ]# K8 M; c$ ~* B3 T( t$ p  mov gs, bx
: R* E. r& H% a; D- d9 H+ \  mov eax,cr0& j& v) s7 W+ W# Q4 Y
  and al, 0FEh
* t) t% g# c8 @% K: w4 |9 w  mov cr0, eax  6 w& N( M$ N/ f$ z6 }+ I0 f: M
  jmp RMod1 I; }6 n, {6 h! c6 [" z$ s
RMod:  z& j* ~/ e  q# a+ ~
  xor ax, ax  b+ |- x% x( \
  mov fs, ax
8 e+ p; Y7 D0 h$ S  mov gs, ax
# h: E7 R1 z5 W    / ?. ^  N) Y1 z/ T+ [
  sti% @3 c  k2 o# A; o  X4 A. _9 E
    0 t& r$ L7 O6 E+ j6 g
  ret
5 r5 N! R4 w0 N; H# P2 ?, ]big_real_mode ENDP# [  l6 V2 y" c, I. s
;------------------------------------------------------------------------------------------------6 b* I. |  I# f9 d% ?' L' |
real_mode proc near( X1 u6 v# Y( x" t7 H$ V4 e5 N
  in al, 92h6 {& P" p& q5 g+ S8 y! Y
  and al, 02+ k1 K6 a' ]/ G& {' e- K2 v
  out 92h, al   
: f3 S0 q; S& i' t( G  ret
& D  n' ?* t/ G: |* Ereal_mode ENDP6 c9 y6 A8 c) F3 X+ d; v
;------------------------------------------------------------------------------------------------& \/ M" h# O: j8 i6 W1 D& s% J% Y
Get_Commandtail PROC near3 e- B' n/ ~; m0 |- M+ U3 Y
  push es  % g, @3 v- @  ?0 l" f
  pusha, C4 s( x% k4 n4 @* f
  mov ah,62h  
4 L$ W# F# ]! ^( C( E  int 21h9 j$ J" S  ?% N; T& Z/ B
  mov es,bx0 m2 \9 H) O( P9 o0 Z7 r
  popa  
! Y/ q  s" D7 Q6 x, o  J  pop es
- O% m, I1 E, a  ret, r' [# h3 k; U: M
Get_Commandtail ENDP
) l0 s6 T, O! [( D;------------------------------------------------------------------------------------------------
" j1 v% q8 p- V0 P: l* tPSP proc near) k6 b3 n8 |, B2 R1 q. j- h7 ?
  mov ah,62h
- f) t( B' J3 |0 C8 v$ z- ^  int 21h
) r4 P& @0 y3 X  mov es,bx   9 _/ h8 ~: i& Y* r; \8 O4 X  {- t
  xor ebx,ebx
# G8 v' m" }6 `5 x2 K1 G3 z# U  mov si,82h
9 V5 s3 ~" x/ c2 t$ S; M7 g4 U7 K- M  mov al,es:[si]
3 f$ T/ {* u$ b+ \" t) @  call Change" c4 l0 T$ x- z* g: Z( o
  mov cl,4
+ l; H* J1 R: E0 f& [5 R  ^  shl ebx,cl* D8 ~3 `$ f+ |4 c
  add ebx,eax
3 w1 J1 [. Q( I. S  z  mov al,es:[si+1]" g) r* X$ r  [* W+ {
  call Change/ C: s8 z4 m0 c
  mov cl,4
& [# q- ]' D" H; {9 S5 F* M+ m  shl ebx,cl
% e6 h4 H8 ~  c$ M: v! Y  add ebx,eax4 M8 f* j) ^" q- p) M
  mov al,es:[si+2]( C6 t" ?5 d9 ~" L3 ~. ^  U9 m
  call Change
' ~: ?  L) C: x: _  mov cl,42 l2 S1 J8 F: L. B; L) `% Z6 }
  shl ebx,cl
+ t" z$ E7 h* j/ B  add ebx,eax" C- X, Q7 Y3 F
  mov al,es:[si+3]
. C1 B" c. ~! g% W  call Change
* r9 |/ V1 v% T1 @6 X- @  mov cl,4
6 k. T; y2 b) A- F  ^- w  shl ebx,cl2 `9 m, t7 ~' s# L# j- x
  add ebx,eax
/ {3 X0 f) p- s8 m% V  mov al,es:[si+4]- Q# {$ v0 W# C1 }- Q
  call Change( G9 k9 u3 L6 R* n7 U, ?
  mov cl,4
+ M# ]! W& K% z: h$ W$ H  shl ebx,cl! M/ a5 ^5 R0 e% j
  add ebx,eax
' n; B- d' X: x$ |/ ^  mov al,es:[si+5]
" q# U9 r( J* G6 Q) `  call Change  {, W8 D' a# n
  mov cl,4
! X" @/ R" S, H! L- S: c  shl ebx,cl
0 V# k' |) w; A6 M1 `7 e  add ebx,eax: Z5 H/ j" Y2 P% T- k/ P
  mov al,es:[si+6]9 t) |7 A8 [5 _, x
  call Change
/ J4 C" y- ^' N% \; m( S, |  mov cl,4
% S* }  S* y- ]7 l  shl ebx,cl
' g  l, U/ M1 |. E+ [4 q; H! E9 W0 ~  add ebx,eax5 Q1 v3 s( G1 W! C# }7 N- Y6 P9 ~
  mov al,es:[si+7]: J+ E8 [- c) B* z7 L
  call Change& s+ p3 d1 ]/ E& f2 ~1 {
  mov cl,4
+ m! ^6 n% S% E; Z* B* \  shl ebx,cl
3 O" Z* C0 O1 f  add ebx,eax
: C5 y  ?$ ~6 F, F/ C# o  ret
3 Z8 P' Q* j3 ^& K; y" ~+ ePSP endp
, P; _* O& W4 v1 V( n& ^;------------------------------------------------------------------------------------------------
: y# u# j7 P7 w6 s6 M$ mChange proc near, D4 b2 i) ]6 {5 ?% g" G+ u- h% l
A:   
" U! H$ u) R8 H' B/ z) i. }  movzx eax,al
- D; E9 H+ V& t0 D+ T  mov edx,eax
: n8 ?: _( w+ w8 M* W  cmp eax,'0'   
; K7 g) E3 c* e3 h5 `  d  jb A8 ~. D3 g" z" l. r# w
  cmp eax,'9'   . s! g5 \7 b1 D2 @' _
  ja B) E- H  |0 J. f, @% e
  sub eax,'0'
- Q6 ^+ N& @9 T$ f' a; b3 X+ z( @6 P  jmp short E& O: J- ]( H. Z
B:+ B5 O, i; m$ b2 D+ |1 k% J+ {
  and eax,0dfh   - B' a# m4 S4 Q, n0 h
  mov edx,eax# Q; A9 G  n# |2 }" n) f
  sub eax,37h   7 h% }+ r' V8 p# A3 {% u9 D
  cmp eax,0ah
8 [5 r4 j$ g. \; G* C  jb A   
" l+ g  f1 H1 c8 @6 C% i  cmp eax,0fh' ^( L1 w7 N. L( ]# `
  ja A   - ^# y" m" t  X% l
E:9 F5 ]2 k) _' t4 p
  push eax   6 S6 F# y( b/ X
  call PRT   7 G; j! K, M6 |
  pop eax
- D0 e3 j" y" y. |. p1 ]: e+ Y$ Y, k% OCExit:
2 \0 \- i, w6 G! J. F' k( \  ret; g  d2 t8 Z$ Y4 b" e6 @
Change endp2 \# @. h5 @" r
;------------------------------------------------------------------------------------------------$ ], X. ]. j7 F  Y6 ~" w+ ?
PRT proc near
$ l* H6 P; [" |4 t( ~3 b  mov ah,02h" o3 J% E9 N6 q; x2 t1 k
  int 21h& `* ], ?  u" J$ O8 o8 P
  ret0 ?# d5 `$ I, n
PRT endp4 L5 I, o) l, ]5 u
;------------------------------------------------------------------------------------------------" b  N% d! o$ @& c0 a( _4 _/ L
crlf proc near
4 V* p& X$ E" [' n! ]! k  mov ah,02h
6 f. ~* q! O; \- @) B- `  mov dl,0dh
; J. ?1 M7 U* \3 {( w  ?  int 21h
3 `+ ]5 H& i9 g: K. \% O( v  mov ah,02h
" p/ R- K  O* o8 L! y' Y  mov dl,0ah5 j5 E) Q! E' ]! E) O/ ?
  int 21h" {; d3 }2 K5 m5 z( Y
  ret! P2 {" B( |5 D8 e* C! [  K
crlf endp8 U9 T& u+ x# `/ {- [4 z( ?! \
;------------------------------------------------------------------------------------------------; g# F! w( D1 T/ u9 F
_32bits proc near5 B5 J, r) Y6 s
  pushad
0 t7 m% n7 T: U- t- h  G: @  mov cl,42 H! B* q) H0 I; ~" C
  rol ebx,cl
" |  ?$ M) M8 _: r  call print_4_bits
2 F( x5 o" k  S$ e  rol ebx,cl
4 }; p7 S  A9 }1 C8 o7 H$ Y: @  call print_4_bits% O4 u" n9 d' D& W+ _' d2 C
  rol ebx,cl% r7 c2 Q( o- J- d) d6 ~
  call print_4_bits
. [& p5 x5 S1 \0 v/ Z  rol ebx,cl
! Y& v2 Z! g+ [4 t3 l! Q  call print_4_bits% U' z1 O7 r- f% m: |
  rol ebx,cl+ N! @6 r9 J8 q; g8 T, Q2 R( y
  call print_4_bits7 Y: |# Y* V9 ]! h
  rol ebx,cl
2 K4 {9 i/ J; y0 {% I. r/ c  call print_4_bits
2 J; d( Q) c: A- I  rol ebx,cl
# ?6 y* B3 [9 G7 I  call print_4_bits8 m$ c* F1 e) Y  \
  rol ebx,cl
- T0 b$ e, @# {: f5 ^  call print_4_bits
. F. m) G8 D" `& E, y  w$ T* U0 ^  rol ebx,cl
  D) {0 ]2 E: I- ^2 r  popad
  |: P& X6 y9 f2 L  ret
# Y6 o& Q" i. {3 z& f# f8 ~_32bits endp+ j6 A  Z$ y9 S( }2 n- u: n
;------------------------------------------------------------------------------------------------
$ d$ T0 ]* c' }5 a$ L; T. L% M( s" r_16bits proc near; p8 Z0 V7 Y- ]& _7 y- K
  pusha   
; {- q- s, C; T. {8 m2 v. n  rol bx,cl8 B7 Q; c6 Q& p6 H2 T$ _
  call print_4_bits
+ O4 k( e9 y2 n0 K  rol bx,cl
5 Q3 |7 U6 z2 U" C  call print_4_bits
' q2 z% Y, k: c  rol bx,cl
; E. {' `8 h* Z3 B6 [1 t% o2 f  call print_4_bits
! b) Z9 V4 Q/ x2 {  rol bx,cl
/ B  D3 [/ A! z  call print_4_bits; F5 h4 q) d* K" J* n$ {
  popa
& R: v, e1 w: _  ret1 C! M( M) ?: C& U: w: E5 a( t4 y
_16bits endp5 `) X3 q2 }1 \5 r) M: O' e1 O
;------------------------------------------------------------------------------------------------% w% \- k! [6 W
_8bits proc near
& k5 e  z+ ]9 |7 ^3 s7 Y  pusha   6 }5 a- v/ X8 m" w" ?1 w* f
  rol bx,cl& ]# }  L7 t" ~# y  x; J6 m
  call print_4_bits* U( C- Q: u" L- {2 [
  rol bx,cl
! c, z7 ]9 c1 \+ ]2 M  call print_4_bits
: X7 D$ y; Y' N6 i8 z. x. ^  popa
/ ?% @% \# K* U, R& Z4 t" u: p  ret
5 `9 t1 `- O. I' v3 A_8bits endp
7 |. T1 z; s2 m+ Q: K. l$ ^1 c;------------------------------------------------------------------------------------------------0 t* n/ [1 W4 I; G  N
print_4_bits proc near& L: _! F+ v( O! N  l
  mov dx,bx* u+ g3 ?, @$ L# M0 r
  and dl,0fh
6 f) F' Z3 {+ D5 Y2 f) m, X  add dl,30h! O/ [$ ?7 v7 `
  cmp dl,3ah
/ k+ h, y6 Y: ]3 w  jb print
5 t) x7 Q4 R' C7 y" J2 P& p, h  add dl,7
9 }5 _' a7 W  K% i0 z) A* p0 t' T( Rprint:   9 `% [9 u& z5 o( |! k0 g
  mov ah,2
5 w2 d- ]3 n- A* u! F6 ?  int 21h
- C% i3 t% n$ \; p1 k  ret
7 L4 R4 o/ ?- |3 i3 |: Lprint_4_bits endp   
5 k# D- |4 o2 H4 q;------------------------------------------------------------------------------------------------* P3 b  w7 C; t2 _5 \
CSEG ends$ p+ |5 [1 f% m  w6 @: _* c& |' n
END
您需要登录后才可以回帖 登录 | 加入计匠网

本版积分规则

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

GMT+8, 2026-10-12 08:06 , Processed in 0.064569 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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