a我考网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 51|回复: 0

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

[复制链接]
发表于 2012-7-31 20:55:16 | 显示全部楼层 |阅读模式
  请编制程序,其功能是:内存中共有30个字节型数据,找出其中的两个ASCII字符串并进行校验。欲寻找ASCII字符串由13个字符组成:#(23H),7个ASCII字符,*(2AH),2个ASCII字符,回车符(0DH),换行符(0AH)。! ^  Q! a6 i' P5 {' m- `- A2 F
  校验方法为:对字符#及字符*之间的7个ASCII字符进行异或操作,若异或操作结果的ASCCII字符表示(异或操作结果高4位的ASCII字符表示在前,低4位的ASCII字符表示在后)与原字符串中字符*之后的两个ASCII字符相同,则将原字符串原样保存;反之,则将原字符串中的所有字符(共13个)均用字符!(21H)代替。
* u: k; ^7 n  J. x8 {9 @+ |! ~  例如:  ]& q+ N8 h  U) w7 L1 ^
  内存中有 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$ n. [) x; {2 v* l6 b; i. x6 D
  结果为 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(校验错,整个字符串用字符'!'代替)。; t6 a# A5 c. q
  部分程序已给出, 其中原始数据由过程LOAD从文件INPUT1.DAT中读入SOURCE开始的内存单元中。运算结果要求从RESULT开始存放,由过程SAVE保存到文件OUTPUT1.DAT中。/ p6 p9 U9 r, S% k
  填空BEGIN和END之间已给出的一段源程序使其完整(空白已用横线标出,每行空白一般只需一条指令, 但采用功能相当的多条指令亦可),或删除BEGIN和END之间原有的代码并自行编程来完成要求的功能。" `! B( h1 f" o0 {. V  V" D
  对程序必须进行汇编,并与IO.OBJ链接产生PROG1.EXE执行文件,最终运行程序产生结果(无结果或结果不正确者均不得分)。调试中若发现整个程序中存在错误之处, 请加以修改。
( P7 L) Z* c4 z4 v* g8 z9 `8 r  试题程序:; d% ~" k4 a1 D* Q5 v! v
  EXTRN LOAD:FAR,SAVE:FAR/ V) i/ q/ ^; c. I- D* X/ ]
  N EQU 26
" P" C( D: n1 ^+ f7 V1 e  STAC SEGMENT STACK
: A  Z' K6 L2 R* i) _6 E! [; r  DB 128 DUP(?)
* o' ~4 Z: E  i1 ?3 [& P* s  STAC ENDS. S+ S  X( W+ U& ?1 U
  DATA SEGMENT
- v! `% K" n+ Y: J. t  SOURCE DB N+4 DUP(?), {# a/ `% y* J1 ]6 f) @; A
  RESULT DB N DUP(0)
! o, H8 {$ d( O/ w% ]' E  HH DB 2 DUP(0), r# t' }( U. x- }( j
  NAME0 DB 'INPUT1.DAT',0
5 ?+ ?( q3 n+ K  NAME1 DB 'OUTPUT1.DAT',0. l; l3 S$ N: f6 A( \# S" ~
  DATA ENDS% B9 R2 l: H! K0 I! i
  CODE SEGMENT* I2 c! T- F! c# k& X
  ASSUME CS:CODE,DS:DATA,SS:STAC5 M9 u0 u7 b% w
  START PROC FAR
: _; ]# m" {( v3 ?# I8 F  PUSH DS
# l7 w  b3 w  M# w' ?4 A8 u  XOR AX,AX
0 I' [7 g3 {, ^" P! b/ c  PUSH AX) B  a& i: m& B( k2 Z* s
  MOV AX,DATA
' y( u- a9 p  b5 O8 @  MOV DS,AX
/ `0 \/ m, l3 P" X& {( x, E  LEA DX,SOURCE ;数据区起始地址
$ [5 o/ k  d) E6 Q( ]  LEA SI,NAME0 ;原始数据文件名( X* m% g' Q. X7 E8 v, f
  MOV CX,N+4 ;字节数
) W) t4 V% h1 \$ E  CALL LOAD ;从'INPUT1.DAT'中读取数据3 M0 B" m/ F. `
  ;****BEGIN****8 o  f) Z5 \& s- m
  MOV SI,0
; F* z% n4 z+ T; U$ v1 n$ ?2 |3 c( j  MOV DI,0% O! n/ x. |. h
  MOV BX,2 ;两个ASCII字符串
% c& M+ v( H$ r  REPEAT: MOV AH,04 k8 ^. y& [4 n. {2 ]! `
  SEARCH: MOV AL,SOURCE[SI]
: u( r! X* Q% H  G6 ]$ x  INC SI5 W7 O; \8 j8 R' r
  CMP AL,'#', _0 }9 I& l6 b  K9 G9 C
  ________ SEARCH0 Z, y' r' K; R. c
  MOV RESULT[DI],AL- o/ H# `$ b4 E. ^. X5 R" _' u# o
  INC DI: j, n, _; V, K3 b) i5 s
  SEARCH1:MOV AL,SOURCE[SI]
% e' Y" N7 K0 }. q* c6 j( b  INC SI
; D' I  N5 e: F. g; L/ a/ j  CMP AL,____________
: O  x4 c+ g, I  JE ASCII( h9 h: s1 ]" e
  MOV RESULT[DI],AL4 h5 {+ v- f& l2 `3 ^- i
  INC DI8 ^1 ?0 t4 ^, `+ v7 H$ G6 f4 F/ d
  XOR AH,AL
* t% _8 s9 ~  e4 u, _  JMP _______________2 v  i; @% S, C/ ?) |
  ASCII: MOV RESULT[DI],AL2 h6 |0 {; ]5 l3 q8 Y
  INC DI  Z! G# J( j5 F
  PUSH DI
7 _# Y* o- P7 N, @8 h. j! D  MOV DI,0
/ B. X$ I% S) ~2 o% h4 r  MOV DH,2
% @; L8 G% k: D) Q  MOV DL,AH ;异或结果暂存在DL中
! p' e, r! x5 E% t( ~; t3 }# t  MOV CL,4 ;先将异或结果高4位转换成ASCII字符9 Y' {$ s4 ]0 z
  SHR AH,CL ;本行开始的4行语句将一个十六进制数转换为ASCII码
9 V4 S7 g/ v+ I4 j) u, Z( d& o: M  CHANGE: CMP AH,109 B6 C7 K; q+ _2 p  r9 s
  JL ADD_08 h& F6 U- K/ V
  ADD AH,'A'-'0'-104 w3 [: x: y2 k$ P
  ADD_0: ADD AH,'0'( n+ L8 y4 o3 J6 T2 q% v' ]
  MOV HH[DI],AH3 w1 ?8 Z$ c2 v% H0 [" g* z9 k
  INC DI
% B$ e( M5 @# K, B. l0 e  DEC DH
7 S; |5 w/ S' \* F! F  JZ EXT: Y& ~# D! R$ T, J! M2 k
  MOV AH,DL ;再将异或结果低4位转换成ASCII字符
& m6 |6 |% |0 f6 J+ b$ n  AND AH,0FH
% S1 |& w& c* d- j* f: H5 T* t9 d- E: w  JMP CHANGE
# Z5 O' L" Z' ?) S2 V: p  EXT: POP DI  P8 M8 ^( l5 D$ f" X1 E
  MOV AL,SOURCE[SI]. t% h8 o* Z2 |& r3 f. g: A
  MOV RESULT[DI],AL" K6 Q6 D' H# K% u; r" L9 t
  INC SI
! j( D9 N4 R* Y! d. Q  INC DI5 \2 k- @9 k* h0 s. p
  MOV AH,SOURCE[SI]
7 y1 g9 o/ l8 B! w6 f/ h0 s  MOV RESULT[DI],AH2 i6 q) Y  b9 ?8 }
  INC SI
6 G$ O/ e8 x8 l& U  INC DI
7 b3 X3 h7 g- s7 w0 O: O  MOV DL,HH
# b$ D$ q8 D. {3 @3 D' R- K: q  MOV DH,HH+14 B/ F& y. A  G( J6 V
  CMP AX,DX
' z- s- C/ t0 q0 y& J  ________ ERR2 |7 h7 S- S, b2 v" t
  MOV AL,0DH ;校验正确$ _: k8 Z" }2 @8 L* U, m' M
  MOV RESULT[DI],AL  _2 B/ P- j- Q0 p; B
  INC DI) z3 v0 V; [/ a
  MOV AL,0AH: P/ {  \3 _1 i0 g: {* S9 W
  MOV RESULT[DI],AL/ j1 j, R( s+ R6 i: u- G
  INC DI
; x9 V2 K1 L+ ]+ J5 l  JMP LP6 s- R0 ?7 S7 ~& |8 `! ?' w
  ERR: SUB DI,11 ;校验错误; F& Q# R' _3 i, f
  MOV AL,'!'
- h7 [- J( Y! J% [9 |  MOV CX,____________
; C! `$ j) c/ U, r- K* X  COVER: MOV RESULT[DI],AL
' o! w+ a$ Q! ^  S0 Q  INC DI* C4 q" d7 ~9 v9 k4 F# Y" ^
  LOOP COVER
5 T4 |$ f' L3 P) p1 C  LP: ________________________
7 Q( ]5 o- I: L& I6 `  JZ EXIT
6 O- p% S0 R  X. j3 V  JMP REPEAT1 n& N) Q5 z! X4 |6 ^, ]3 ?' X" ]
  EXIT: NOP
. }+ S) u4 W* q+ q! @- l  ;****END****
9 w' |9 d% B3 M7 Y8 p% R  LEA DX,RESULT ;结果数据区首址
% {0 U% [/ c% ?/ ?. S1 k  LEA SI,NAME1 ;结果文件名2 I# _7 D$ C, T' l% |4 T* M/ b
  MOV CX,N ;字节数
, B2 _# o# V7 v5 E7 O' x  CALL SAVE ;保存结果到文件
' Q+ B) \0 S/ G  RET
9 Y6 c  S% h. Y" H, W/ f, j2 r; f  START ENDP% @7 Y6 [5 K  `! m$ A' s" w
  CODE ENDS+ R4 f0 k; d& z+ P4 [
  END START
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-6-20 03:18 , Processed in 0.374849 second(s), 21 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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