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

顯示string會出現亂碼

[复制链接]
发表于 2010-10-19 16:41:51 | 显示全部楼层 |阅读模式
各位前輩好,以下的程式為在 big_real_mode 讀取記憶體的值
6 K( i, M0 ]4 M9 d7 M2 `9 r! c3 V3 ^/ U3 S, X5 @' [$ d$ T
例如: C:\memory.exe(程式檔名) 01000100(Address)
2 a- A- k& E% A8 a; u& x2 ~( O
( W- Y( b+ n6 k! O7 w則會顯示01000100位置的值8 T8 ]! f; H6 `! Q, ^. K9 I
+ u, A; U: X  ?' G
但是我另外還有要顯示出字串,但是顯示出來都是亂碼1 b7 }6 X2 T$ Z/ i( n2 S
/ ^9 l% J2 }( |  k
麻煩前輩給我一些指導,謝謝  # G  T, b/ j* f" q4 [

( a" x2 s* [8 x% s
4 }; a7 l- O1 j) T* H+ T" J.model small
9 E& Y9 X% m- b' L- L7 h/ ~.386p' A# l0 {- u4 `. p! _  ]/ X  B% R
;------------------------------------------------------------------------------------------------; H( V- e* |! |) i# S7 ?1 k
DSEG SEGMENT USE16'data'  " n9 A/ I  K8 f# _/ O% f7 `
. Y" h, W9 P% V
DESC STRUC+ N' D: w8 w1 P/ ]- o3 N. Y$ H# w
  LimitL DW 0  3 E: E& o8 Y- S" p: B
  BaseL DW 0  
+ W- x; Y2 q6 f6 ]& m  BaseM DB 0  
" ]7 A: g: w" N* n  s( T/ ]( G$ f  Attributes DB 0  1 a, N! `2 n0 c- h3 _8 O/ j& u
  LimitH DB 0  # q; E0 R- [4 N
  BaseH DB 0  
" }% D; G; m2 q+ C- cDESC ENDS
) \5 g- ]# P) Z) p! q) ~/ I5 a% M$ t( G& T
PDesc STRUC' O7 K+ Y9 f& D3 b
  Limit DW 0  $ w/ e" `1 {; P7 U: M
  Base DD 0  
7 v; n: O0 e4 h' _# L: ?PDesc ENDS; |/ [8 O/ R, e2 Y  L' Z

' J) ~: h" N8 eGDT_def Label Fword
" }$ a: o6 h; y/ uNull_Desc DESC < 0h, 0h, 00h, 00h, 000h, 0>
% g; \5 o- E. {1 ^' @% I6 XData_Desc DESC < 0FFFFh, 0h, 00h, 92h, 0CFh, 0>
, D6 D# |( f7 }+ K+ ^GDT_Addr PDesc <$-GDT_def-1, >3 `; \3 ]4 }/ R& T* o5 e

; B* ^4 w4 @: ~msg1 BYTE 'The Input Address is'
' d$ L2 }1 ^, n. }: y# xmsg2 BYTE 'The Data is:','$'8 e2 K: t+ _$ |( O* O+ E5 t- d

& |7 a( C4 x' lDSEG ENDS
) u  G+ V; ]$ C; M! T5 W# S8 y0 @9 S
' h; D6 I! }, d$ \. ^; |& |- C
  A$ |$ l) B! ~& w;------------------------------------------------------------------------------------------------  % [5 U) V$ |* Z& e3 g0 |) @! R
* R1 ]& F+ `. ^% e8 z
ASSUME CS:CSEG,DSSEG
2 k! _7 Z6 \# T7 v1 m" G2 c! ]
/ F+ F" T! _& H+ Z, @CSEG SEGMENT USE16'code'" j5 j3 F* p# d, w( m
  9 K: _# e. C7 }/ u  t$ T. o
  push ds
* N* r* ^* r% U5 `% T  push es
$ ], x  i$ f/ q* V) Y  push fs, j# }/ F8 d3 ^0 c/ L
  push gs
3 T& Z. o4 b: P  , s' s* m+ Z0 l2 }
  call big_real_mode
4 _, [" U( J0 C0 x4 |
% D1 V, i% i  I! \% q, Q   
6 ~6 m% S6 t1 D  mov edx,OFFSET msg1;
. h! b& n  G: L/ Z1 E' Q) g% q  mov ah,09h;   
4 V2 g$ z/ G- \# g% ?) `: a* I  int 21h;# T0 `0 C2 A' s2 n9 S+ |
  mov edx,OFFSET msg2;
) f3 M0 |" u$ V+ ?. f0 k8 O) m( ]  mov ah,09h;
: e/ D4 F7 ?+ l' X9 |1 }  int 21h;
- J; V2 ~, C" t; o, y8 X$ b    4 T! H1 F4 V/ w. f0 C4 K. V3 S
  call PSP   
' k2 W, Y7 t9 }2 w: t    $ X8 m- A; B2 r7 W0 v" j; M
  call crlf   
. q" Q, ]4 R* w. S   
4 M8 z3 F1 b! e! Y  mov esi,ebx
5 ]3 Q: T) F" o( y# t: L7 x  mov eax,fs:[esi]
5 r% B9 c0 ~% K# N6 z3 ^5 |  out 80h,eax% a, G$ Z) D, d( g2 X# [
  mov ebx,eax6 }7 [/ d. g/ A9 H- a% D
  call _8bits) L# e9 K( W& L
   
7 [6 O/ i* x6 B1 l8 H: D  call real_mode7 m% ^9 m( t" Y! e, O3 S! ^
    + c, [+ U+ Y/ R/ [
  pop gs
6 {: g7 a; w; T+ v9 C: j; w" k4 X9 F  pop fs
4 T- j/ G' H* [2 L  pop es
! j" n7 W1 I: Q; K" l& s  pop ds8 i+ K4 s4 [0 K. J+ ]5 c
    8 N5 o* O& Q% E! O
  .exit
6 A( c# H; T9 P& @' Q;------------------------------------------------------------------------------------------------
! \$ B( Z3 c+ }; \+ S# ?, ~) mbig_real_mode proc near
4 E1 G" G9 ~- @% _: @* q% O! }  in al, 92h
) \4 I6 I# }; k+ p% g' |  or al, 002! j4 Y- {3 d! D7 R  X; V
  out 092h, al
# f5 l4 C& d; W2 X$ U  T  out 0edh, al# y7 r8 ]3 P8 _: ]- A
  cli" O3 o( \" r( p  Y9 ?/ n9 t8 G+ C
  mov eax,DSEG" i0 n) V! b- ^
  shl eax, 4
" G% n  F7 W! \  h  xor ebx, ebx
3 W; h. {  U% B  t# q( o7 y( k  mov ebx, offset GDT_def0 E3 h% X. [( u
  add eax, ebx* g  x: e7 J* k
  mov dword ptr GDT_Addr.Base, eax$ y2 Y; U& _+ X( n! n
  lgdt fword ptr GDT_Addr5 f/ F$ o% w9 T% F4 q
  mov bx, 8* y. B8 _# O* j7 i! P& @( z
  mov eax, cr0
" Z. e, N; @/ v3 v1 j$ i  or al, 14 e/ Z6 \+ [* ]3 h5 m( e, ^6 _8 {) ?
  mov cr0, eax
9 J' ~+ G% ?: [  jmp PMod
( V4 d" `( Q7 ]PMod:
8 E) |. [: i  o  mov fs, bx# ~; X4 p- V+ ?, _8 U5 o
  mov gs, bx
, `$ g/ m& m) T3 H0 X4 v& \5 A$ b" N  mov eax,cr0# O7 U$ @4 n8 j9 \
  and al, 0FEh1 b0 G7 W+ a- c# }, j  |
  mov cr0, eax  " V% R( _8 w' ]8 ~+ S4 v4 _, B
  jmp RMod
) S* o7 y, X' v# tRMod:: N  e" l7 O& Q7 y4 Y
  xor ax, ax: r7 ~" S4 g( W0 S3 [& F- n
  mov fs, ax- u1 o, v+ h: E' S- @+ T
  mov gs, ax
8 I7 s# x/ K. v( T6 X  F* g    ( M, O+ z7 n$ U- U' L" x2 X0 H
  sti
* W. V+ N) a3 A2 j9 y% e: }   
  k1 ?. C- ?* w4 Z: Z  ret$ \" a. v  q: F# u( }) o7 o
big_real_mode ENDP
; N5 C/ X+ q4 y0 r2 E0 o- [;------------------------------------------------------------------------------------------------
5 e0 ^% E; V, G5 J( @real_mode proc near* _7 k8 \- q5 _( Q7 f
  in al, 92h3 O; B: g2 ^& ]7 `) I
  and al, 023 q% i) [) D7 R0 M* |7 b  _/ S" R  H
  out 92h, al   % ~- z' f, T5 f# Q, J
  ret& k5 j0 D5 I- Z
real_mode ENDP, J& z; q0 _5 V) \+ T. |
;------------------------------------------------------------------------------------------------4 M; Y7 i, E, m8 E3 x
Get_Commandtail PROC near
$ {' c( Y' n9 o% I  push es  
1 `8 j& `; i3 z0 h  w  pusha, z( x# h" a2 w6 x9 `9 Q
  mov ah,62h  
; R! o9 A3 j2 B' W  int 21h# x# \# {- m7 E% k0 r; d$ K
  mov es,bx% i3 b& G' ^, N5 _
  popa  ( |" D" L) }0 M: {1 g
  pop es
: R1 `& U  S$ h. @* t5 Y- x& q  ret7 |2 e' v) Q( h& ~+ L( e
Get_Commandtail ENDP
+ D  G4 \" x+ Q( i- ~;------------------------------------------------------------------------------------------------
" Y0 u& T0 j# k6 hPSP proc near
0 W0 {5 }4 R/ x# x  mov ah,62h$ {- r0 q, U, _
  int 21h
# |& v; |. Q, Q* l# q% t  mov es,bx   
$ f" J% F9 N7 E6 B% O. r" j3 E  xor ebx,ebx
' A; C( U+ c& G5 k3 b& V& T' v; h  mov si,82h/ W. f$ \2 O! Z' g9 U4 Z  u5 B
  mov al,es:[si]
6 m1 b2 X! }( ?* R  call Change' a0 a3 R5 H' L* o+ Z" s  _: F
  mov cl,4
+ O$ B( {' O0 q, f/ [& h" Z  shl ebx,cl( }6 n: A. ^' l' I$ y; N
  add ebx,eax# r& t8 p; X. S4 `* e$ J
  mov al,es:[si+1]
; U2 T" h8 Z" Y: {' Q5 a  c0 s  call Change
$ t6 X' w9 z- V4 I4 H& G4 X  mov cl,46 T/ F- ^9 ?7 O  o' G/ |
  shl ebx,cl" U: o/ [3 u, y' q
  add ebx,eax
- L9 i# p6 O: s3 B  mov al,es:[si+2]
6 R, h, b# L' p1 u1 @7 L; O3 ]  call Change6 S% r/ X" o' t6 `* c, l0 x
  mov cl,4& K$ R9 U, w0 ~* W3 u% K  L+ g" k
  shl ebx,cl
; i+ M  p, p: A5 ^$ F  add ebx,eax- w: V4 R! S2 _
  mov al,es:[si+3]
+ b% N; v( t! `2 {& g  call Change
/ f  o: `# `' l4 v- {$ t& w  mov cl,4, t8 M% X. A: y
  shl ebx,cl- \5 ]9 N: W; b
  add ebx,eax" h/ s- I9 s2 z1 B" X2 {( V9 ]
  mov al,es:[si+4]
5 G4 v* u* ?8 L8 E" V3 P  call Change( b) Q6 {" z; c$ F) _
  mov cl,49 b5 A4 G' Q+ V
  shl ebx,cl
4 H2 M1 M( q- g7 o8 a3 j  add ebx,eax
, T$ Z+ y( A9 Y3 h- f1 S; \, Q/ {" R  mov al,es:[si+5]
3 l8 X% N" x( H( J% ~* \  call Change
/ x: \5 o$ ?- p+ F$ o# L  mov cl,4
( u3 A( @/ {: ?# |1 v2 u  shl ebx,cl2 {; O( i6 N. y& w$ \
  add ebx,eax
, a7 n, q/ Y& v( x1 V& l  I6 j0 D  mov al,es:[si+6]
- T( V5 ~( }( c  O8 f! C8 B  call Change" j6 O, C1 _) ^  e6 M
  mov cl,4
9 x! [- ]3 K- `8 s3 g6 V; i  shl ebx,cl
) a( o. i" c+ M( a7 i  add ebx,eax
7 B' {8 a9 {0 m6 E+ _/ H( q  mov al,es:[si+7]
0 A. a7 |* V+ P8 ^- U0 S  call Change
- Z& ~/ y. b7 C- i3 a$ O+ w. j2 U  mov cl,4
2 j: N' a8 t' S$ }% l- \  shl ebx,cl
+ a" x7 A' p3 M" D  add ebx,eax" O! z/ M$ b( m- e; k
  ret
, G1 q+ }  U9 H9 H3 LPSP endp3 v6 D1 b0 u( |6 ~) c- D4 M
;------------------------------------------------------------------------------------------------6 E  x1 g. m% C" P) ^! a
Change proc near
/ n+ b2 q8 L9 u5 ]A:   9 y* i) T' ~8 z' ^% F, C. ~4 q
  movzx eax,al
/ B9 A+ K% h7 `! e/ v) s, X  mov edx,eax( M  p! j6 {4 y3 K0 z9 {
  cmp eax,'0'   
* Y0 H6 q+ v$ d  jb A
* E0 [: l% F: R1 E  cmp eax,'9'   
3 o9 R7 `! Z3 v/ Z5 j8 H& N0 _  ja B
, y7 X1 Q% k' c  sub eax,'0'$ `; ]' l9 {) _$ t3 m; ?. V2 Z5 Y
  jmp short E4 D- o2 ~5 J' z, W
B:
# F1 Y7 e$ d) a7 g# p' l  and eax,0dfh   ) S. x1 z0 l6 ?2 B7 y" {
  mov edx,eax
( L' f( M: V+ U, J4 n  sub eax,37h   : \5 ~# q& w& t& ^) ]' l
  cmp eax,0ah3 P5 |( e; o- i& W* N) b
  jb A   
" j( h0 O( Z. E7 K# d  cmp eax,0fh
! _* [6 O. P, p$ E  ja A   9 F: O" {- h/ `2 `
E:
3 ?, n5 v  s  m+ I4 O2 G/ E% U( H  push eax   5 [, ]4 Y# C4 X% }8 }0 q' l
  call PRT   
! P- r5 i% M6 v, [8 d  pop eax3 a9 h2 P4 O: E3 s, ]+ Z; m
CExit:: b2 @: ^1 V; e& }
  ret
  o/ a% L# f4 |0 z. x/ YChange endp
7 T* w5 r! u( j' z# W: _7 n$ X;------------------------------------------------------------------------------------------------
: Q/ e! R: s1 q( Y: C0 lPRT proc near
, S: M1 q5 y* {- Y  mov ah,02h% N9 b" a, b+ a3 j# j
  int 21h: D; @8 R; Z7 k; M6 V+ ~) ]7 z
  ret
$ Y" D# q! n3 q, f- T% j4 k! MPRT endp
; J/ f2 i% t) E4 W' k2 p- n, J;------------------------------------------------------------------------------------------------) [8 c& G# W' ?. G9 {  l: N) E
crlf proc near
' L; A$ H" @. c* ]  {; D3 Z: W  mov ah,02h
2 O! e1 s. M3 _+ _  mov dl,0dh6 U0 v# p! \% d: v0 ~: T
  int 21h
2 ^% C" J8 C) T* E) e4 z  mov ah,02h
8 {$ Z4 I/ G- U" p- i* \  mov dl,0ah
; g+ I8 M2 `5 p. u- ~9 m  int 21h
" @3 M" L/ K5 E  ret/ P* u/ e7 i2 u% `2 U
crlf endp4 P0 V* r+ [3 x3 b8 u0 v% W7 q) F) w
;------------------------------------------------------------------------------------------------" C1 s3 `' r/ K) D' w  _7 @$ g
_32bits proc near
+ X! u. j) K2 \  pushad0 c0 ~( e, z. e& W' k
  mov cl,40 R& k* Y* g+ J- F
  rol ebx,cl
4 n( N0 E. T! i/ q* i7 b  call print_4_bits! Y* [  B; g% q! U) f" z% i
  rol ebx,cl% u2 }8 G% e& S( |" I, i! w, ]
  call print_4_bits
+ D% B. [9 @) X" @, b  rol ebx,cl
( K4 Y7 P& s' R- D6 `  call print_4_bits
( [5 i7 S2 E. ~( ?  rol ebx,cl
9 a5 x8 J- Q( I9 F8 M  call print_4_bits! k) [' `3 ]4 F9 n" s
  rol ebx,cl  a7 ~4 A3 T0 X1 ~
  call print_4_bits0 G2 f4 |5 g$ W, _
  rol ebx,cl4 m: S- m9 ?& v
  call print_4_bits" q* Y, ]9 \: p  A0 a1 V) }; n
  rol ebx,cl
5 @' _1 ?2 O: y1 G2 S  call print_4_bits
0 x  p8 H; w% v: S4 Q% p  rol ebx,cl
9 C$ s1 m: ]% [/ M- c( t  call print_4_bits+ j0 Q; P; W3 s/ L( {% F
  rol ebx,cl
$ ~+ A3 M) s- {: f; E1 @9 m  popad
. ?( K  k4 g' S# F3 C  ret
/ v! P" `- t) w_32bits endp* R/ |$ b2 S0 Y1 E& u3 ~. V! E
;------------------------------------------------------------------------------------------------
6 S# `/ A8 u# R2 W: n_16bits proc near2 P4 x" U1 p+ U5 f% ~
  pusha   & f( L+ P: z$ h9 H  t& A
  rol bx,cl
. B+ k+ L  g4 `$ k3 x  call print_4_bits: j: q) [7 S) s# v4 d+ L
  rol bx,cl: s2 S* f. K$ a* g1 ?% y. A2 ^
  call print_4_bits
* Z/ [, N7 p. k  rol bx,cl
  r# N9 k' k' L; m2 ~( W  call print_4_bits$ u  V/ p+ K, v* s" l: c( e
  rol bx,cl: W& R4 f! w$ S1 P
  call print_4_bits
7 x: r# \2 s- n, `3 W' Z3 F  popa
7 f( b# _9 d, |2 m, |  ret. m$ P0 i9 j+ Y
_16bits endp  K+ V6 `0 l; q# N9 I2 Q& N
;------------------------------------------------------------------------------------------------
2 ~9 K6 P+ m6 n% a! u6 n: n2 c_8bits proc near
+ H. ~1 C' N5 O' a+ [  x  pusha   
9 b) x4 X9 q! N% b. F% E  rol bx,cl4 A0 q! z3 z2 t, N" j  k8 }, ]
  call print_4_bits. e: u1 K4 T* w. ^# ?+ S9 J  C
  rol bx,cl
6 l. ?8 a3 u$ Q" Q8 [5 h% }2 e  call print_4_bits( y# E) R3 Z3 o4 F& e8 f9 N% u
  popa0 C- w% y3 ]* d
  ret# g- |: _$ E( \0 s& X
_8bits endp
) t! l& T4 \1 b& I0 o;------------------------------------------------------------------------------------------------% ]$ b! ~2 R! f% N; h- P2 Q: m( K5 m
print_4_bits proc near, {8 E% W) G1 e4 {, K" }# j
  mov dx,bx& o% w) B7 [( n# b+ R4 {7 k
  and dl,0fh6 t1 R  b0 F& D7 h  u3 E9 m0 t6 ~  T; Y
  add dl,30h3 a. v, E0 X+ H  ~1 A2 B5 r
  cmp dl,3ah
; o& T1 T. ~: ~% e1 w0 I  jb print
# t# W: G2 S' G4 F% z+ D  add dl,7+ o  K5 r, W0 e8 f8 y7 x4 O6 @
print:   
" A" f, W+ L( ^, ]- N# h  mov ah,2
( N% \+ z4 t+ I! M! [  int 21h
; Q" ?. G5 G7 ^: g  ret
8 D8 ^: O/ e$ j) ?print_4_bits endp   , @( R: T& z, k; t, h) M
;------------------------------------------------------------------------------------------------+ X+ L8 K0 d  A1 C4 ]
CSEG ends
4 V5 z6 Y7 U8 I: \END
您需要登录后才可以回帖 登录 | 加入计匠网

本版积分规则

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

GMT+8, 2026-6-4 20:21 , Processed in 0.352272 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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