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

顯示string會出現亂碼

[复制链接]
发表于 2010-10-19 16:41:51 | 显示全部楼层 |阅读模式
各位前輩好,以下的程式為在 big_real_mode 讀取記憶體的值8 f6 s% B, D; t6 J" O

( v4 U4 l' o/ w( v* f例如: C:\memory.exe(程式檔名) 01000100(Address)- t0 X4 u2 k2 s6 ]; `
: P. ~0 x. s: K7 Q  h' P
則會顯示01000100位置的值
& m8 q( |6 B; [5 F, T- W+ Y, n7 |9 P3 c& l0 ^( u6 l$ }
但是我另外還有要顯示出字串,但是顯示出來都是亂碼
" I9 N0 F6 A1 d& Q' }
& _5 r) D) L: X% @; w0 P; j8 _麻煩前輩給我一些指導,謝謝  0 t2 i& S( S- ]: w. v

. N. ]2 ?  D9 n
" ?! i, h4 R- K0 K.model small0 j) M8 f* a" u
.386p3 D& c9 j3 ^& X7 H0 e0 f
;------------------------------------------------------------------------------------------------
. F( B  t) n) F& \6 pDSEG SEGMENT USE16'data'  5 N% d1 w: \* Y! m' d' `

: a! q( `: _/ U0 a( G+ W& A+ kDESC STRUC& G1 V% v" U; j2 H9 d
  LimitL DW 0  
+ c) x  U, z4 d6 s0 ?7 u  BaseL DW 0  
! {- v0 a( \' ]6 X, s  BaseM DB 0  
5 h$ I' _( A9 N% w! V9 W  Attributes DB 0  7 k( o7 d/ [4 i( w3 X
  LimitH DB 0  
; x% w0 |$ r% F' H  BaseH DB 0  
0 _1 ^; S2 z6 jDESC ENDS0 h6 W* h, t5 o5 ^. {, p: T3 V
# n. @- \& q7 t9 G' W
PDesc STRUC7 a6 |  ~$ \+ ?. \
  Limit DW 0  
' `+ r6 @1 v1 Q, X  Base DD 0  9 N, T8 }4 h% _
PDesc ENDS% V, ~& @4 N. d
* H# O: ~! `5 g& W$ _
GDT_def Label Fword
9 [& F) X5 P$ c- ^# I0 hNull_Desc DESC < 0h, 0h, 00h, 00h, 000h, 0>0 G0 m$ a+ T% B
Data_Desc DESC < 0FFFFh, 0h, 00h, 92h, 0CFh, 0>% b3 b+ K: S8 ]; c9 h: S0 H  t; U
GDT_Addr PDesc <$-GDT_def-1, >
+ h! R. D& [0 p
" @  M1 L- ~1 c! Z  [/ Umsg1 BYTE 'The Input Address is'
8 A4 ]- F- c9 J5 d* O0 Tmsg2 BYTE 'The Data is:','$'
5 r- J1 m* m# _1 c- M6 _( Y) u/ M3 T7 @! E8 U7 h( ?* r
DSEG ENDS
/ c" e6 R+ q5 M1 ^, u5 h% v7 v0 D8 D5 ]& q
; M% S1 g& g: Z, \% z
;------------------------------------------------------------------------------------------------  3 z  [/ y, n# M6 n6 H) N) l% @4 h; @

: e$ M: I# Z2 V) ]' f$ CASSUME CS:CSEG,DSSEG
; G# k  A9 }2 O6 S4 p; H5 y' L# q& A- \* t( r' Q- H
CSEG SEGMENT USE16'code': L' N- A' u/ j+ G
  0 U; s6 x: N: P  g& W1 `% ^2 g
  push ds
% E4 a- }+ H: M% c+ Y* a; Y' o  push es
( L" }4 d1 ]2 ]5 H7 i: a: X" L  push fs; p! g7 {$ n8 r- \  l4 C8 E( W6 z
  push gs
" D) z, `5 ]9 R6 G! W$ \' O  ! t! ^9 ^# D- q3 Z
  call big_real_mode
+ J) ]8 H' _% [4 Q3 f6 d& _; _. |) b2 y( u! n: z$ [
    ) }) c  `  E' X# E
  mov edx,OFFSET msg1;* @5 t5 }7 T" i8 O, W  j
  mov ah,09h;   ) S, i. ~  M. L, {; Y
  int 21h;( }; T' N3 F/ K8 t0 W! O
  mov edx,OFFSET msg2;
) f0 R* |7 d! V3 x" S$ h( I  mov ah,09h;- [' d: ^' u+ h* a$ x
  int 21h;
) E; P4 E4 I* |8 s  I+ }+ Z   
! N3 x' O0 t$ I! {* ?  call PSP   
% u1 G( A- K5 C3 _" U    ' j) c% }1 y$ k, z; b* t/ {& s  y9 S
  call crlf   
' @; B3 p9 w& {    ) y3 o7 u9 |$ G- ?' `
  mov esi,ebx
0 ]6 U0 }/ S7 c% ^% A! s9 J  mov eax,fs:[esi]
! f6 w) n) V) A; }( r  out 80h,eax$ }  {! W8 E! U9 c
  mov ebx,eax# N7 ^' q+ J* o' V* Z" l
  call _8bits# v( M2 k: W3 e) m9 a& O
   
! s" ~, h: ^+ ^9 r5 g  call real_mode6 r1 T1 h1 t5 _3 y! e4 @
    0 P: N8 V4 U, v- T# Q
  pop gs
1 z* m$ ?& R1 j$ y  pop fs
) J2 ^+ @* k, s% T6 V  pop es
, M! f2 a8 R; h) o8 [1 S  pop ds
# T) d) z" E6 U# [8 i   
- c& S! w6 T( Y( @5 c) o1 @1 V5 Q1 G  .exit
7 V3 U4 c0 O( M6 R3 f;------------------------------------------------------------------------------------------------6 P, C) [. D( E9 p7 G
big_real_mode proc near6 ~! P; l  t/ K; c, Q
  in al, 92h) N3 X+ w* `0 s* n* \* b. {$ }/ m
  or al, 002/ f+ d# z3 s5 @9 i: N
  out 092h, al% ?4 Z3 E& B1 Q6 L+ j$ ~6 S
  out 0edh, al
" s1 ]2 R4 k) W) R$ m  e" y1 s  cli, q' ?% r3 ^2 p% m. ^
  mov eax,DSEG7 M6 {4 y( Y# G7 T) G
  shl eax, 4
9 [8 l0 a: p, b6 a0 b  xor ebx, ebx. `; @3 V4 e- E, f$ j  h/ y7 N
  mov ebx, offset GDT_def8 ~2 p& J4 K4 ]
  add eax, ebx
7 V7 G4 _) U  `7 S: w) v  mov dword ptr GDT_Addr.Base, eax9 a$ X4 ?9 c& [* r1 F. F
  lgdt fword ptr GDT_Addr6 R9 H% g2 k6 j6 [4 x9 N# t, k4 ^
  mov bx, 8
0 x3 q8 L% E% K4 s/ G! H* ?. b' C  mov eax, cr0
4 M2 m7 n% P' u9 Q& d  or al, 15 {. }# M' @$ z# i& b. d9 r5 Z3 u
  mov cr0, eax" K% i, F; }: `
  jmp PMod4 L7 u; T2 ?( k9 b) L; f; r
PMod:
$ O. I: i: _, N" v) U* i  v  mov fs, bx
, n; U- P& r% Z3 B& g  _4 a+ P  mov gs, bx! N; F  ?% [( K
  mov eax,cr0+ Z8 u% {" q4 N
  and al, 0FEh
( N& A( {; E- o  mov cr0, eax  ( A8 x9 l3 u+ }7 m1 s* n
  jmp RMod+ G1 [. @" d+ n; v+ j% j
RMod:
8 l9 G+ m. i2 X1 e5 L2 J0 n  xor ax, ax: F, n/ S) {5 M( Q9 O8 A
  mov fs, ax
6 Y; \7 w8 d1 z7 U7 X$ F4 d  mov gs, ax
0 F; D0 r% h3 _. I; B% D! F   
9 ?+ C& J7 u+ y. S  sti" @" z# m) r3 B
    " p& o; @1 ^  P6 B+ D4 k5 o; V9 Q+ {2 A
  ret
( b7 D* ~! r" t1 obig_real_mode ENDP! I) T2 N6 H0 \6 c1 ^: w1 t6 C
;------------------------------------------------------------------------------------------------
. ^' O! z8 A+ Hreal_mode proc near
$ W/ [- G6 ~. F2 ^0 {5 M, X  in al, 92h
6 \7 D; W- _+ c& H. p5 H  and al, 02  H* b4 j( H% Q( J$ C- e9 R/ c& t
  out 92h, al   % }! I! ^# t0 A9 R2 z/ A& i1 H+ M
  ret
/ ~8 B% m- C! y9 Creal_mode ENDP
, c5 Q! K4 }# ?! o8 [9 s4 B;------------------------------------------------------------------------------------------------, W0 _: \# Y" G* X1 N2 l
Get_Commandtail PROC near
7 v- b- ]- t. a. T" g  push es  
2 U" J# r. D3 L" t  pusha0 U9 A' z& U) ]: d
  mov ah,62h  1 V) p1 ^7 e' {' Q
  int 21h2 P: B3 _  I! M  d" D, o
  mov es,bx- ?% _0 N/ r8 R+ ^- m
  popa  6 z) x8 ~8 B) |2 H
  pop es
4 n& |& t0 D5 d/ ?6 i# P" ~  ret6 C7 A- D0 u  y0 v4 ]0 Y, `# D
Get_Commandtail ENDP. |/ I4 T* h2 C$ z3 O
;------------------------------------------------------------------------------------------------' w3 [4 @. `$ H. W, u# t" N6 C& _
PSP proc near( ?! S) i9 X1 Y! P& i! y
  mov ah,62h
6 G$ B: r6 C; n  int 21h4 h4 O% z% d# z7 y" ?: O* Z0 R7 s# k
  mov es,bx   , h, K: W2 z  ?4 I& m5 b. @& I
  xor ebx,ebx
! F9 U, J2 r/ Q+ V  mov si,82h
, i' p5 n4 g# L& y) O  mov al,es:[si]( |! J6 u  }# ?+ V% P% u% x! H' l
  call Change0 d* J+ ]1 `! F0 {  A2 a* p
  mov cl,4( I* u6 ^9 q1 U& K
  shl ebx,cl8 {0 @- Y* q3 K# m
  add ebx,eax
" m- d$ U8 S9 a3 l5 d% [; g3 d3 k  mov al,es:[si+1]  ?9 u. X3 t& F
  call Change
, w+ M" h" P( l) ^/ k  mov cl,4; \, z$ u2 H  I9 r6 d7 [
  shl ebx,cl7 ?# h% [1 \: _, _2 L
  add ebx,eax! M1 h7 Q; H/ n; _; n
  mov al,es:[si+2]
2 O  ~3 |5 ^, U2 \% X  call Change+ C2 ]. K8 ~) D. k1 L% m
  mov cl,42 Q: L4 \& S$ P; i
  shl ebx,cl
. w+ Y* F! K8 t6 `6 {( T( A  add ebx,eax
# K7 M# K8 T. V% N/ n$ p  mov al,es:[si+3]
( B3 x) l' n. ~  call Change. N( R2 M" Y1 X! C# p; R( H
  mov cl,4
; Y2 G# R# e+ t7 v/ g# M; K* e. l  shl ebx,cl
3 k2 W7 u, O( ^/ m8 h7 z- T. Z  add ebx,eax
9 g" ~! Q* I: O8 |) s  mov al,es:[si+4]
6 G  {' j1 o+ q  call Change
1 a$ T' P) g4 O0 X- l$ F. `' V  mov cl,4
0 }4 W) l. \! U7 [. G  shl ebx,cl
3 l4 v. `& `0 F& J. v, s" H0 S  add ebx,eax; I$ u6 r, e9 T
  mov al,es:[si+5]$ R* ?5 \  L4 Y" e+ o! t
  call Change
, \; [/ S0 ^9 {3 i( d: _3 D+ u  mov cl,48 c; b- H2 i2 L  H
  shl ebx,cl; M* P2 r/ r5 C' }: z5 V
  add ebx,eax
0 D) n5 n' x- G  mov al,es:[si+6]' U; H8 C1 p+ r" Y. a
  call Change6 g. Y0 n, k3 @6 ~
  mov cl,4. L" U5 |2 T/ _  v/ v  I
  shl ebx,cl
) x* p+ U6 S# B  add ebx,eax
3 S) _* d' H5 C" t  mov al,es:[si+7]" B3 P7 K# ]' S8 p3 P- g
  call Change
, y, ^* F! j( `8 E4 v3 X$ b# i4 @  mov cl,4
8 t) ?8 W" p, {) _  shl ebx,cl
) b8 F5 g) @; I5 k! e! E8 \+ ^1 v  add ebx,eax9 s: L' p/ a/ T( D; ]0 ]
  ret2 P+ w: b3 O7 }, H
PSP endp
( T. D1 j9 Z0 T7 L1 T0 U& l;------------------------------------------------------------------------------------------------
5 `& g6 \. |9 z+ UChange proc near/ @% ^! |- g( [& _" }
A:   
8 M2 n2 h7 q8 V5 I1 a( ~  movzx eax,al: y3 s: s- S) d
  mov edx,eax7 h) J' }+ ^$ f/ u
  cmp eax,'0'   
* H9 z9 |0 ^0 ^" B- f  jb A
  A( x, x- [, A  R6 ]0 g* r  cmp eax,'9'   
8 N- \; j( B# W; e  ja B
/ ~/ r( u' ^. p2 W  sub eax,'0'. ]; m! X' E, ^7 X  ^- c. ?( d0 L
  jmp short E
$ c6 l# [+ u3 h3 d% i6 i/ N. X8 yB:
7 W- J1 g1 @  e! C/ y% }, q  and eax,0dfh   6 B$ n" V& J+ L! E* N
  mov edx,eax
$ m+ I! C4 Y2 n% k+ Y8 [+ L  sub eax,37h   5 E* H- D9 {2 d/ s& ?5 g
  cmp eax,0ah2 t+ k1 I# L# D8 h
  jb A   8 I! l" H' @; a% e7 N* i
  cmp eax,0fh2 r! r8 R1 ~( y! _" c
  ja A   # W! q% _/ [8 R& i+ k
E:! d. u& S8 d8 }/ `$ J
  push eax   9 v" A8 R* ?+ }# K7 [. `) g7 x
  call PRT   * q# {# `$ L' R# [8 z/ t
  pop eax' A, N& x( g/ k8 B3 v8 g) Y
CExit:; k( Q8 C4 S" T9 i
  ret
% y8 q4 w6 H$ [1 G- P; ^' t5 i4 vChange endp0 M; f8 N0 P2 i5 D, B* k% X
;------------------------------------------------------------------------------------------------& ]8 J1 \$ }7 M
PRT proc near1 i; I9 M7 Q8 }% F' q' w
  mov ah,02h# I* {4 }* F( Z# x
  int 21h8 ^; d  J4 s: f  v. h
  ret
; F7 A: `& X! \" P( w' oPRT endp) ~0 b. K0 `& P6 h/ d& ?  A3 ]
;------------------------------------------------------------------------------------------------# {/ f% l! t/ b( H
crlf proc near: E" x- V+ p" U% L" E$ d; T
  mov ah,02h6 G. a& \5 y2 _) Z
  mov dl,0dh
9 ]' R% [3 g2 k7 c9 e3 K$ `  int 21h/ y+ F* X- P) B1 q" m
  mov ah,02h
3 t8 c  x* q4 u  mov dl,0ah4 v/ ^& D7 G! P
  int 21h
, v: P& [5 e( p. Y1 _  ret
* p8 w, O% G* y% icrlf endp
0 p0 ]0 q& V: g2 e* j;------------------------------------------------------------------------------------------------
4 @, C) @- T1 W, \2 o! ~_32bits proc near$ O; \& ]+ v& ?* v  n' A
  pushad$ x6 m0 w# i# u9 u) i" r1 {
  mov cl,4
+ k, u; [2 `  e2 r* y( m' T4 Y" H* A  p  rol ebx,cl7 y1 K# s: w. f# ^5 [
  call print_4_bits8 S' F2 Z' B) r* T! Q% n
  rol ebx,cl
, W" m! q; L) f0 b5 D0 q; J  call print_4_bits
$ W+ Z' x) i9 J  B  rol ebx,cl( }! K/ F4 C+ X
  call print_4_bits
+ {$ E! s. B. k' ]0 u. h( t  rol ebx,cl( V) d  F: W# [; X
  call print_4_bits
; @& d9 |: o2 O  rol ebx,cl* x( i( D0 ?/ i" l2 r7 e
  call print_4_bits
, w* s! s+ Y* k7 v  rol ebx,cl
) f+ Q, d/ e5 H2 P  call print_4_bits# ?7 u( g! K, z5 u) W0 m" [7 O
  rol ebx,cl: a7 P  n* T& x4 C6 s; \0 K
  call print_4_bits
* ~. f0 u. M( t: R% |# N  rol ebx,cl
$ v/ H. M8 d  O; I  K  call print_4_bits8 G! ], `6 `" T6 m4 W
  rol ebx,cl
4 f6 b- z# i' l# x; O2 E! O  popad$ `. B4 Q1 k1 P- V# M& q+ N4 ]) h
  ret, y- ^3 n) K& P3 S. [
_32bits endp
8 x# j/ i4 k& J/ I;------------------------------------------------------------------------------------------------
: J; |2 f5 F3 K3 ?8 K  ^" g_16bits proc near' `- E! O" i. x
  pusha   
  B  d4 [  U+ p: o, A  rol bx,cl
3 ^& x# F% q% l  L$ A  call print_4_bits5 {; u& i) q5 }! B( H  h1 ?
  rol bx,cl
" _0 u; ~3 g: r6 p7 {, ^  call print_4_bits
& Q/ c9 i' ?2 \0 O" [& j  rol bx,cl2 m# t9 S7 B, r+ x
  call print_4_bits
; P! I" X2 A) i, \$ g3 R1 [$ j% s  rol bx,cl
; a" |" G  s4 a! }9 ]  X/ F  call print_4_bits/ Z4 p4 G( [1 ^  m
  popa
  ^3 S, K' C, B  ret
) b# N6 A7 f( L; e9 L* J, l_16bits endp
* Q! t3 r$ h1 g6 L3 d- _;------------------------------------------------------------------------------------------------
% m7 {. J9 q. V* n5 U_8bits proc near1 H2 Y( G; W4 z  _. O
  pusha   
" K+ }8 p$ X0 J6 w: V# r+ Q1 X( j  rol bx,cl8 ^5 s6 [6 n( r4 M; `
  call print_4_bits. ?8 h0 F9 y3 l. b
  rol bx,cl
; R+ k0 c7 R" v0 c; i  call print_4_bits
" B* u8 G, d0 b; j" k; v1 m  popa
6 y# V; m% j0 L$ t  ret
6 k  A/ t% U3 y5 x_8bits endp
1 S$ F5 |; K+ L& ^;------------------------------------------------------------------------------------------------
" {% t% g# y" |print_4_bits proc near( P5 D( B7 e" l# x
  mov dx,bx4 ~3 ~1 G( i. |0 @  y! N2 Z
  and dl,0fh7 w$ u( s% N/ j( w
  add dl,30h& n) `; }$ R" {% l. }% S
  cmp dl,3ah/ K' u' w' K" `" b8 R+ o# Y, v
  jb print
8 F! L( K2 T1 z" T; J  add dl,7
/ R0 L) m6 {6 i5 m$ \print:   
6 l& x# D, _! H' H  mov ah,2" S7 `( k6 V. ]) ^) Y
  int 21h: M# G  S" I8 ^+ p* m3 i/ k: T& X) W
  ret
1 z( I  e1 v. K6 m% Uprint_4_bits endp   
8 a2 U4 k) V8 m8 s;------------------------------------------------------------------------------------------------% p/ _' F, l0 J# e7 [, T" s
CSEG ends
$ ^& c7 i! T9 g' C( O, MEND
您需要登录后才可以回帖 登录 | 加入计匠网

本版积分规则

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

GMT+8, 2026-6-29 04:09 , Processed in 5.671164 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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