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

顯示string會出現亂碼

[复制链接]
发表于 2010-10-19 16:41:51 | 显示全部楼层 |阅读模式
各位前輩好,以下的程式為在 big_real_mode 讀取記憶體的值) n, Y# O8 d0 N* N, v# Q+ @3 t
4 [4 O4 s4 ]' g: a3 _
例如: C:\memory.exe(程式檔名) 01000100(Address)
1 @% m1 Z2 D# s) N
0 _" ]4 @$ B7 g( D' O; E則會顯示01000100位置的值
5 i1 B5 ^! F. r" o! x8 [
" M1 s2 l- x8 W% s; ^但是我另外還有要顯示出字串,但是顯示出來都是亂碼4 H  K+ h, \: M- _. @8 E
0 c* h6 E+ i/ h, K; Q. x7 q
麻煩前輩給我一些指導,謝謝  , S& z% ^( J; Y0 E) H

* a% X+ z$ }  _' R; \8 V6 |. L+ A- i" E5 O
.model small
5 r  [! f" O& _5 \.386p
: c# {+ u2 v  M7 D# R6 @8 S3 B% i. n;------------------------------------------------------------------------------------------------! @* d1 U: b% U; n
DSEG SEGMENT USE16'data'  
0 R4 m% \3 @) r! |, p% l
* t2 b1 ?# g! f9 v) i7 c5 p7 RDESC STRUC
+ ^! [6 q* l% B6 }, ?4 e( ]  LimitL DW 0  4 A8 J7 k. l/ R1 l7 x
  BaseL DW 0  , U# R$ u# u' T) ]; I2 _2 E8 s3 u
  BaseM DB 0  
1 |8 ?+ E5 k1 ]. z  Attributes DB 0  
# ?2 q) K7 \7 D2 q- E  LimitH DB 0  
# U- l- `8 F" C- X4 e: z' q4 F8 `  BaseH DB 0  
6 p! {" J. q3 N* k) PDESC ENDS
" i  i( f/ R7 h8 }+ M! s
' [. }9 s) k; ePDesc STRUC
4 ?) f0 }/ }+ b$ z- S: C  Limit DW 0  & l/ F0 D8 r& }; B1 K& F
  Base DD 0  : @' ]; Y  I' Y: E$ P# ?" O+ ~
PDesc ENDS+ ]$ X% R/ n( ^1 s7 k" X

5 k! Q( n6 d1 }GDT_def Label Fword
' H* x6 J0 e3 O8 nNull_Desc DESC < 0h, 0h, 00h, 00h, 000h, 0>" O% ~6 E) H1 X$ y1 t0 o
Data_Desc DESC < 0FFFFh, 0h, 00h, 92h, 0CFh, 0>& y! p3 v! b: X: n. p
GDT_Addr PDesc <$-GDT_def-1, >8 q( ]" D# C# ?0 v% v2 @0 D0 S
1 K8 }1 d/ s4 ]% P
msg1 BYTE 'The Input Address is'
! Q5 f; T* v- {$ S$ y5 y5 jmsg2 BYTE 'The Data is:','$'
# D# `# l' q. ^/ `8 b# t* w/ M
% Q' H  f; g+ A! @) }: TDSEG ENDS6 b& G( J" Y5 P

; X4 f7 S) ^/ p# ?: x' n! Z* A! W) [. s/ F3 H) |  c& t3 n
;------------------------------------------------------------------------------------------------  5 X+ v# O- A' b( O. {9 e- ^

) O4 Q2 r% }0 c- p$ JASSUME CS:CSEG,DSSEG
1 H+ x& G9 B6 Q- a4 @9 {# d& `5 \5 r& l  }. @
CSEG SEGMENT USE16'code'
& ^8 I) R7 [; t! ^6 V) J: w  ; b9 j  S! D* [- t- q" p+ `/ r$ v
  push ds# W$ E: b* q& A8 l" b$ X
  push es
( ]- R% J4 R. Q% s  push fs1 n- R  X/ l, f
  push gs
. [# j9 |+ E( R/ G% `1 I  
/ S/ y# A; U& I* w2 S  call big_real_mode
8 c2 b5 O  M, O. j! g" s  K1 r2 m2 j: c
   
. W$ W7 [" ]. Q3 C& c  mov edx,OFFSET msg1;) B' r: E" e' Y
  mov ah,09h;   
  R4 F/ q( ?, \; v8 U  int 21h;
" F# V# j8 k  J" u- |# m  mov edx,OFFSET msg2;* V% |; z5 [1 J8 `, t
  mov ah,09h;  p3 m# r) H9 l; d4 T
  int 21h;
6 q; u$ U! ^; \: O2 U% m2 T    9 m( D3 w- i7 B" ], [% J
  call PSP   
: e4 n+ p" b7 C' [; T6 V    - b( j' |7 j' o* \. G! M! Y" h
  call crlf   
4 U% F2 C& {0 J. S: g    - {" H0 D/ J1 ^! e
  mov esi,ebx
8 N# [% Q2 ~( L  mov eax,fs:[esi]
9 x% d: }1 `1 ^8 |/ D" V. A# z: _  out 80h,eax
: x6 d% v, t/ p9 K7 {  mov ebx,eax& p6 s% P# s2 @2 b) n! x% _
  call _8bits
9 e( L, l* V- i$ l   
# t  u/ c0 s. S  M8 `  call real_mode
$ b9 w# i+ p1 F+ D    & w+ s' J; ]9 e+ }
  pop gs
! |1 S: x- G  \' B/ A" _' Y2 |  pop fs' W- h: L3 S1 m& Q1 A; s) v
  pop es; h) G4 S2 s2 f& b
  pop ds" j4 C& ?$ C1 R$ F7 m; c
   
& O; R: i- Y! A* w$ o  .exit
+ M$ W- z2 K( O9 }& F' C;------------------------------------------------------------------------------------------------
8 \" l. ^, ?. r7 A/ F. r0 W% @' @big_real_mode proc near
, {/ `2 D; Y5 B3 y$ }5 e" y  in al, 92h; l# T2 f+ O: D0 K+ i5 q- r
  or al, 002
/ H1 V7 l6 ?) k! l6 S  out 092h, al
9 a+ z" o& }$ ^( J  out 0edh, al) B) ]4 `4 M, U7 [9 m6 s
  cli
* e, U5 B6 U. S  r! ]  mov eax,DSEG
' _) Z/ C! D9 Z9 R  shl eax, 4( B; Y, Y& X/ J8 P; q. X9 \+ m
  xor ebx, ebx' ?7 d1 w: [( N, o
  mov ebx, offset GDT_def" i! q  H( t- u) P3 ]3 u
  add eax, ebx4 U% \9 S, e. B& B  h* ^
  mov dword ptr GDT_Addr.Base, eax
. R6 q2 O( [' e; a( |4 k( l  lgdt fword ptr GDT_Addr: K: U- M8 Z( k- o2 S* J7 N
  mov bx, 8
8 h' b# l8 T% ?% F2 r  mov eax, cr0( x% J2 n% Q, k8 M# i
  or al, 1
4 Y3 K5 ?/ h: i  mov cr0, eax7 t6 K: ?& \8 P$ i! P' H
  jmp PMod
! K/ ^: `& f8 A3 j/ R6 H3 wPMod:
3 q  d3 Z: W( m- K$ ^  mov fs, bx
: Y! N  t4 d( t- k- s% v  mov gs, bx
3 Z2 b9 I9 a5 C1 P1 k  mov eax,cr05 V$ W# O3 c3 D9 X2 D
  and al, 0FEh7 E; o0 C  {. g# e  l7 T; o+ v, F
  mov cr0, eax  
0 v- B/ X4 B$ b2 ~  jmp RMod
# T; n* H8 P; {- FRMod:2 C' ?" K! C9 l) e4 z4 @& I: H" l
  xor ax, ax
; l+ _8 W" p; a( o: o  mov fs, ax
& W) W% L* W9 S$ Z  mov gs, ax- K3 d5 @9 ^7 g8 e+ [2 O7 K
   
( u. e1 K4 L; [  ~) \# o  sti
, x8 v! E+ r4 r    4 [) T) |8 A+ J+ P
  ret
' K6 t( T& m! x. ]big_real_mode ENDP1 u" l" \$ Q3 u7 ~  t
;------------------------------------------------------------------------------------------------+ f& @5 j% l) M8 H( |
real_mode proc near
4 i) ~/ ^* ^6 h) ~! H  X  in al, 92h) R; T; N" G# B$ D% @/ w4 Y& e
  and al, 02% }- s4 ]/ H7 R4 I
  out 92h, al   ! U2 T! x( o5 [2 {$ G; K) c
  ret
5 }0 r& U# ?2 o* c. I9 ?1 ^real_mode ENDP, M- B2 @4 W5 v1 f0 \. s/ c
;------------------------------------------------------------------------------------------------
  w3 k1 _, h# s3 qGet_Commandtail PROC near
; T/ A  x, k% v( \  push es  1 U. B: |7 b' `
  pusha
  P3 ?9 m! P0 o0 E  mov ah,62h  
* L( t' x, k3 D, }5 U* J  int 21h
( s% ~: l- ?( x+ _  mov es,bx
& O+ [! C4 e1 U  popa  
; Y7 {, a, _" W- n5 ^+ q  pop es
  H2 O3 h7 ^1 k* o2 i7 s0 V6 S  ret0 D8 i+ N" {7 d# V/ k+ K
Get_Commandtail ENDP
5 u; |2 B/ x6 B, X& g+ h, j# u;------------------------------------------------------------------------------------------------
: H" j$ m7 c+ a/ zPSP proc near& T5 ?3 M  D$ D3 }% n
  mov ah,62h
& {9 c$ C' B' n. ~2 z1 u  int 21h/ v: {0 B' L" W! F. m5 y! n
  mov es,bx   % i" |3 s4 W4 a' _2 z' E
  xor ebx,ebx! N7 }: Y9 O7 j2 G& {& l% P
  mov si,82h
0 Q$ g, Z; \( m: z  mov al,es:[si]
7 e6 v3 |/ Y; t& Y$ G5 B# x! i  call Change6 e5 t1 V! U% t" z6 S4 G6 P% A; B
  mov cl,4
# I! J* {: z$ V4 g) t" w9 B  shl ebx,cl
9 h7 M7 ?) U# E  add ebx,eax5 R* a8 |: u7 s* K
  mov al,es:[si+1]1 G- F" {( [; `0 M' j+ z8 @" F) j
  call Change
: E% g1 n7 U7 g7 K  mov cl,4, v5 x7 e" z$ Y) A1 c! ]: f( u
  shl ebx,cl, m8 q# g* E0 P6 H% k
  add ebx,eax' A  S- L& M* e: l
  mov al,es:[si+2]
3 \+ ?7 A) B, c% s, w4 _: |/ q  call Change* T; O% H( E5 |; c" Q3 }
  mov cl,4, w6 ]% V7 h! |
  shl ebx,cl
" Z8 V  t' D: @: E; ?- ~  add ebx,eax
# i9 m: h8 z+ ^4 h  mov al,es:[si+3]- z* P6 k% j. M3 U$ o) y1 V
  call Change' v) u( z, Q, t- y, P/ t
  mov cl,4
4 a1 Z' E2 k: j" `+ w- E+ z. p  shl ebx,cl3 F. g: ~. W1 a6 V3 `0 n6 H1 s+ B
  add ebx,eax
! V$ Y4 z" Z4 j4 _* F9 ]$ `  mov al,es:[si+4]
, c6 Z' w3 P- g  call Change
- m! }) @* i: F7 u  mov cl,4' v" \1 g/ F& r" I/ P& w
  shl ebx,cl
) z' g9 B8 G4 t: _  p  add ebx,eax
) ]( H& r/ L6 p  K, J  mov al,es:[si+5]
  ]& S! Z1 G9 O  call Change* Q# z' r* H* m& P% f
  mov cl,4: @# x0 Z$ P0 G9 m) U
  shl ebx,cl' x8 m% p1 n( @9 ~
  add ebx,eax' ~% f: R5 R1 f4 x, R9 z
  mov al,es:[si+6]! p6 r4 [" ?- e5 M
  call Change
; i6 m0 |* `1 \  ^0 ?0 C  mov cl,4
, `& V% ], H; ~" |# S$ u  shl ebx,cl& m' a" S1 z% y* |
  add ebx,eax
2 H9 v- A* g' L, n& G+ f  mov al,es:[si+7]
) _$ V1 k$ t- f/ v  call Change/ u9 K4 |8 M# v1 I6 Z; u! Z
  mov cl,4
( o5 q# j2 F$ D" X: j  shl ebx,cl
* V- C3 `; _( i4 Z1 b: W9 E- X  add ebx,eax
! T3 w8 _" d% e( B) @0 b" d* |  ret; ]' X* E; S. ]
PSP endp( w; M/ a; C2 U: ^4 y2 e) F
;------------------------------------------------------------------------------------------------% X, d) u9 b# ]1 ?4 b  Q* n  b
Change proc near
0 Y& g- e! A/ j9 m1 u$ yA:   
3 G8 N( B0 X) [$ l8 b% ^4 M  movzx eax,al
7 A: ]# I3 `* z  M8 ~  mov edx,eax
9 |2 c+ B7 e0 O1 C5 C% D4 u  cmp eax,'0'   ( w. t" Y9 T' N
  jb A1 p7 {! h# z* w6 x8 }1 P
  cmp eax,'9'   7 J! N. q2 x* C1 Q1 @! `
  ja B1 C2 M" z/ m$ L6 _. R/ F3 G
  sub eax,'0'
6 m/ v8 v! r6 b0 w  jmp short E* `7 D+ n4 p0 h5 e+ }
B:
1 M/ W* q7 n. z( X3 Y) I, J  and eax,0dfh   / O% A0 ], }2 p/ G' R8 P4 `
  mov edx,eax+ A. r# C& Z1 G4 d5 [
  sub eax,37h   
8 o9 A: S# l3 z1 {  cmp eax,0ah
3 A  o  \; W0 G* ]" h" l  jb A   5 A/ a/ P  N& P; V4 v
  cmp eax,0fh
$ b4 {8 k# i- F, ]# }  ja A   
5 H% }) {- G6 q1 pE:$ W/ ?% e, z& W
  push eax   0 c# P" U* Z5 G- a# h
  call PRT   ' R( s- Y4 ^8 Y7 h
  pop eax
# N0 ^# k9 V* M( K+ lCExit:4 |) ?! j/ }  c* d( ^5 Q
  ret6 L2 O: R* n  `- e% f- i- {" E0 J
Change endp0 b( [4 E0 D5 y: d1 n# G( U# Y! `
;------------------------------------------------------------------------------------------------9 r7 A! z. g. o' P9 O& S
PRT proc near6 k& h" S+ v4 ^
  mov ah,02h
+ ^( m' |0 q" n- q" T  int 21h
% K7 J  i3 F6 c' w8 J+ q: U' M3 N+ p  ret% ]5 O' i, R/ s7 C' c
PRT endp2 Z7 F% G) c* m+ H* o
;------------------------------------------------------------------------------------------------
4 D! X/ ]7 c9 Y' P' Qcrlf proc near
( Q6 |1 s2 f0 t4 `5 M  mov ah,02h
. m5 O6 s" n$ O+ y9 I/ K# [  mov dl,0dh
- Z4 p3 U6 h6 V% ^  int 21h* x" g9 c+ i& R! x0 X7 d4 K* M
  mov ah,02h9 G% Q7 h) C! _& U3 D. b
  mov dl,0ah8 H4 P' |! C" \; u
  int 21h
% w7 R  q. b4 O4 e  ret. o5 `, Q& i3 y+ F' p
crlf endp7 q5 W8 E8 ^- f( f7 c
;------------------------------------------------------------------------------------------------
/ @! S. u5 G4 f: J3 Z5 \1 c_32bits proc near; v$ l7 [( f6 [; R4 x+ k0 A
  pushad
1 B5 d+ @) z" N' Y4 o  mov cl,4
, k. U, v+ l$ ?! Y  rol ebx,cl
1 W, W" q8 y- c  call print_4_bits9 o9 ~& A  a4 u
  rol ebx,cl8 J" M. f1 @& O1 K& w
  call print_4_bits
: l! D% W5 z0 u  rol ebx,cl6 g$ |& W. {: }- {  u
  call print_4_bits4 I! k. ^, z1 Q: O' i' s. m, `
  rol ebx,cl
4 o1 W8 V3 n3 f8 F  call print_4_bits
) ]( n: p% x) {- _$ \; ?+ Z6 A  rol ebx,cl
9 O. \; z! x5 L: f  call print_4_bits7 [9 C' [! i3 b# }3 |- y6 H
  rol ebx,cl
3 B; w3 u# f  v4 ]8 B8 g# G9 c  call print_4_bits
; K) Y4 O( U! i3 @& U/ f  rol ebx,cl
; @% ~& W% P: W( Z  call print_4_bits
8 A& c% O! X8 c1 e  rol ebx,cl
+ R( A+ h& p* B1 |  call print_4_bits
/ H2 l3 o4 ~, [: ^* m  rol ebx,cl+ R  s$ f/ Z/ L2 Q, Z
  popad& e/ P) m# I3 X9 o
  ret
8 X) k1 m' ]; \( O0 K5 l_32bits endp
4 {3 {* x9 D/ P5 O5 b& S;------------------------------------------------------------------------------------------------* z7 }! p/ X! u' b
_16bits proc near
$ m' `" g6 i6 m! w$ {% E* r, h  pusha   2 y- X- o+ x* U( _) J
  rol bx,cl0 L# y' R* P) l7 e+ O
  call print_4_bits
* H1 T( J' e. o+ y  rol bx,cl# [1 S/ S  Y3 O
  call print_4_bits
3 i" z2 X6 a( m4 A8 I  rol bx,cl
- L" Q5 O( l% f9 X' i  call print_4_bits& u* Z6 ~( ]$ e% z/ K0 [
  rol bx,cl
4 z- m' D7 ]" Q3 ?+ A, d. L  call print_4_bits8 A1 Q# r( n  \4 M7 ?  X! y
  popa
! J3 Y. P/ \6 x9 M$ w: H  ret7 j8 D, A9 F* x4 @) u5 ~# t
_16bits endp& p1 N8 T+ M- f  u
;------------------------------------------------------------------------------------------------
: z: X9 l- i6 \+ w' W- \  Q_8bits proc near
. o- b1 z1 D# ?% E5 g  pusha   ) k2 i! ]; W8 h# K% l- h
  rol bx,cl9 Q! d, O' @2 `  L+ x
  call print_4_bits( R* l" K/ B+ e$ m* b7 T
  rol bx,cl
5 P  I3 ^. c/ `2 H% C9 N2 }  call print_4_bits5 L9 }+ O9 q* {; i9 e5 r. p
  popa
( F* W& `  c: S; F* G% {- P! |4 w  ret
; L9 v; O% l# T2 [& H- p8 F_8bits endp
* S# _- D2 D; M2 H% b6 G;------------------------------------------------------------------------------------------------
0 t$ W4 \$ a- p5 z5 fprint_4_bits proc near+ t- q" y: j: `  M
  mov dx,bx
3 ]3 \! K4 d; b  and dl,0fh  e9 {& X8 [3 m# @9 I8 z) K3 p
  add dl,30h
4 _0 O4 Y7 L6 x  cmp dl,3ah
/ q4 U! s/ p' l. i6 H: r  jb print
7 o* x/ X, C8 _( `3 t3 @/ z  add dl,7
7 h! R2 e0 _3 T% a1 h6 iprint:   9 K+ z9 @  u6 I- m7 G' ^
  mov ah,2& |8 q1 k) C& }
  int 21h4 _& W' V2 g* C# |" [5 G
  ret
+ l8 O- F" D  i, U( Gprint_4_bits endp   
6 n' q1 c$ q8 h;------------------------------------------------------------------------------------------------" \  h! m. r; j6 n( _& A
CSEG ends
7 e0 j+ i' {4 \0 \END
您需要登录后才可以回帖 登录 | 加入计匠网

本版积分规则

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

GMT+8, 2025-6-16 12:47 , Processed in 0.043278 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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