1、三级 PC 技术机试-207 及答案解析(总分:100.00,做题时间:90 分钟)一、上机题(总题数:1,分数:100.00)1.请编制程序,其功能为:内存中存放着 10 个二进制数,需对此数组进行加密。方法为将前一个字节数(两位十六进制数 a1a2 表示)的低位十六进制数 a2 与后一个字节数(两位十六进制数 b1b2 表示)的高位十六进制数 b1 进行交换:第一个字节数的高位十六进制数与最后一个字节的低位十六进制数进行交换,加密后的结果存入内存。例如:内存中原始数据为:50H,61H,72H,83H,94H,E9H结果:90H,07H,18H,29H,3AH,85H部分程序已经给出,其中
2、原始数据由 LOAD 过程从文件 INPUT1.DAT 中读入从 SOURCE 开始的内存单元,转换结果(要求从 RESULT 开始读入)由 SAVE 过程保存到 OUTPUT1.DAT 文件中。请在 BEGIN 和 END 之间补充使其完整,完成要求的功能。或删除 BEGIN 和 END 之间原有的代码并自行编程来完成要求的功能。对程序必须进行汇编,并与 IO.OBJ 链接产生 PROG1. EXE 执行文件,最终产生运行结果。部分程序如下:;PROG1.ASMEXTRN LOAD:FAR, SAVE:FARN EQU 10DSEG SEGMENTSOURCE DW N DUP (?)RES
3、ULT DW N DUP (0)NAME0 DB INPUT1.DAT,0NAME1 DB OUTPUT1.DAT,0DSEG ENDSSSEG SEGMENT STACKDB 128 DUP (?)SSEG ENDSCSEG SEGMENTASSUME CS:CSEG, DS:DSEG;SS:SSEGSTART PROC FARPUSH DSXOR AX,AXPUSH AXMOV AX, DSEGMOV DS,AXMOV ES, AXLEA DX,SOURCELEA SI,NAME0MOV CX,NCALL LOAD; * BEGIN *MOV DI,0MOV SI,0MOV CX,NCON
4、T: MOV AL, SOURCE SIMOV AH,ALAND AL,0FHAND AH,0F0HINC SICMP SI,N_MOV SI,0ONE: MOV BL, SOURCE SIMOV BH,BLAND BL,0FHAND BH,0FOH_MOV CX,4LI: SBR BH, 1SHL AL,1LOOP L1_,CXOR AH,BHOR AL,BLCMP DI, 0JNZ STOPE1MOV SOURCE SI ,ALDEC SIMOV SOURCE SI, AHINC SIJMP NEXTSTORE1: CMP DI, N-1JL STORE2MOV RESULT DI, AH
5、MOV DI, 0MOV RESULT DI, ALJMP NEXTSTORE2: MOV _, AHMOV _, ALNEXT: INC DILOOP CONT; * END *LEA DX, RESULTLEA SI, NAME1MOV CX, NCALL SAVERETSTART ENDPCSEG ENDSEND START(分数:100.00)_三级 PC 技术机试-207 答案解析(总分:100.00,做题时间:90 分钟)一、上机题(总题数:1,分数:100.00)1.请编制程序,其功能为:内存中存放着 10 个二进制数,需对此数组进行加密。方法为将前一个字节数(两位十六进制数 a
6、1a2 表示)的低位十六进制数 a2 与后一个字节数(两位十六进制数 b1b2 表示)的高位十六进制数 b1 进行交换:第一个字节数的高位十六进制数与最后一个字节的低位十六进制数进行交换,加密后的结果存入内存。例如:内存中原始数据为:50H,61H,72H,83H,94H,E9H结果:90H,07H,18H,29H,3AH,85H部分程序已经给出,其中原始数据由 LOAD 过程从文件 INPUT1.DAT 中读入从 SOURCE 开始的内存单元,转换结果(要求从 RESULT 开始读入)由 SAVE 过程保存到 OUTPUT1.DAT 文件中。请在 BEGIN 和 END 之间补充使其完整,完
7、成要求的功能。或删除 BEGIN 和 END 之间原有的代码并自行编程来完成要求的功能。对程序必须进行汇编,并与 IO.OBJ 链接产生 PROG1. EXE 执行文件,最终产生运行结果。部分程序如下:;PROG1.ASMEXTRN LOAD:FAR, SAVE:FARN EQU 10DSEG SEGMENTSOURCE DW N DUP (?)RESULT DW N DUP (0)NAME0 DB INPUT1.DAT,0NAME1 DB OUTPUT1.DAT,0DSEG ENDSSSEG SEGMENT STACKDB 128 DUP (?)SSEG ENDSCSEG SEGMENTAS
8、SUME CS:CSEG, DS:DSEG;SS:SSEGSTART PROC FARPUSH DSXOR AX,AXPUSH AXMOV AX, DSEGMOV DS,AXMOV ES, AXLEA DX,SOURCELEA SI,NAME0MOV CX,NCALL LOAD; * BEGIN *MOV DI,0MOV SI,0MOV CX,NCONT: MOV AL, SOURCE SIMOV AH,ALAND AL,0FHAND AH,0F0HINC SICMP SI,N_MOV SI,0ONE: MOV BL, SOURCE SIMOV BH,BLAND BL,0FHAND BH,0F
9、OH_MOV CX,4LI: SBR BH, 1SHL AL,1LOOP L1_,CXOR AH,BHOR AL,BLCMP DI, 0JNZ STOPE1MOV SOURCE SI ,ALDEC SIMOV SOURCE SI, AHINC SIJMP NEXTSTORE1: CMP DI, N-1JL STORE2MOV RESULT DI, AHMOV DI, 0MOV RESULT DI, ALJMP NEXTSTORE2: MOV _, AHMOV _, ALNEXT: INC DILOOP CONT; * END *LEA DX, RESULTLEA SI, NAME1MOV CX
10、, NCALL SAVERETSTART ENDPCSEG ENDSEND START(分数:100.00)_正确答案:(答案 本题答案为:; * BEGIN *MOV DI, 0MOV SI,0MOV CX,NCONT: MOV AL, SOURCE SIMOV AH, ALAND AL, 0FH ; 取得低 4 位AND AH, 0F0H ; 取得高 4 位INC SICMP SI,NJBE ONE ; 不是最后一个数,跳转至 ONEMOV SI, 0ONE: MOV BL,SOURCE SIMOV BH, BLAND BL, 0FHAND BH, 0F0HPUSH CXMOV CX, 4
11、L1: SHR BH, 1SHL AL, 1LOOP L1 ; 循环移位POP CXOR AH, BH ; 加密运算OR AL, BL ; 加密运算CMP DI,0JNZ STORE1MOV SOURCESI, AL ; 交换位置DEC SIMOV SOURCESI,AH ; 交换位置INC SIJMP NEXTSTORE1: CMP DI,N-1 ; 处理的是最后一个数据?JL STORE2 ; 不是则跳转至 STORE2MOV RESULTDI,AHMOV DI,0MOV RESULT DI,ALJMP NEXTSTORE2: MOV RESULT DI,AHMOV SOURCE SI,ALNEXT: INC DI ; 结果数据指针加 1LOOP CONT ; 继续处理; * END *INPUT1.DAT 中的输入数据:50H,61H,72H,83H,94H,2BH,51H,11H,45H,E9H输出结果:90 07 18 29 32 45 B1 14 1E 50)解析: