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

顯示string會出現亂碼

[复制链接]
发表于 2010-10-19 16:41:51 | 显示全部楼层 |阅读模式
各位前輩好,以下的程式為在 big_real_mode 讀取記憶體的值
( A1 z$ r, N$ v! w  R/ g+ F+ e" |: b# r9 w% r9 m7 A
例如: C:\memory.exe(程式檔名) 01000100(Address)
1 G* m, }& }4 \7 [' l  p% n( @6 |6 V2 S
則會顯示01000100位置的值
+ D: l% D$ R# `4 H4 Y1 L7 g  F" [1 D* h6 i' z
但是我另外還有要顯示出字串,但是顯示出來都是亂碼' ~0 I! T* h9 x
6 W; y4 U0 g9 w6 a
麻煩前輩給我一些指導,謝謝  $ W; @6 k6 l& B7 _

7 o. I7 k" B7 x* F1 R' l. U7 O7 c
.model small% `' N5 A/ w; I- P5 |0 y3 Z$ W
.386p
8 _' ?! c' b' I+ v7 P7 o;------------------------------------------------------------------------------------------------
& n+ B6 {" }5 o% H/ C2 ]3 zDSEG SEGMENT USE16'data'  
4 c7 t. U2 n5 p4 C
/ _# B1 |8 `6 T4 A/ C5 t: D1 bDESC STRUC  `8 \# x- a% x0 Q9 z+ ?! h( O
  LimitL DW 0  
* k4 f( C- c$ U' ^2 u: [3 p6 ]( D+ k9 ^  BaseL DW 0  
: V8 b) W: A9 u$ K  BaseM DB 0  
6 {" S' |- a$ J) N# W. Q  Attributes DB 0  + T- x- U6 s" `$ H5 \
  LimitH DB 0  " ?, B" J: @9 w7 I+ k
  BaseH DB 0  " G1 q) W2 F8 z/ a; D9 o
DESC ENDS4 @  ^+ @7 ?  b8 t8 i

2 t* t# B, R2 s3 h8 ~PDesc STRUC
  E) I8 ~6 E9 r, z  Limit DW 0  7 p- i% S- t1 g7 ?. n  j7 `, S
  Base DD 0  
% g/ H+ X& F8 P. @5 j* C7 hPDesc ENDS$ U4 |/ M5 N7 r" I

8 w1 h! v% r) V3 iGDT_def Label Fword' s8 s& o5 X. G1 r" O
Null_Desc DESC < 0h, 0h, 00h, 00h, 000h, 0>5 j- m/ f) e# a
Data_Desc DESC < 0FFFFh, 0h, 00h, 92h, 0CFh, 0>
0 C( E( [3 T/ g5 {GDT_Addr PDesc <$-GDT_def-1, >0 h4 \' `% M- O) V" |- I  E9 N: m9 H

. J% B# X  p2 A! R' b+ Q1 Ymsg1 BYTE 'The Input Address is'
3 [+ W8 Q8 {! u" p/ emsg2 BYTE 'The Data is:','$'. t2 M. \7 y' K
3 a6 x4 Y9 }- |: k' F
DSEG ENDS) h( w3 ]7 f* u$ r% I
6 x0 g( x+ E: X; W; Z; H& K

8 a5 _( _- M' ]- V0 ?2 K9 E;------------------------------------------------------------------------------------------------  
* A: y0 {6 e- x
+ Z$ F3 L/ I! C& ?* c" T) W$ iASSUME CS:CSEG,DSSEG
0 B+ `6 E( j) ?( ?/ |3 ~$ f+ Y/ s% U/ H" f3 B) ?
CSEG SEGMENT USE16'code'2 N" d# h& R) {: B5 K8 ^3 V/ a
  0 q& d5 B: y  k9 t' M  m# G0 y8 i
  push ds" n! A* d  e" y4 _
  push es. s3 N* O' b  M( h
  push fs' h" [9 r) P+ U+ T$ c; j
  push gs$ J: C7 T7 V2 r4 C  M2 x
  + t( i- s, h+ ~
  call big_real_mode
/ {# O0 Y; N! Q6 H9 d0 Z7 }
3 h/ w% J$ S4 e+ i8 `4 Z8 W: V    # F8 b9 }2 i: L- i- N' c4 X
  mov edx,OFFSET msg1;
& H8 A2 i0 Y: u! F$ i3 r' S8 ^% d, o  mov ah,09h;   , r5 r* |  p2 r. d* j
  int 21h;
. J# o8 t6 B% X  mov edx,OFFSET msg2;
* B( F: [8 c1 x. v5 u  mov ah,09h;
& F$ A' ]$ j; G/ ^  int 21h;8 R1 C/ X2 [" e4 N5 Q
   
& w' e; X' d; E# h  b  call PSP   : V- y' P4 u8 p. P3 t
   
, i/ L) ^- Z/ \9 g9 h  call crlf   
7 N( m" U/ y/ _5 H( t2 b5 O    + u5 Q3 v% q, }2 j# r
  mov esi,ebx6 H! E0 s; q' C+ N$ F
  mov eax,fs:[esi]
1 A" k4 [0 J! [- b3 @0 e, i  out 80h,eax* Z7 N5 I; B6 o' h+ r
  mov ebx,eax7 t8 X& G) j4 s% s0 ~6 w' L1 l
  call _8bits
; H( R5 w2 \3 U) _& N2 }/ j   
$ j+ F* Y  `' N$ ~  call real_mode- n# H' d! d9 k; [2 A! |7 b
    ! W3 }& V/ S$ R9 O
  pop gs- Y6 z2 W5 U/ S- @
  pop fs
8 d" n) n6 R$ ~4 `4 c6 R* T# U  pop es: w8 o) o: E; \( z8 P
  pop ds! A& T; M# i' @$ w7 q  H
    4 E( c( f3 K2 a' N6 y2 }' F
  .exit
0 R5 f" h) g( @( e4 A( ~/ z% y;------------------------------------------------------------------------------------------------
1 D7 H; y2 L4 o& {big_real_mode proc near/ ^& n! f1 }1 S- h; k
  in al, 92h; A% y+ J. {: r8 E
  or al, 002
' e, S9 X# |/ q' q% n$ [# w  out 092h, al0 G8 F" O* e  ~& d: R  Q0 ?
  out 0edh, al
! \. z2 W$ X; d' a  cli( d6 {7 g, ~, C1 l% \& i+ ]) r+ e
  mov eax,DSEG( b4 q+ g1 B* }( r
  shl eax, 44 u& y0 v, R5 ?) G! H, `( [& r
  xor ebx, ebx2 M0 q7 o" N  X0 g+ C
  mov ebx, offset GDT_def$ }5 E  R; d3 B/ ]# T7 _
  add eax, ebx3 {  O5 Y; [6 C# a& n' }
  mov dword ptr GDT_Addr.Base, eax1 u# _; r1 c& q& H. g
  lgdt fword ptr GDT_Addr3 ^9 _* T6 h3 g5 @
  mov bx, 8
5 n8 {3 e+ h, l# k+ F2 e  mov eax, cr0
- c9 O  [5 F3 j' |6 [* @7 {  or al, 1- X" {' |) ~% l5 v' i1 r
  mov cr0, eax
$ \2 i/ M6 B4 n" i# `. v# h- j: I  jmp PMod
* U( m, S' R7 c1 @1 lPMod:$ E4 ~0 B" B% n3 }8 p8 [
  mov fs, bx
/ O* A5 U: Q- ~' H  mov gs, bx" S8 B. K4 Q, Z
  mov eax,cr0
% _, K7 ~9 t: M1 G2 C* T  and al, 0FEh
8 |6 g  v) `/ \0 \# H  mov cr0, eax  6 K+ D; t& c# o# q7 R
  jmp RMod
6 t: ~" u2 D+ g% E. G, A2 G& gRMod:
  d/ }7 A& a( z* Q2 C1 u! N  xor ax, ax# [2 L5 f; v& u, V7 Q& J1 z! p" ^
  mov fs, ax
0 x/ g; y* [9 h! y: \  mov gs, ax$ W. W: e% z6 c! l6 B# Y9 ?
    7 W8 ^4 _8 Z% o9 d# ?  M8 A
  sti- |0 a, p) ^7 \1 ~: X3 I9 z/ E, f
   
9 n3 D4 I) H" k( l  ret1 k# \4 h: L2 c/ O. \, h
big_real_mode ENDP
: J4 X* p) z+ i" z7 d* X1 j( O( O6 w7 M;------------------------------------------------------------------------------------------------  n- C. [" o6 \: m+ f7 P6 @
real_mode proc near* M1 j6 V0 Y5 r( N
  in al, 92h( t* x- u4 q, G5 z
  and al, 026 D9 U+ G) C+ i; I4 S1 m0 f$ @
  out 92h, al   ! o& q: Y, l1 p. o1 i
  ret
/ Y8 B' a' i! F# Z% ~real_mode ENDP
; b1 k5 n2 G8 _; H6 A  [; j- g;------------------------------------------------------------------------------------------------7 p: ^  l8 |6 |- n, H# p; f( n
Get_Commandtail PROC near! b: _( h9 _. b3 c3 w
  push es  
9 a- g+ A6 f, J1 A6 A  pusha+ N8 @2 }& F, d  o9 U
  mov ah,62h  
2 d# L: @" L$ A: u7 X  int 21h4 I+ [5 m6 @) g! L6 g9 U
  mov es,bx# l8 U) |1 V% V8 h1 q: X
  popa  
7 k3 [3 i7 K7 P) T$ p  pop es% K$ z* m, O' Z3 W
  ret) a/ F9 P  I+ @0 N( m# v4 Y
Get_Commandtail ENDP
7 L( [: Q+ e0 L) N;------------------------------------------------------------------------------------------------
9 n# Q$ U/ f4 L9 S# D% zPSP proc near, U  M' m# a8 u- y( V  S
  mov ah,62h3 v9 ^! `5 I  _% h! w
  int 21h
% r4 Y9 `: n, Y- t+ n  mov es,bx   4 o" d- A( s2 G9 B
  xor ebx,ebx, U8 {) e( |6 D
  mov si,82h
: b+ I0 \% i+ t  mov al,es:[si]: V# ~& Y9 f! R1 @  @! l
  call Change
% t/ [  n* s) M# }4 e; E  mov cl,4$ i0 F1 e7 X+ k7 j' I& P) ]) A
  shl ebx,cl
! K8 M. |+ d% R6 E  add ebx,eax
- M* X* K7 B) T  mov al,es:[si+1]7 e5 o7 B, I9 r/ N0 @! w6 e
  call Change
2 h; Q1 C1 S4 l) \  mov cl,4! M) Y& W5 p2 O5 i7 C) m
  shl ebx,cl# O1 G6 \  m! T: Y) S
  add ebx,eax
9 m* s* A* S% G; \. j  mov al,es:[si+2]: O. S8 B4 W8 B: ], e
  call Change
; L; K, N% x* g. }# t8 H7 y  mov cl,4- ^* |( I" f- x# W  M
  shl ebx,cl: s0 }& h) ?) l
  add ebx,eax
$ N* _+ k9 `0 b. Z% u8 y  mov al,es:[si+3]
8 G. A+ {. E! z1 C  call Change8 Z: X8 p- `" H  A& |3 [
  mov cl,47 k+ v% ~) O+ S% K: C) \- u
  shl ebx,cl& p  z% Q  H$ z& t: J, {
  add ebx,eax
: l5 A: S) J0 ^1 n+ T& s, h  mov al,es:[si+4]1 m6 [: v6 I5 |* |: Y% v
  call Change/ M# g! r$ q  i+ v, b/ ^" |
  mov cl,4
3 m" b9 \) c3 B! f2 h0 n  shl ebx,cl
- h5 A7 z* t* z- }. y  c  add ebx,eax
# x2 l4 ]$ ]% m% o& j; [8 R  mov al,es:[si+5]
/ A7 i* L1 U/ w6 g; U' h  call Change2 u" ?4 X0 B+ `
  mov cl,42 X7 M- K: W) s0 r6 q
  shl ebx,cl
) f- i8 h7 E+ Y4 U1 x8 `; m0 d  add ebx,eax
, O  @% F8 w$ j, O- K  mov al,es:[si+6], J. k  a5 d1 W
  call Change
, p! T! R9 a6 Z8 ?" e% `  mov cl,4
; d2 ~5 ]$ E, J2 k1 B8 r' Q  shl ebx,cl" R) z/ l& S' v- m9 I& \: M% ~) r
  add ebx,eax
: h& m& o1 K- m' U9 G4 v  mov al,es:[si+7]7 x8 z" Z( a5 i4 z" n
  call Change
! K1 t. P: M3 E  x7 c) j  mov cl,4) R. [7 d+ l% e( l" a: }# A
  shl ebx,cl
" G" M& a! G7 [! F. ]+ x  add ebx,eax# s5 M1 t6 s! D0 i
  ret
1 [. q3 M1 A: }5 v4 GPSP endp3 o! E, u5 d9 m1 h- ~9 _! D
;------------------------------------------------------------------------------------------------8 i5 ~: ]- f8 @- g& k
Change proc near1 e4 F9 M9 P4 t6 V, b4 K
A:   4 X" r3 e; F) w0 i/ |' X7 c
  movzx eax,al
& X9 H( v3 i" }! z+ m  mov edx,eax
% ]4 R' I7 t5 m  cmp eax,'0'   5 ~, \3 L  S" f, Y% A+ o; _
  jb A  b' F  \# s" K0 y, D
  cmp eax,'9'   
9 q4 z! Z0 v% r0 ~7 \$ C- k: U  ja B
4 j9 ^- l0 I$ T6 T$ O7 g+ |  sub eax,'0'
  Z3 ^: k( f9 F; {" t  jmp short E$ Q9 Y8 z" d2 O2 h% o+ r8 P
B:
+ p) [8 Q: ~: i# J( r  and eax,0dfh   
) Y* x4 r5 ?; A# a0 j, q  mov edx,eax
' E% g/ {) E1 P% o* j) W  sub eax,37h   8 p  m. y" [- l' B# `2 }
  cmp eax,0ah, ]# k. K9 {) J9 f; W& ?. [- O
  jb A     h1 @6 R4 `% P6 N1 X
  cmp eax,0fh
2 ?- ]/ b% b2 W. S7 j* `% \+ ?. z  O  ja A   
  L$ r# l/ Z3 E' k2 j* _E:
- r: Q6 ?. r: V  u6 g8 A! h: h  push eax   , \0 |  T. [3 _
  call PRT   6 N* Q) _4 I5 a9 e) W$ H. \
  pop eax
( L* G5 m: z3 d# I2 T7 n' n$ C! DCExit:
- |( m# k$ |. z6 V8 U* [  ret6 G7 ^3 ^* w5 g* }  n# Y! c) g
Change endp9 o) I+ o$ `& p$ C4 j5 K
;------------------------------------------------------------------------------------------------
6 `. H) ~9 a. f1 B; c5 _2 APRT proc near
; p% _& m# Y  c( f' R- u  mov ah,02h( _. T8 v# [7 s/ j* l
  int 21h
. M, b/ _7 W0 t. }6 g/ e; z  ret
3 h* ~* [! v; U* C1 M6 D9 VPRT endp
8 `9 ~8 s6 ^/ Z" V;------------------------------------------------------------------------------------------------5 u5 e1 o: ], ^; C2 ?! v* }& a5 z
crlf proc near& J: B% w" B4 ^6 ]% Z8 d! h
  mov ah,02h# k- J# H1 i0 u* k
  mov dl,0dh
5 b' A# B/ Y8 e# `. Q8 Z  int 21h
* z9 I% e4 y& R- j. c! r! j5 F3 J/ k* M6 u  mov ah,02h
; z/ o, ^1 l  ?  Q  mov dl,0ah
2 k6 J* h6 [3 Y; G( o- n/ T- E  int 21h
' p1 D2 K$ ]& Q  g: b2 C  ret
) w* @. D8 c/ p, {, w- _  K# C) Wcrlf endp6 {5 k, X8 I. P
;------------------------------------------------------------------------------------------------
3 y+ C# ^2 ?2 p_32bits proc near
8 |( M5 ?; X2 j. K) s5 t  pushad  U5 W6 y! ^- U3 A! h) I( _
  mov cl,4
+ b# Z8 e$ N; M5 ?& E( A  rol ebx,cl3 d5 @6 k7 |+ m" `- j
  call print_4_bits
5 s* d; G$ ?) Q% j  rol ebx,cl
$ f: W/ ^; h7 L  call print_4_bits2 m/ T1 N" G: g2 r# o, E6 e
  rol ebx,cl! w) K6 J0 w+ u9 }, E
  call print_4_bits. E# b7 }3 a$ D! H- V" ~
  rol ebx,cl- R& R, _5 i& v& [- R( W
  call print_4_bits; X2 w  u: F* }% j4 f9 P* Y( B
  rol ebx,cl
9 z0 q& Y5 Q6 b, E( _+ m  call print_4_bits
$ C$ ^0 m& I' F& ]1 z- D2 }; e  rol ebx,cl6 ?5 S3 q1 {9 F! L. o
  call print_4_bits1 p. O1 o* \% j$ p+ k5 [
  rol ebx,cl1 d% q8 W* H! f: I& c' f+ l
  call print_4_bits
4 V+ `7 d+ f! q4 _1 d  rol ebx,cl
/ ?9 K7 R. |/ V, Z4 T  call print_4_bits
7 ?# b% j4 X; T/ j0 l% R  rol ebx,cl+ Z& _$ M$ G5 v# m% O
  popad
# e' W* P9 w5 L( ?8 O6 N0 D2 f  ret7 c2 P( J; t) N5 h( n. M
_32bits endp
6 p* S+ ]6 u5 Y; H( x  b# G+ M;------------------------------------------------------------------------------------------------' Q* ^0 ~, {2 I& {7 `
_16bits proc near
7 q0 P  W8 z- z# {4 l  pusha   * S( m2 T; s- z: s* d
  rol bx,cl
! a8 T. ?7 Q% s+ q6 u' p  call print_4_bits
8 M+ L+ @0 _! n( G4 b  rol bx,cl
. H# k1 W( ^& E2 ^  call print_4_bits
7 s6 e+ T6 k2 e  rol bx,cl. v. O2 ^$ G$ ]. U9 D, m
  call print_4_bits* F; d* Y% r5 v5 u( Q, T, j
  rol bx,cl1 G/ C7 X! v# S0 U# h
  call print_4_bits) {5 B! a7 @) _
  popa
, `8 C+ P* ^* ]: Q  X( }! G  ret
9 W5 e5 U3 P# E: Y; a7 u% }9 M4 x1 l_16bits endp3 f* Z2 t  c+ X* F: {& e9 a
;------------------------------------------------------------------------------------------------
& b( n* V- |5 O9 V_8bits proc near) V- K& `* |' w; S+ D" q! V3 p+ `
  pusha   
9 i" n' E: @  V2 a. A  rol bx,cl
. `2 U3 s5 L4 S; Q- t  call print_4_bits
# F+ c5 ?: _5 u! o* ~3 t/ [  rol bx,cl7 W4 T% }7 V4 }3 j' n5 v
  call print_4_bits
) e" U+ [' E0 J6 s/ H8 |2 R" d+ O( I2 M; z  popa- J+ C# v: \" X4 ]* [: r9 ]2 \
  ret
, k; B4 a; C1 i) H# N: `_8bits endp
* K% _8 x) o2 N  D;------------------------------------------------------------------------------------------------
3 M- I4 A) O/ T0 {! kprint_4_bits proc near
  l' Y/ W* z6 V' l- P1 m  mov dx,bx
2 O! ?. F% V+ c* }( \  and dl,0fh# t0 J2 s8 w; Z' C
  add dl,30h
2 r% z% ^: Z& C; i$ o7 S& F  cmp dl,3ah" v8 b% c( I1 A
  jb print3 L7 ?4 v0 M5 X, _
  add dl,7
7 x# j+ C( y4 ^# Q) Y$ r7 Uprint:   
) ?: w' ~1 l8 b" R  mov ah,2+ H5 r8 u! {4 o1 `1 r% M
  int 21h
$ y3 Z9 S+ \3 N0 U0 z  ret
) i' H( g2 p6 z" j& X/ b; `( iprint_4_bits endp   
& g* A. C% c- e+ i& \8 x# O8 ?;------------------------------------------------------------------------------------------------& y# |* \5 }. Q" `( q8 t+ N
CSEG ends
4 b1 h( _2 H& d1 J! `+ yEND
您需要登录后才可以回帖 登录 | 加入计匠网

本版积分规则

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

GMT+8, 2026-8-11 17:52 , Processed in 0.089996 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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