汇编语言:根据规则对数字加密和解密
题目要求运行截图
编程平台代码实现
题目要求
先从键盘上输入一串字符,将数字按照下表的密码数字进行加密,将加密后的数字在第2行显示出来。然后用解密数字对加密后的数字进行解密,并在第3行显示解密后的数字。 其中,显示功能由子程序OUTPUT完成,不适用与加密规则和解密规则的内容不做处理。 例如:输入:“18”,则在第2行显示:“52”,第3行显示:“18”。 数字0-9与加密和解密数据的对应关系如下: 原数字: 0 1 2 3 4 5 6 7 8 9 密码数字: 7 5 9 1 3 6 8 0 2 4 原密码数字: 0 1 2 3 4 5 6 7 8 9 解密数字: 7 3 8 4 9 1 5 0 6 2
运行截图
编程平台
Masm for Windows 集成实验环境 2012.5
代码实现
DATAS SEGMENT
buffer DB 100
,0
,100 DUP
(?
);存放输入的数字和加密、解密后的数字
passwdnu DB 7
,5
,9
,1
,3
,6
,8
,0
,2
,4
;密码数字
decrypnu DB 7
,3
,8
,4
,9
,1
,5
,0
,6
,2
;解密数字
hint DB
'Please enter a string of numbers: $'
before DB
'Encrypted: $'
after DB
'Decrypted: $'
break DB 13
,10
,'$'
DATAS ENDS
STACKS SEGMENT STACK
DB 200H DUP
(?
)
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES
,DS:DATAS
,SS:STACKS
MAIN PROC
MOV AX
,DATAS
MOV DS
,AX
LEA DX
,hint
;输入前提示
MOV AH
,9H
INT 21H
LEA DX
,buffer
;定位到缓冲区
MOV AH
,0AH
INT 21H
LEA DX
,break;换行
MOV AH
,9H
INT 21H
LEA DX
,before
;换行
MOV AH
,9H
INT 21H
CALL ENCRYPT
;加密
CALL OUTPUT
;显示数据
LEA DX
,break;换行
MOV AH
,9H
INT 21H
LEA DX
,after
;换行
MOV AH
,9H
INT 21H
CALL DECODING
;解密
CALL OUTPUT
;显示数据
MOV AH
,4CH
INT 21H
MAIN ENDP
;子程序
;功能:加密数据。
;入口参数:buffer存放要加密的数据。
ENCRYPT PROC
LEA
SI,buffer
;定位到缓冲区
INC
SI
MOV CL
,[SI]
MOV CH
,0
;CX存放数据量
INC
SI
LEA BX
,passwdnu
;定位到密码数字
encr:
MOV AL
,[SI]
CMP AL
,30H
JB econt
;不加密非数字
CMP AL
,39H
JG econt
;不加密非数字
SUB AL
,30H
XLAT
;AL<
--((BX
)+(AL
))
ADD AL
,30H
MOV
[SI],AL
econt:
INC
SI
LOOP encr
RET
ENCRYPT ENDP
;子程序
;功能:解密数据。
;入口参数:buffer存放要解密的数据。
DECODING PROC
LEA
SI,buffer
;定位到缓冲区
INC
SI
MOV CL
,[SI]
MOV CH
,0
;CX存放数据量
INC
SI
LEA BX
,decrypnu
;定位到解密数字
deco:
MOV AL
,[SI]
CMP AL
,30H
JB dcont
;不解密非数字
CMP AL
,39H
JG dcont
;不解密非数字
SUB AL
,30H
XLAT
;AL<
--((BX
)+(AL
))
ADD AL
,30H
MOV
[SI],AL
dcont:
INC
SI
LOOP deco
RET
DECODING ENDP
;子程序
;功能:显示数据。
;入口参数:buffer存放要输出的数据。
OUTPUT PROC
LEA BX
,buffer
;定位到缓冲区
INC BX
MOV CL
,[BX]
MOV CH
,0
;CX存放要输出的数据量
INC BX
outp:
MOV DL
,[BX]
MOV AH
,2H
INT 21H
INC BX
LOOP outp
RET
OUTPUT ENDP
CODES ENDS
END MAIN
如果文章内容出错或者您有更好的解决方法,欢迎到评论区指正和讨论!