A-A+

请编制程序 其功能为:内存中存放着10个二进制数 需对此数组进行加密。方法为将前一个字节数(

2022-08-05 22:48:31 问答库 阅读 173 次

问题详情

请编制程序,其功能为:内存中存放着10个二进制数,需对此数组进行加密。方法为将前一个字节数(两位十六进制数a1a2表示)的低位十六进制数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之间补充使其完整,完成要求的功能。或删除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)
NAME0 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,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 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请帮忙给出正确答案和分析,谢谢!

参考答案

正确答案:; *** BEGIN ***MOV DI 0MOV SI0MOV CXNCONT: MOV AL SOURCE [SI]MOV AH ALAND AL 0FH ; 取得低4位AND AH 0F0H ; 取得高4位INC SICMP SINJBE ONE ; 不是最后一个数跳转至ONEMOV SI 0ONE: MOV BLSOURCE [SI]MOV BH BLAND BL 0FHAND BH 0F0HPUSH CXMOV CX 4L1: SHR BH 1SHL AL 1LOOP L1 ; 循环移位POP CXOR AH BH ; 加密运算OR AL BL ; 加密运算CMP DI0JNZ STORE1MOV SOURCE[S1) AL ; 交换位置DEC SIMOV SOURCE[SI]AH ; 交换位置INC SIJMP NEXTSTORE1: CMP DIN-1 ; 处理的是最后一个数据?JL STORE2 ; 不是则跳转至STORE2MOV RESULT[DI]AHMOV DI0MOV RESULT [DI]ALJMP NEXTSTORE2: MOV RESULT [D1]AHMOV SOURCE [SI]ALNEXT: INC DI ; 结果数据指针加1LOOP CONT ; 继续处理; *** END ***[INPUT1.DAT 中的输入数据]:50H61H72H83H94H2BH51H11H45HE9H[输出结果]:90 07 18 29 32 45 B1 14 1E 50
; *** BEGIN ***MOV DI, 0MOV SI,0MOV CX,NCONT: MOV AL, SOURCE [SI]MOV AH, ALAND AL, 0FH ; 取得低4位AND AH, 0F0H ; 取得高4位INC SICMP SI,NJBE ONE ; 不是最后一个数,跳转至ONEMOV SI, 0ONE: MOV BL,SOURCE [SI]MOV BH, BLAND BL, 0FHAND BH, 0F0HPUSH CXMOV CX, 4L1: SHR BH, 1SHL AL, 1LOOP L1 ; 循环移位POP CXOR AH, BH ; 加密运算OR AL, BL ; 加密运算CMP DI,0JNZ STORE1MOV SOURCE[S1), AL ; 交换位置DEC SIMOV SOURCE[SI],AH ; 交换位置INC SIJMP NEXTSTORE1: CMP DI,N-1 ; 处理的是最后一个数据?JL STORE2 ; 不是则跳转至STORE2MOV RESULT[DI],AHMOV DI,0MOV RESULT [DI],ALJMP NEXTSTORE2: MOV RESULT [D1],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

考点:数组,字节