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

顯示string會出現亂碼

[复制链接]
发表于 2010-10-19 16:41:51 | 显示全部楼层 |阅读模式
各位前輩好,以下的程式為在 big_real_mode 讀取記憶體的值, i/ ~, \7 U$ L
' T9 d! ^; |+ X, |7 @0 Z. c$ W
例如: C:\memory.exe(程式檔名) 01000100(Address)
: u) T6 X  p1 j4 M3 ~9 x" d( O
6 W* y6 ~, I7 J, h6 E% ^. ~& [) c則會顯示01000100位置的值0 E- G- y+ h3 ^3 }

' ]: y8 O" u3 ]3 o但是我另外還有要顯示出字串,但是顯示出來都是亂碼
% L2 Q! @& L5 D
- e" }, Z7 c) [3 f+ c* v麻煩前輩給我一些指導,謝謝  7 q+ X' ^! l4 y+ `, D2 {
: s/ f) `, L7 u8 |) A5 I3 w) E9 S% I0 K
6 s9 z7 k! u$ O: V$ Y" t
.model small7 A1 V; v# h2 ^+ t
.386p
8 r1 Y1 E; c; w' c% l;------------------------------------------------------------------------------------------------
) u! ^- X( [. j: t4 h3 qDSEG SEGMENT USE16'data'  5 Q$ ^  H+ m  e3 m9 f
, b/ Q) [) {1 R' k. w1 }; [
DESC STRUC* t' Z, l" B  X, s
  LimitL DW 0  - G  g) J2 J8 Q6 D& ~7 p
  BaseL DW 0  4 F" u# l8 B3 Q1 r- Z
  BaseM DB 0  ' X* {- m! D( n, N0 G2 a; G
  Attributes DB 0  0 F4 n$ I: c1 }+ X+ k8 i* K
  LimitH DB 0  
: h+ n3 t: Z4 s' C0 i  BaseH DB 0  
, z0 D) E8 A, J4 A- L% G+ h4 ~DESC ENDS, v  ~: h- d5 m3 R" W7 e/ Z

- [9 J9 @+ [. WPDesc STRUC! }7 T" L4 p3 [& H1 d7 J" H3 c
  Limit DW 0  . ]) @2 d$ Z5 j. X. @9 C) W' ?+ b: b
  Base DD 0  ' U. T; p6 r" e4 |
PDesc ENDS# t! F# ~$ ?' c3 e4 j0 f" u
( ^/ @! `, e% L3 \  m! j
GDT_def Label Fword4 H1 c* Z1 x1 x4 a  J& d, @9 }* e
Null_Desc DESC < 0h, 0h, 00h, 00h, 000h, 0>2 _2 F. a# u. j5 v, G  U( ?" h9 W
Data_Desc DESC < 0FFFFh, 0h, 00h, 92h, 0CFh, 0>
  ~' \" ?0 b% h$ qGDT_Addr PDesc <$-GDT_def-1, >
; i, S8 ~+ c8 }2 \; S
/ H( W5 \- q7 U" P! J' H1 imsg1 BYTE 'The Input Address is'
9 W% s. l# n: _9 Qmsg2 BYTE 'The Data is:','$'3 `$ v0 C( I4 q. [2 p+ k

; h% }- i: }) V1 X1 A3 KDSEG ENDS
8 T- v( z" d0 [; C4 a. V0 t' R# j! w4 |& B1 F# n) ~

# i; c: `; m* r- i- x3 S;------------------------------------------------------------------------------------------------  
2 K( D0 @! V5 ^7 q" Y7 [* c- c' E# r; |
ASSUME CS:CSEG,DSSEG
% k* _, [: K8 {, J& p0 j
8 C( N8 A% r5 y" ~CSEG SEGMENT USE16'code'
* u2 p. i  D3 W+ {( H( Y/ p  
2 r7 F, A) e0 \6 w2 D/ W5 k: }7 Y  push ds
  P/ b+ ^# [# O4 Y  push es
$ ^3 m( P6 d2 V! B, N8 G3 e3 S3 n  push fs
" G* \, q/ Z/ E8 M& {4 C* N  push gs/ X! z- O" P0 k6 R0 w# s) b" m& {
  ) N( f" j& o& @5 Y7 x! z9 O
  call big_real_mode
" U' u# I) v+ \+ o/ K
$ e9 P  s' K. i; }: P% S% \4 [    ! [& }1 P1 V7 u! ]! k' j) c1 B
  mov edx,OFFSET msg1;' p1 H2 M5 U) H% z; B" ^! Q8 x3 g3 v5 W
  mov ah,09h;   7 j( a5 E  x# C+ e' I) ?4 \; J
  int 21h;; a" L) W: ^% r
  mov edx,OFFSET msg2;0 H  t4 J4 V3 I
  mov ah,09h;
% m7 k3 j" M, T6 o  int 21h;
! u2 N5 Y; M* w   
1 [7 }1 o$ W" [' K. w* \1 v4 Z  call PSP   ) o9 U+ G. M$ Y% ^( j3 ?6 |
   
3 o1 |- I0 l% ]. i9 S  call crlf   " |! {! n8 ?8 M) o/ c# i) \
   
, s4 P4 @2 q1 l# k8 W+ i  mov esi,ebx- O* n# b5 `% R& ^6 D
  mov eax,fs:[esi]
  g( W7 o; u( I  e8 f  out 80h,eax2 I3 ^/ F3 ?& V0 W1 ]2 H
  mov ebx,eax- ~3 [/ a, G9 L( D( ]4 V( b& ~! |$ Z
  call _8bits
) P% N) ?! w( W: ]) u/ T   
# p. D% E2 x* e  call real_mode
8 v! n, O  G1 y    3 s1 Y& G, I3 `" i( h
  pop gs
. E; z; }8 m6 d  pop fs
( j/ U5 B" N: ^3 w% f/ T+ L  pop es
" S1 h& B* K0 {- s  pop ds
1 ?' p8 U2 _& g3 l* L: i$ t) @( y    7 X* }& ]* u! Z! x2 N
  .exit
$ U# m' \8 s$ X! U% [* r2 r;------------------------------------------------------------------------------------------------) E' |- h0 ~6 h
big_real_mode proc near
8 i. a. I+ a& a! K5 |  in al, 92h
+ w* s& U3 L$ A+ u# q6 L" Z  or al, 0026 L. x7 s3 C% |. \+ S' u
  out 092h, al: n6 e+ ~7 x! [" o" }; X1 S8 ~
  out 0edh, al
0 ]" [- Z/ r6 J  cli
- w' o! s6 }  V0 x, k! P  mov eax,DSEG
9 ^& U2 v3 @) Q5 h- y3 c7 X8 [  shl eax, 4. Q/ M8 P+ |2 E; a1 c2 U0 n
  xor ebx, ebx6 f# s4 K- [% @7 a6 }: Q9 p/ A+ u
  mov ebx, offset GDT_def3 }/ ?9 b9 q5 w- I8 P' B9 u8 `
  add eax, ebx
! s, ^; r* w. T# J  mov dword ptr GDT_Addr.Base, eax
7 Q" B9 U/ \" G/ p8 ^6 P  lgdt fword ptr GDT_Addr6 F7 f2 B+ ^5 t) v
  mov bx, 8
! i" L; q/ h( Z( T" N, Q  mov eax, cr08 M% Y0 T6 _; j3 |( b. X
  or al, 1! N* l$ n& M) t# N* l
  mov cr0, eax5 C1 i, N$ E: `  X1 O
  jmp PMod
( K5 G$ o" b. s4 z% q* ~9 J: Y8 @PMod:
, w, }) }6 R% U+ C. [4 F' O7 k! k  mov fs, bx
9 k* L4 I5 e0 Y) |: z8 m& K0 W  mov gs, bx' s; }1 x  x1 v$ S! o1 U$ U0 M
  mov eax,cr0% x9 b8 X1 m( }
  and al, 0FEh$ u7 ~" {5 i& C/ v" P7 i+ _- w: k! a
  mov cr0, eax  
  j' y8 @( b: R# o! b; n  jmp RMod
+ L5 k( G/ g# I4 P% z- J2 ORMod:9 Q$ a. X3 F8 X
  xor ax, ax
" H' {8 _* Q2 ~) |2 B4 i& b; b  mov fs, ax
$ Y# b  F# B7 W; D2 \  mov gs, ax
# s; _' c: H5 T- |# g    6 T$ ?4 |8 _4 S$ K/ @0 ~* J
  sti+ L& A: O: N6 N. }' A
   
2 R0 W& C5 `# b2 x# G' V5 `) ?  ret- y9 j1 G  u6 P& L
big_real_mode ENDP
) D4 z; `  l( K; ^;------------------------------------------------------------------------------------------------
  L4 x; @) c% preal_mode proc near
; K0 c2 \8 j! [+ `! r9 [- O& R  in al, 92h! E. P0 d( H( K$ k
  and al, 02
7 N& Y- h1 C) g# b- r, n  out 92h, al   
2 _9 ], t) n/ c6 g( k) ^# y  ret
/ _, D. F$ g; R' O$ I. f# Zreal_mode ENDP  u, w' m% t- H6 \/ {9 ]
;------------------------------------------------------------------------------------------------
) I  S% ?0 s8 H) M8 _Get_Commandtail PROC near
4 o5 x! H. U- Z- r9 Q, h% Z9 q8 y  push es  ' r& O7 u* W4 S5 T  S/ u' W! ?) K
  pusha, r! @9 J% Q2 V! p  h5 L) w
  mov ah,62h  & D# I7 M* I6 Q) E& ^0 i, L
  int 21h; t; z) G0 |) r- q( `
  mov es,bx
4 @8 g3 |) V6 L& U# n3 y  popa  ' I; Y: ^  l# {% @
  pop es
$ j8 |. L' Z8 v. _4 E  ret
) ~! S9 t. Y9 N0 @2 BGet_Commandtail ENDP
& K6 M& h+ O7 l; H5 D, H;------------------------------------------------------------------------------------------------
5 T  ?8 J5 U! u& ^PSP proc near
7 }9 E* x( l6 }8 ~  d/ J  mov ah,62h4 d( E& }0 z  X$ F6 s
  int 21h" z, x: I- X- N, {" f& p1 R* O. f
  mov es,bx   
* K8 o( }, t; a7 I$ J- ^  xor ebx,ebx
" [, h6 e: y0 {- @  v0 v4 o  mov si,82h/ W5 v+ ^, i1 q" v2 y( b& e8 v
  mov al,es:[si]
' W: m7 {; O+ |2 |  call Change
# o7 W: W* I8 Z7 u4 f# ~' m  mov cl,4
: J/ H! ~( W+ g" m  shl ebx,cl
6 P  s  I4 O6 U6 i" M5 M. Z; r  add ebx,eax; G0 k/ j# V% `+ f5 M3 h: B  Q+ Z
  mov al,es:[si+1]. d4 T# p1 ~2 i
  call Change
: O. L4 n8 O/ z  f* o3 s  mov cl,41 O3 ?$ h# O" {+ J9 H7 Y+ ]8 V
  shl ebx,cl
' K' d0 E6 Q7 b: z! c0 k' r  add ebx,eax
# G: P& }* H8 z: d& R- \; b  mov al,es:[si+2]
8 N/ k3 N/ k0 `( w  call Change5 a+ i( Z6 B1 f7 e+ e
  mov cl,4/ ^8 ~/ t! h5 S" ]% ?
  shl ebx,cl- h0 {7 V' Y& ?. C7 D
  add ebx,eax3 i0 j* Q5 _% O
  mov al,es:[si+3]
7 T9 Z/ j0 ^" q( l) N  call Change' n' d& {# E+ S4 |8 d
  mov cl,43 z8 Y7 r6 m# }& G- j; J+ R/ p
  shl ebx,cl
0 k! e6 X9 p" l1 H( U  Y  add ebx,eax
, h; [) ^$ ~' j/ N- q; s  mov al,es:[si+4]
* Q$ r% Y/ @" O" b" Z  call Change
  k- \: \" ~5 k" B3 U+ z1 {4 A" g  mov cl,4
3 T' @+ s( r# a" U* ?& S  shl ebx,cl3 g, d$ p) D  `
  add ebx,eax: S9 `0 ]& y% w! N( v
  mov al,es:[si+5]9 {) u" Q. \  a  x; \) S- F
  call Change
" K; c! Q" i" ?, N# i6 ]7 J6 L  mov cl,49 k9 h7 ~1 x/ y
  shl ebx,cl
  j7 j+ c7 w. \* P  add ebx,eax$ H) Z8 k  L* @
  mov al,es:[si+6]
: b. S8 F$ g6 j; [- D  call Change
; V8 T$ O6 V% R& H  mov cl,44 W# t4 Z4 `& O
  shl ebx,cl
9 F( r3 ^0 ~, u" |) b0 o  add ebx,eax# o, [' `7 U% E: K  k; \
  mov al,es:[si+7]
0 D+ U, [% A7 U" ]  call Change4 ^* M" ]2 o7 p) f" f( s
  mov cl,4% T: G5 _* p' N; l8 M7 J
  shl ebx,cl
  T) _5 s' O1 \4 j8 @  add ebx,eax- l0 v2 ~- X# U, x
  ret
4 N" q1 O3 r) q. g2 p& P% O# R" ?PSP endp
7 s* `! c% q# c7 ^4 w4 D* K& R' Y;------------------------------------------------------------------------------------------------% f5 b- Z* \" }' t  B  S
Change proc near
8 j( u7 S$ x# G) MA:   
7 g. i7 R" ~. _* }: _  movzx eax,al
: R& j. V& V3 o. ]5 U5 i  mov edx,eax
# q% G  I) E* G- y1 p9 C  cmp eax,'0'   
8 M, A* z7 ]$ }  jb A
) H; U9 @1 o/ F% g  cmp eax,'9'   
0 v) C1 w2 {" S* m; p  ja B) U8 R- S& o7 a4 y  Y; K# {
  sub eax,'0'% V! l8 N  R- g: \& P
  jmp short E$ U4 {. i% M2 I" {
B:' F. f+ V9 q8 q% _
  and eax,0dfh   
! Y7 r+ N7 H5 i6 `4 d- ^& V  mov edx,eax
6 c: v5 ?$ G4 L3 G  sub eax,37h   
; z) |9 a% U) v5 {+ @" L  cmp eax,0ah
# y" D' K$ k9 k7 B% H. Q  jb A   : o+ `! |8 X0 X3 j3 d7 t+ \
  cmp eax,0fh
" `' K( k7 G& y* _" I3 ~" J  ja A   
3 F, i$ n( T2 F( d9 XE:
5 O5 _+ Y2 ?4 q8 I5 `4 y2 A9 k  push eax   
, e  i8 ?+ L, ^+ e4 E7 `  call PRT   
" Q$ L+ H7 x6 f. i/ ?( S8 t& ^' M6 d  pop eax8 A8 j  J+ G4 Q$ O8 P. h6 w2 Q
CExit:* Z3 \: j  o4 G, G/ }: h0 |, @+ G0 x- h
  ret
  O# |4 Z# l% D7 v- D$ BChange endp/ c" Q$ X4 Q) {) L
;------------------------------------------------------------------------------------------------
: ?7 j9 D' q2 gPRT proc near
0 ]5 @4 w" @7 r# ^5 C  `, U" I  mov ah,02h; ?0 u" O1 N/ i7 X
  int 21h
8 n( l  L+ A( i. @  ret) o6 d' m' `$ \/ C( Z
PRT endp, c8 |5 z, c- `9 M
;------------------------------------------------------------------------------------------------% k# K" H( j/ a! k7 x4 f# X
crlf proc near. k9 ?" _8 Z: s* V* h8 U4 e
  mov ah,02h
3 V( v0 i4 B+ B3 H% K" W  mov dl,0dh
1 v- e5 ]- }9 G3 g2 D6 ~* S  int 21h8 y  D" \2 f7 A5 k
  mov ah,02h
- W8 ]* Q4 ]1 C) J2 V! A" D- `2 {  mov dl,0ah9 B: W+ l3 T/ ]$ j/ p, U2 J
  int 21h1 k0 _) J% Z5 S5 {; t  D- q& G6 b# S
  ret8 y3 r) f) g* S/ R" C
crlf endp
! V4 G: {9 _9 A0 l;------------------------------------------------------------------------------------------------
' I  P0 ]% g- M3 L* z_32bits proc near
- ]& U+ Q9 K/ b  pushad
# P. b% _/ h8 v0 `3 Y  mov cl,4
* M+ {! K+ q8 h. }9 {% m; G$ K9 S5 e; v  rol ebx,cl
' V) i, I2 `$ E& W  A  call print_4_bits0 p& W* B/ q3 m) H& N) q  y
  rol ebx,cl. \! _5 b$ `7 V
  call print_4_bits
" y( I1 T! d" D0 r* I4 F7 E, K  x  rol ebx,cl
# y9 ^% W. b; q$ I8 S1 f  call print_4_bits5 s% t- a9 ~6 i2 v
  rol ebx,cl" \+ G0 q1 b7 e0 p7 x! @" \
  call print_4_bits
4 j9 C) ?- D9 d6 f3 o  rol ebx,cl8 c" u4 K0 O5 R4 ?: b# G
  call print_4_bits
/ l, l* m8 w9 L3 u8 q6 R  rol ebx,cl6 K0 g0 f  L2 B
  call print_4_bits
% l* |2 ~1 B2 _- P5 ^  rol ebx,cl
0 @6 `( S5 l* j5 V; _  call print_4_bits& ?3 t  `* R7 @) e/ N
  rol ebx,cl
+ b+ Z4 r" H8 `, N( H  call print_4_bits
$ P9 L& J% V" ]6 R! u1 I- ]( P) w) F; h  rol ebx,cl7 F1 d# t- C# p6 \! H7 |& o
  popad
1 \/ n1 Z$ J$ E7 m; A0 h/ N$ _5 d  ret
. l; Z  I5 i9 s4 V_32bits endp5 X+ c1 H8 Z# _8 i2 x4 @
;------------------------------------------------------------------------------------------------$ \2 G6 L, \2 u
_16bits proc near) r) o  q6 K- N5 K, J
  pusha   
1 r  `  x0 f! Q0 b  q7 ], l5 B. b  rol bx,cl& o% c, X0 g* W7 p; |+ ?
  call print_4_bits- ]% I: k0 M+ s& P) g
  rol bx,cl
1 G2 |% Y3 f  i4 Q/ Q# C  call print_4_bits
* i& _# z- F7 u) o  H  rol bx,cl1 i4 W2 I/ E$ M
  call print_4_bits
' s  L1 ?; o( k$ z, M/ L+ e  rol bx,cl
  V- }: S) ]* i  call print_4_bits  i+ }6 l6 ^' @7 u7 }; O
  popa
, t6 Q6 P/ u+ Q6 e  ret: M3 ^) I7 b% z0 m6 O; V( }, \
_16bits endp; R, O8 _/ N( K% z
;------------------------------------------------------------------------------------------------8 o4 |8 a8 p6 L9 h' C
_8bits proc near& c& P+ r9 t8 i& h, R  _0 c8 ?
  pusha   2 O3 |0 x, {! j( J. B- e3 H
  rol bx,cl+ J6 N& r) ]' t
  call print_4_bits( @9 }- \* ~0 U9 A) l. E  W
  rol bx,cl9 A: H" |0 L, }* G5 _+ `8 M/ L
  call print_4_bits
* Q9 C/ h: D3 g) @0 y/ E  popa
  L4 A( D5 g. _, O% _  ret
" l! P, `( y1 v9 e8 a_8bits endp
  V" j8 o- L- p4 G  X- V;------------------------------------------------------------------------------------------------
$ O- V& F: T; O4 Nprint_4_bits proc near; }( |# [* N1 m5 E! ?
  mov dx,bx
) X$ _/ L( Z, t3 N, _  and dl,0fh+ t  [3 E5 @  W5 v
  add dl,30h
! s7 y3 i: E6 p9 Y3 g  cmp dl,3ah
! G, D6 x$ e) n$ C% F* m  jb print
4 B+ B+ W) R: g6 b  add dl,7
/ U  N0 L8 ?( O, L7 Fprint:   7 u  t* r* f7 E& r# U: p! u
  mov ah,2
7 Y; Z/ O% R) J! j  int 21h
8 J- T7 {  C' d3 {$ o4 r: [  ret
1 i. D+ I/ A, aprint_4_bits endp   ) c( g  C6 ]: H- X
;------------------------------------------------------------------------------------------------
/ T6 v% N, E4 y2 ~/ CCSEG ends+ u3 b) j# r8 \2 p, ~
END
您需要登录后才可以回帖 登录 | 加入计匠网

本版积分规则

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

GMT+8, 2026-4-20 03:47 , Processed in 0.039555 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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