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

顯示string會出現亂碼

[复制链接]
发表于 2010-10-19 16:41:51 | 显示全部楼层 |阅读模式
各位前輩好,以下的程式為在 big_real_mode 讀取記憶體的值- o( d* W( K9 ]: S1 R
* h5 y: _" V0 q" o4 N) ]9 w
例如: C:\memory.exe(程式檔名) 01000100(Address)5 T  ~' L. r/ F; t1 `& w) D" J; y& x5 A
! q. A9 z" i, }5 }- P
則會顯示01000100位置的值# i9 e6 K  o* O
. F7 E; Q9 F& r. Y1 W
但是我另外還有要顯示出字串,但是顯示出來都是亂碼3 l* _0 B& b6 H) |
2 J, k9 D+ Y; g  M  r
麻煩前輩給我一些指導,謝謝  ( H2 p! _8 J# w1 P$ V
- x% ~2 {, Z! K# @3 A' d, T  k8 y

; n/ I0 S* E& t.model small9 w6 I- X. S: z  ]& ~5 n
.386p4 O- E+ Q# b- l, C2 ]& Z% D5 M! x
;------------------------------------------------------------------------------------------------; y4 J: R) D1 _; C* F  U
DSEG SEGMENT USE16'data'  . A' I6 V5 z8 P3 ^$ K
, `6 \2 g9 N! n, Z( \" h
DESC STRUC6 [. b6 S$ p; s/ ]  g
  LimitL DW 0  
! q$ F8 A4 {2 P  BaseL DW 0  2 t. d* L; W5 b; [
  BaseM DB 0  ! t' M+ ^: \" f/ q. m  u
  Attributes DB 0  0 K1 A- z- ?' U6 z
  LimitH DB 0  
" G6 Y/ \! z, t  BaseH DB 0  : g. M- R" f3 j9 N" B
DESC ENDS
& M5 t7 E4 I# J! v# K- X
8 T$ s* N; b. P# \9 VPDesc STRUC
/ u0 e1 v/ e1 P0 r3 i  Limit DW 0  
% C0 q0 |+ z/ [, u3 w4 o* ~. l  Base DD 0  
) [9 P  `" n5 w: f6 l1 Z2 SPDesc ENDS% v- u- ^4 |% O0 s  a( v$ Y- }

- d( y6 @1 L% j! cGDT_def Label Fword7 [0 l: V! k+ Y7 y7 J3 W
Null_Desc DESC < 0h, 0h, 00h, 00h, 000h, 0>% u: C5 w+ S! q$ ?% x
Data_Desc DESC < 0FFFFh, 0h, 00h, 92h, 0CFh, 0>
7 G3 u0 E4 n9 u" D) ]; Z3 F9 [GDT_Addr PDesc <$-GDT_def-1, >1 X+ T0 M- L5 _5 R2 |* t$ }" E

4 n. M1 V. d+ V% Kmsg1 BYTE 'The Input Address is'3 {5 X& a$ Z, G# x, `$ M
msg2 BYTE 'The Data is:','$'
0 M% ~) F- ]$ V6 s7 ~" I' s/ c' _' q* ~+ s3 T2 ^
DSEG ENDS, e  a) G0 t+ e2 z! O7 B

, j  K% ~; {) m/ _
8 R2 _/ |) c! p; t- }6 B2 N4 |;------------------------------------------------------------------------------------------------  : ~9 I" J; E5 G

3 T' T# G: R' V7 BASSUME CS:CSEG,DSSEG. m5 d! _- w$ M# b
( o: h0 T& U6 g6 B2 n: L
CSEG SEGMENT USE16'code'
2 g0 F/ {, @6 L4 J9 P( s  
; N; A; h- a3 ]  push ds) J8 x5 l/ v% T8 h3 p* R
  push es
9 J% n0 F9 v, p  R. e+ v1 D  push fs
  |* `9 }5 A4 g7 L% p  push gs
  ?- b. b" v0 E6 E; y  
5 \7 u  D% Q; ?4 w- g' a8 S  call big_real_mode
6 o& A6 X2 q+ |1 G( z" d( b& K( @- }) x# P7 [
    6 {" y- D: z0 O7 a
  mov edx,OFFSET msg1;+ P- @- d& G. B7 P1 B) o
  mov ah,09h;   
! b# y% d6 g% X. t2 z7 H: x0 T2 [  int 21h;
8 @4 w6 h* m* p* f  mov edx,OFFSET msg2;6 U$ L+ N8 j# m4 t$ D' ]9 Z
  mov ah,09h;
( y" `3 x% f2 ]. o+ q& u& O& S/ \- d  int 21h;
* ~/ o% J' J2 F, e8 ^* G   
& ~0 z$ f% H1 |. t( A% K. `  call PSP   9 p6 i( [7 Q4 Z9 f8 y5 A: n! G
   
5 ^* C" c, I' h4 Y: a, N% m7 f  call crlf   & N0 Q1 E0 T- r) \9 h# r1 Z1 a
   
% Z& ~& G' w" y  mov esi,ebx$ K; v9 v  _0 m" N# Q
  mov eax,fs:[esi]
* ~- d, I+ r  K* I# X$ S2 t  out 80h,eax
0 B# }4 u+ Q9 p: w4 p  mov ebx,eax3 R7 [7 M  g, v" S4 C
  call _8bits
4 Y0 @% `+ i# ]+ ]9 [    / N' V: O; A! b# D' D; `4 M- g
  call real_mode
! u7 K+ I  i* f" C$ r; {* h    1 {) F5 f! X# V% f. V! x' d
  pop gs
8 [$ r# V( O- j0 z- e3 [5 A7 [  pop fs! F  y  i: t' m
  pop es* S) v- ]+ I5 i
  pop ds
/ [5 A; T! |$ e9 t   
. E) }! J! u+ l) i( x0 U8 s  .exit. {6 n2 l/ ?- {5 L* ~( i, ^
;------------------------------------------------------------------------------------------------* Z5 R$ H; ~' y+ C# v0 K1 l9 X  ?3 s
big_real_mode proc near
; o0 c, a7 v, i5 u9 Y, ?+ ]5 H  in al, 92h9 }) s0 X2 S, j9 ^3 D6 D, Y  p6 X
  or al, 002: f4 w6 W* B; A9 s' V# C
  out 092h, al6 I7 ~: k/ R9 ~3 J( `" R  H% ^
  out 0edh, al
) N- e& ~  \3 I$ L( M  cli1 l, _2 x1 a9 q% s/ j2 ~
  mov eax,DSEG! k4 w, p9 j/ z; r, u
  shl eax, 4
; T$ n' {7 S, Y5 ?0 X  xor ebx, ebx
; Y" L; |$ h/ b1 C( R  mov ebx, offset GDT_def. s# r/ ]6 \0 K1 W0 {9 o
  add eax, ebx
( g; y6 [& w; x: B7 _( ]: X. L* M( _  mov dword ptr GDT_Addr.Base, eax* c  T% ~1 G& R0 ?! `5 b( c
  lgdt fword ptr GDT_Addr
7 F, n9 a  ]7 T7 c6 D- y  mov bx, 87 J8 n4 `* b- X* `* F% `
  mov eax, cr0
( l) b) w  u+ u- E4 ~; ^" j  or al, 15 b0 b4 n/ ]2 K. X4 `/ N
  mov cr0, eax" |& E4 d. ~5 _  V# T5 I- Y
  jmp PMod
5 X3 m& D2 q$ T/ |0 x% `PMod:
* j: V3 A0 u, d7 C0 I  mov fs, bx
! K# F% E! i  h  mov gs, bx$ ^4 @5 U7 d5 @$ g9 g7 v
  mov eax,cr06 V7 e5 v, ?1 O* Y- G5 [
  and al, 0FEh
6 v% e) {6 q# {* ?+ U3 k  mov cr0, eax  
& f, r' K# n% N' e% r1 s  jmp RMod; z- \) O4 ^/ f+ d4 E6 c5 D, R
RMod:
7 g% m( S8 K9 [2 J+ k6 L) U- p  xor ax, ax
& l4 b/ \+ e- V. y* A8 D  mov fs, ax
6 n/ L8 `, p5 p0 Z* z* \; k* i  mov gs, ax
5 m% A7 X+ s( p. ?% K8 D$ g    / R* U% ?1 ~& t7 H( r, ]/ L
  sti
( l2 {+ Z' y& l9 a3 C   
+ p, T! J( ?2 Y; [  V! Y3 I+ g5 u  ret) s7 s/ `1 B) L7 ]. o4 ~
big_real_mode ENDP  B5 ^& }8 i5 i/ ~
;------------------------------------------------------------------------------------------------3 s+ _" D1 T; o: W
real_mode proc near
0 t% l9 C) c, d0 A- G  ~  in al, 92h: C7 t0 T8 q4 I; W
  and al, 02
( f; t( |. f. u5 u! F$ y/ _  out 92h, al   
; V( O& L  J8 \1 F0 N1 R  ret8 M. A1 O( q' T: X4 e
real_mode ENDP
; q8 M1 ~& Y4 Z& S;------------------------------------------------------------------------------------------------
! |9 k8 u4 R# v9 W& s$ kGet_Commandtail PROC near7 X5 U: X) n9 d
  push es  
- M) V; r1 i) T, I$ Y: f: b  pusha
' \8 H) \/ B7 x$ Z; ~$ [6 \& u+ t  mov ah,62h  $ x% \" R1 _" q* g. ?
  int 21h4 y/ O; V! T- D1 Y" G
  mov es,bx
8 \# ^+ _/ l1 Y4 y7 O: |5 A" ?  popa  
3 `1 }& f; p2 _, F/ N" t4 K2 M- Q  pop es( u/ L: N# o' O7 a& P8 s& h  |
  ret6 u( ~9 L* q3 x3 O& _
Get_Commandtail ENDP; k3 _4 w& @/ M2 V! \- x
;------------------------------------------------------------------------------------------------& D6 k- u, \2 t
PSP proc near
% S5 g% J- T. U# ~% |  mov ah,62h
; _: y9 p) y) J0 K- f  int 21h0 b& y! B' q+ L" k" d5 z
  mov es,bx   
7 p' q. ^: ]% G9 ^1 ~# r/ }- x( G  xor ebx,ebx
* O& H0 L" G3 U6 [  mov si,82h
& X  s' Y" C7 l+ D# A3 L  mov al,es:[si]/ C# L2 q+ k) B6 v' j
  call Change
! |. Z7 ~4 V( w( x7 v  mov cl,4
5 ?! i' D& z3 M! K  shl ebx,cl
1 W( N3 }. n5 {: r- b4 Q& {, ?, `4 ^  add ebx,eax' q, _1 C; [& X# Z; a2 K( `
  mov al,es:[si+1]2 [7 S! C1 d: }, C
  call Change9 O, B) d) A( H# [
  mov cl,4- f+ W- ]* q6 z$ x% u6 L
  shl ebx,cl
5 o% l' _4 W. V  add ebx,eax
8 u3 J4 ^( W' P  H! E2 Q  mov al,es:[si+2]* m4 Q, _4 t/ k7 Z2 w; w  u
  call Change
$ j6 X  O! D* E; t  mov cl,4
8 k1 M$ P8 D8 S/ H) D3 J  shl ebx,cl
4 W0 b. e: \; g, h) F% v/ l0 @  add ebx,eax
) \" o/ T$ ^; o" W* D0 s# Z  mov al,es:[si+3]% U2 B7 A8 K2 R: y- q
  call Change1 e  `7 p( o. B0 P( o
  mov cl,46 m5 p/ b7 b6 i" q# [( ^8 X
  shl ebx,cl- D2 o. B% ^- D) W* Q( _" f4 j
  add ebx,eax# l! W/ n5 S9 ?& L
  mov al,es:[si+4]/ P6 J% `3 w4 K' z
  call Change" n5 D/ K2 S0 W9 ^6 R
  mov cl,4# V; H# q" Q  J( `, a: Q
  shl ebx,cl) r* y# n) `, f* c/ e: H" _
  add ebx,eax% J  A4 S  m+ _
  mov al,es:[si+5]
% t3 `, q% a4 `* N$ q  call Change
0 b8 \: `# g# g# q1 d9 j: e  mov cl,4
) L) g7 t. Q; l7 [! b  shl ebx,cl
3 z) W7 o$ f( a, {  add ebx,eax, T6 r# Q1 a5 X4 u0 p
  mov al,es:[si+6]
8 V, U. I& v4 o4 z2 a  g/ e  call Change. i- d. _; B' e" \! D
  mov cl,4
/ g; U3 L# ]) L% l  shl ebx,cl7 |& r% B3 f/ O+ O  X9 n
  add ebx,eax
9 {; m, e% u$ F# e  d1 z  mov al,es:[si+7]. k9 D9 c' a, D
  call Change
2 C, L0 F. H/ O# f4 H  mov cl,48 N5 X/ F6 C1 u3 M6 w
  shl ebx,cl
7 x7 S' e5 t0 i9 y" d! a  add ebx,eax1 m$ M8 }6 j' F
  ret0 q3 m7 W* x5 d
PSP endp
) ~7 T. C% [' \9 I;------------------------------------------------------------------------------------------------7 R  p# ~& Y1 g; I4 I( r
Change proc near$ p8 h% s7 c# L/ S
A:   6 ~  ^+ \; X! r" j7 Q' {
  movzx eax,al4 }; @/ v6 H+ M$ H. a; u
  mov edx,eax
& }8 C2 Z7 P- x( ?+ ?: u  cmp eax,'0'   2 t* a5 M& A( l" R4 S8 s; X1 {+ N
  jb A
/ F/ |( C, i$ W7 G  cmp eax,'9'   
- x& \0 d" l+ z6 b6 s  ja B
$ f* ]1 b. \% k8 J- S. ?  sub eax,'0') R. }' d% b6 l! H
  jmp short E
. w0 U- D! {* v+ w" u- Q: V6 V9 dB:8 r, b; n3 P  g0 b1 E% W
  and eax,0dfh   7 [* E, ?& G  u! P- r
  mov edx,eax- M  L( P5 l" [: r: ]- i
  sub eax,37h   
! Z3 R. P4 I9 h& W; U; F8 X  cmp eax,0ah+ U" H* W4 I7 Y+ t
  jb A   
7 K. H1 e6 a5 W4 j0 S$ Y) n' t  cmp eax,0fh7 s; B5 R' M  T* a  [0 m  ?) V
  ja A   9 y, ~9 K' m/ a' `# q
E:8 |2 c2 D* |; ?( t
  push eax   5 ?/ I0 X7 G) |% v' e
  call PRT   ' Q+ U$ Q; C; f
  pop eax
' X+ [4 z1 ]4 c- ]  YCExit:
) ~* _0 v& T* t6 J( E1 B0 ]  ret& V, x3 @. k" }! [9 q
Change endp
3 g" H$ {6 V& Y; v) \7 K0 \( _;------------------------------------------------------------------------------------------------/ T9 B4 ^; [1 ]; p- h
PRT proc near4 k3 S, k2 }/ J, T
  mov ah,02h
  z- _6 i* o/ ~' \" U. C  int 21h% ~0 Y$ k( U* j; d# @
  ret
; A- G$ m- i6 Y. `% t: EPRT endp* R. Y' L' y1 m" f. f6 ]
;------------------------------------------------------------------------------------------------
  v$ I/ _6 p' W( n% ocrlf proc near0 d' g! ]9 p$ f1 l, s
  mov ah,02h
! O' J7 g1 P+ O6 G6 m" s  mov dl,0dh+ z5 S6 |* y0 J/ @3 ]$ F+ d
  int 21h! H% v6 k6 \" l1 j* O; t/ P" u  `
  mov ah,02h
% \0 K9 P( S" f6 `  mov dl,0ah
, S- o  m0 f6 j! m  int 21h
0 n3 Y3 B: @  N3 f4 L& i1 I  ret
4 A$ y+ e2 h. z+ `crlf endp
9 a6 l, k  Y  Y8 Z4 G;------------------------------------------------------------------------------------------------0 Y. A' N; ?1 r. b. m3 b, l
_32bits proc near
/ ~$ d+ _$ y, I8 u8 w  pushad
+ [# B. J; K1 {  mov cl,4- A6 S6 w5 d7 X- l9 g
  rol ebx,cl
) H# {2 C; Q( L0 E7 c  call print_4_bits; Q2 p  k/ e2 J, b' u
  rol ebx,cl6 ?7 F$ Z+ s" z; f9 ?, m, b
  call print_4_bits( F3 h) w) v$ F( O  r7 R
  rol ebx,cl
6 u. Q) A- G, e  call print_4_bits
0 W$ P3 K0 f& I5 J* P! q  rol ebx,cl
& X; F7 Y; ~( @3 \% O! l/ {  call print_4_bits# k. ^  q( Q. @2 e# Z# t
  rol ebx,cl
( s  m. q! Q) b$ @/ R7 r  J  }  call print_4_bits
' Q5 S$ O; C0 w* y# X# x+ w  rol ebx,cl
* d3 t1 f. P' I) Y* o  call print_4_bits
' w& H, L) N# w+ [$ N; K  rol ebx,cl; N1 _: T: h  `: N# I- d3 z
  call print_4_bits
; F; F7 D! p$ D$ I5 @  rol ebx,cl
6 p) w1 d7 E! ~" X+ T  call print_4_bits
3 S. }; u# a" K: l& P, X3 Q/ ~  rol ebx,cl
0 |# c$ q  |" H. g  popad
( y* F' D& e2 X* ^9 o) [5 Z  f  ret
. z! N0 M2 Z2 C" Q1 }_32bits endp
5 j. K6 h7 E) E" d;------------------------------------------------------------------------------------------------' p- {3 E8 v# h
_16bits proc near
7 D2 [6 C8 m8 V  pusha   5 M7 R7 V. @  @. E6 o0 |0 h
  rol bx,cl
- h  X# W) p: G) y; V" S/ D& K  call print_4_bits- K! y' m* m7 K& f4 L
  rol bx,cl3 s$ Q8 T$ B. q( }0 W# e* b
  call print_4_bits$ E6 N# u3 H+ U3 g- c8 ~
  rol bx,cl! z9 X: X% V$ x* ~- I
  call print_4_bits  V$ }0 k, ~7 o& u4 D7 z( z( U) f
  rol bx,cl
2 j4 _2 o2 {. N5 O  call print_4_bits
9 Y. O" j  P% [) i  popa6 y  I' e1 b" [3 o$ _7 o5 t
  ret
0 M/ E; f- b. M1 M_16bits endp
2 P: Q" |$ C1 @0 u5 X;------------------------------------------------------------------------------------------------! d8 S# }  ]3 Z& K, W: `1 f
_8bits proc near& a# z2 v& f2 ?% E1 h; R2 T5 S+ U1 z3 l+ r
  pusha   
& H2 Q% O. f+ `2 o1 h  rol bx,cl3 l6 ?( Y6 Q& |5 E3 o
  call print_4_bits( Q" _) O0 Z& t6 ?" u: m/ z
  rol bx,cl
" b) U0 v' N* E  call print_4_bits* Y) A/ a  N$ K* \
  popa
6 G* D( t7 P5 T0 x! w  ret& P; f) d/ Y& K# x6 N
_8bits endp
" v8 G( u8 j$ s;------------------------------------------------------------------------------------------------
! C: y. e+ \$ h1 }% ]1 ]# ?. ]) L# lprint_4_bits proc near
$ h. ^( K# \" W. K  \$ N/ a  mov dx,bx, i! i. [% t6 G% u
  and dl,0fh2 V$ [0 z% q! \& h) T
  add dl,30h& z: V$ n" w: e3 t( f6 A9 ~, {
  cmp dl,3ah$ ?  X$ G; w5 S+ v4 z  u
  jb print4 G# z) `* e9 q  e% z
  add dl,7, i' M* u: [1 V& i! F& J, B! D
print:   ! w& a( V4 [3 Y9 `" g- w
  mov ah,2
1 J" Q/ y/ R( x: l  int 21h& O) B( K5 f+ w. v. m$ w9 d6 j
  ret
5 F$ d8 C2 g! p& R5 y: Pprint_4_bits endp   
( ]- t+ V* p  s* k;------------------------------------------------------------------------------------------------
% {! D. Q6 X8 S8 w6 ?CSEG ends
. S# r4 F: [' y  Q1 n3 tEND
您需要登录后才可以回帖 登录 | 加入计匠网

本版积分规则

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

GMT+8, 2026-4-4 18:06 , Processed in 0.079399 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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