46. (***)在内存中定义一个用于加密的key和明文字符串,key中的每个数字表示将明文字符串中的对应字符进行旋转移位的次数,负数表示左移位,正数表示右移位。加密key的长度为10个字节:-2, 4, 1, 0, -3, 5, 2, -4, -4, 6。先用加密key处理字符串的前10个字节,再处理接下来的10个字节,以此类推。将密文字符串保存在另一个变量中。
小于的话就NEG 然后ROL
大于等于就ROR
没啥说的,别的和上一道题差不多
DATAS SEGMENT
BUF1 DB'ABCDEFGHIJABCDEFGHIJABCDEFGHIJABCDEFGHIJABCDEFGHIJ'
COUNT1 EQU $-BUF1
BUF2 DB -2,4, 1, 0, -3, 5, 2, -4, -4, 6
COUNT2 EQU 10
BUF3 DB 100 DUP(?);此处输入数据段代码
DATAS ENDS
STACKS SEGMENT
;此处输入堆栈段代码
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX
MOV ES,AX
MOV SI,0
MOV DI,0
CHULI:
MOV AH,BUF1[SI]
MOV AL,BUF2[DI]
CMP AL,0
JL ZUO
JGE YOU
ZUO:
NEG AL
MOV CL,AL
ROL AH,CL
MOV BUF3[SI],AH
JMP NEXT
YOU:
MOV CL,AL
ROR AH,CL
MOV BUF3[SI],AH
JMP NEXT
NEXT:
INC SI
CMP SI,COUNT1
JE END0
INC DI
CMP DI,COUNT2
JE HUI
JMP CHULI
HUI:
MOV DI,0
JMP CHULI
END0:
MOV AH,4CH
INT 21H
CODES ENDS
END START