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

顯示string會出現亂碼

[复制链接]
发表于 2010-10-19 16:41:51 | 显示全部楼层 |阅读模式
各位前輩好,以下的程式為在 big_real_mode 讀取記憶體的值0 ~! X1 S$ ?# i% _9 `

  R) b  n; U* l1 J. }& b; X3 V例如: C:\memory.exe(程式檔名) 01000100(Address)
1 M4 G' w, S! P7 j* `0 j/ w" D! g% @
9 H' H# H3 A% k1 A0 n則會顯示01000100位置的值
' G3 Y. E( [4 y, T
: l9 D. L5 O. J: r但是我另外還有要顯示出字串,但是顯示出來都是亂碼
2 ^0 l# q) G  D( o
& E: j# G; l( D% l麻煩前輩給我一些指導,謝謝  6 p: a% r, u& ^% `0 B
" ]+ X6 z- f' Y# D' q, x, M
; E* m1 r. M" ^
.model small) t5 L! g  o- ^3 Q) x0 |* |
.386p
$ h* P0 |& J2 o- b5 M;------------------------------------------------------------------------------------------------+ y: k' W% Y* ?! J: M' _" }
DSEG SEGMENT USE16'data'  
* J, W' @8 ]* V; o% X4 H6 F
4 K4 f: {; f! P5 C( E2 s1 KDESC STRUC/ b. _2 [, w: J1 d: E( ?# z4 A
  LimitL DW 0  
  B  K, `, k9 l4 z% t  BaseL DW 0  ( T, \2 Q9 V. j* p5 \& k6 D" v9 C7 I
  BaseM DB 0  4 v1 u4 N& A/ e1 H
  Attributes DB 0  9 B/ X3 y' O5 U1 [) j$ w$ u' v
  LimitH DB 0  
5 A2 p2 L/ f9 ?# k' P* G. J0 e$ v  BaseH DB 0  
: @5 J9 }- _3 S  @- ~% _1 rDESC ENDS) {/ S" M2 M! D! u, z( B

" e+ ]0 k2 W5 A9 f9 a" P8 w. n$ cPDesc STRUC' Y: N) r* A' a
  Limit DW 0  4 c. ^5 i4 @5 T
  Base DD 0  
' r  ?( V+ V- \+ p, @PDesc ENDS
) ~4 {+ @* g1 r' C  F) h% d1 J1 C+ U4 [
GDT_def Label Fword! f* S5 Z0 z7 w2 @) a! b
Null_Desc DESC < 0h, 0h, 00h, 00h, 000h, 0>7 T& L9 e1 H' K6 `8 t
Data_Desc DESC < 0FFFFh, 0h, 00h, 92h, 0CFh, 0>
& ^2 N4 G. t2 W/ \GDT_Addr PDesc <$-GDT_def-1, >5 l4 c0 x% H4 q0 r' Q- V. Z3 ]
1 o) H6 I  y2 e+ C' {5 C& M
msg1 BYTE 'The Input Address is'
+ o3 z0 b7 b( \( mmsg2 BYTE 'The Data is:','$'2 X0 s4 E  O. ]# J2 y$ \/ k

7 F9 h- M4 B  B. yDSEG ENDS
  ^1 s& M4 C) ~- q/ `
1 x' r, A: U8 s1 T
4 _( n& l! J3 u$ z  E9 B: A;------------------------------------------------------------------------------------------------  $ R: x$ k3 }5 E. I. {' K1 J# A+ L

4 x; [: K& k8 }% i( OASSUME CS:CSEG,DSSEG# I. `: r, S0 y+ s( O) g

! X: B) Y9 K6 Q/ L, bCSEG SEGMENT USE16'code'+ B) l4 I4 p: I+ o4 x5 t) z
  
* a0 [+ \9 O: c5 v" R9 }  push ds
% L  c% j3 q" k1 z. @2 Y  push es! T8 ~0 z$ e; d5 I8 ?" M7 ^4 U
  push fs
  `9 v" T' {4 L8 c0 m8 ]( `, ]/ Q9 i  push gs
6 Q+ s% W* `' N- n) d, o  9 s" H& ]7 D- K( [3 @; a
  call big_real_mode+ c1 b9 }' k( P; x; j- q
/ ^4 m& ?, U! m9 |* X
   
# U$ V* T; w0 [* H, H( H. G  mov edx,OFFSET msg1;
) j% D0 a( L/ f4 q  mov ah,09h;   3 k0 R2 k" N6 M0 B/ N
  int 21h;* _8 K. ^2 D* ?, u; C( [
  mov edx,OFFSET msg2;
+ N4 L0 Y/ m  c5 U8 Q7 G  mov ah,09h;
5 n6 ~/ Q6 n' `  int 21h;
+ s, S5 v6 b) h1 s( [5 a8 t# F   
" J5 U1 F' o! c/ F! a8 y  call PSP   " n5 [$ T' B- K8 u
   
( Y8 Q$ A9 M: V0 \  call crlf   . r; V( x+ u# {7 `' P
    5 y3 R" Q" X4 ^" J7 I
  mov esi,ebx
/ O# r0 m/ Z* h: E1 Y8 E! A" ^2 w  mov eax,fs:[esi]
- o3 p9 {5 Q2 C  out 80h,eax% G7 A1 _6 s# ?. w0 r. N
  mov ebx,eax
; P$ g; f3 r% e, v/ L* u' `4 R9 M  call _8bits
" e! d8 v7 _4 t% @5 M3 O   
8 x# ~* }! _4 R. b% v6 M+ L  call real_mode' A6 x! }) A2 k) C) _
    ) D: N' ^& X: W% o; k" L  I
  pop gs( a5 I3 X/ }9 ?
  pop fs
# g8 d$ [9 ~# {% R  pop es$ f, l0 c$ V' K" C2 Q; U
  pop ds
" ?7 z' G; s+ F/ L% }7 V9 S0 S    4 W! A  h- i& Q" v) g; f
  .exit' [! z2 `7 h. u, v4 ^" H+ W. ]
;------------------------------------------------------------------------------------------------
5 D+ D% l& M4 q- [$ r3 ybig_real_mode proc near( r2 K) j) n9 _3 b# y6 L  p2 S" S
  in al, 92h: M- ^+ u5 e4 h9 Q& n1 B, N. I
  or al, 002* y) A' F! A8 ]4 B
  out 092h, al
# l7 ]7 h0 z4 x, A, G" x7 h# b  out 0edh, al! P/ \$ Z- [0 H1 p; U
  cli, g8 ?1 g8 ^- b. Y$ S! B0 V
  mov eax,DSEG0 _: `3 l/ ]4 Z1 O
  shl eax, 4/ K  o6 _: d7 A: U2 {' O  }
  xor ebx, ebx
& a" C! e" {8 ^% J, n4 S  l. }  m  mov ebx, offset GDT_def0 o4 i) ^8 Q2 k1 c) X/ @/ u
  add eax, ebx. t- S5 S4 y) [# N4 f* c
  mov dword ptr GDT_Addr.Base, eax
1 V0 j/ @# F$ J  lgdt fword ptr GDT_Addr+ O' L3 {% O1 S5 J( t3 Z% e- t
  mov bx, 86 V/ Q# ?; K% O7 R
  mov eax, cr0
" A6 l# K" E! V- t4 _2 m" r  or al, 1# V  ^% r5 |% S7 y. A
  mov cr0, eax5 \! Q& m6 f: i0 U; K7 H) C6 j8 f
  jmp PMod
4 Z2 U3 ]9 M# U3 \) t" L  E! z; N" v. fPMod:% @3 U9 |! t' V1 b, U5 ]
  mov fs, bx( z+ f  u7 b1 W# D4 F* B& |
  mov gs, bx
7 J  \' s. }$ g  mov eax,cr0
) I0 y0 Q. z* i) f5 K! z  and al, 0FEh/ d, ?) n, p1 v8 q6 E! G2 k' l- ?( Y
  mov cr0, eax  ' e7 X" _/ T2 w- ]
  jmp RMod
% C$ O' Q. u# v( ARMod:
7 ~, o- {+ J% @9 ?! l+ M; q" {4 z  xor ax, ax
2 `+ [; B' k; R" i2 ?9 w0 t! Q% A  mov fs, ax; r5 D9 _% J! a3 K* ~, ^& k7 u
  mov gs, ax: A8 c' p& Y( E9 K" H: D9 g
    ' `9 l' f$ o- J6 X- U$ k2 N+ Z
  sti
4 h, b' \" I$ t    0 b) f+ s; J5 a" s
  ret
  A0 ]3 R$ L5 H( U+ F! q  lbig_real_mode ENDP( {$ }: g: C* f, J. f6 R) \1 X) ^
;------------------------------------------------------------------------------------------------
4 ~% L3 q# m" q: m  m0 @& yreal_mode proc near
( g, Z7 \: x/ [# R8 c  in al, 92h/ g$ h% _  f4 u$ s$ i% A
  and al, 02) h) b/ s% C5 t3 g
  out 92h, al   - T2 p: i1 W) y1 D/ Z
  ret
/ C% \) ]3 m7 G. ~8 t% z6 qreal_mode ENDP
5 p8 {- n7 j: z+ c;------------------------------------------------------------------------------------------------
- W& {% X1 Z9 k! ~9 tGet_Commandtail PROC near
) {, z7 v! X  n8 a! G  push es  9 f3 r- F; v' h' C+ |! c
  pusha4 g( k( p$ x: p* @. P4 @" [1 |$ k
  mov ah,62h  5 T' k* K! e0 ~, U) y1 e8 z
  int 21h
. q  t$ u* V. |" I  mov es,bx1 a- ]4 s5 P  I
  popa  . a, h& Y" ?7 T. k4 ~# o" ~
  pop es6 ~% M. B5 g3 K
  ret
; J: y5 e. c1 |7 F$ Y/ y1 TGet_Commandtail ENDP/ l" l& _4 H2 n& N* X/ W
;------------------------------------------------------------------------------------------------# _- h7 q0 k2 Q
PSP proc near, [: e/ X/ e. q3 B( v
  mov ah,62h
$ w( u4 h3 U' ?, E  int 21h
5 M2 ]& p8 c; a& q  mov es,bx   8 M' x. W7 i* L' \: u/ V
  xor ebx,ebx
/ Q$ ?& @2 C5 C6 {3 ]/ n  {8 ?' p  mov si,82h$ {* i/ ?. ^1 {5 B$ T9 S( B1 S
  mov al,es:[si]
4 T/ r" W* }# x, a7 Y/ d  call Change1 k% ]' S& R& U& V5 a7 M
  mov cl,4
; q9 [5 X4 _7 m8 K) o0 \: D- u' \  shl ebx,cl
8 P/ I! \- s- @( \/ u; X  add ebx,eax
4 {7 j7 d- Q: z3 M4 N  mov al,es:[si+1]
$ f9 `: [1 ~, m% j  call Change1 i& \8 x# X' p- f- X' }9 i: l
  mov cl,4
2 f7 X; y% @0 h! u3 l  shl ebx,cl$ N6 C& t4 N" @
  add ebx,eax
$ w  z$ u* W( o5 w/ L7 k  mov al,es:[si+2]
/ `. s4 W/ s. n' h$ w* s' M  call Change- G# g: S0 t5 Q
  mov cl,4! o( `5 z( P; W- V/ z+ q
  shl ebx,cl# Q9 h6 i) @  ~6 r- [0 ]5 c  ^
  add ebx,eax
# Q" o# @* I; \% o  mov al,es:[si+3]6 U3 ]+ b/ S1 C9 G7 W# L+ b
  call Change
' v! ~" E( F7 J1 H! q4 C1 \  mov cl,4
+ ^8 n+ d) w, e  shl ebx,cl
0 g& y- i. q9 b& |- P( p3 F4 J  add ebx,eax6 g9 Z2 G8 a( p( v/ e
  mov al,es:[si+4]
: V7 Y+ d! W  x+ J9 K  call Change
  [* B: P! B3 E$ t( O  mov cl,4
6 T1 K- Z" ?0 t6 R  shl ebx,cl
2 m2 y( l% l, `- @+ o! Y0 m# K  add ebx,eax" S9 ?: ]$ I4 r0 e" Y/ a* ~
  mov al,es:[si+5]7 d% S- q4 ~" x! z
  call Change
* |; D; l3 [5 V. k, `8 s  mov cl,4
$ q5 F8 u6 @/ [3 y( L: s  shl ebx,cl
1 b' H, ~' w9 D$ X  add ebx,eax9 r0 X+ z$ P8 a6 z
  mov al,es:[si+6]: V- o  E, g0 E
  call Change5 ?/ q8 @" E: l- M
  mov cl,4* Q( O8 g* ~! R! \& g$ M/ t
  shl ebx,cl
5 V1 b9 W0 o. y* l: _* k% V  add ebx,eax
! v" T0 P* D' A- n# x* G  mov al,es:[si+7], ]2 |2 u6 c2 q- Y3 ~# M  s
  call Change
( W7 X+ Q' A" r: h; R( A. X- O  mov cl,4
% @; I; a. v; H- x: H7 d( e  shl ebx,cl
! k+ X* f) a! g) K  add ebx,eax8 ?% A3 i. k# X4 X8 ~& J" d
  ret
0 j( F. J7 d8 s6 s0 HPSP endp
4 g+ H, b7 J1 [6 L: t% v- [;------------------------------------------------------------------------------------------------0 s8 K! l7 B0 H) Y, `" C7 ~3 \
Change proc near3 @. T7 N3 S9 y: B' a2 a
A:     G; d% @& t7 e/ p
  movzx eax,al
! k+ |6 {: l- F; i  mov edx,eax
' b4 B4 _7 c& D! n- E  cmp eax,'0'   ( \% P4 [- H) F) R; @
  jb A
" z' b7 m$ o7 r  cmp eax,'9'   
" S' F8 I( n$ c  ja B9 I9 d; j7 W+ W* t
  sub eax,'0'5 Y+ d( U$ j* ]% j( z% z
  jmp short E3 M) E7 x& q, D+ t0 O9 E) g* z9 A
B:
, D0 P4 d; a0 e$ z: q* h  and eax,0dfh   0 O, v& Y2 ~+ A. X3 \, c: h( b
  mov edx,eax" y+ x5 }( }+ }) X& r: T, }* O& m
  sub eax,37h   
( \! C- B/ S1 o4 M. }, {  cmp eax,0ah
1 ?  R- D3 L/ K/ t# E* w& L- g  jb A   
* u1 i* ^$ s- Q% I  cmp eax,0fh; Q) O7 u- l, l3 S8 \: }, ]
  ja A   * U. l) z' S4 M
E:$ w% M" p/ K) o" b/ J8 Q
  push eax     E+ o, `  F6 c( ]6 I- M5 j! T
  call PRT   $ f% ^4 Q+ P3 {- ~) [
  pop eax  ]- t; e* b7 G0 b5 u: F$ s  s
CExit:
1 c- t: l7 x% X+ a# \  ret
9 M6 u% U" V( SChange endp
% t2 v4 ]; ]8 O# z; d) |9 W( J6 m1 ?0 r- M;------------------------------------------------------------------------------------------------
8 c$ }, B, L6 y; Q% Q! X% O- FPRT proc near0 @. G6 Z! w, v" w. K* e$ F
  mov ah,02h
' f8 ~% L2 n, ?- y4 i5 P  int 21h! k, d5 [" N/ i* q. K1 ?7 a& O
  ret
- C% i; |8 M3 [' APRT endp
1 |- N  f- C( v. C( _; R% o) h;------------------------------------------------------------------------------------------------
1 T3 A( Z2 M* B' w% f, @; n( Xcrlf proc near
' _- J# |) r8 }, y  mov ah,02h( E: G+ k1 N& u7 Z  |3 ~! p
  mov dl,0dh
6 C. }1 i: U* h) R* |  int 21h
) p7 u: ^1 P: B  Z# m  mov ah,02h& p! T3 M3 x( a. T9 \$ T
  mov dl,0ah
, u+ g8 y  y! W5 l6 S  t6 d6 A0 m  int 21h0 V  C/ O$ a" o' h
  ret
$ A3 n$ s) T8 P/ q2 [8 Jcrlf endp
  n# {/ F& H- k7 k+ d;------------------------------------------------------------------------------------------------
7 g4 L. y2 s: A9 A! D+ z9 D. }- R_32bits proc near  R; A$ P: k& y( Q) I
  pushad
% }& x5 u  m' M. P% [" H0 d/ {  mov cl,4
( }) F6 T" Q/ }! k& [. I5 `  rol ebx,cl
/ s! L: U5 `% `% e/ H  `( |  call print_4_bits* \, `, r- G( Y0 u
  rol ebx,cl# Q. K) t+ J& H6 f7 v
  call print_4_bits
/ O' h8 U, l8 X0 |  rol ebx,cl
8 ]: K3 m$ }" T0 _4 {  call print_4_bits4 x- B% `. B9 D( Z8 G
  rol ebx,cl
' }. F3 ?* J* k. E" F4 W  call print_4_bits5 N* A1 x. |; k! E7 d
  rol ebx,cl) K& l; [* p) Q: X7 G! e
  call print_4_bits
" T3 e' D& Y8 U3 G( G' D  rol ebx,cl
4 o# \( [6 ~/ K8 ~- g6 n4 d8 ^  call print_4_bits8 P. d& j' j/ ?' m7 k
  rol ebx,cl1 Z" d' b0 g* i& ]
  call print_4_bits
" ~; A5 `) u% |6 c- m" T8 [  rol ebx,cl
4 J) h' f3 i9 [) t  call print_4_bits3 P( x  v3 w# a% X# y
  rol ebx,cl6 Z" X9 ?) R0 ^4 ^! {6 u
  popad
* g7 y2 H5 A( P! K5 N, A  ret
. y; `- v$ u+ b- \: W_32bits endp
+ e/ S& D+ A2 \' V. r3 m9 v;------------------------------------------------------------------------------------------------
$ @( v/ O$ V: a" x. F_16bits proc near1 ~5 l: C* @- F# Z0 K6 i
  pusha   - U/ G: W5 n: M" j3 d
  rol bx,cl
  S1 B* J. j9 }: o  call print_4_bits
, L- t" R" {& M  rol bx,cl4 H8 a. W, h8 N  K6 ~' Z2 h+ u
  call print_4_bits; c( Z" Q8 Z- H2 a" C. l  h* I
  rol bx,cl
1 e- k$ K8 z3 j  call print_4_bits* T! k3 I/ P1 b4 X
  rol bx,cl
1 d4 k8 p/ B# r: i  call print_4_bits
* u4 d3 h+ y$ Z0 f- @  popa# w/ ^' j1 D* A# K
  ret
3 @" b) v8 e  k4 ^+ {! r_16bits endp
8 I- S: T7 K, M2 v. u- h. H1 A;------------------------------------------------------------------------------------------------
6 H2 Z$ G; U- T3 Y9 h, \8 U0 F_8bits proc near
: p. V9 A! u: i3 j( R  B  pusha   
, k- s8 ]+ Z; ]  rol bx,cl( Y3 t% R8 D. u8 J, q
  call print_4_bits
9 o& d2 ^$ I+ O0 h  rol bx,cl+ Z3 \$ i/ G0 C7 u
  call print_4_bits: O, h: U0 J0 n8 x' n
  popa- h" {* D$ e1 s( A3 e
  ret( |4 \5 C& \" T5 D; p$ R2 a7 S
_8bits endp: G( g. |" _1 H' p- x
;------------------------------------------------------------------------------------------------
* f. I% Y/ Z2 m2 _& G3 }print_4_bits proc near
" ~5 s, w# t/ m: s6 I" e. Y  mov dx,bx: F- d' O6 y9 K$ X- z
  and dl,0fh. I0 s" \/ W; o# T
  add dl,30h
6 @( I/ v3 G7 t7 k9 J8 A$ R% X  cmp dl,3ah
5 m1 }' ~% W/ m' b$ Z  jb print
- l  K! v  a6 N+ p- |  add dl,7
6 o$ E# O1 d& w, \; C3 {9 u$ }print:   
- F3 N6 a+ _2 `8 t1 V& l: d  mov ah,2" R. @  a  p0 W' s' u7 C
  int 21h
( t8 s- V) F1 X1 W) _: o1 I  ret& C( \! V& J" D" z, \1 [6 q
print_4_bits endp   
/ Q$ p$ r" v% ^8 Y2 A;------------------------------------------------------------------------------------------------. m# q5 u: }* H2 g, {4 e4 k+ a- Y. x
CSEG ends, z: ~7 c  Y$ j6 h3 y
END
您需要登录后才可以回帖 登录 | 加入计匠网

本版积分规则

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

GMT+8, 2025-5-22 11:20 , Processed in 0.039297 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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