1、PC技术机试模拟试卷 28及答案与解析 一、程序设计题 1 请编制程序,其功能是:内存中连续存放着 10个二进制字节数,需对此组数进行加密,其方法为:将前一个字节数 (两位十六进制数 a1a2表示 )的低位十六进制数 a2与后一个字节数 (两位十六进制数 b1b2表示 )的高位十六进制数 b1进行交换;第一个字节数的高位十六进制数与最后一个字节数的低十六进制数进行交换,加密后的结果存入内存。 例如: 内存中有: 50H,61H,72H,83H,94H,A5H,B6H,C7H,D8H,E9H 结果为: 96H,07H,18H,29H,3AH,4BH,5CH,6DH,7EH,85H 部分程序已给出
2、,其中原始数据由过程 LOAD从文件 INPUT1.DAT中读入SOURCE开始的内存单元中。运算结果要求从 RESULT开始存放,由过程 SAVE保存到文件 OUTPUT1.DAT中。 填空 BEGIN和 END之间已给出的一段源程序使其完整 (空白已用横线标出,每行空白一般只需一条指令,但采用功能相当的多条指令亦可 ),或删除 BEGIN和END之间原有的代码并自行编程来完成要求的功能。 对程序必须进行汇编,并与 IO.OBJ链接产生 PROG1.EXE执行文件,最终运行程序产生结果 (无结果或结果不正确者均不得分 )。调试中若发现整个程序中存在错误之处,请加以修改。 试题程序: EXTR
3、N LOAD:FAR, SAVE:FAR N EQU 10 STAC SEGMENT STACK DB 128 DUP(?) STAC ENDS DATA SEGMENT SOURCE DB N DUP(?) ; 顺序存放 10个 ASCII字符 RESULT DB N DUP(0) ; 存放结果 NAME0 DB INPUT1.DAT,0 NAME1 DB OUTPUT1.DAT,0 DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STAC START PROC FAR PUSH DS XOR AX,AX PUSH AX MOV AX,DAT
4、A MOV DS,AX LEA OX,SOURCE ; 数据区起始地址 LEA SI,NAMEO ; 原始数据文件名 MOV CX,N ; 字节数 CALL LOAD ; 从 INPUT1.DAT中读取数据 ;*BEGIN* MOV DI,0 MOV SI,0 MOV CX,N AGN1: MOV AL,SOURCESI MOV AH ,AL AND AL,0FH AND AH,0FOH INC SI CMP SI,N (1) MOV SI,0 LW: MOV BL,SOURCESI MOV BH,BL AND BL,0FH AND BH,0FOH (2) CX MOV CX,4 L1: SH
5、R BH,1 SHL AL,1 LOOP L1 (3) CX OR AH,BH OR AL,BL CMP DI,0 JNZ STORE1 MOV SOURCESI,AL DEC SI MOV SOURCESI,AH INC SI JMP NEXT STORE1: CMP DI,N-1 JL STORE2 MOV RESULTDI,AH MOV DI,0 MOV RESULTDI,AL JMP NEXT STORE2: MOV (4) ,AH MOV (5) ,AL NEXT: INC DI LOOP AGN1 ;*END* LEA DX,RESULT ; 结果数据区首址 LEA SI,NAME
6、1 ; 结果文件名 MOV CX,N ; 字节数 CALL SAVE ; 保存结果文件 RET START ENDP CODE ENDS END START PC技术机试模拟试卷 28答案与解析 一、程序设计题 1 【正确答案】 (1)JNZ LW (2) PUSH (3) POP(4) RESULT DI (5) SOURCE SI 【试题解析】 本题属于数据加密算法的简单应用。对原数据进行加密时,首先要通过对高 4位和低 4位分别清 0来做交换准备,同时当原数据指针下移时,要判断是否到了末尾。如果到了末尾,就要回头去取第 1个字节,把它的高 4位和末尾字节的低 4位互换,接下来通过进行逻辑移位 4次后,后一个字节的高 4位与前一个字节低 4位交换,前一个字节低 4位与后一字节的高 4位交换。