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

顯示string會出現亂碼

[复制链接]
发表于 2010-10-19 16:41:51 | 显示全部楼层 |阅读模式
各位前輩好,以下的程式為在 big_real_mode 讀取記憶體的值
( q5 _! @2 T, f8 E+ H7 c3 r
$ }, d6 w/ \/ ]5 ?' e例如: C:\memory.exe(程式檔名) 01000100(Address). _7 x4 T5 m9 o, ]" C! K6 X

" h1 a" t# h' E- K則會顯示01000100位置的值) a$ d  ^7 d3 d" C2 A$ B1 E( }6 d
: Z% x& [0 {( b& T! s6 }
但是我另外還有要顯示出字串,但是顯示出來都是亂碼+ n5 c: r, B7 I, I% a4 _1 o
. f0 N: O! I$ B" }3 H4 s% ?
麻煩前輩給我一些指導,謝謝  ( K: A; p9 o- K& |
' f* p3 h- [; s( T' U6 R& Y/ l

7 K' f: g1 \$ x" \.model small
- J0 m- a/ v" z.386p* O" b; ]2 M8 H2 T* p; G5 d8 O
;------------------------------------------------------------------------------------------------
6 x; i8 y7 Y5 }1 e) K4 c& }DSEG SEGMENT USE16'data'  
' i2 _3 Y4 a( [9 P' ^6 M/ z; `) p% F  d8 F* j
DESC STRUC  q7 E; M# A7 n. y& F0 q
  LimitL DW 0  0 G$ V3 Z9 }: `% w: D
  BaseL DW 0  
" s6 m. P; a( O6 U) o# A  BaseM DB 0  
+ i' z, _! Q1 @# u3 r  Attributes DB 0  
6 N7 F8 r; @% F7 `0 v7 r  LimitH DB 0  & ?' M& K6 w. u: S* m! r- `
  BaseH DB 0  
* Q* j; B7 y/ ]# Z: W3 IDESC ENDS. U3 H6 j/ Q" \7 M( L' @
' W! r& J) }, y! P6 |& X
PDesc STRUC6 m: A* Z3 Y& A8 R
  Limit DW 0  3 m1 ^& R( W8 X* e3 l; ^  h' S
  Base DD 0  ; [9 G$ P* r' I* y8 g) j
PDesc ENDS4 T  n6 }; n5 d8 E2 Q3 o

: v# o5 y6 e2 c  HGDT_def Label Fword3 ?1 s( S* o4 D8 p: @
Null_Desc DESC < 0h, 0h, 00h, 00h, 000h, 0>
" Z5 z0 X) q+ w+ S  J5 z5 O6 k) {Data_Desc DESC < 0FFFFh, 0h, 00h, 92h, 0CFh, 0>
) n% i+ F1 _/ o8 _2 A, YGDT_Addr PDesc <$-GDT_def-1, >5 t( g$ }5 J1 w( K! W  ^
; f/ C- K# z6 N+ R4 y
msg1 BYTE 'The Input Address is'
/ b  {0 M+ R3 U1 b8 s: imsg2 BYTE 'The Data is:','$'9 t  \0 l# Y, [3 p" `* r0 b

  Y- \" s% O, p- vDSEG ENDS
4 o- b0 j% g! t$ E0 ~
3 g5 q7 H( w2 R. t$ a" v0 b( N( K9 {4 p  T  r* p
;------------------------------------------------------------------------------------------------  6 }2 d$ d  F) X
( l$ K5 p8 d3 n% {8 s" q1 n+ M
ASSUME CS:CSEG,DSSEG
1 w" _+ f) i! b" T9 p
; z, U- i# H6 s( n. mCSEG SEGMENT USE16'code'
: O: W$ N* T- h, h  . [' u) P9 d" T
  push ds
8 v. V: ?7 I' @  push es1 `  g. }( z- P; I5 {, P
  push fs
4 o" J5 r5 d6 j4 V  push gs5 x# w' m7 r7 R* C3 \
  
5 T+ m  E. \9 l/ y/ M2 q* ]  call big_real_mode7 _/ C) V. w6 z& ^

$ k4 }& l+ T; \' R- {9 s5 m/ L   
  J, S: A* D3 r$ T7 [' e) J  mov edx,OFFSET msg1;
+ x- ^* t& Q4 `4 Z" d7 w( O  mov ah,09h;   2 U7 ~7 |; w) {" K7 K% }7 |
  int 21h;
/ ?! u$ S+ j, i0 T/ Y2 S( Z  mov edx,OFFSET msg2;
; N& X# x7 s2 u+ T  mov ah,09h;
1 h5 a+ `4 L  [  int 21h;
( f6 B3 H, G5 p# A( A/ u1 L0 w    9 R$ {, a2 C( A: T2 U; ~
  call PSP   ' j8 @6 u0 P9 D0 e! d" q
   
" M9 h0 a& L1 {  call crlf   
) i/ u' F) o3 j$ R! P  @   
" w7 \- Z6 H0 @( s- x1 ?* ~  mov esi,ebx6 F7 J7 {. N& v# p/ c2 q% j. {
  mov eax,fs:[esi]
1 t1 F/ o4 ]5 d6 j$ }' V) U/ W  out 80h,eax% Y' N* ^! Y7 @6 c2 \) n
  mov ebx,eax8 l3 o$ A7 l; q  D  Q
  call _8bits
+ W- f# w0 [4 j! g' ]   
; M/ G' {! N$ }$ {  call real_mode$ Z# g7 P( O. T( e1 t, ~: [7 a
   
: p8 p2 ~  H1 Z, P! o) p+ H  pop gs
( d" b& r, t) N; l. ~  pop fs8 u+ g- X' h" O5 h4 {8 K' w9 g
  pop es
& o# x; x$ q2 S7 \7 c  }$ x! u  pop ds
8 _( g% U- s& W& {; _& r! e4 ~   
9 k, {0 }; i: b  .exit
5 t  S- A0 @9 C6 |) }( r3 ?: X5 p;------------------------------------------------------------------------------------------------0 }1 |* x, a5 y' y/ q& m
big_real_mode proc near
# c5 ?- Q8 s* ^; V# X7 Z  in al, 92h9 E1 h/ O3 W7 u1 j9 ?* _! C" M
  or al, 002
& X3 T# O$ F9 g+ O: i9 \$ B$ A  _  out 092h, al
' A; _0 P0 x' K! f: |+ b  out 0edh, al
7 ~9 R  g( u1 Y  cli+ D0 _+ x3 s% D
  mov eax,DSEG7 [/ ~0 @  ~1 }5 o
  shl eax, 4
  C3 K+ z; p# _  xor ebx, ebx& U5 @' ]) f/ T9 S6 ^
  mov ebx, offset GDT_def
$ h, M  v" o6 ?$ ?8 O" S, n  add eax, ebx% D4 D4 D7 ^! c1 w( b- a2 [
  mov dword ptr GDT_Addr.Base, eax2 m6 c' j8 z% X  L) t1 A- B, o  v
  lgdt fword ptr GDT_Addr
3 i$ n# I+ ~% X9 x1 G/ S  mov bx, 8
. p8 \; b" d( c9 d( n2 S0 `' a  mov eax, cr04 w. k# i. t+ ~! E: k
  or al, 1
. r1 {; a. p0 R5 j% J. C) Z$ \' y  mov cr0, eax" K, V. D3 n& u$ c
  jmp PMod, F2 A' E: O2 @4 ?& y% m% `) Z
PMod:
; n% K. m: e! [* |- l/ J  mov fs, bx
6 A/ l& f3 D* O; v6 t7 h" R* o  mov gs, bx) u  _9 z) U3 p; }" n) o2 d
  mov eax,cr0
' y5 S" ]: X& k5 m/ E" t  and al, 0FEh5 ^  O( S0 }# G2 i" p& \: n. L+ P" A  `
  mov cr0, eax  % ]3 ]0 f  N! z$ [' v; N2 W
  jmp RMod
) Y% F% Q# L9 Y+ U9 yRMod:
4 S; U) p6 x( p3 W  xor ax, ax' o" l+ a- l/ r
  mov fs, ax' e' p* u! ]7 |$ V
  mov gs, ax
! S- \+ {9 }1 I, g6 I: A. j   
+ F, G% u; B* {5 A1 N" V4 m' }  sti
4 t- G; b$ N. Z! E8 J' b   
0 `. p( u; Q* V  r* b0 D  ret
* \* Z6 T1 g  C2 L% Rbig_real_mode ENDP  @& J9 s) T6 k& y  U( W( M' g
;------------------------------------------------------------------------------------------------
6 s+ w2 b5 \" v" I5 breal_mode proc near7 D9 b5 s5 F2 [% o- i$ M
  in al, 92h
  v  _& ?, j: a% E* Z! r* u' |  and al, 02
: x$ z0 \$ c4 X: R  out 92h, al   
# `1 V( I+ @# h0 f0 \* Z/ }( I- N  ret9 J/ r9 C8 C  j5 W5 K. C% X
real_mode ENDP
2 ^" V1 P& k4 c7 l9 k;------------------------------------------------------------------------------------------------, {' t6 s# e# S
Get_Commandtail PROC near1 Q) c# p/ ~4 _6 ^
  push es  
" Q9 i. B+ C- M" U7 I  ]9 W  t  pusha
/ ]/ z  [* V  G9 f9 [  r  mov ah,62h  
% l: q# a2 N7 v  int 21h- k* i0 ^8 F& Q1 u) Z( Y* [
  mov es,bx. V' x/ L- R& S# v; U: S
  popa  - z/ t7 o. d$ e3 s0 r+ \  u
  pop es
' J9 H, h1 x# Z1 P' c  ret
2 C( y# k& v" }6 M" _- SGet_Commandtail ENDP
) t0 l7 _2 c* E2 m1 L9 V1 T' y;------------------------------------------------------------------------------------------------
' T$ z6 U* F9 m% |9 K& C# _PSP proc near
( I8 {. \5 ^% M' A2 M  g  mov ah,62h
1 }$ ?+ e2 T( ~* t4 w: [$ n  H  int 21h
. Z: D  p7 |1 B: J' N% j1 I  mov es,bx   % c: L! g/ h8 d* b/ y6 ^( I
  xor ebx,ebx
! z( ?% y8 |0 ~  mov si,82h; }2 b% ?/ f7 M" ^6 q
  mov al,es:[si]$ k$ ^; `$ u2 d$ B9 h
  call Change$ R' E$ W2 q; a6 o& m. N  O
  mov cl,4
! v; i! F! ?' A, K  shl ebx,cl  j. F+ ?; x6 q, ^1 @) }" ?
  add ebx,eax+ L  ?; U& N* D5 Z! b& I
  mov al,es:[si+1]
3 H1 `4 u4 K9 c- i6 `! l  r  call Change4 M: E% J! M( f) K( r  b7 V
  mov cl,4
2 `+ }, E) y& ~2 _  shl ebx,cl3 S, w  ]; a) _  d& X+ ~# {
  add ebx,eax
5 |+ W2 Q& p, p/ _) G: ~  mov al,es:[si+2]7 K- T$ S( B6 l* B4 }" L5 h; ]
  call Change
9 C* C) p/ X: _, C6 \  mov cl,41 v9 i6 O  t5 s$ K: i5 v0 l5 t% w
  shl ebx,cl& `! Y" ~# t5 _- S
  add ebx,eax9 V  R3 p' O2 r
  mov al,es:[si+3]
2 R/ D3 c1 O* }/ a" d# v3 U" A  call Change
9 x) E, d- v2 [. U6 V) Z6 ]5 N  mov cl,4
; H9 U+ J; K9 a- v. D4 z. ~" k- _  shl ebx,cl
; u: d( y2 k( S& i  add ebx,eax* w, M6 Z: q" O- F, z) o" z
  mov al,es:[si+4]
4 h1 F9 K. z  m6 b  N* `2 M% p$ R5 J1 H  call Change
, X# X, T$ ]* ^  mov cl,4% w* F( }" g9 t  x7 y1 \7 I" X
  shl ebx,cl! Z- r7 v1 w* z: h  t; G$ ~* W: @, Z  X
  add ebx,eax
* O* |+ k0 o. J. ?8 n2 q  h8 W  mov al,es:[si+5]
, d  L2 J; a7 t5 M$ l* a2 g  call Change9 N7 X& C' x% t, {
  mov cl,4- I& p$ n3 X/ B2 v: O% E! u
  shl ebx,cl
' K  V$ F$ W" e$ ^3 m  add ebx,eax
/ m( ^+ B3 [5 ~& k4 ~2 p) a  mov al,es:[si+6]
$ Z1 |  E; w0 |$ u: l) |  call Change
$ g- ?* S1 _" V  mov cl,4" c3 \4 Q6 p6 c8 I
  shl ebx,cl
; s2 P( |& P: r" p  add ebx,eax
+ Y0 f% Q6 s% f1 r( H  mov al,es:[si+7]
. h2 u4 B% U2 ?, O  call Change. W8 o, a! p0 {. A6 `; A2 t
  mov cl,4
! P; Q4 Y3 n! b5 `  shl ebx,cl
* c! y9 D+ \3 P% \* ~5 g  add ebx,eax) p0 I9 G) G6 B3 P7 Y% @
  ret
+ U7 D# j+ G, [7 R8 QPSP endp/ n/ y3 L/ E5 _
;------------------------------------------------------------------------------------------------6 g4 m/ F7 ~+ S
Change proc near9 I  v9 H$ `, L2 r8 m
A:   . W+ l' ]4 K  O: o; r1 x# x+ ~) K- Y
  movzx eax,al; |% ]! F$ u6 R0 L' c9 ~1 Q2 y
  mov edx,eax, A" ]0 u) X4 [1 D! `
  cmp eax,'0'   6 e3 g& T& J; o
  jb A
" D2 |+ Q6 F3 A' b$ e  cmp eax,'9'   ( C$ [$ w6 E5 X& \$ z
  ja B
8 @. q4 y# `& R* K3 Z0 d7 s7 S  sub eax,'0'1 E5 w6 m; `( e5 F8 Q: b+ O9 _
  jmp short E3 y3 e3 N) k/ F1 `' o5 ?! H
B:
9 s  P8 h9 n( P) k( @* [  and eax,0dfh   
! I% ?: j- K8 C  mov edx,eax
$ Z$ q% I9 J6 R+ ?  \- y  sub eax,37h   
! ~) `- D/ O8 Z2 s  ]" m6 Q  cmp eax,0ah2 ~" F3 Z: x2 s' @  K
  jb A   
" |& \5 |, `" v- `0 T  cmp eax,0fh
" T* I% Z  N6 m( s5 T7 m# J  ja A   3 w0 Z5 q5 t5 c( r+ e/ {
E:
& P+ U4 J1 z1 W- z  push eax   
  t# B+ z, n6 L4 F  t  call PRT   $ j! [9 [$ O! @. \7 q5 p
  pop eax. P; k# S# d7 U# k
CExit:# ^* _2 U' a; C% @( J0 |6 q$ `' h, E
  ret3 [! i1 B( E9 O- L! G' r
Change endp( |7 ?5 H: `$ v& V
;------------------------------------------------------------------------------------------------
8 ^  ^) C0 _. P, ^2 cPRT proc near- V/ ?; `* M" S3 I9 V/ S. J/ ]
  mov ah,02h
# X& R4 n, s3 _9 z, G0 n/ z0 `' s  int 21h
2 c7 k% C; D5 w  ret
; [$ }8 C" @8 kPRT endp
/ v5 [! c2 e" ^' I8 i8 ^' b;------------------------------------------------------------------------------------------------
. h- a0 y; u9 G* J7 Scrlf proc near
0 E2 N, [. g+ f3 x+ ^) a; k  mov ah,02h- O3 {$ r/ x8 _
  mov dl,0dh
5 v- l" H" S. [7 P  int 21h
3 r% ~; M: N: h8 d- x% v& M. W! A  mov ah,02h& M% {* d7 M( Q, H
  mov dl,0ah
; R% k3 b9 ^8 j6 |& e  int 21h
+ x$ d, E& I1 m$ j; E$ [% |1 j# x- I  ret) T5 W  X5 b, B! k1 V2 i7 @
crlf endp
8 F' i$ _% z: v2 B  q;------------------------------------------------------------------------------------------------; ]% s+ n$ l. m0 m
_32bits proc near
* K: k: n8 v  M! ~1 z  pushad7 {" `3 S0 |% o- z  N# c
  mov cl,4# H+ }5 W! z  M. k  M' `
  rol ebx,cl
' `5 O' M, B2 f) t7 \2 G  call print_4_bits
  G$ g/ T0 J2 T) a/ m/ v  rol ebx,cl
' S% m5 U# p+ U( j5 d! v3 x3 _  call print_4_bits  h, K' x# Q# S- k$ B
  rol ebx,cl1 W+ d* e/ ~+ p9 F5 q: `% J
  call print_4_bits$ v. b, B, Z" I* V2 c- [- x- i( J
  rol ebx,cl
2 ^; e. E) z, M- K/ ^+ ?  call print_4_bits
) G% h: n/ I9 R( n  rol ebx,cl
" ?# b: r3 M: K  call print_4_bits% b. B/ J/ S& p& j4 k9 f
  rol ebx,cl
  k' U" C+ T. b2 n" [3 q9 D  call print_4_bits
4 E. t3 l. e2 S1 D  rol ebx,cl
& n' |& u% T2 m: L- C  call print_4_bits: S# A3 d. y" ]" N" Y/ J
  rol ebx,cl8 z& l, v  X+ T" G  C6 ~( B
  call print_4_bits
+ |+ S# A. d7 ~& f# m  rol ebx,cl
) q$ G3 q) R8 s4 G1 x; d  popad, e% V* ]' `9 G0 }! a
  ret2 O; d* f/ r( `% [
_32bits endp
5 L# Q! K; w2 y# L;------------------------------------------------------------------------------------------------6 t& W8 r! H& b( A' r2 w2 F/ s0 m% }
_16bits proc near7 u' e9 x/ {) b7 i3 a7 e( Y4 N, Y
  pusha   # w* }% N+ q# E
  rol bx,cl' h; i0 y3 `* ^" r; P( Y
  call print_4_bits
: r, A# {  s* F% z/ W  _  rol bx,cl
* L7 ?' l0 v3 ?2 H6 ]8 a  call print_4_bits) V1 ~5 E- T5 Q7 s
  rol bx,cl4 L5 v% s4 V: S, r( R) x) c
  call print_4_bits: A7 X0 `* _1 e0 l( L, G
  rol bx,cl& C8 w. x: h/ O, c+ r! e
  call print_4_bits# p" \5 B4 U' j: a
  popa0 z) {2 Y2 R" J- M, R3 G( E
  ret3 B& _3 ~# m9 q6 D$ _( m
_16bits endp/ a* j3 ~% g, S( L6 {7 V4 V
;------------------------------------------------------------------------------------------------
' v/ {. C% l( g5 I2 F! t_8bits proc near' A. J  b6 F8 K) [
  pusha   3 n+ g1 R% H/ O8 I9 a
  rol bx,cl
6 U7 Y& ~4 ~& e8 j, h$ U' }  call print_4_bits
2 I0 d8 e4 @  k1 X% V, M  rol bx,cl8 @# W" y8 I$ j
  call print_4_bits" W- k* \4 e( N* @+ C) |
  popa
- E; S+ c3 K0 s5 X3 x+ V  ret- D- u3 G+ T3 w) A: Y5 _7 j
_8bits endp  Q0 X  q4 P$ X% s/ O
;------------------------------------------------------------------------------------------------2 s# _  u" x: Y/ }# m, _+ M
print_4_bits proc near
; ]3 J/ n8 T7 O6 d  mov dx,bx! l7 m- P( S; q
  and dl,0fh
  [7 N* H" z% v* u  add dl,30h
3 c$ ?5 W1 P0 s  cmp dl,3ah
; P0 m! W$ A# l" `  A+ _' f  jb print" M. o7 l, d) I
  add dl,7
" N' u( m+ v) Tprint:   
: C! B2 b# \& B/ k  mov ah,2
4 D. R' h" H  o' X0 G  int 21h& z2 X* |0 g; P" Y
  ret8 U& |9 |% I; `+ G4 P) I
print_4_bits endp   3 l9 h" Q4 j  x( q
;------------------------------------------------------------------------------------------------7 ?9 _  {/ B2 i& J
CSEG ends
8 b; z1 U. h3 k9 F; Q" R: X& b+ a) DEND
您需要登录后才可以回帖 登录 | 加入计匠网

本版积分规则

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

GMT+8, 2026-6-4 16:38 , Processed in 0.102880 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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