1、PC技术机试模拟试卷 36及答案与解析 一、程序设计题 1 请编制程序,其功能为:内存中存放着 10个二进制数,需对此数组进行加密。方法为将前一个字节数 (两位十六进制数 a1a2表示 )的低位十六进制数 a2与后一个字节数 (两位十六进制数 b1b2表示 )的高位十六进制数 b1进行交换:第一个字节数的高位十六进制数与最后一个字节的低位十六进制数进行交换,加密后的结果存入内存。 例如:内存中原始数据为: 50H, 61H, 72H, 83H, 94H, , E9H 结果: 90H, 07H, 18H, 29H, 3AH, , 85H 部分程序已经给出,其中原始数据由 LOAD 过程从文件 I
2、NPUT1.DAT 中读入从SOURCE开始的内存单元,转换结果 (要求从 RESULT开始读入 )由 SAVE过程保存到 OUTPUT1.DAT文件中。请在 BEGIN和 END之间补充使其完整,完成要求的功能。或删除 BEGIN和 END之间原有的代码并自行编程来完成要求的功能。 对程序必须进行汇编,并与 IO.OBJ链接产生 PROG1. EXE执行文件,最终产生运行结果。 部分程序如下 : ;PROG1.ASM EXTRN LOAD:FAR, SAVE:FAR N EQU 10 DSEG SEGMENT SOURCE DW N DUP (?) RESULT DW N DUP (0) N
3、AME0 DB INPUT1.DAT,0 NAME1 DB OUTPUT1.DAT,0 DSEG ENDS SSEG SEGMENT STACK DB 128 DUP (?) SSEG ENDS CSEG SEGMENT ASSUME CS:CSEG, DS:DSEG;SS:SSEG START PROC FAR PUSH DS XOR AX,AX PUSH AX MOV AX, DSEG MOV DS,AX MOV ES, AX LEA DX,SOURCE LEA SI,NAME0 MOV CX,N CALL LOAD ; * BEGIN * MOV DI,0 MOV SI,0 MOV CX
4、,N CONT: MOV AL, SOURCE SI MOV AH,AL AND AL,0FH AND AH,0F0H INC SI CMP SI,N _ MOV SI,0 ONE: MOV BL, SOURCE SI MOV BH,BL AND BL,0FH AND BH,0FOH _ MOV CX,4 LI: SBR BH, 1 SHL AL,1 LOOP L1 _,CX OR AH,BH OR AL,BL CMP DI, 0 JNZ STOPE1 MOV SOURCE SI ,AL DEC SI MOV SOURCE SI, AH INC SI JMP NEXT STORE1: CMP
5、DI, N-1 JL STORE2 MOV RESULT DI, AH MOV DI, 0 MOV RESULT DI, AL JMP NEXT STORE2: MOV _, AH MOV _, AL NEXT: INC DI LOOP CONT ; * END * LEA DX, RESULT LEA SI, NAME1 MOV CX, N CALL SAVE RET START ENDP CSEG ENDS END START PC技术机试模拟试卷 36答案与解析 一、程序设计题 1 【正确答案】 ; * BEGIN * MOV DI, 0 MOV SI,0 MOV CX,N CONT:
6、MOV AL, SOURCE SI MOV AH, AL AND AL, 0FH ; 取得低 4位 AND AH, 0F0H ; 取得高 4位 INC SI CMP SI,N JBE ONE ; 不是最后一个数,跳转至 ONE MOV SI, 0 ONE: MOV BL,SOURCE SI MOV BH, BL AND BL, 0FH AND BH, 0F0H PUSH CX MOV CX, 4 L1: SHR BH, 1 SHL AL, 1 LOOP L1 ; 循环移位 POP CX OR AH, BH ; 加密运算 OR AL, BL ; 加密运算 CMP DI,0 JNZ STORE1
7、MOV SOURCES1), AL ; 交换位置 DEC SI MOV SOURCESI, AH ; 交换位置 INC SI JMP NEXT STORE1: CMP DI, N-1 ; 处理的是最后一个数据 ? JL STORE2 ; 不是则跳转至 STORE2 MOV RESULTDI, AH MOV DI, 0 MOV RESULT DI, AL JMP NEXT STORE2: MOV RESULT D1, AH MOV SOURCE SI, AL NEXT: INC DI ; 结果数据指针加 1 LOOP CONT ; 继续处理 ; * END * INPUT1.DAT 中的输入数据 : 50H, 61H, 72H, 83H, 94H, 2BH, 51H, 11H, 45H,E9H 输出结果 : 90 07 18 29 32 45 B1 14 1E 50