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

16 查阅

请编制程序,其功能是:内存中连续存放着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

部分程序已给出,其中原始数据由过程LOAD从文件INPUT1.DAT中读入SOURCE开始的内存单元中。运算结果要求从RESULT开始存放,由过程SAVE保存到文件OUTPUT1.DAT中。

填空BEGIN和END之间已给出的一段源程序使其完整(空白已用横线标出,每行空白一般只需一条指令,但采用功能相当的多条指令亦可),或删除BEGIN和END之间原有的代码并自行编程来完成要求的功能。

对程序必须进行汇编,并与IO.OBJ链接产生PROG1.EXE执行文件,最终运行程序产生结果(无结果或结果不正确者均不得分)。调试中若发现整个程序中存在错误之处,请加以修改。

试题程序:

EXTRN 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,DATA

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,SOURCE[SI]

MOV AH ,AL

AND AL,0FH

AND AH,0FOH

INC SI

CMP SI,N

(1)

MOV SI,0

LW: MOV BL,SOURCE[SI]

MOV BH,BL

AND BL,0FH

AND BH,0FOH

(2) CX

MOV CX,4

L1: SHR BH,1

SHL AL,1

LOOP L1

&

参考答案:

(1)JNZ LW (2) PUSH (3) POP(4) RESULT [DI] (5) SOURCE [SI](1)JNZ LW (2) PUSH (3) POP(4) RESULT [DI] (5) SOURCE [SI] 解析:本题属于数据加密算法的简单应用。对原数据进行加密时,首先要通过对高4位和低4位分别清0来做交换准备,同时当原数据指针下移时,要判断是否到了末尾。如果到了末尾,就要回头去取第1个字节,把它的高4位和末尾字节的

计算机三级