早教吧 育儿知识 作业答案 考试题库 百科 知识分享
早教吧考试题库频道 --> 计算机类考试 -->计算机三级 -->

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

题目

请编制程序,其功能为:内存中存放着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 0 MOV SI0 MOV CXN CONT: MOV AL SOURCE [SI] MOV AH AL AND AL 0FH ; 取得低4位 AND AH 0F0H ; 取得高4位 INC SI CMP SIN JBE ONE ; 不是最后一个数跳转至ONE MOV SI 0 ONE: MOV BLSOURCE [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 DI0 JNZ STORE1 MOV SOURCE[S1) AL ; 交换位置 DEC SI MOV SOURCE[SI]AH ; 交换位置 INC SI JMP NEXT STORE1: CMP DIN-1 ; 处理的是最后一个数据? JL STORE2 ; 不是则跳转至STORE2 MOV RESULT[DI]AH MOV DI0 MOV RESULT [DI]AL JMP NEXT STORE2: MOV RESULT [D1]AH MOV SOURCE [SI]AL NEXT: INC DI ; 结果数据指针加1 LOOP CONT ; 继续处理 ; *** END *** [INPUT1.DAT 中的输入数据]: 50H61H72H83H94H2BH51h11H45HE9H [输出结果]: 90 07 18 29 32 45 B1 14 1E 50
; *** BEGIN *** MOV DI, 0 MOV SI,0 MOV CX,N CONT: 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 MOV SOURCE[S1), AL ; 交换位置 DEC SI MOV SOURCE[SI],AH ; 交换位置 INC SI JMP NEXT STORE1: CMP DI,N-1 ; 处理的是最后一个数据? JL STORE2 ; 不是则跳转至STORE2 MOV RESULT[DI],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
看了请编制程序,其功能为:内存中存...的网友还看了以下:

一个四位数6031,一个数字对且位置正确.5672,两个数字对位置都不对.4796数字都对但位置都 数学 2020-04-07 …

4题列方程问题,最好把每步的意思也写下!1.一个两位数,十位数字是个位数字的2倍,如果将十位数字和 数学 2020-05-14 …

一个超难的数字题目!一个数,把它的前后两个数字对换后,对换后的数字是原来的数字的9倍.这个数字是什 其他 2020-06-10 …

有一个两位数,十位上的数比个位上数字大三,把个位数字与十位数字对调后所得的有一个两位数,十位上的数 数学 2020-06-11 …

一个两位数,十位上的数字式a,个位上的数字是b,这个两位数可以写成10a+b,如果把两个数字对调, 其他 2020-06-21 …

一个三位数三位上的数字和是11,如果把百位数字与个位数字对调,那么所得的数比原数大693,如果把十 数学 2020-07-07 …

天一阁至今为止历经的年数是一个三位数,这个三位数百位数和十位数字相同,个位数字是十位数字的两倍,如 数学 2020-07-11 …

整数的十进制卡片上写有一个三位数(个位数字不是零),将这个三位数的个位数字与百位数字对调,记这两个 数学 2020-07-15 …

请用一元一次方程解一个三位数,十位上数字是个位上数字的三分之一,十位上的数字比百位上的数字小6,当 数学 2020-07-18 …

某两位数的十位数字与个位上的数字之和是5,把这个数个位上的数字与十位上的数字对调后...某两位数的 数学 2020-07-21 …