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

顯示string會出現亂碼

[复制链接]
发表于 2010-10-19 16:41:51 | 显示全部楼层 |阅读模式
各位前輩好,以下的程式為在 big_real_mode 讀取記憶體的值0 B8 C" D6 N" _. z7 i" D# A
5 \4 Z1 ]+ ]5 e. Y0 L
例如: C:\memory.exe(程式檔名) 01000100(Address)
3 Y0 w7 o- z* X: }8 L8 I
( h, h" J3 c# G# G" D3 w則會顯示01000100位置的值" r: o. s7 c. F6 v7 O
$ ~7 ?+ n# c% [
但是我另外還有要顯示出字串,但是顯示出來都是亂碼) K+ S$ J) ~0 g. M) c" I
3 A* b$ u) t- D! [* }( b
麻煩前輩給我一些指導,謝謝  
: p, P8 [8 ?3 B4 P
6 {) r- {8 w2 V9 A
! e( x# `$ v/ D.model small
. n% O/ F  J/ y! ]( E) Y# k* M.386p
  u) q6 P) [( z7 Y+ ?/ o;------------------------------------------------------------------------------------------------/ |& X2 g" ]) z0 I/ T
DSEG SEGMENT USE16'data'  : Z' w: ~& N" O8 j; Y
! l* d9 B1 D5 N8 p; ?
DESC STRUC& M% O0 s: N5 M9 ]) R
  LimitL DW 0  4 L$ J" y1 n" Z" X' P- }
  BaseL DW 0  
% K% ^; A( [2 H0 S8 }( l7 z' j  BaseM DB 0  
. s4 r* @3 D9 D+ c& h  Attributes DB 0  1 W5 R% ?1 j5 ~1 r' H
  LimitH DB 0  5 B7 l% Q% X, T- H) X
  BaseH DB 0  
3 u8 }2 T' U- J- g0 aDESC ENDS
3 V9 e, v, x$ i" \" p+ D  c9 v1 b  D2 Z7 b2 T
PDesc STRUC9 y0 R+ N; `8 x
  Limit DW 0  % s$ c4 G% F2 A$ u3 Q! ^
  Base DD 0  
) B: l3 e2 K! U" L/ q& W! NPDesc ENDS
- v2 y2 B# r2 g4 }  D7 J: r5 `9 V; c  W
GDT_def Label Fword
; d4 U. k- A# t% w5 ]Null_Desc DESC < 0h, 0h, 00h, 00h, 000h, 0>
: E1 x* e" g. m6 A# |Data_Desc DESC < 0FFFFh, 0h, 00h, 92h, 0CFh, 0>+ l4 {. _) b. L7 N
GDT_Addr PDesc <$-GDT_def-1, >4 t/ s2 b: D& M1 t$ j; g  B8 H
# l% D* x* Y, J- g
msg1 BYTE 'The Input Address is'9 p; b, H. L" `
msg2 BYTE 'The Data is:','$'
; o4 Q, v$ N0 i9 q
0 A; h# d; L4 R, T1 }: h( A$ W4 ]/ DDSEG ENDS
; N2 V) r1 J, v8 X  r# W3 S* z, p' ^2 W( o% M
( E7 U4 Z# x3 R( t5 O/ ~* l
;------------------------------------------------------------------------------------------------  : g9 l8 |) q! l  s# b

1 n/ ]0 Q7 s7 B4 g7 gASSUME CS:CSEG,DSSEG
/ f+ b6 T8 h6 l- U$ K6 y2 c% ~) D, ~! ]3 K* [
CSEG SEGMENT USE16'code'0 \+ J1 m/ l* [
  
# n5 t; _, U2 X6 K  push ds
1 t" @" ?  d, L* @' s. N' C0 {  push es; ?' S1 W/ c% J' N3 k4 H6 y
  push fs
: K0 H8 m/ _' f$ W  push gs& S1 _5 f8 |( Y
  
" \. F' w, i+ C' h8 V  call big_real_mode! v/ ^, V, M) q+ S$ d
- l6 X9 o4 ?, s& Y5 |" ]* A
   
8 a/ a- P5 A9 ^6 X  u& v  mov edx,OFFSET msg1;
' G. B8 [: j/ D5 o6 Z  mov ah,09h;   
5 C# ^$ Z# x4 @* e  int 21h;9 p9 _! g- S+ F& |& k- ^2 f
  mov edx,OFFSET msg2;7 J7 J2 q- m3 J1 [. o# ^& n
  mov ah,09h;  K! C& n. L; i* ?
  int 21h;
0 E$ S- N& C  J: S; m4 ?   
, [) J0 v, A- f  a+ C  call PSP   
9 t+ ?# R7 q9 ~* P3 r8 I    2 ~/ l0 M' u1 @7 J3 g6 M7 t
  call crlf   
" |& l- z+ ]! f9 |# U( W! J   
' f: t9 {4 g+ r  mov esi,ebx
  v3 I0 U; A$ o5 ^9 O9 l: ]  mov eax,fs:[esi]) P0 k: p" p( }# z
  out 80h,eax
9 b4 ~% N' V2 F  mov ebx,eax
  `' K- ^) n% u; \; e. G+ d/ F3 ^  M  call _8bits5 ^, Q' U, f3 x9 K$ ]
    9 w) R8 {  Z, T/ l' Y
  call real_mode
+ \5 Z/ p* a' }   
' G1 R. x& S) }- }( l  pop gs$ y( H4 Y* U9 t/ [3 g1 n9 C2 M
  pop fs
8 ]4 Y" }" b! B8 M; A  pop es
$ ?! Z+ [7 C! k  pop ds: o6 J/ _/ w0 m) I
   
/ k6 ~: j0 h, t: x/ E( n  .exit
, ]5 A9 L8 e6 e; y. `) J: k;------------------------------------------------------------------------------------------------
# B& I% F( W* I! p: _/ Obig_real_mode proc near/ p" k. }# f* c) _) ~3 h
  in al, 92h4 @0 ]. Y% D) l' V5 `( Z; {; J9 Z
  or al, 0020 b# ]3 z0 ^+ t! h0 I* W  J
  out 092h, al
" \* Z- B4 J$ u3 l2 {" J  out 0edh, al
3 S3 g1 P/ M# N* D1 }  m7 I2 n' w  cli
; J. K$ s  c! n: e  mov eax,DSEG
0 K1 Q; H7 V% O% ^, i* H, h+ B  shl eax, 4
' S- c! ?% [! p* X: V  xor ebx, ebx+ [# @8 M' c* i- G
  mov ebx, offset GDT_def
( O) a% v6 [; d+ ?: T  add eax, ebx( k) M" ]7 Y  h+ Z1 L2 @
  mov dword ptr GDT_Addr.Base, eax
( y8 A0 H/ |' y$ f  lgdt fword ptr GDT_Addr/ o9 C$ d5 X& |, t0 o
  mov bx, 8
, z* @. U) n) \# a8 c/ f  mov eax, cr09 u8 D& B1 D7 g( H2 S
  or al, 1( ^( X: ?7 V! ~/ H8 ?. r
  mov cr0, eax
5 k4 z3 @& j9 X9 t. h( K/ M  jmp PMod
) R; o) d, P! A* FPMod:4 S* F' a4 l: {5 i2 R) I3 @9 a8 a6 d
  mov fs, bx; T" ~* n1 q; z7 y2 f  ~$ l8 W* U( ^1 b
  mov gs, bx
6 i* ^: S0 Q% ?) r) }) S4 R* K  mov eax,cr0# U, V3 G$ Z7 s/ [+ G
  and al, 0FEh
  T! R' h' j# W. ~$ X  |: _7 D  mov cr0, eax  
3 x! p3 p7 A1 L1 C3 E" ]. V" u  jmp RMod
$ o$ C5 o% d; a& r9 A+ pRMod:+ o; R; w* x: o; j7 r: b. T0 c: W* W
  xor ax, ax
9 j7 e. R' O: X. L' C1 c  mov fs, ax% v' _: c" l: w
  mov gs, ax
1 d8 k- b, a# W    / @( m$ w# R' k
  sti, j6 S: K# o9 s. r- {! q! Q) ?
   
  O& p& H6 z$ b2 F  x  ret' y& p) K2 D4 B! `7 H# @
big_real_mode ENDP
% p- S, h  s, i; X7 g4 |5 Q- [;------------------------------------------------------------------------------------------------% z4 T$ X, u$ L0 ^
real_mode proc near- U: C0 J: ^4 U- P; {
  in al, 92h* B3 n, K7 ~* j9 M; h. {$ R& b2 a5 d
  and al, 021 Y1 z, f. R, P
  out 92h, al   
1 V% ^  f; ?1 ~. V  ret2 g) Z7 \) v) }  g9 C* Y
real_mode ENDP( s2 L9 @8 P6 ]) Q" G
;------------------------------------------------------------------------------------------------
6 S( I7 b+ ~+ l% k; L. H- ]Get_Commandtail PROC near/ t' @1 g$ o, _$ _
  push es  ) a3 s. P) ]* X. x, e
  pusha
) G8 r+ O* H2 A$ c* ?  mov ah,62h  * U- B$ _7 d" R
  int 21h
" x: I4 T. Q* P7 `! p$ x6 q  mov es,bx3 L; U% e" a- E& l' u$ |
  popa  
5 [* P( z1 M% N* Z1 O% a  pop es' ~" P6 A+ I! R0 q. i
  ret
6 k' v, Z/ D$ {Get_Commandtail ENDP4 j; ?' V2 S4 q$ c# G
;------------------------------------------------------------------------------------------------; U5 }6 c7 r5 U3 q2 u, u
PSP proc near- r& y* B2 V2 u& x% K! z
  mov ah,62h" @, t6 ?( f% _* R
  int 21h
1 j# c5 ]6 _/ Y" A6 M  mov es,bx   
9 p4 f' q/ V: t2 d* q3 V/ l  xor ebx,ebx
' _' r1 \) x& V4 E8 j4 x  mov si,82h+ a( {* J. U+ e6 X: m! ]: D9 F1 I
  mov al,es:[si]9 J% p7 V  M5 o; I
  call Change
) i  `& {& k; c& y. R  mov cl,4! X, f( g+ z: [( d5 G! O3 ]
  shl ebx,cl$ T; L8 h' a7 S' o. R3 q. u$ }
  add ebx,eax
( Z7 ^, u- Q1 B: C, z  mov al,es:[si+1]
1 |) ^8 s' S6 `. I, k  call Change8 o( [5 U) ^8 A
  mov cl,4
/ |* `, w3 C3 H1 o  a- J  shl ebx,cl
+ l) m( b: H: P% F9 ~! U  add ebx,eax- @) g  |$ C' @
  mov al,es:[si+2]0 j- T4 Q- A+ ]$ @+ s
  call Change+ s& }4 Y. W% T1 K! w
  mov cl,4( {9 `8 s  Q5 f# _) H9 d
  shl ebx,cl! b& d1 L5 n( L1 e3 }0 }
  add ebx,eax/ r6 {2 d; O5 S
  mov al,es:[si+3]! w$ k2 K$ Y: S
  call Change
/ E# @3 l( i% h3 P  mov cl,4+ w* ?; }2 r2 J4 G+ N- L! O
  shl ebx,cl
8 x0 Q6 f! a9 J3 _- D* p  add ebx,eax
1 W& }) F- X1 n" i/ G- Z: q+ _& W  mov al,es:[si+4]& d& K; ]7 \5 j* |
  call Change
/ b4 Y7 L! ]4 n8 ^5 {2 g) y- B  mov cl,4. u0 K) _! x& U0 O; f) N$ w
  shl ebx,cl
5 L% A5 n3 L: ^$ t7 V  add ebx,eax! R% A' \# }2 K& q4 Y5 p
  mov al,es:[si+5]0 ]% H8 f' k( Z6 H/ _8 P3 m1 O+ g
  call Change
5 L& Z" `& Z" H7 k$ I+ f0 c; ?" s9 l  mov cl,49 g2 n7 h& n' S
  shl ebx,cl
, y* M" M1 C  m. {0 s& U& H" D5 P( ]  add ebx,eax7 J% ?0 {3 h: B; V- H' l+ G
  mov al,es:[si+6]! Q) {1 p4 l7 c* m% i
  call Change
0 l$ U2 x  q5 w! i+ x  mov cl,4
- n# c8 T' N* f& R  shl ebx,cl5 U& V9 u, l, ^9 _
  add ebx,eax
- M! y  z3 }: z, @3 [- I  mov al,es:[si+7]0 {  `. j% X2 X; m. N
  call Change
7 P& N- ?, K! I1 k) C. A  mov cl,4
  D3 k5 x. Q" w5 Q' G  shl ebx,cl
: S; z; M6 Q: A/ b* g# Z2 |  add ebx,eax
. i& z/ c3 J4 J; N$ N, P. V% |  ret2 B! ~: U/ t0 g% J# H
PSP endp
4 g' a; d* c( q! F) L' k; F6 V;------------------------------------------------------------------------------------------------
8 x6 @; U" k0 w# `" BChange proc near
7 r+ H, Y! ]' u; N$ JA:   7 G1 H. t2 a* _
  movzx eax,al
5 r) f& Y* ]6 H/ o  mov edx,eax
8 `* r; m9 w2 D" N( K7 K7 S  cmp eax,'0'   4 f# a0 N( x- j
  jb A
  q( ?/ J  a: @8 f# a  cmp eax,'9'   9 P4 u+ F" f; ^! u' S+ h5 w- A( |
  ja B
, _8 m, ^0 p# J1 s& t( k  sub eax,'0'* z- M- V6 |; {2 C& q
  jmp short E
. q/ b9 d. [/ R2 {. QB:, x0 L! [" a% Y2 P
  and eax,0dfh   3 H5 j6 F1 v3 I1 [- ]) y
  mov edx,eax) ^" {- O5 U' ]0 [: S# i
  sub eax,37h   
; E2 G$ }5 m8 W5 N: w  cmp eax,0ah; O! b( D: i! D. j; |3 G1 p
  jb A   6 G2 n% M$ ~) A% T9 x) ^
  cmp eax,0fh, y9 V8 r0 l# f
  ja A   
* l# `; {. b0 |E:7 X# Q) L# n! U  c  k
  push eax   % p% R& p% ?; h0 D/ v2 X8 [, A( B2 l
  call PRT   
5 |3 ?0 Z  T, H5 a) c* H! }6 `. E  pop eax
! P7 ]) P5 U! r5 @CExit:( o# [  M4 {6 _# O6 B! u
  ret( ]  I: P( m& ~& _' E
Change endp
2 P4 C. _: `; {, D7 b% n/ ~;------------------------------------------------------------------------------------------------; P& B( k0 ?; q6 \5 T& l5 T" f* ~# x  U
PRT proc near
7 @: x  y6 R9 l1 s/ c  mov ah,02h/ H1 @, `1 {3 c
  int 21h
/ I8 q; q7 I/ Q2 X) @  ret: ^: _: F0 }  p# I9 ?; q* K% \  ]
PRT endp
2 ^. y6 v' p& u( h- B+ Q;------------------------------------------------------------------------------------------------
' m; e9 t% P2 C+ \  S4 |/ O( v! Pcrlf proc near
6 z1 a- g5 W# C) k/ t  mov ah,02h+ d; M: A. A  W/ W. b7 u' p
  mov dl,0dh
8 w0 @0 |3 l0 u4 t  int 21h" ]' ]' h  I3 E: V
  mov ah,02h
& A7 i7 P. J5 d7 p0 C% V- Q2 A( [  mov dl,0ah
0 A) R+ V7 H0 E  h  int 21h
% u# {0 F/ L" I  @( o, y7 u  ret
' O1 A; L% U* B# ]# Vcrlf endp, ?, S$ F; O4 Y: I
;------------------------------------------------------------------------------------------------
% s  w/ l% o. p. K$ u_32bits proc near
* l! l6 p% i" m! S; u* `+ F  pushad2 `* `4 Z! b4 V5 E6 I6 Z
  mov cl,43 X1 V/ n8 x8 Y  p1 G6 T
  rol ebx,cl
# W: j. F# u6 [$ C4 i( \  call print_4_bits8 j* j" L, P' p  w! f
  rol ebx,cl
8 g' E5 m# e  @0 z+ X! Y) K) c  call print_4_bits8 T' }% U* E6 O; h) f1 P% @5 I
  rol ebx,cl
) U' Y4 J% t" n+ ?7 p  call print_4_bits
5 M6 G/ b* D/ U5 y4 a4 U  rol ebx,cl
! k9 H# T' ?* E  call print_4_bits
1 c5 I$ Z% t. E; h8 v2 m  rol ebx,cl
) z1 b4 ]4 b+ T7 u2 h7 _) P) ~% A  call print_4_bits7 x( G+ f3 _: O& L5 y# a! K
  rol ebx,cl; T' Y+ H6 T  }# t! S& u( v# ?
  call print_4_bits4 ]" V! X; u$ D9 l, e6 Y+ `9 u
  rol ebx,cl
5 G: J  t7 `: D/ d  `7 V  call print_4_bits
: R1 t, H' q0 M5 b  rol ebx,cl
' Y- C- p( y5 D  call print_4_bits% j' p) T* {' E# c! D
  rol ebx,cl
( z! V$ T& l8 f+ z7 k  popad
1 V0 u9 E5 j3 E5 l  ret! [% a; \* o* g; l. Z8 w+ c
_32bits endp
* G1 O0 y3 R2 F' Z1 h* t, `+ H;------------------------------------------------------------------------------------------------
7 s. [* R9 x9 \$ ]. V_16bits proc near9 w' _1 }0 g+ [, L6 {
  pusha   4 L/ k: n7 |  C& J3 y
  rol bx,cl
2 Y6 o3 G& a8 |( J6 {  call print_4_bits  B2 `1 H# Y' W; }# V! ^
  rol bx,cl- |6 g- z# p0 p2 V) [1 R
  call print_4_bits. Q' M8 h$ P9 s; h* S3 H7 ?9 ]
  rol bx,cl
8 ]3 V+ G$ q. J: S2 v  call print_4_bits
' t& f2 z! C! d1 J2 t% V  rol bx,cl
6 F! V2 d+ u$ j, e% q7 f9 }  call print_4_bits# N& O; a0 i$ g9 F
  popa& @2 X, e! M+ C" {0 `% h8 C, u& G
  ret$ l2 h9 k3 z4 _
_16bits endp
$ }# }: [( R/ S9 o5 M/ z4 q;------------------------------------------------------------------------------------------------
& }; d% V& r& T. c+ h_8bits proc near. N1 B3 P# U* O0 V7 u% \, C
  pusha   9 |- y- I9 l) {
  rol bx,cl
% B9 i" y. ~% z- g7 T" P) T  call print_4_bits
* l2 C2 p/ [% J" Q9 A" E+ l7 r  rol bx,cl
0 R0 y# Z" I$ e& z: n2 r" ~  o  call print_4_bits
8 q5 w4 ~. ?1 [, a) L) D5 T/ E& r! v  popa+ G+ _) d, N& h1 u- M1 ^% P, C
  ret6 ^' s6 ^7 d, T1 v( w1 C# ?
_8bits endp
8 R& t7 `" i. ^. E' O, C;------------------------------------------------------------------------------------------------
7 x; p1 ^3 a( X7 B3 S3 qprint_4_bits proc near/ u, o# z3 W6 _5 p
  mov dx,bx
1 U: J; S  l+ w6 f  and dl,0fh& m! g7 {/ ]& P
  add dl,30h; k* }) ]+ D" m3 P
  cmp dl,3ah0 D1 L- G2 Y1 G
  jb print' L; ~' j3 E% j# R- {
  add dl,7
2 u9 O* d: Q" k2 k2 u# X8 }# gprint:   
4 u( |! Z- h" u! A  mov ah,2$ D  D, _( [: r) e) h7 p: d. @
  int 21h7 N2 ~/ v, d- `; `
  ret" n* m" W8 p# {
print_4_bits endp   
* N  f( }! G5 G1 g' ];------------------------------------------------------------------------------------------------
0 I! N; l0 y. K4 K+ \CSEG ends
; |+ O- f* R# D' |1 p. I+ LEND
您需要登录后才可以回帖 登录 | 加入计匠网

本版积分规则

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

GMT+8, 2025-4-29 05:14 , Processed in 0.023373 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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