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

顯示string會出現亂碼

[复制链接]
发表于 2010-10-19 16:41:51 | 显示全部楼层 |阅读模式
各位前輩好,以下的程式為在 big_real_mode 讀取記憶體的值
$ @% C: ?! l0 o8 ?6 |6 |) s  r% `6 m7 h
例如: C:\memory.exe(程式檔名) 01000100(Address)
5 H7 w3 w+ y! J' M' j* [( K! Z2 k$ @! [. U. {1 _# c
則會顯示01000100位置的值
; \0 P$ _9 U8 v
# `+ L3 Y1 C5 G但是我另外還有要顯示出字串,但是顯示出來都是亂碼
- G# Z% H" I2 ^' R. D; n- I/ `2 q. C' y% _8 O
麻煩前輩給我一些指導,謝謝  
. w; K0 }4 D: Z8 G" K% v8 y3 U
7 P; l# b9 e: C/ [( T" t5 e: {) U! T! j3 p" O) ^
.model small1 C9 J# M! u4 W3 t* I
.386p! G' B% |4 w- e  A9 w7 R
;------------------------------------------------------------------------------------------------: a6 d$ ~4 c$ \1 ~
DSEG SEGMENT USE16'data'  + N( L  N4 b; u, `9 ^
" a: p6 b" _# U, \2 I( w
DESC STRUC
4 V$ G% r3 |$ g+ b  LimitL DW 0  ' c, R& E% W8 O$ p5 n8 Y4 |3 D
  BaseL DW 0  ( Z- W* _/ n  J9 z/ n8 T2 r2 U' ^
  BaseM DB 0  + f2 O# ^+ }& x) T) j
  Attributes DB 0  - ]: u. \- v5 O$ U9 T$ F
  LimitH DB 0  $ Y1 f# E; r* E
  BaseH DB 0  4 J& Y  U# a- V
DESC ENDS
4 R( M. ~3 B3 C% R1 p: d: M0 l; W% k3 w0 E! ~, Z, M* d* O9 E
PDesc STRUC
' A! g/ w3 \7 S+ J+ Z  Limit DW 0  , _$ U' `% \2 U1 \  f) D3 e& h
  Base DD 0  & K8 Y5 ]5 e1 k9 y
PDesc ENDS
2 U8 a% h" M7 \# \" w9 O
# @) c1 D0 v" F( |! @9 IGDT_def Label Fword
( P5 b1 v/ V% YNull_Desc DESC < 0h, 0h, 00h, 00h, 000h, 0>
; V: G1 E$ ]" c6 O8 rData_Desc DESC < 0FFFFh, 0h, 00h, 92h, 0CFh, 0>7 W; f( N4 z8 Y  ?" o+ J
GDT_Addr PDesc <$-GDT_def-1, >$ T9 ?; M9 y3 X6 ^- |2 ?0 J3 |" a

, I" N+ o4 W+ Kmsg1 BYTE 'The Input Address is'8 k6 O$ Q$ m( q4 G3 g1 A
msg2 BYTE 'The Data is:','$'8 v8 g5 @' A7 A" ^) M$ I3 y+ f
5 @( o# H# H6 d2 w
DSEG ENDS. K+ k5 j6 @/ K% Y* G8 v0 k) ^* C
9 J" s" |7 Z! X# `4 ^

' k# }$ K+ P$ F;------------------------------------------------------------------------------------------------  7 A* C8 W. R  P. z4 U( e' V
9 f/ o* w* h: c" Z1 n8 [7 B5 y4 C0 I
ASSUME CS:CSEG,DSSEG0 p1 L! t8 G4 W7 i
4 F  X. v0 F- Z
CSEG SEGMENT USE16'code'8 B- h2 A# P, X/ ~- R8 m; ?; g/ J
  
; {" E# C9 `4 v  push ds
  U& C6 d# `: s5 H3 Q1 s5 Q  push es
7 t, p# t( g& }5 j1 A9 ?) p% t  push fs
0 ?# D. E, O; Q$ x! W- f' F/ a9 E  push gs
$ @8 c. S" C: ?) X2 v  Q& [& A  
1 [& u  ~" N* r4 m; e; A2 x  call big_real_mode( I, v  s- E- J7 _5 s
5 l$ Q( s: j( k4 v1 K- q
    / ?: u, a4 J7 H* a( j8 l
  mov edx,OFFSET msg1;) o/ u) q4 Y9 O
  mov ah,09h;   
0 g/ w  ~/ m$ ?  i& \  int 21h;
5 @' n8 ]+ e  O4 I- K6 C  mov edx,OFFSET msg2;7 D9 y7 [7 C6 U9 J9 r7 c6 m+ b
  mov ah,09h;: x# m- A1 c$ k9 y9 K, L# z- X$ B
  int 21h;! N( G% ?" K* }$ R( a" x
   
* w' t, N3 _2 _) U, _' n: I0 S  call PSP   # `  f' C$ n* M% i5 ?! `3 i- U
   
4 J0 ~4 w) s$ G' b  call crlf   6 V5 k" w, e' X: Q$ {
    % g, T" h) G' X* h7 J/ r; m
  mov esi,ebx8 u" R5 d0 a1 Y7 V8 X2 c
  mov eax,fs:[esi]
3 i% s* y4 o$ K$ o- w. _  out 80h,eax( R; Z3 ?% U0 q" T$ u( O
  mov ebx,eax
5 q( w) W) g$ J, d2 H  call _8bits1 }* q8 s9 O4 ^$ R  \$ L1 h4 D. L
   
7 v6 z: {2 @8 J  call real_mode
9 K2 W# q- b% y* m; K* P. J, q    + t- G7 Q9 d; f0 m# R) `4 L
  pop gs
3 N6 T, F: ]$ a) P1 ?: A  pop fs5 T0 g# S5 K+ A. {
  pop es; u& w9 Y0 j- J" _& V% Y
  pop ds
4 R: O% v  l* N- e; g   
6 w' G+ I; \" O0 I* l# @1 x( H  .exit" S: F/ G& y7 |
;------------------------------------------------------------------------------------------------# v  H( r1 p6 j6 q; b! G9 \6 J
big_real_mode proc near
( A7 U: G( f' Y6 j, U. W9 i  in al, 92h
& |7 O8 w; s9 C* Y) s  or al, 002
# F2 A* j  k6 M* _  out 092h, al1 b( s: @( w  W' r/ M5 h# G
  out 0edh, al2 Z3 N3 V7 ?6 D  r: m8 j
  cli
1 x% `$ v/ p( x0 N* Q" \" w  mov eax,DSEG* t5 E; W' {) `: O! x3 ]9 s
  shl eax, 4* P/ ]7 B2 S( M
  xor ebx, ebx3 O. t8 e7 r8 J' I6 Z0 u
  mov ebx, offset GDT_def. ]; M9 ^. {9 u: W3 P, U# z* _/ F
  add eax, ebx( [- f/ o) L1 ]6 _/ w. m
  mov dword ptr GDT_Addr.Base, eax; z* r& t! ]1 K9 Y
  lgdt fword ptr GDT_Addr
/ K$ s0 g2 m; j0 B) `  mov bx, 8
; F2 S7 B. d. b% M& f+ y6 a, N  m1 l' l  mov eax, cr0
! U) p* }2 \. }( L6 H. `  or al, 1. F/ Q, f" x/ p4 G
  mov cr0, eax5 o& H$ N& P1 W3 }
  jmp PMod
6 S, r; G: Y9 j+ n+ N# x  APMod:, Y* ~  f2 P- f* P. m* o
  mov fs, bx
! N. t; y  n/ _! a; d  mov gs, bx
# V8 C* q8 C. s8 B8 _2 R, L+ N  mov eax,cr09 w3 X8 m* y+ O
  and al, 0FEh
4 c. f; _$ R- J* h5 L/ P  mov cr0, eax  
/ d( f( [4 c( l8 I, w7 a; Y8 w  jmp RMod7 k8 H% Z0 n$ J/ Z( [& H( z
RMod:
% P' b8 t; x8 I  X  xor ax, ax
' h0 `; H, f3 M0 k: ^  mov fs, ax
! K' F: U, H  z  n  mov gs, ax- C  P; h. k+ {1 Z4 j; S% u0 N" r. a
    3 e/ _  ^! M% L2 v6 {
  sti
' q( X2 E/ J1 Q- p$ M; \+ E   
- M) t) H; Y" M  @  ret
, R5 g' P) i6 w# R- o3 Cbig_real_mode ENDP- g$ h& ^1 f# `! G8 R
;------------------------------------------------------------------------------------------------3 \; I0 g8 y" S' o7 R+ E
real_mode proc near: U$ `) r# c7 H* K6 k- ?+ @; L
  in al, 92h
$ A& _/ S% f3 }0 N' _: p5 C  and al, 02
) Z3 y4 P' t3 e  out 92h, al   
8 ~0 E0 a+ r& C9 l7 n  ret3 T4 L5 V$ O, k
real_mode ENDP, O4 {8 W* A8 {9 z; P/ G8 ~
;------------------------------------------------------------------------------------------------
1 f- l6 g5 f2 g5 q/ y8 x* e+ qGet_Commandtail PROC near! E/ m# b* e3 L6 E  b! ?
  push es  $ X8 d: s7 r; i. ]
  pusha2 f4 a: `/ ^/ q! c2 L; \
  mov ah,62h  
) e5 r" c) f+ O: ?  int 21h) Y# N% X* O3 O7 `' ~# g
  mov es,bx
) J( m. a; f5 P  popa  . a8 Q0 ~  y# g2 W
  pop es
! P) ^0 }' A# e' K+ e  r  ret
" L' ]6 K0 t% a9 N9 ZGet_Commandtail ENDP
: p0 T) ~, d' N5 H;------------------------------------------------------------------------------------------------' I& f: x0 C" R! b- J
PSP proc near! R0 O. Q7 i% W2 b/ j0 L
  mov ah,62h) |$ {  ^+ L! e' v$ c" K' ]& U
  int 21h
5 e' U5 n( w4 l" p5 G, R  mov es,bx   ; q, a+ i( R+ o+ D6 U0 u7 ^
  xor ebx,ebx; R7 N7 F6 H( ~8 W% F0 i6 R. _
  mov si,82h
1 S" _9 P5 _, c, ^- }  mov al,es:[si]
; g' j0 m/ W. ^4 N! r8 C4 l  call Change
- f# e4 x* G" j  mov cl,4/ y; V" l  R/ d5 s; N8 m0 c
  shl ebx,cl( D( G; o: U& H- j
  add ebx,eax( V1 m  a! ^7 Z" U; c
  mov al,es:[si+1]
# A3 E- ?) l% o9 Y" A  call Change9 O5 W/ t, t' G5 m
  mov cl,4
6 M, J! M" F8 l8 G  shl ebx,cl7 |( a. x; U) `5 C* R, \  T
  add ebx,eax
5 `3 k! C+ r$ n) v1 {0 n) g  mov al,es:[si+2]
0 r: d- i& N8 B! c, R  call Change
3 f8 A7 _, v% o! S3 Y% T  mov cl,4
& w* Z$ G1 R' A$ x- c% d  v  shl ebx,cl  W! x8 D( W. \3 D" W
  add ebx,eax# R; _: `; _, ]8 b
  mov al,es:[si+3]
* _7 w2 }/ ]0 A* ^  call Change& L( X- m1 Z! h+ t% e
  mov cl,40 T: ~# ]0 Z+ h0 i- G8 m9 p- `5 R
  shl ebx,cl
$ P& Y1 _# |% l. _- @: a' H. o  add ebx,eax
; P* [* w+ v- L  mov al,es:[si+4]
9 o1 u, x  d3 V& J. d( `7 g( f  call Change' u, `! F" e( p  r1 @4 N
  mov cl,4( f0 q8 p0 W$ M, G
  shl ebx,cl
& `( e4 `5 }4 P" x. j0 Y( W3 I+ l  add ebx,eax
  W6 P( ~1 }' y5 @( ]3 k  mov al,es:[si+5]9 ^4 a/ @) m/ t  \: H2 R% ^
  call Change
( s% g4 T% L2 D* s4 R) s  mov cl,45 X$ ]1 I5 B* X- p: t0 R
  shl ebx,cl
9 m0 J) m, Q* n; z" W0 p  add ebx,eax# m8 G3 h7 u' M
  mov al,es:[si+6]
2 F2 t$ ^  |4 B/ z) d2 Z, b  call Change
# Z1 G" F) e) u8 C1 E  mov cl,4
, e# c. P" @9 j4 w  shl ebx,cl* }( a2 [  M7 O
  add ebx,eax
* @  _. o8 |: F6 ]. a* O' i  mov al,es:[si+7]- |2 t# ]6 M0 H4 Y0 E. e
  call Change
) D3 x* E  Z. d* ?0 \* A  mov cl,4
) N; }, K% m- {$ T  shl ebx,cl
' c% r% s- q- k! N  E, [  add ebx,eax# D. V5 K/ ?1 r3 V3 Z2 ~/ {
  ret
1 N& Q3 J* z7 e: f& ~( V, ePSP endp; a7 g! g# C& X, ?& O" x& j
;------------------------------------------------------------------------------------------------2 U& N* `, V8 _5 {
Change proc near
4 K+ ]3 _" g8 D' fA:   
  U/ \) ]1 c2 N" i9 O% a3 ]  movzx eax,al
" D, [0 ^* i$ }# b6 F  mov edx,eax
% L$ ]1 o2 O8 Q) N  cmp eax,'0'   ' D! t! |$ C% E$ i
  jb A) d; A% w/ y# O! ?+ f
  cmp eax,'9'   
/ P7 ^4 w7 b, S  ja B7 V+ q% i- Z' V5 C
  sub eax,'0'# |; i4 W( k' h1 `/ W5 F5 h
  jmp short E6 z3 d' K4 Q% U: F- u; D$ S
B:
2 w6 M4 L6 R9 t7 t! m9 P  and eax,0dfh   , K1 _0 }8 {. P2 V& \$ t
  mov edx,eax
) r1 u7 U( `/ W( O9 B  b' z  _  sub eax,37h   
, ?# r/ D: x+ R* p  cmp eax,0ah
5 o* T: Q# ~5 j* o' P$ ~. |9 h  jb A   
# C' N# p* }  @3 {4 {9 W7 m  cmp eax,0fh
3 Z) }* `6 \2 q) G: F& ^  r* v  ja A   , a* `; R$ L* s& y
E:
$ Z+ x1 n7 F; [% T" _% ]  push eax   
. J" i  N: c7 W: G: x1 F  call PRT   
/ s9 ?8 ]( ^0 }' d7 W7 S  pop eax
" `7 H) Q& I) u, q5 ~9 iCExit:
! c$ _( D# a) q" b9 H% S  ret
  F. A& j4 _5 A! \1 h) ]5 G) MChange endp# M5 ~$ j9 h: F( l+ H- d9 P7 l2 {
;------------------------------------------------------------------------------------------------8 l, J2 P5 ~* @" Q" P6 b
PRT proc near
0 G: g  T+ @9 O8 e, f6 b  mov ah,02h
' B# I) J" @* T/ N  int 21h
% N9 N1 n- f' L% l  ret
& L+ _* N: H% c- i% ?PRT endp- V# M* b; \( d% c$ ~1 v, z. g) p
;------------------------------------------------------------------------------------------------
3 a6 v7 n! ~" y8 g: ?crlf proc near  w6 D# k+ O" L* n  ^8 Y# |
  mov ah,02h7 m' V4 @7 @. u' x4 n* z3 P0 @
  mov dl,0dh
- B/ k  @1 o( O% f4 Z  int 21h7 c, V! e- D( {! ]) `
  mov ah,02h
5 L' O6 o8 K8 Y1 u& m. ]: h  r  mov dl,0ah
, j! W% G6 k# h' ~/ T7 t  int 21h
4 g; J5 q/ n, Y$ P$ X, a% Y1 O# p  ret
8 t6 T" \6 x6 L( E3 [) W# Vcrlf endp% W! Q- N& w  f% y; f
;------------------------------------------------------------------------------------------------$ v$ M  U% ]$ J' q
_32bits proc near
: S8 C6 J/ D( W) G9 T8 C! r8 s$ q  pushad
2 u& P* ^7 U6 {  mov cl,4$ j9 h. J/ }6 C; f
  rol ebx,cl
" J8 r; C3 T9 Q7 @7 B; \2 v# J' O  call print_4_bits
# ?$ {2 n3 |5 Z  rol ebx,cl
+ I. r/ N' w4 e# ~9 T  call print_4_bits1 D+ ^" S, C9 B; H
  rol ebx,cl8 f/ M& p5 I8 o! T
  call print_4_bits/ R- b+ {5 N- \2 T0 t
  rol ebx,cl
" {8 G5 o+ c* u5 T; r5 w  n  call print_4_bits
9 [+ v* ?: A1 k  rol ebx,cl% \4 u! s& X1 U  `* {( F
  call print_4_bits
$ J2 C8 S& i  _* D2 s& B  S  rol ebx,cl
: M) O- e- P7 l. U- E9 u, H  call print_4_bits
" s7 K4 x+ S/ u& s6 B+ s5 F  rol ebx,cl
2 [* J4 H1 Q8 [/ A9 t  call print_4_bits/ _% W( T/ S! I$ d& x: Z1 Q3 t
  rol ebx,cl( v# M, |# ?& \" M( z8 z# [) A
  call print_4_bits1 A; b1 j8 C5 u0 m: k, c& ]
  rol ebx,cl
1 D3 O, S+ J9 u( O  _: z# Q0 a  popad
1 m: I1 m9 y$ ^! w5 j  ret# u# q5 j" b  V/ q
_32bits endp
- g( b6 d. i% [6 A+ b- U;------------------------------------------------------------------------------------------------
4 i# K/ i" L2 y_16bits proc near
. Z% ^2 E- d$ _8 z) x  pusha   " `) ?  r8 _- q1 j& `
  rol bx,cl
( T# O& l' I, ]+ @( B  y% E: A  call print_4_bits
/ N( ]$ y6 z4 r7 Z# ]  rol bx,cl, H# C  o8 b/ g: Z' U' W
  call print_4_bits
* F) ]5 u& y- J7 ^  U8 m  rol bx,cl
4 b' t2 ~3 a* _/ y  call print_4_bits
/ N4 |7 @" [, D; D: `9 K4 ?9 s  rol bx,cl
7 l  G, ?. F1 L( f" Z4 X0 v  call print_4_bits$ y6 p# h: ]% o2 k, ]
  popa
) U# S/ t- }4 h! R9 e  ret4 w, N& e- [; g
_16bits endp& ~0 c/ Z0 i4 \4 @7 _; Y3 H
;------------------------------------------------------------------------------------------------
: y& X& c% Z5 U1 I5 ~- ]1 a' P, k8 \_8bits proc near9 B1 W; V# [. l  [: \
  pusha   
5 C4 Y4 U: N4 X: b% \$ l+ F% _  rol bx,cl
1 Z- q. J% x9 `! D) M0 W  call print_4_bits" K( R) l( f; [6 ~
  rol bx,cl/ B5 J7 Z7 s8 @4 W: \
  call print_4_bits& u; C7 @7 _5 j' W6 l0 A4 Q& J
  popa
+ c3 i) i7 |3 v- ]  ret
4 r: [1 f0 S+ o7 G* Z% @7 j_8bits endp* ~  y1 T0 a. q" a3 Y2 P+ l
;------------------------------------------------------------------------------------------------3 q5 U% q$ I$ H* M: b7 {1 C, x
print_4_bits proc near
; K3 @. Q- P! l& W* \  mov dx,bx' W" }$ a+ V% c+ q. Z, g# C
  and dl,0fh
. P+ E8 n+ L8 T# N8 A  add dl,30h
2 Q! ~. z% a5 k3 ?4 @0 `7 O" G  cmp dl,3ah/ A" a/ N( ]6 l' H: z, w+ n. P
  jb print: ^/ _7 D9 T' O
  add dl,7+ h+ ~: k* w9 _3 @  }! r
print:   
% D7 B8 m0 C. a2 w# H2 [1 F  mov ah,25 [0 m  z5 N1 i5 ?& F
  int 21h
. x2 h/ C6 V. C+ Q+ n" J4 K) c  ret! x% [, b% m. B# R6 s1 v& r; v( b
print_4_bits endp   
# o0 Y6 U% T9 U' m  o9 V; `;------------------------------------------------------------------------------------------------- g/ r3 e2 c" l9 b5 o* {- S& z- F
CSEG ends. k/ l# k% R3 |* X1 I& y
END
您需要登录后才可以回帖 登录 | 加入计匠网

本版积分规则

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

GMT+8, 2026-9-21 21:55 , Processed in 0.316094 second(s), 16 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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