a我考网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 50|回复: 0

[PC技术] 2011下半年计算机等级三级PC技术上机100题(7)

[复制链接]
发表于 2012-7-31 20:55:16 | 显示全部楼层 |阅读模式
  请编制程序,其功能是:内存中共有30个字节型数据,找出其中的两个ASCII字符串并进行校验。欲寻找ASCII字符串由13个字符组成:#(23H),7个ASCII字符,*(2AH),2个ASCII字符,回车符(0DH),换行符(0AH)。
9 C  [" C) s7 X5 i& C  校验方法为:对字符#及字符*之间的7个ASCII字符进行异或操作,若异或操作结果的ASCCII字符表示(异或操作结果高4位的ASCII字符表示在前,低4位的ASCII字符表示在后)与原字符串中字符*之后的两个ASCII字符相同,则将原字符串原样保存;反之,则将原字符串中的所有字符(共13个)均用字符!(21H)代替。* ?" {. @% Z3 c. v7 x
  例如:7 P1 D2 ~' X  D; @, k5 b( F' R
  内存中有 33H,35H,23H('#',第一个字符串开始),46H,41H,30H,2EH,34H,3DH,31H,2AH('*'),32H,31H,0DH,0AH,46H,23H('#',第二个字符串开始),46H,41H,30H,2EH,34H,3DH,30H,2AH('*'),32H,31H,0DH,0AH,55H
4 K( n# X8 X; u( u  y# L  结果为 23H,46H,41H,30H,2EH,34H,3DH,31H,2AH('*'),32H,31H(校验正确,该字符串原样保持),0DH,0AH,21H,21H,21H,21H,21H,21H,21H,21H,21H,21H,21H,21H,21H(校验错,整个字符串用字符'!'代替)。* a5 R: X% t* Q- s
  部分程序已给出, 其中原始数据由过程LOAD从文件INPUT1.DAT中读入SOURCE开始的内存单元中。运算结果要求从RESULT开始存放,由过程SAVE保存到文件OUTPUT1.DAT中。
, l# X$ [( n# g  填空BEGIN和END之间已给出的一段源程序使其完整(空白已用横线标出,每行空白一般只需一条指令, 但采用功能相当的多条指令亦可),或删除BEGIN和END之间原有的代码并自行编程来完成要求的功能。
: U# Y1 o" t( S9 i1 {- [- w  对程序必须进行汇编,并与IO.OBJ链接产生PROG1.EXE执行文件,最终运行程序产生结果(无结果或结果不正确者均不得分)。调试中若发现整个程序中存在错误之处, 请加以修改。1 M! b6 F$ d1 I0 f
  试题程序:* x+ [6 D2 B& K- K# w5 H
  EXTRN LOAD:FAR,SAVE:FAR+ H5 l9 {+ g& D
  N EQU 26. ]! |; K8 Q# H$ P9 e3 m
  STAC SEGMENT STACK0 e; M/ e4 ~6 \) u' K
  DB 128 DUP(?)
1 S  f$ ^7 k/ ~  STAC ENDS6 E7 U3 f7 E4 G; [
  DATA SEGMENT
2 Z2 y; T3 x) M- K! S  SOURCE DB N+4 DUP(?)
% V8 F' a* A! S2 c  RESULT DB N DUP(0)
/ c/ W# x* J# h3 m& F& a  HH DB 2 DUP(0)
6 V, W- t5 z3 I! Q! N& d  NAME0 DB 'INPUT1.DAT',0) L/ S4 u8 o' J" Z7 ]3 n2 q
  NAME1 DB 'OUTPUT1.DAT',0
: M' Y+ Y# G) ?; R4 `3 }8 a  DATA ENDS
7 x/ g. {' ~' P) V! q  CODE SEGMENT0 u- Q# i) ~( M6 `" v+ C
  ASSUME CS:CODE,DS:DATA,SS:STAC
  I9 r+ h# L' w% ~: M9 h  START PROC FAR
- P! w4 k. |$ i! d4 l9 b  PUSH DS
" ]6 K9 g8 t) c0 E3 m  XOR AX,AX
5 A% `2 y# n9 j! u& p5 P. d  PUSH AX4 ]$ F, c# a0 W: f% r( I
  MOV AX,DATA# |* w* i* o; [, t* F
  MOV DS,AX
9 Z" A& y# }2 z3 p8 }  LEA DX,SOURCE ;数据区起始地址
- o) O2 m: x. F6 |# s- n- k  LEA SI,NAME0 ;原始数据文件名3 {5 S* T; [4 _3 B: [& w6 |
  MOV CX,N+4 ;字节数
3 }7 w! M: s5 ]) l( C7 o" ~  CALL LOAD ;从'INPUT1.DAT'中读取数据! }/ x9 r& J  \+ E9 l
  ;****BEGIN****! h! \) K$ \2 H' e4 ?: B8 G7 i4 L1 e
  MOV SI,07 d6 Y# q- M, }: X; `- V% @
  MOV DI,0- u  p& t1 B- q
  MOV BX,2 ;两个ASCII字符串
) E. x  L1 y9 i+ H  REPEAT: MOV AH,0
3 [- S6 U! `' c6 y6 c/ Q  SEARCH: MOV AL,SOURCE[SI]9 W) i! [% b- A
  INC SI: V4 G% A8 s5 N5 w( Y6 q% E
  CMP AL,'#'2 W: p9 Y  ~7 }! G3 O
  ________ SEARCH$ X, J3 Y; j3 ~% H+ K/ z0 p+ |
  MOV RESULT[DI],AL9 J6 ?% ~7 K0 V  Y* z' ~/ v
  INC DI
# Z( X, O0 z6 N1 F2 x5 l  SEARCH1:MOV AL,SOURCE[SI]6 G& G2 f- F, E- c
  INC SI: d6 V' M2 {/ m! ]4 O
  CMP AL,____________
' z, s* P0 H1 F4 S  JE ASCII9 D: N2 I7 u/ X1 {+ C
  MOV RESULT[DI],AL- M6 O$ y# Q! I5 C
  INC DI+ Q, n% j1 T2 l
  XOR AH,AL
7 ?" f: a% n, Y4 f  JMP _______________  _1 u4 f  {: k+ u$ s. o
  ASCII: MOV RESULT[DI],AL
1 ]' ~# w+ D3 a' j8 W8 l  INC DI
" [- _& y1 q; r% Q$ m" e  PUSH DI
/ f. {8 t: V! ^# R  MOV DI,0. W1 T! h; f2 q" N
  MOV DH,2
0 e$ u7 @( Q4 a1 U; Z' `  MOV DL,AH ;异或结果暂存在DL中+ |/ y# t4 t* ^' l+ W
  MOV CL,4 ;先将异或结果高4位转换成ASCII字符
5 |1 K7 z- y7 B9 b5 Q  SHR AH,CL ;本行开始的4行语句将一个十六进制数转换为ASCII码
' d# o, `2 t1 Z& {! [2 i  CHANGE: CMP AH,10' C9 ], q0 B1 S  b3 C
  JL ADD_0
3 ]. |$ Q1 Z* y; E2 w0 t1 M  ADD AH,'A'-'0'-102 I4 g. ^7 }" {
  ADD_0: ADD AH,'0'
, r$ k" T( Q  \  MOV HH[DI],AH
' Y- ~, e, x/ F  INC DI
2 s  {. F8 P8 v  DEC DH! m3 L: @4 z/ S0 e3 n
  JZ EXT, B2 l6 p. m$ O! I' A' B! Q
  MOV AH,DL ;再将异或结果低4位转换成ASCII字符* C6 O  K5 ^1 b' k
  AND AH,0FH
, L; n, W# b. j2 D- x7 m/ b; x+ p  JMP CHANGE7 d* b; F, ~8 l2 K
  EXT: POP DI! W3 m; E2 w$ P  p
  MOV AL,SOURCE[SI]! m$ t2 v" J2 X+ m1 s
  MOV RESULT[DI],AL
5 j. ~0 {; b$ e  T: W  INC SI
$ x6 y" v0 x. Q5 m  INC DI
- E- L, O+ x% _" M  MOV AH,SOURCE[SI]3 ], W% ^7 p+ n8 }
  MOV RESULT[DI],AH
8 z# Y# V1 z8 @3 x- I  INC SI# g$ j( Y7 O# b6 [
  INC DI
$ K5 E4 f0 E6 J  MOV DL,HH
1 c2 }: F- K  a- L  MOV DH,HH+1) G* _- l4 N8 ^* I
  CMP AX,DX
6 |( F" X, z$ [  ________ ERR
* M, k+ f5 B9 n5 L' u/ V: ]  MOV AL,0DH ;校验正确
8 Q+ l7 I# W9 x6 f- l  MOV RESULT[DI],AL  E' L  f  m9 {9 T( f* W" h$ N
  INC DI$ O# ~' {1 M3 a8 ]( f; F6 [
  MOV AL,0AH
: ^7 i& z6 q/ d: M6 U3 b  MOV RESULT[DI],AL
2 O0 T( j, A6 [$ X6 x. t- X  t  INC DI) p# \& z0 \  F: i
  JMP LP9 H" X0 |) T$ z' h
  ERR: SUB DI,11 ;校验错误
1 P: W/ h; Y- ^. j7 o8 L  MOV AL,'!'8 z( m9 S0 Z% P( s" R# ^1 ]5 ?
  MOV CX,____________
! i, P. |; p: q1 a' p# H  COVER: MOV RESULT[DI],AL' w3 y) u* N) ]. K
  INC DI# d% ~8 j8 u# K$ N  ?
  LOOP COVER! \) A7 J) p% r8 e$ p& ?2 c% w0 }
  LP: ________________________+ L# t, Q! J( L
  JZ EXIT
/ _6 ^) D0 f( \0 p9 \6 [0 M9 g  JMP REPEAT+ S' l! J, B: C" M' B. ]9 W* @
  EXIT: NOP3 Q3 u" C3 F7 n$ T) _' y0 E+ z
  ;****END****
0 o+ ~& x7 c9 `  LEA DX,RESULT ;结果数据区首址" {4 G7 @) f; d  z6 z1 W
  LEA SI,NAME1 ;结果文件名
: {8 Q* D; I& G* X5 J  MOV CX,N ;字节数
* y" K; O$ e4 z$ L: o  CALL SAVE ;保存结果到文件8 z3 R+ k! T8 P' e/ q
  RET
( v% Y* x) A3 h  START ENDP
5 d8 P/ b: ?* g% p) @+ `1 X9 E6 P  K  CODE ENDS
9 u' g+ @( y1 X1 ^9 a  END START
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Woexam.Com ( 湘ICP备18023104号 )

GMT+8, 2024-6-15 23:16 , Processed in 0.316049 second(s), 22 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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