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

顯示string會出現亂碼

[复制链接]
发表于 2010-10-19 16:41:51 | 显示全部楼层 |阅读模式
各位前輩好,以下的程式為在 big_real_mode 讀取記憶體的值
& M7 K5 K6 J) n# W- y, A  z
. m0 d; M3 G7 n7 }/ o& J例如: C:\memory.exe(程式檔名) 01000100(Address)
1 {" ]% M: y3 k* u' t0 l5 u& w
, Z' d: i+ E" ~9 [$ s: Q則會顯示01000100位置的值
2 L1 `  t' M) L) v9 D2 O3 d
( l! O  q* p; ~; K  z! w但是我另外還有要顯示出字串,但是顯示出來都是亂碼  d6 o/ v1 Q: a7 K
2 B6 h$ W. n; j4 u! z& W. R1 P
麻煩前輩給我一些指導,謝謝  
+ X/ Y" {, P! X# |  P. b( ^7 U7 J  m& C$ |) F; P9 I
" u% C7 h  d. v" b# W5 f
.model small
& T9 p1 C6 C9 R$ G7 D.386p
8 }. w; t, R. @) x# }% g;------------------------------------------------------------------------------------------------: e8 l* z/ j" h% D; @
DSEG SEGMENT USE16'data'  * N* }7 c7 `# T
/ }, \, ~" _7 ]  ?4 J7 v0 O
DESC STRUC
0 a, w$ H( p7 T3 M/ S( C2 W  _  LimitL DW 0  ; Q. w( H7 Q. R; {: Q, g
  BaseL DW 0  
- e) d1 b: I6 d6 D" q  BaseM DB 0  4 @' m* |9 ^* [  A. X  X
  Attributes DB 0  
& r  U6 W# c8 d, O  LimitH DB 0  
2 N9 E, z1 @- O, z0 ?! \5 U/ R  BaseH DB 0  
8 w$ l, [9 q, Y3 e3 D* qDESC ENDS
7 S  F4 `; ?$ M4 N9 @+ v$ E0 R9 M
; d1 L4 s8 h2 `0 VPDesc STRUC6 ]! l- Z" p+ m3 E; q
  Limit DW 0  3 e3 k' A* H3 Z; \( M
  Base DD 0  
) d4 m! D8 g/ J9 |PDesc ENDS! Y6 k4 M5 z: F" f5 H+ M, z
4 C* W, Y0 Q& {: a3 I# \, n% T
GDT_def Label Fword
. e3 H8 z" y/ B7 X# bNull_Desc DESC < 0h, 0h, 00h, 00h, 000h, 0>1 {( U% B: D6 d
Data_Desc DESC < 0FFFFh, 0h, 00h, 92h, 0CFh, 0>
8 L- b. @$ e3 O* M( jGDT_Addr PDesc <$-GDT_def-1, >/ i" ~% L9 `/ e7 G

7 f+ s5 Z- D, [0 x% m* o8 cmsg1 BYTE 'The Input Address is'$ k7 a* F. W  G$ j: T
msg2 BYTE 'The Data is:','$'1 w+ i. H' L: w5 j/ A! h6 s
- }4 O/ M: ^1 n; U
DSEG ENDS+ g& i: [0 n8 d( A. T# y5 S

( B" V  {6 o3 z+ W1 @
( ^" d* K) x$ b; J- L;------------------------------------------------------------------------------------------------  # }9 C" p6 [8 q# L* y9 a
0 z, f2 W. _, `  L
ASSUME CS:CSEG,DSSEG
$ c8 e2 D+ p; r% }% u& b6 Y& q* q# W: k& F' E4 `
CSEG SEGMENT USE16'code'/ v# N/ @& ~: D- t- X
  ) ?/ H& Q, R$ m9 m6 R3 r
  push ds
5 M, X9 I( S* @/ E8 d  push es4 Q( x/ p2 h8 P  E0 r4 o; }
  push fs
4 x  M7 x# J  K  push gs
+ e- b5 G7 S/ i) j+ }) [( }  
" I8 L) D3 M, @6 e9 \( }  call big_real_mode
; e7 _  w+ R, ?& r3 [& i
- g. \. r5 q' ], v* a8 W1 _    3 X8 d& q1 \2 J3 o; O' }) f/ O
  mov edx,OFFSET msg1;0 j3 ?" f+ D8 B8 a1 ^1 Q
  mov ah,09h;   
# A, D5 l9 ], \7 W1 L7 d  int 21h;
- v/ m8 p9 ?5 @8 B  k$ A2 j) e  mov edx,OFFSET msg2;
7 u- G5 e, `6 ]' c2 M$ k8 |/ t  mov ah,09h;
* n& @5 J2 n" J# y5 `- D+ P  int 21h;+ ]5 S9 x( ~" ]" C2 I
    7 m1 e2 |* M/ q6 x- x# b* ~0 I
  call PSP   # Y- F/ G9 g( A; U$ ^2 _4 K
   
# n: ?: ^* j  v/ E  call crlf   " _% Q* V5 X4 i4 M
   
& ~7 u4 i6 ~7 |6 b5 x( h3 h  mov esi,ebx
) L. Z/ v6 h( e' d  mov eax,fs:[esi]" t$ ]$ ~1 S" o/ \' p; O
  out 80h,eax
6 \' G9 L& F: k& f- Q  mov ebx,eax( ], w, N7 c: h7 r- t& D+ m
  call _8bits
* |  ]: F; ]" G7 n3 Y5 K, n   
6 o( E8 I7 X! h- P  call real_mode
* u  e6 Y& Y: `' k6 u    ! L5 d0 L+ R, p: y8 a
  pop gs+ P) B  O' K& ]7 f. O- v1 Z' z
  pop fs, q6 m6 y' M5 b! C% x$ f$ V
  pop es* N3 v0 P) W7 {4 r8 U2 w, J* |; r4 {
  pop ds
% _; s6 e  s# x% V6 _0 n   
+ ^6 `; a$ Z  J# t, K! Q# s! m  .exit
' S/ X6 U. V# ~+ O;------------------------------------------------------------------------------------------------
) @) R# E9 z1 U0 `* }big_real_mode proc near
$ n- b- g* g# i% M5 i  in al, 92h  a% w' [; X$ O
  or al, 002
2 E4 G2 y7 z! M, x5 N5 m0 f8 h: m  out 092h, al7 M% `+ y- V5 u) B3 z
  out 0edh, al
; [# D! t4 X9 p! U# ]3 i  cli
) ~) K/ c1 M0 `3 @5 w! e+ ?  mov eax,DSEG
) X1 B9 d. _2 p3 h) O  shl eax, 45 m' L) }, F& T- l- Y: @
  xor ebx, ebx, U- b: p+ b2 H! M, X, t
  mov ebx, offset GDT_def
& b! s0 o, f$ b7 O  add eax, ebx) f0 s( ^4 c! B4 C2 l9 [
  mov dword ptr GDT_Addr.Base, eax  d  ]8 A- B- h4 H  Q8 g
  lgdt fword ptr GDT_Addr* ]1 V) G3 i+ ?8 u
  mov bx, 8$ T$ r2 j4 u/ m4 f$ _3 M- h9 E/ K5 ^
  mov eax, cr06 f7 ^( C* H& _( K, o) l
  or al, 1
% w# z1 P# E( K  mov cr0, eax! s  E- O& g. R- \3 w0 S* \
  jmp PMod7 m: T) i" c7 i1 A
PMod:- Q+ T3 ^1 w: e0 f' N2 l
  mov fs, bx: b4 r+ h# _9 @9 @" O; i
  mov gs, bx5 L# v+ ]( f, v* a) {- N5 ?
  mov eax,cr0$ N+ B6 G' F2 V  ?1 l9 h8 g
  and al, 0FEh
8 r1 m8 V) J% ^  q  mov cr0, eax  ; I8 _4 m5 J$ ^: n4 D9 c8 x* }
  jmp RMod
# e8 u0 A8 W9 B  F: X4 CRMod:# k. _' k  E0 K6 M2 d& d
  xor ax, ax
, [# M# C0 s$ C8 l$ h' `: x  mov fs, ax, Z( d; W1 _+ S6 ^+ I: A4 V
  mov gs, ax2 \# w7 K. X/ r: o# O  i4 _! ^
   
+ E  K% Y" b! x  sti" C; v' f& k5 a  Y7 c+ M  ]; _0 c
    % f+ b/ \( v0 P( C4 f- B; x5 F! J, D
  ret+ g$ X0 t  N/ b" v7 m; K
big_real_mode ENDP3 G: s2 ?+ [- w( a! Q
;------------------------------------------------------------------------------------------------- M* x! @/ p, [3 N! z  g+ I
real_mode proc near
3 m( t- G$ O. O  in al, 92h
1 o, N/ b4 e) F4 t3 B, O! a  and al, 02
9 @+ Y9 n4 L! U* c, |/ U; l9 L# O  out 92h, al   5 t; f5 \+ J$ S$ p( r5 Y
  ret
8 C' H- I7 Q6 Z0 ^8 [$ ~7 J1 Ireal_mode ENDP, }  f* E& Q8 b/ Z/ J4 z
;------------------------------------------------------------------------------------------------
& l, X: r" A# IGet_Commandtail PROC near. d( [! w+ ^% b# i8 O' k
  push es  
$ g# t! A" G' s. S; e2 y% w2 y+ [  pusha
+ l0 c# @( M! i) H, h1 @0 T  mov ah,62h  ) k& e, j7 b- _3 ]8 Z
  int 21h
; |1 m7 A4 y5 B% w8 t  mov es,bx
# b) a$ y) h2 z, D7 P3 F  popa  
9 f4 A% i& U% ^* h- @, W  pop es
% l- `0 V3 \) i% y7 T6 Z8 R4 ]  ret
8 h1 w; S- P# R6 f( z# UGet_Commandtail ENDP
- o3 a% Q7 p! U;------------------------------------------------------------------------------------------------
+ m8 N8 U7 v9 s( b; ?* k" iPSP proc near# T2 g: ?: h/ z/ q6 _" v: {
  mov ah,62h
) D) `+ f$ a4 a  int 21h; v" q& U3 |4 L5 q
  mov es,bx   
" _) ?. r, a) ~+ G! U  xor ebx,ebx5 Q$ y, J& D. q% F( \( _! }
  mov si,82h
8 ^* f" X' l8 q& \  mov al,es:[si]
/ s* o% [# y8 g4 v# f% m  call Change
0 j# j0 ~" Y1 F8 m: _' a2 Y- Z& J  mov cl,4' h# v/ n4 x9 E/ H( l/ y; Z- p
  shl ebx,cl- d. S5 q# C: n
  add ebx,eax7 z8 ?5 k8 j; o, n2 u
  mov al,es:[si+1]5 D7 V+ ^  w) b! b8 h+ K
  call Change
4 h! T  ?+ g$ G  mov cl,4
# e  W: A5 ]; Q5 K) Y7 Q  shl ebx,cl
# R( J, g7 o; w+ |; f' g4 o  add ebx,eax
3 |$ f6 |7 W9 e3 |, `  mov al,es:[si+2]
/ ?3 Q/ R: v. Y# `% p( b  call Change$ |( `0 s8 E! ^, h9 h( N
  mov cl,4+ a; s" j) ~: L/ U$ U. @2 d2 \: G
  shl ebx,cl
& z8 [. F9 [8 D2 t  add ebx,eax
3 l0 B1 _7 h8 b0 W: o  m% z  mov al,es:[si+3]
5 ~+ O6 w, n: E- l+ L  call Change* Z( G, r8 R$ D. {  u- M; c
  mov cl,4
# I% r: e3 j% n* x( F1 c% E  shl ebx,cl# m: r# c7 N. |1 x& X: @  G! {
  add ebx,eax2 V" a$ c7 F" Y
  mov al,es:[si+4]% \& V# p; c3 Y  ^  a, r
  call Change6 F. E4 u( d0 s% @' e
  mov cl,4, q7 |* ?, f. {/ r, J
  shl ebx,cl- j4 H; k, D0 P5 _5 \( _
  add ebx,eax& W  k% W/ l" r5 u8 v+ _
  mov al,es:[si+5]6 N* Y4 B% t. w) t( j$ V
  call Change/ d; z# E6 K/ A
  mov cl,4! g" D2 u+ k1 g$ P- U( K
  shl ebx,cl5 A6 s+ X& W/ s3 r+ I( Y
  add ebx,eax. v& l& r3 j5 o
  mov al,es:[si+6]
/ B8 P: m8 _5 S; K! W) C  call Change
; f5 _$ a9 F2 q  mov cl,4
- f, W- e6 M! u  shl ebx,cl
, `- [; p' \3 J: n4 Q: P, W  add ebx,eax3 l1 b% x+ Y# O$ {
  mov al,es:[si+7]
5 h* E. ?$ o) a9 u' h* f- _  call Change
; _! u6 V! n- e1 F  mov cl,4, h' c8 ?2 h0 \$ m' L$ |/ w" \$ d
  shl ebx,cl
" I8 ^- B' J% c6 d! {5 |  add ebx,eax
. k/ N% K; k' \3 }+ N! B4 y  ret1 ]6 t6 k. L, Z; |6 B
PSP endp
7 w! q" q  i+ c4 E! }/ a+ U% p;------------------------------------------------------------------------------------------------) C5 }+ {5 D" z2 N" C) y1 a; A1 j8 Q  s
Change proc near1 w5 a9 S: L: n
A:   / c1 w% s) O% v3 i' r
  movzx eax,al8 j+ Y, d9 K7 v7 x6 f7 z
  mov edx,eax% x+ H! {" V+ H- m4 Y1 o
  cmp eax,'0'   
5 F& g7 Y) _- a1 Z) e7 \. ]  V  jb A4 D7 N  F2 Q3 ~/ @! j
  cmp eax,'9'   . U! t' t8 S5 M5 b: r
  ja B
# F$ U+ B( b" s* S/ ]$ Y6 Y  sub eax,'0'
% V1 }9 G0 ^1 d  jmp short E  k8 R9 K: I, @+ `
B:* c. M9 j. {" U: q# v: o9 U
  and eax,0dfh   
  f9 {# S- n5 a4 c& }  mov edx,eax
. g/ {3 K( o; ^3 ?6 A  sub eax,37h   
; o4 D& S( G4 N/ G$ _. z  cmp eax,0ah" f/ E. e7 h/ V# j
  jb A     [" i2 V) C4 Y4 b  r" P6 D+ ^
  cmp eax,0fh
- [. W( N$ K8 ~' m6 o1 r  ja A   
9 N; S/ c- l1 ^" S3 e0 I/ ]E:" c6 t6 b0 \0 v5 N9 _+ C
  push eax   9 `' @4 Q- r  g6 G& O$ J6 I/ c
  call PRT   
0 T$ B  f) b4 I1 s9 o" y  pop eax
. v5 L) |) N% M% ^8 `% r9 e: M3 xCExit:
8 T: J5 \* F9 H: G4 h: W8 c0 c! d  ret
8 V; G2 \" {, n- k; TChange endp
, W7 L3 Q; r8 E( Z4 D) g  ^- m% ~;------------------------------------------------------------------------------------------------
. m  @5 j( k: B# t; cPRT proc near
1 g* w9 K# y" k! z+ \# a& o4 q' [  mov ah,02h, p: U  q9 w  G$ I8 R; I0 k  g- {) b
  int 21h
" Q) ]- f! C7 ]& p  ret
; a' ^1 g) C# nPRT endp. V! b3 Q; A1 [9 x
;------------------------------------------------------------------------------------------------
: c$ w% U- R% V3 T' |" qcrlf proc near
1 v0 A3 y' m4 U% ~9 p/ j7 Z  mov ah,02h' Q" r; E0 j: _
  mov dl,0dh* {$ m% I5 n) C
  int 21h# X) |/ t+ S) w9 `9 _
  mov ah,02h: z7 ~5 Y. C- b; x7 x& b
  mov dl,0ah2 i. n8 S- T! c# A( L3 z- I7 n) f
  int 21h" S# b0 n2 ]2 y% T/ u
  ret' v7 J5 r% F& Q0 O2 H& r$ ^
crlf endp0 h9 L* D; q8 @9 J* I, l
;------------------------------------------------------------------------------------------------
& c  N( b4 g, Z( ~7 q_32bits proc near
3 r% p, J) e' V4 {/ o, {6 L, ?0 h) \1 F  pushad
+ j; ^9 d/ I) D4 F+ M) ~  mov cl,4
2 R7 Y  Q3 Z5 x  p' k  rol ebx,cl
, S2 v$ p: Y6 ]% m  call print_4_bits
4 y2 O4 u, A% x" a5 x  rol ebx,cl- p& ?2 K0 |: p
  call print_4_bits
6 R" v" b1 G) {& O. Z$ o5 ?# f  rol ebx,cl
. G2 r# T! q& n. U7 f( I: i  call print_4_bits
- |9 J( {# Y9 t+ y4 F( v& d  rol ebx,cl
' o5 e  [5 n( P6 S# k  call print_4_bits
5 ~' r" v9 g- p2 d& [- D  rol ebx,cl
* T8 ?) n/ e8 t% m" O( Q" n  call print_4_bits
  x; O7 `9 {' a' f8 j! M8 @2 s, Q4 e4 Z  rol ebx,cl" H8 A% [' I5 G9 Z, q% j* H
  call print_4_bits
3 t, T! C& a+ |' d4 l' i7 C  rol ebx,cl
, s8 n- `7 `7 }9 }9 N! q  call print_4_bits% g/ O; W( z' h* ^; C
  rol ebx,cl; \9 b. I2 n* v
  call print_4_bits, Q9 \7 i+ n) p) B# R2 E
  rol ebx,cl
7 y! g, V3 \; u3 I9 L* o  C& {  popad
9 a# \9 P8 G7 o, o+ R+ Z  ret$ g5 k  y3 G8 @8 k/ R
_32bits endp
) f8 j" n+ q* T( Q3 p5 u* Y5 j4 l/ \% K- z;------------------------------------------------------------------------------------------------  t; t/ d9 C: a
_16bits proc near; e, G0 ~; B" Z" @& {
  pusha   ) d1 o- F: ]2 z9 n5 R0 X' F
  rol bx,cl
) H  W7 r" H4 h3 b2 t. g  call print_4_bits
* \+ A: x- ~; D2 u# p1 I& O' W' t3 q  rol bx,cl% d" ^+ f* ]6 H' a8 Q
  call print_4_bits
. m; f0 k9 Y# k2 Y/ ^  rol bx,cl
( G4 r- \  \% F: i  {, q  call print_4_bits: ^8 w1 {: m) [5 C* F/ s, `7 g8 e2 Z
  rol bx,cl
' X: l! V2 V7 C" o4 _6 ^1 `  X  call print_4_bits( ~6 y; f0 K' s
  popa
& ~% M# T+ {/ j0 A/ H2 x  ret
! D, Y6 ]* f. `; C# W. r. h  i_16bits endp2 ]0 x- E$ k; ?- r3 Q1 s
;------------------------------------------------------------------------------------------------$ ~7 H% T( g8 O4 }9 K$ z* D% S
_8bits proc near5 o4 o4 H# X: X& x( d( Y! D4 P
  pusha   
/ R/ i/ P: w; e  E- y/ [" a  rol bx,cl
9 Z5 `2 B+ L1 e0 T  call print_4_bits
0 Y; S( E8 W! U" _4 Z7 q# l. ^  rol bx,cl+ h/ l2 d* ~) E/ I" s) |) L7 C4 i
  call print_4_bits" C% M. k5 C  R9 T5 z* }
  popa; H  u3 c( k# R* h
  ret9 {- V) v# ~9 N: |
_8bits endp/ N6 d( [3 c8 Z, n9 D
;------------------------------------------------------------------------------------------------
( q) f9 A. H# h& p' G, _- ]( o& Fprint_4_bits proc near
1 ]2 e% M/ q8 z. n; G  }' q  mov dx,bx$ W+ \6 |1 ~5 e8 }. ]  f+ [
  and dl,0fh
4 _, D$ u" e8 U) j" g( ?  add dl,30h6 ~( Q8 }+ Q. T- W1 F
  cmp dl,3ah* c) B7 k) J& c$ A: E- Q
  jb print
% \/ p+ k, D  ^1 B, i  add dl,78 e$ C. i5 f9 f7 t
print:   6 y$ [' t; W2 b6 r  ]% l
  mov ah,2
2 C: v$ M, s2 a; m  int 21h+ D; |9 M$ o- L6 F0 U& z1 n
  ret' n% e/ i5 L- l/ g0 H
print_4_bits endp   : j$ s8 N$ s4 r1 t4 u
;------------------------------------------------------------------------------------------------
9 i1 o9 L$ r  g/ nCSEG ends& j' T" v7 e# o/ e
END
您需要登录后才可以回帖 登录 | 加入计匠网

本版积分规则

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

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

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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