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

顯示string會出現亂碼

[复制链接]
发表于 2010-10-19 16:41:51 | 显示全部楼层 |阅读模式
各位前輩好,以下的程式為在 big_real_mode 讀取記憶體的值. s& B/ F& P8 Q/ B4 }9 G/ H; ^9 E5 W2 v

5 I1 k2 ~/ w2 j& L! H: w, Y4 S8 L例如: C:\memory.exe(程式檔名) 01000100(Address)& P% D3 A9 |; `

7 i/ c  }+ W7 F# g則會顯示01000100位置的值
% \5 O3 w$ h' X) z# g8 A
6 v# O: S1 D) P- [但是我另外還有要顯示出字串,但是顯示出來都是亂碼
% |" U5 e. o) s6 z% e) B+ n6 i6 O5 z  X8 V+ n& z0 @
麻煩前輩給我一些指導,謝謝  
0 M2 B" _/ @  P  z% L: G
- X: ~8 Y1 ~. z" T! d2 k2 E+ p5 D$ a# i: o* H# O+ }
.model small
* n5 O2 ]) M. w  p.386p
- ]7 \( R& Z) e9 L;------------------------------------------------------------------------------------------------
- W; L6 A9 e% d8 t) r3 SDSEG SEGMENT USE16'data'  
! h! V/ P) q4 ~7 t4 F4 J
4 r( F; I. ^7 Z0 BDESC STRUC
3 z4 M/ `9 Q1 j2 O3 S6 ]% P4 w  LimitL DW 0  7 N, x; H$ v8 G* E4 J  c8 j1 A
  BaseL DW 0  7 ~9 _, e, b7 D# b0 i8 ^5 Z
  BaseM DB 0  3 u# L- L. H4 b0 p9 I
  Attributes DB 0  + g( U! {8 n: B: X8 f# Z
  LimitH DB 0  
3 t. U% C; e. E, N; v  BaseH DB 0  
9 u2 B* Y* k1 [, uDESC ENDS# }4 N4 ~* @4 w' k2 f. |

& n, t/ R3 C" k% o3 u, C0 vPDesc STRUC
- T# V4 V0 _+ \/ ^# U' H( f) T$ i  Limit DW 0  , w; q, z9 I+ _3 D% P4 I5 U- }/ v
  Base DD 0  9 J; Q6 M0 T( d% G5 X
PDesc ENDS
6 s  h1 _" F4 h
2 s" K0 {8 D+ \" w5 \- pGDT_def Label Fword
; I, P( A. x) r7 B3 CNull_Desc DESC < 0h, 0h, 00h, 00h, 000h, 0>. u# j/ h. E) }4 O/ w" Q
Data_Desc DESC < 0FFFFh, 0h, 00h, 92h, 0CFh, 0>1 V' ]2 G; I) C) C0 l# X
GDT_Addr PDesc <$-GDT_def-1, >, L% l# J& [& e' _" t

' S+ A' G" S$ o  R4 Omsg1 BYTE 'The Input Address is'- o8 M/ T2 }6 d  G
msg2 BYTE 'The Data is:','$'
& p& U/ u+ x( s* m/ T- W6 c9 d9 `$ Q7 a, c; o2 f, ?
DSEG ENDS
+ U% I9 R+ [  s5 B7 t+ Q: ~
6 n7 l- |: o/ k, L1 ^, Z+ l  X/ O9 }0 Z4 ^( S1 O
;------------------------------------------------------------------------------------------------  6 v* q$ h9 K' x; ^8 L! u/ u
2 z. j& p6 n5 p# z. }
ASSUME CS:CSEG,DSSEG
/ S+ M* J+ G" l3 s# u
/ r/ T& b3 p; S1 SCSEG SEGMENT USE16'code'
, P) F3 x2 X- a1 Q7 T8 _& C    j2 C* p' @( Y1 ]
  push ds! d4 l, M  q* E6 {# B
  push es8 N* S/ u3 W: g7 X
  push fs
' W7 n' z1 F6 F: }7 Z  push gs6 u) Y, _/ p" G, |
  # [1 W6 g# D( ~
  call big_real_mode" F; r: I3 h  a4 O) v

6 ^. s- Y6 n4 }; `    % W1 d3 O& g/ v, C9 ]
  mov edx,OFFSET msg1;
9 O! a# o. r# A' s% h7 ?8 P0 ~7 J  mov ah,09h;   + I( T- W' G4 g# ?: J
  int 21h;
- Q2 c. K3 j1 C  mov edx,OFFSET msg2;- [; A) k# I& {' n
  mov ah,09h;0 N7 [/ \8 O/ o/ [4 c
  int 21h;* ?6 l( {/ l$ \9 O  b0 h) H% A0 X- T
   
( j! U" _' i9 x6 M  call PSP   0 T5 q0 b9 l6 _, D4 F4 Q
    6 G+ E9 K( b( B+ N
  call crlf   
5 b& o! l. f/ j; ?. K8 H    ) k3 a% X+ ^* j. c0 L/ i5 U7 x
  mov esi,ebx
# L. e: W* C- Z9 ~  mov eax,fs:[esi]7 X, Q. R9 P2 |! A: W3 F4 f6 q8 n
  out 80h,eax3 Z% `  C, `" A4 d9 c4 V- l) J
  mov ebx,eax
3 n$ V% q! w. w. l8 T# r# g  G. P' x: H2 D  call _8bits# _& B' E( q9 u! \6 Y, L
    . _+ Z0 L7 C& _* V
  call real_mode
1 \8 I) l5 O& Z    ) S) B7 b0 o: t  w( p
  pop gs" V% s1 @8 [  a8 Y
  pop fs' I) |+ i2 V6 y3 T8 L
  pop es
5 E- b6 d8 a: l  pop ds1 J* v. e$ `' L& K3 b
    4 o, R5 j& d5 {
  .exit
* D. `4 g# p  P8 e;------------------------------------------------------------------------------------------------$ B% [" s3 p( @0 b, A. T. H
big_real_mode proc near' l' A5 q* \0 m7 t' \4 e$ o
  in al, 92h/ I: s( F, N+ \+ e5 P* Q4 \5 a& D
  or al, 002  T5 ?$ D% n- x$ E3 ^" D$ [; {
  out 092h, al
7 x7 t& ~( l7 I' z. R  out 0edh, al2 j- O' k+ y% Z. ?( y
  cli
8 u3 u0 C8 i" s* D" ]7 P# o9 R* |4 z5 Q  mov eax,DSEG: D2 }1 |& {' M, U2 ~  B
  shl eax, 4
) g5 l3 r% h! D2 G2 F' ]  xor ebx, ebx( B6 p0 X( ]- ]. A, U% ^- y; [) J
  mov ebx, offset GDT_def6 D# r# C9 Y1 w9 K- h2 `4 r3 D6 f+ }
  add eax, ebx5 [- o8 \) u+ @8 F
  mov dword ptr GDT_Addr.Base, eax* A* Y! d6 w6 Q7 J. r
  lgdt fword ptr GDT_Addr/ F3 r# x5 w5 I
  mov bx, 8+ u" G& H) k2 [, K, I/ A" L
  mov eax, cr0
2 `3 e% [' _1 f6 t4 [  or al, 1. c4 M4 ^, R: O9 Y
  mov cr0, eax1 {4 q- P* r# q2 S/ L
  jmp PMod
! n9 ]5 J7 C. Q0 L  ]- _2 CPMod:3 }1 W" P% p+ J0 N  M4 ]! G( n$ g
  mov fs, bx* H* P) z1 u4 h5 b0 n9 Z
  mov gs, bx1 D" c$ ]/ {: B
  mov eax,cr0- P$ |) v* w8 s; I; v! n; i- X
  and al, 0FEh. n: P% N! x* ?1 t
  mov cr0, eax  8 y* O& Y& n( w! T# j7 `* v. U- g
  jmp RMod
- w  s* B* M. h) e9 F! w! hRMod:
0 t- n0 {2 s0 L( \, m" R4 z  xor ax, ax
) W, X% T" Z* y! u  mov fs, ax
4 b& Y, h8 d/ C+ x  mov gs, ax
  b2 r( u" }" O! d! q   
0 w- l# u( _% B  {  H3 |4 o2 O  sti1 ?$ z3 X0 i. c- S% O$ Z1 G
    3 B$ U. B" ^$ x& f2 y+ Y" B' T
  ret  p9 M4 F) p% O. n+ M
big_real_mode ENDP% v; a) ?; [+ V# I( q3 j; w2 ?
;------------------------------------------------------------------------------------------------/ `6 C0 I6 G- p4 t8 _7 d
real_mode proc near) k, G2 F( C$ [3 c
  in al, 92h$ U# W' Q# m0 n. x2 H
  and al, 02: K4 e# B) Y/ {7 ]6 x
  out 92h, al   
& J7 g& a+ ~9 C9 V# |. O  ret. h3 c' _0 \/ Q8 g% N7 N3 X
real_mode ENDP
- k2 S1 n. a3 M- \) ?& u7 K. V;------------------------------------------------------------------------------------------------  w# H6 c8 V% a3 h
Get_Commandtail PROC near
3 e* F+ e5 I7 n  push es  5 L, d% }( n; x/ e. m
  pusha3 R; B0 I$ c7 c& z# I9 n
  mov ah,62h  
6 {/ \* d  S7 b6 l: a3 d  int 21h
- T' o8 j- K4 P3 J% M* J) b  mov es,bx5 X. [% `1 ?! R7 r/ b2 q$ o! \
  popa  % O  p7 V, {2 V0 f5 n+ F; n
  pop es
) p- ~" }+ m+ i2 D& Y4 L4 \: p  ret1 W  G. Y; {' r0 |$ q
Get_Commandtail ENDP
( v# d% D8 |' L- t+ |7 `  q;------------------------------------------------------------------------------------------------
6 ?6 j  p! r3 fPSP proc near( v, Z; V, B" H2 \, S' @) \/ W9 [
  mov ah,62h: t) |7 O1 H6 B3 a$ K  ?5 `. F
  int 21h
( N7 N8 f7 N5 I. u, F. t  mov es,bx   5 M3 N3 [2 E# g; o6 d
  xor ebx,ebx0 n' F8 \$ H  d7 g3 @6 v
  mov si,82h4 O/ s; D4 k$ N: o( M- Q* M
  mov al,es:[si]
# Z' X& ?- f/ K( z, y0 T4 F) I  call Change
4 @& _) n  ~8 @  mov cl,4
5 S8 P: J+ T$ _+ k( L  shl ebx,cl$ v" [5 B; W+ M) e/ M
  add ebx,eax! ?6 w' r* p1 K1 F
  mov al,es:[si+1]' [' I" B+ J+ Q% [; d4 t
  call Change4 ^# A8 k/ q3 [) i
  mov cl,4% T# W/ p7 d+ t/ N& [
  shl ebx,cl
/ u0 ]( @7 w( f& P' M% I2 q  add ebx,eax' x; X3 h+ S) f3 J) c; g4 P6 E
  mov al,es:[si+2]
) L# c' g1 K1 I3 b  call Change) Q, s% v6 q# V/ Z
  mov cl,4# ^( m6 P* u% O+ g* t# L
  shl ebx,cl
) k+ V6 w1 R+ W5 k* D  add ebx,eax' P* f, a( n2 }- H; [1 \% G! S
  mov al,es:[si+3]
: W* L# q$ }( f' H  o+ z' O: x4 f  call Change* M0 i& Q' H/ u9 [4 |: Z" s
  mov cl,48 R9 x8 Z* p2 F4 b1 y! p
  shl ebx,cl6 ~# F6 U8 Y+ h' o# @! ~
  add ebx,eax7 V0 Y0 m. N4 n( u0 d
  mov al,es:[si+4]; Q8 K0 r9 L# E2 _" P7 T
  call Change3 y7 E$ l3 ~9 A- p& g  H) b
  mov cl,4
3 C' G, C5 X5 `: K6 [  shl ebx,cl
0 ?+ D3 g6 k2 p1 ~3 T  add ebx,eax: _1 j  N7 h4 f
  mov al,es:[si+5]- d) N8 U) _3 I4 y' u$ \
  call Change( r# f2 j- b# `! j# W2 ~  p$ C/ U6 |
  mov cl,4
5 F# S8 t& X9 M  shl ebx,cl. @  t2 T5 q5 R8 y9 g- S$ x$ u+ Q
  add ebx,eax  B4 f+ G' n$ w& b" T8 |
  mov al,es:[si+6]* B1 d- o6 I) ~' f: R; o$ ]
  call Change
5 Q1 e8 y- y: t2 E6 @& Q* S) ]  mov cl,4
' l/ o' v! j+ f  T4 c  shl ebx,cl
& i0 \. _4 j) w  add ebx,eax
4 |& f9 f7 p% p9 |) ]  mov al,es:[si+7]) z$ ]' e6 Y* K. P/ y! ?! a* r9 r$ ~
  call Change
/ h  \: A2 i% |4 `. k) E; L  mov cl,4
& Z6 b; Z7 t% W( c1 H  shl ebx,cl7 i; o, P+ Y/ r( B- Z# c7 e9 o
  add ebx,eax
2 w/ F% ]6 h' o% |! P; O) F  ret& Q! M. V; X' N: @& S: C& B$ C) Z
PSP endp0 c4 M0 P4 ]6 N7 r; Y3 n
;------------------------------------------------------------------------------------------------7 Q0 P  e6 O2 ]# r9 Q8 D
Change proc near# p9 j4 j- b  K4 }; R
A:   
. ?% }7 ]9 e# t- N& S' P  movzx eax,al
0 P6 {+ i/ o0 q# ~8 j- ]. X$ J  mov edx,eax4 n" j/ \1 _; P% J. `
  cmp eax,'0'   0 q7 g& I7 ]8 N' v0 G8 O
  jb A4 ]/ ^  T, [' R
  cmp eax,'9'   
5 S6 {, y/ f! d6 F+ {9 J  l1 v& U) D  ja B
+ {8 A/ y1 ]& I9 l% u" B  sub eax,'0'
7 @0 q. c4 c( o- y/ N  jmp short E
% `7 e- X8 t& e( F6 A, k" VB:: v) K* I3 o5 g4 P
  and eax,0dfh   % e0 Q. K# M/ b6 X2 r1 w' x
  mov edx,eax$ G8 J; @. ^) F) d; B: m9 k! W
  sub eax,37h   
- O! g( H( j1 p  cmp eax,0ah
1 Y& U" e* w' k  jb A   * o' o6 R, v/ B4 h* T
  cmp eax,0fh
! z3 j0 U% P0 z9 f' u/ H  ja A   
4 P. ~; ^$ P/ A2 TE:
- F* ~$ Y" I; b  push eax   , V$ @5 }* M8 q5 k
  call PRT   ( ?; Z( Z: m  Q: `
  pop eax; z8 c) y9 z* p+ Y# a
CExit:: Q) _+ }$ Q) O- t, W% H
  ret: N8 i* H' f* _3 X
Change endp8 X0 a* I/ k1 n- C7 T4 v8 D; |. R' s
;------------------------------------------------------------------------------------------------
/ D9 p1 |- x0 T2 {PRT proc near
- x+ E1 A" m& ^4 x, n; g/ S6 J# ]  mov ah,02h
2 w. }* B+ p/ g- _1 P- f- n  int 21h
6 ~2 k9 j4 n- }% _  ret
+ ~" C3 P5 u# j# rPRT endp
* y! R0 d  g; [" x, e;------------------------------------------------------------------------------------------------
, l6 c. `6 |! b) zcrlf proc near" C  S" E9 c5 V4 c
  mov ah,02h
" K( U1 q7 }# s3 m1 i  mov dl,0dh
( E, c/ C2 T$ p4 R% w  int 21h' Z8 a9 J& e7 U$ `( `, V
  mov ah,02h, z9 y' U3 F5 n
  mov dl,0ah
8 X/ m; \  F& G, l+ S( n: E& b" S  int 21h% O4 ~& v2 `) D$ v
  ret
& a$ w5 v0 Z* R2 Dcrlf endp
% F: y0 ]. K. \& y0 X; B) `& r;------------------------------------------------------------------------------------------------, |3 `& y! A& M3 d! A
_32bits proc near
' f+ |4 ^0 ]- H- F& ]  pushad2 p6 A! u( W$ }% y
  mov cl,4
1 ]4 W# y# J1 s: x2 T( ^: {  rol ebx,cl( C3 c: f# f* o9 f' s
  call print_4_bits
& R6 D  ]$ X  {& I  rol ebx,cl
2 D& f* _# A' B  call print_4_bits
4 m8 `$ [1 }& x7 \5 T  rol ebx,cl4 ]( W$ O; J, z
  call print_4_bits
0 K2 I/ z2 d& M- z4 i& A5 i$ z  rol ebx,cl$ w7 i1 R& t7 H. ]! W3 Z
  call print_4_bits7 a# Q& }+ x" L2 l
  rol ebx,cl
. }6 E$ W4 K$ c# R+ x, f  call print_4_bits
6 U2 A  K7 r& i8 v  rol ebx,cl
. L1 ]* {6 Y4 F: B% L  call print_4_bits
7 T2 V, n0 s' A% P1 d+ C  rol ebx,cl" v8 P0 h' @! T$ E5 n9 ^2 }% R
  call print_4_bits
" A4 Q* @+ Y2 m  rol ebx,cl
& C! {$ @( E+ V) Z) b% b  call print_4_bits6 e4 }( {: a/ ?: c$ e
  rol ebx,cl
; v2 _9 g0 h, S4 i$ T5 u$ V4 V  popad! z5 [7 e' i7 Q: I
  ret9 j. Y: f7 x; S' t  {& Q! z1 \7 s
_32bits endp
! S. ^9 i* c, H. _;------------------------------------------------------------------------------------------------, f3 C8 ]1 i" Z. l9 J
_16bits proc near+ s9 }+ |# b& L7 K3 Q
  pusha   4 U- H' k, ]) D# G: p6 \
  rol bx,cl% ~$ a$ o7 f% V% H. d* E
  call print_4_bits
, u( P; A9 O; G6 U  rol bx,cl
0 m" f- Z# h1 S1 N. n& |  call print_4_bits* f0 l& r! n- S( o* X
  rol bx,cl" w% L* |+ q; Z& s4 S
  call print_4_bits" N& R( E* [& z4 t5 u1 e
  rol bx,cl3 r, G: {; k% J8 v4 ~; i, t
  call print_4_bits
( O& T7 G8 E% A2 c( ~  popa
+ ?5 r+ X" n& \( x  ret
9 |! K. }0 W9 o& u* O' a_16bits endp
, ~) r5 B0 D8 l* X' P9 @  E;------------------------------------------------------------------------------------------------% e! E/ y1 u9 R2 O: w) k- _4 d
_8bits proc near1 S1 W7 G2 s0 W& i2 U$ t: B0 o
  pusha   " G; k4 n; s- V5 W
  rol bx,cl
9 \0 S, f; M" l1 F" u  call print_4_bits
' R5 c- `4 r2 Q, n4 O- D$ |  rol bx,cl" e. n" E) O1 S( D  g3 ~/ f
  call print_4_bits/ b9 }, c3 T/ F) }
  popa
: k$ ?- B( n' S5 \: T: h) ?  ret
, G1 E; E* C8 s# Q) `* a: w3 v_8bits endp# P6 |$ B, K1 E% h
;------------------------------------------------------------------------------------------------
5 _- }% u5 v* Rprint_4_bits proc near
# X5 I1 U* i2 R. C  mov dx,bx
: c7 [9 u0 k1 a; n) `5 @" Q  and dl,0fh7 W' N' }' h+ X% S
  add dl,30h
4 s, i7 y& o4 N5 a  cmp dl,3ah$ X; [! {1 L0 b9 i3 `4 m
  jb print; Z: V2 _4 n0 E; ~
  add dl,7
3 R5 n6 x6 E2 d$ Q2 _& yprint:   1 r8 @3 M2 V; L5 t# x
  mov ah,2
5 _+ U: g. W( k  int 21h
" d2 O6 b; O4 A% m; k  ret
1 Q; g  O7 B5 I, Xprint_4_bits endp   2 C' g# b! n+ F/ q
;------------------------------------------------------------------------------------------------
9 o- x! P* N) T: Q* ~CSEG ends
$ V- e% V! _3 l2 K1 c5 vEND
您需要登录后才可以回帖 登录 | 加入计匠网

本版积分规则

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

GMT+8, 2026-2-1 12:05 , Processed in 0.054332 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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