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

顯示string會出現亂碼

[复制链接]
发表于 2010-10-19 16:41:51 | 显示全部楼层 |阅读模式
各位前輩好,以下的程式為在 big_real_mode 讀取記憶體的值
3 K+ t2 B8 O6 s& }( A) N1 `0 @2 [
. L2 u0 T' m4 c' l/ S9 Y! G例如: C:\memory.exe(程式檔名) 01000100(Address)
& O# P4 E: M' o* Y- k( d' J4 M; G6 }6 `* v
則會顯示01000100位置的值
5 [/ i* k) l7 Y% f! M. Z3 ~; B) n$ H* [" o
但是我另外還有要顯示出字串,但是顯示出來都是亂碼1 A# B! @9 X# ?8 f

; b& U9 s$ V! m/ J: k3 x* g3 u  B麻煩前輩給我一些指導,謝謝  0 w# Y- ]  Z1 N: A1 r

# }$ [; @, T  b0 _3 K( N3 B/ B2 F; E3 O( s7 z) u- k. P) F
.model small- V0 u8 V6 a6 @" D
.386p
0 \/ G. N) A0 m0 F' }; j;------------------------------------------------------------------------------------------------
& F! p( ]/ T; s; fDSEG SEGMENT USE16'data'  7 n, X, U8 W" M, I/ j+ }1 B
! A# B. t" n- W+ _9 z; @. s% A
DESC STRUC5 m+ s4 b- t% S( S4 x8 l
  LimitL DW 0  * T1 T/ m7 y' ]" I% B
  BaseL DW 0  
" [8 H# T# ~" \+ c1 [" L* [  BaseM DB 0  ! `1 E. ?; m0 m6 X8 n9 u
  Attributes DB 0  ! T" y. r) s# v4 L. s9 c+ Q5 C( D
  LimitH DB 0  
7 |% t" h+ }6 l7 F  BaseH DB 0  
3 Z2 Y3 U6 i0 S# x# eDESC ENDS
# u+ t: ^1 W2 Q# z8 l: ?  O' N# z) L" o: q
PDesc STRUC2 ^2 b; W9 ]8 D/ I" f7 j: ^( j
  Limit DW 0  9 T* K$ }+ F- \+ E/ E0 {+ O2 b+ H
  Base DD 0  % r. E$ Y* B  v: f1 A7 R- i
PDesc ENDS7 J/ b' t) U; |' Q4 r( p% r+ x

$ `- j  p" L! |GDT_def Label Fword9 {- f4 o( m/ `3 L, o4 C
Null_Desc DESC < 0h, 0h, 00h, 00h, 000h, 0>0 {$ `; A0 p+ o* J8 l, n, K+ ?
Data_Desc DESC < 0FFFFh, 0h, 00h, 92h, 0CFh, 0>
% V1 j  k. {! q8 xGDT_Addr PDesc <$-GDT_def-1, >
% B; U2 h# h& J1 ^
  n& w5 F4 p( @" h1 N' H$ Emsg1 BYTE 'The Input Address is'
2 u+ i( H$ o6 R5 j9 N% mmsg2 BYTE 'The Data is:','$'
+ {. s, V5 Y% H( x: i4 K0 A/ G9 l. h
DSEG ENDS
- `  q* P3 O+ p7 }# H
8 c% }4 L9 j) W' C0 b2 Z+ \9 a' b+ ?8 f& B8 m
;------------------------------------------------------------------------------------------------  
1 Q* l2 ]% h0 f( A4 u/ L  T
- R7 j. k) P6 t2 L- N/ E. @ASSUME CS:CSEG,DSSEG
5 e- m8 t% s3 w/ U+ O- U) t* ?  r( h6 A# R, y9 C; H
CSEG SEGMENT USE16'code'
" H# H8 `$ V; D. S  
' H" T( r! }. v& p  push ds! {0 `3 z* F3 p) e/ L8 v* y7 x
  push es5 m5 g5 n/ s: N) s* `  r1 X
  push fs/ X- z8 T5 s$ Q1 i6 T0 c* s
  push gs9 w' m  v; v- T# s
  
  _3 O$ V' g: U2 o2 S0 B8 @  call big_real_mode
4 f7 ^2 W" w# {4 k. f+ y, W$ |9 U, I: X8 Z, h/ s
    4 r( r& ~/ V" g; b$ j
  mov edx,OFFSET msg1;; r& q! w% S7 T+ v( ^- c
  mov ah,09h;   2 _; E4 L% |- ?+ B8 G2 y) c+ ]
  int 21h;
8 a; T" H4 H4 r# m. e) X- X. {  mov edx,OFFSET msg2;) H! l# Z# n3 N
  mov ah,09h;
4 {. r( Z' y+ Q! ]5 F1 s5 L" [) W2 n  int 21h;
" a7 ?# |/ ^1 J  Y+ |4 @9 i    % ~, ?8 }7 E: r9 z0 k
  call PSP   & V$ {6 o9 c& p+ x; r" B7 v
   
( J& f. }- G2 _7 U  E/ }' Q# {- i  call crlf   
" C! f2 d0 R0 \! I! K   
4 F( k6 {) T  b  mov esi,ebx+ n" a5 K# M. ^) [
  mov eax,fs:[esi]
% |( p+ i; C; c: {/ X  out 80h,eax) d# P( j9 |- _/ v
  mov ebx,eax
9 E9 k0 z0 B" V! b  call _8bits
- H$ c4 R* E! G2 w" x9 b   
/ e3 m% z& x; ^  call real_mode
2 a$ k" C% J: Z5 d    ! M7 Y' W* Z6 c0 j
  pop gs
, w. Z' p6 l: Q5 l* F( _  pop fs
0 {6 u% P. @- W& U* Q! C- J  pop es6 f) z5 U5 Y9 \- p/ X2 Z
  pop ds
3 m4 U# l, i) p: w) P7 D    0 L3 t$ G  A0 S. A6 g# {
  .exit
- x, }4 m7 b* ]" i; S# }4 W;------------------------------------------------------------------------------------------------: \! u2 b# ^: O4 l
big_real_mode proc near
9 x+ q+ B, \' e$ Q$ O  in al, 92h4 a' s) e0 {! ~# `$ |
  or al, 002
8 l% ]' t# ~% q0 W3 [  out 092h, al" |* j9 Y. L+ l9 ]4 ]8 Q
  out 0edh, al5 w  e9 F6 m+ J7 s" H
  cli
3 p/ w+ X2 k1 h' J6 O7 T  mov eax,DSEG$ I. l7 ]  n: |! u' V6 X& |: r' |
  shl eax, 4
6 z$ q0 B2 H" ]8 D8 T  xor ebx, ebx
; q( {& H, ?$ @  mov ebx, offset GDT_def3 g: k- ^* q, F+ z9 d; ]
  add eax, ebx
9 l* q* a  N8 x3 i) A  mov dword ptr GDT_Addr.Base, eax
0 H5 f4 y; m5 b- j5 Y  lgdt fword ptr GDT_Addr- V( ]( s, \% z) B& q3 L8 U
  mov bx, 8
& ~4 H$ X- ^( _4 `2 Q+ m* O  mov eax, cr0
0 v5 ~( a3 c- O5 O  or al, 1
# U$ y  x% _3 @1 ?! g1 \; ?2 w  mov cr0, eax6 v6 i0 D8 d' o- V. H
  jmp PMod
/ C- {3 ~# r5 xPMod:' Q+ b1 z0 ?/ p
  mov fs, bx
" U( k* ~5 t* }3 n7 {3 B  f2 v% |  mov gs, bx
/ q8 P1 v7 B, v+ @$ |0 J  mov eax,cr0
8 b. z  S6 o1 \6 c! x: |8 M: j  and al, 0FEh) ~, l9 k! z( f; G6 h
  mov cr0, eax  4 j- e" w4 O2 N8 f* m0 C
  jmp RMod& K" r5 P  H( [+ }
RMod:
% L6 h( ~0 X2 ^- ]8 w" E) H  xor ax, ax
# S. |6 G& |( }" C+ S( ?. e  mov fs, ax
+ {+ K& k! A6 P5 Z. |( b  mov gs, ax9 C. d7 N* M3 C
    7 f3 D3 x4 z8 N% X6 O1 ?3 h
  sti, p1 E* m" c. N( {
   
/ N4 p( Q) f0 u. `4 T& ]0 k: k  ret
$ N( W5 x" C- rbig_real_mode ENDP
. Y* T$ F9 r: M2 \* f3 Y% J/ q;------------------------------------------------------------------------------------------------" u+ V, T7 `$ Z, V/ Q
real_mode proc near
& t+ ~3 W4 j8 M9 u5 w- C  in al, 92h
# v- H" @- H/ P5 O  and al, 02! t/ C1 O. S1 l8 o, i' E5 G
  out 92h, al   
, l4 _/ S6 g1 ], p& ?) ?  ret
  f' \: u8 c  d: F$ Jreal_mode ENDP  V2 K4 ~# I, _! {
;------------------------------------------------------------------------------------------------
( ^; ^, M; r' R% r! e! x9 oGet_Commandtail PROC near
; \+ V; d- ~6 k7 I+ K* x; }  push es  2 b/ T; \* x4 ~4 A7 M6 n$ U
  pusha
" h  e6 b; i/ @7 C( O  mov ah,62h  / F' f# h8 k; a; h
  int 21h8 A# E1 [& S: D6 U9 ^: A0 [- J  {8 ?
  mov es,bx; g! C+ {9 `9 _$ V* D% G- N$ U
  popa  
* g6 ]: b2 h+ K  pop es
- b9 C) z& [1 W& z/ N7 \  O, v  ret
( O) |& I1 N& p; l7 l3 K8 B( dGet_Commandtail ENDP
6 \4 g3 G  Q6 n9 D% Q0 I;------------------------------------------------------------------------------------------------
8 R# J3 _, p) u* p, ^* IPSP proc near$ F; ]* a9 Q& N' c6 M, J  A
  mov ah,62h
0 ?# n/ l% w8 F: c& {  int 21h3 ~/ A& b6 v8 o( @
  mov es,bx   / T' k3 A) j" L5 ~7 t: B
  xor ebx,ebx
* T; e# W% W* {+ `: j( m  mov si,82h
0 C4 L% b& ^% k+ f5 X  mov al,es:[si]
% D. Z: P7 W3 U1 i! E' C  call Change) E, {/ P0 @& \9 E1 A9 l' r& C1 }
  mov cl,4
) b0 K4 L6 y" Z  A( k  shl ebx,cl8 C+ ?( F+ l/ h. X* I# G
  add ebx,eax
& q* X$ v# R6 L! K0 J! a  mov al,es:[si+1]3 f1 U4 x9 W% m
  call Change* v* r. f- x. G9 @/ M) ~/ K* T5 e/ }# u
  mov cl,4
0 M1 V  H! K( G9 B( G  shl ebx,cl
0 h2 b3 {, K2 Z& j$ a, w" Y9 e4 W  add ebx,eax$ c; L8 N4 Q: Y4 c4 D$ m/ }
  mov al,es:[si+2]
  f7 j/ \8 `0 h$ a9 B  call Change
7 q( X6 x4 s4 `  mov cl,45 P  X/ @) i# Q5 g1 [" X! \
  shl ebx,cl& p. O. u& m% ~9 s9 s* |! X- _7 A
  add ebx,eax
/ R5 d, _4 [5 s9 }! @5 G1 k) Y  mov al,es:[si+3]0 P4 @4 H+ J: z0 f7 c9 b- L
  call Change
- j3 x" q2 H6 ^6 @. ?) n  mov cl,4
/ r: n' e& u( o  shl ebx,cl% g# _& A) A7 O! J. p* f
  add ebx,eax/ g5 V! v; d/ G: G( H8 Z; r2 T
  mov al,es:[si+4]
* D& ^  a3 u- ]  call Change0 @# z5 n+ Y/ ^  Z* ~
  mov cl,4
) D; G; N! ]+ [: C6 I7 E* b  shl ebx,cl7 m0 n. a( h3 G6 ?
  add ebx,eax
  R  s/ E( e1 J4 G7 W  mov al,es:[si+5]- R& H- W5 x" {/ n% B/ Q
  call Change" e! I: f" h+ n& ~1 B
  mov cl,4
4 o. J% z1 U5 j: N0 |, f# p* m" }" z  shl ebx,cl# ], `; p+ d2 L/ h6 w
  add ebx,eax
) @3 c# s& j+ f3 T9 F  mov al,es:[si+6]
( `; [! H) G( Y0 V  call Change
. a( H+ _. p* q; L% Z" G% M9 m  mov cl,4
* E" e- _6 _; t+ m# z  shl ebx,cl. ~' R1 Y; p' c
  add ebx,eax# q) f* y# R0 ~! R: f# O
  mov al,es:[si+7]
/ Y6 x. i7 f% [4 F' t. F3 F! ~2 l  call Change: Y3 f* a- h( j) q- s
  mov cl,4  o3 m  k. V& c; c; K# C
  shl ebx,cl
4 N& M  `8 b1 |' ?- W  add ebx,eax
7 b7 H; p; R  r6 B; s8 U  ret
% @$ J# I2 X" `& d$ j! ^9 D$ r2 |& J) S% KPSP endp7 T5 u4 |$ }6 m! |; s
;------------------------------------------------------------------------------------------------
4 M  M$ c# d7 sChange proc near$ i; Y7 h+ T5 Q
A:   
. {. b3 x/ l- {  movzx eax,al
0 R2 c4 e: V/ S, `  mov edx,eax! j* n2 e4 Y3 Q4 E7 [# V, w
  cmp eax,'0'   
3 ^* V0 m/ }1 U4 _  jb A7 t* y& C, J+ j
  cmp eax,'9'   9 i; S( d5 j' {9 K0 R: g
  ja B
; l" z$ ^* |. g5 l: g5 g  sub eax,'0'5 N7 r$ ?. d, g  Z
  jmp short E5 M. f% C# O- k- J
B:
& e' u8 g. N/ T4 |* C& G6 T  and eax,0dfh   & X- w1 c4 w% t
  mov edx,eax
, ]- R2 f+ i6 a0 e/ b  sub eax,37h   + C- s& R: R. x' _
  cmp eax,0ah; g6 w7 j" k& b. B4 f# l; N
  jb A   0 r6 l3 k( x" G% \2 C
  cmp eax,0fh- l1 u: P7 G8 v) |( m1 l1 u0 F
  ja A   
' @8 B) v' H7 S+ j/ s9 ~9 m1 tE:6 g9 E4 J% G: P. {* D' [$ u) U
  push eax   
( R; K0 S. @1 D  call PRT   5 g; J/ J( v$ l
  pop eax
& W- \. I( u& ^1 I; V7 oCExit:8 P( d% y1 [. J7 J6 I! E" K
  ret
& M, ~9 ?' ^; T- QChange endp
- q+ g1 t/ X+ }' Z4 ^;------------------------------------------------------------------------------------------------
) D' [" _  R3 R" K% nPRT proc near# ^9 I3 a6 h9 q2 P' h. D
  mov ah,02h8 ^8 G) v1 L. L1 s+ W) Z/ C
  int 21h
$ z* ~. u+ a5 H  ret( z- V; {- |( w
PRT endp
* g. n  K4 \* @% o5 B;------------------------------------------------------------------------------------------------& t0 d* l- z( h3 v; q2 B  L% R
crlf proc near
7 C1 P' ], Q- h1 `2 n2 r  mov ah,02h2 a3 N+ a8 D4 y2 O( X* l/ ^
  mov dl,0dh
( f2 `  {7 f: b* w) a6 p  int 21h0 f$ R+ X0 A$ E9 ]* E
  mov ah,02h" W' {* r, V$ E2 V  A9 B0 F
  mov dl,0ah
$ G/ e# u- S7 I3 @8 I9 A  int 21h
- C9 A& B1 ?& Z0 W# z% N% }  ret( d& z7 G: o/ F9 {( t
crlf endp
, |4 n+ V" i% a6 y. h6 L# y1 _;------------------------------------------------------------------------------------------------2 G; J( M* c7 o. {# D5 H1 M
_32bits proc near5 F+ s! b0 @. S8 \
  pushad9 a: c) Z4 V* r* v
  mov cl,4' C/ ]/ o( q" q) m4 R% I! ^, d
  rol ebx,cl
  ~# w' e! P) S. `  call print_4_bits
6 d. U- G% S5 T( |) N+ m4 D3 x  rol ebx,cl0 W3 y- x/ s, o& g! h
  call print_4_bits
  g: }" v% @2 Q( Z  rol ebx,cl
% n8 y; U) J; A0 s6 x  call print_4_bits: _; P  P  O5 k; v* L: U% |
  rol ebx,cl9 f# k4 h9 t. k5 w3 t& B7 w
  call print_4_bits
: x: P5 k1 m% f9 ?" D  {: K4 A  rol ebx,cl
3 ]5 i- s  {5 w9 P7 r9 r4 p  call print_4_bits- C  y: f& |. b+ i& X( C4 _
  rol ebx,cl
# \. c) Q+ j0 T# b6 S  call print_4_bits$ |% a0 Z4 z5 t% p$ |
  rol ebx,cl
$ [, s2 [6 r  r* C! k, Q4 B% m3 l  call print_4_bits
- A4 g% Z) A" S+ p" O1 m4 _1 f5 Y  rol ebx,cl' c" h% N4 l: Q1 j
  call print_4_bits' P( n6 o! L& A3 e7 n3 P/ t& {
  rol ebx,cl7 A0 T2 Z- l9 R+ C! J6 `
  popad% T, h, l( l6 }3 ?4 F
  ret
' O8 x1 x4 ]' ~# ?_32bits endp
% B- y4 ~, y. `$ ];------------------------------------------------------------------------------------------------+ H9 [2 D- e+ Q2 e3 B. D4 u& S: y) ~
_16bits proc near
+ W# L6 o+ P& F. Y# [& h  pusha   # y8 x8 f9 n% {7 z% H* G% S4 x
  rol bx,cl- U) v' d. B5 v: [3 d5 x& Z' X
  call print_4_bits
: D% |0 x0 {* @2 U  rol bx,cl
1 O$ `+ j2 q# B4 X- e9 z  call print_4_bits
$ C0 j! d% J! Z6 k8 x1 l% G  rol bx,cl
% A  g5 @4 ~9 q  call print_4_bits2 h" |- X' R2 z
  rol bx,cl5 ?0 k9 U5 z+ ]; S2 g
  call print_4_bits
& ]* e4 p& O- O, L2 S/ [5 n  popa8 q8 {4 [: W% @+ [# C7 |: F
  ret9 {' z+ a: U0 m) H. m& n
_16bits endp
& @  b6 Q" O/ m: t: O;------------------------------------------------------------------------------------------------
9 j. I# |% |, L2 G_8bits proc near
6 e$ _: N" y) W, X9 {! u: e  pusha   
# S  O# e9 i' c. t  rol bx,cl" C# W0 J+ e) c' _! `
  call print_4_bits$ a8 P. y% h1 c% s7 I  {6 e' Z0 j
  rol bx,cl
2 V) I8 T' X: Q: [" b( v* R  call print_4_bits
( N9 Q. s/ t" U' q0 L' [/ ~2 O  popa
- d' A* T/ f, Z: l  ret6 g; z2 B! J+ r7 \6 R& l
_8bits endp
) R% Z( [* X' o4 P;------------------------------------------------------------------------------------------------
6 k/ x) l5 o8 ?# c% aprint_4_bits proc near  t+ S/ j1 V* C/ e
  mov dx,bx% m3 z9 w9 l  U5 ?0 ?9 W0 x
  and dl,0fh4 m, p8 `8 y& ?/ b, y
  add dl,30h- ]. ~* B- b; a) U* T8 n% [
  cmp dl,3ah9 \' t. N2 Y1 m2 l, V5 z0 B
  jb print
: {8 e$ b! t* ]; @8 @3 }  add dl,7
' n# Z! I/ A, B! t$ iprint:   
7 b. T! t0 [  q9 ?  mov ah,25 B; z1 W- a( v+ k7 p! T# ~
  int 21h
4 L2 p% L! j! Z* \  ret
3 S2 |, s4 I9 M) Gprint_4_bits endp   
, a# O: R4 t: [# s6 I- k" l;------------------------------------------------------------------------------------------------
% ^: O4 f: f3 t) J  X5 ~CSEG ends
% p" i1 b# M, J8 E7 i& k6 BEND
您需要登录后才可以回帖 登录 | 加入计匠网

本版积分规则

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

GMT+8, 2026-1-18 22:31 , Processed in 0.115313 second(s), 16 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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