关于汇编语言加密
DATA SEGMENT
STORE DB 16 DUP(?)
INPUT DB 'PLEASE INPUT FORMER PASSWORD IS:','$'
IN_PASS DB 16 DUP(?)
PASSTABLE DB 2,5,1,0,4,3,8,7,9,6
MESS4 DB '输入密码非法','$'
MESS5 DB 0DH,0AH,'$'
USER_NAME DB 'ABC'
USER_PASS DB '123'
PASS_LEN EQU $-USER_PASS
DATA ENDS
CODE SEGMENT
ASSUME DS:DATA,ES:DATA,CS:CODE
START:
MOV AX,DATA
MOV DS,AX
MOV ES,AX
MOV DX,OFFSET INPUT ;提示输入密码
MOV AH,09
INT 21H
MOV SI,OFFSET IN_PASS ;输入密码
MOV AH,10
INT 21H
MOV DX,OFFSET MESS5
MOV AH,09
INT 21H
MOV CX,PASS_LEN ;加密循环,输入密码作为al的初值,进行查表,所对应的表中数字,即为加密后的数字
MOV BX,OFFSET PASSTABLE
MOV BP,OFFSET STORE
MOV SI,OFFSET IN_PASS
L6:
MOV AL,[SI]
SUB AL,30H
XLAT
ADD AL,30H
MOV [BP],AL ;将加密之后的数字依次存入到申请的STORE中
INC BP
INC SI
DEC CX
JNZ L6
MOV DX,OFFSET MESS5
MOV AH,09
INT 21H
MOV AH,4CH
INT 21H
CODE ENDS
END START
想要输入0-9的数字,加密之后变成密码表中的数字,然后将加密后的数字存入到自己申请的空间中,但无法实现呢?求各位牛人给予解释啊!
[解决办法]
进 debug 调试下看看了。首先开始的输入部分就有问题吧,int21h 的 10(0ah)功能,输入缓冲区是 ds:dx 而不是 ds:si,而且这个缓冲区有特别的规定的。