📄 des_430.s43
字号:
BIT.B #00100000B,3(R4)
RLC.B 4(R6)
BIT.B #00010000B,3(R4)
RLC.B 4(R6)
BIT.B #00001000B,3(R4)
RLC.B 4(R6)
BIT.B #00000010B,3(R4)
RLC.B 5(R6)
BIT.B #00010000B,4(R4)
RLC.B 5(R6)
BIT.B #00000001B,3(R4)
RLC.B 5(R6)
BIT.B #10000000B,4(R4)
RLC.B 5(R6)
BIT.B #01000000B,4(R4)
RLC.B 5(R6)
BIT.B #00100000B,4(R4)
RLC.B 5(R6)
BIT.B #00001000B,4(R4)
RLC.B 6(R6)
BIT.B #01000000B,5(R4)
RLC.B 6(R6)
BIT.B #00000100B,4(R4)
RLC.B 6(R6)
BIT.B #00000010B,4(R4)
RLC.B 6(R6)
BIT.B #00000001B,4(R4)
RLC.B 6(R6)
BIT.B #10000000B,5(R4)
RLC.B 6(R6)
BIT.B #00100000B,5(R4)
RLC.B 7(R6)
BIT.B #00000001B,5(R4)
RLC.B 7(R6)
BIT.B #00010000B,5(R4)
RLC.B 7(R6)
BIT.B #00001000B,5(R4)
RLC.B 7(R6)
BIT.B #00000100B,5(R4)
RLC.B 7(R6)
BIT.B #00000010B,5(R4)
RLC.B 7(R6)
MOV.B 0(R6),R7
MOV.B (TAB_BOX_1)(R7),0(R5);查表
MOV.B 1(R6),R7
ADD.B (TAB_BOX_2)(R7),0(R5);查表
MOV.B 2(R6),R7
MOV.B (TAB_BOX_3)(R7),1(R5);查表
MOV.B 3(R6),R7
ADD.B (TAB_BOX_4)(R7),1(R5);查表
MOV.B 4(R6),R7
MOV.B (TAB_BOX_5)(R7),2(R5);查表
MOV.B 5(R6),R7
ADD.B (TAB_BOX_6)(R7),2(R5);查表
MOV.B 6(R6),R7
MOV.B (TAB_BOX_7)(R7),3(R5);查表
MOV.B 7(R6),R7
ADD.B (TAB_BOX_8)(R7),3(R5);查表
RET
*/
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
KEY_DES
CLR_MEM MOV.B #10,R4
MOV #KEY_A,R5
LOOP_CLR_MEM CLR 0(R5)
CLR 2(R5)
CLR 4(R5)
CLR 6(R5)
CLR 8(R5)
CLR 10(R5)
CLR 12(R5)
CLR 14(R5)
ADD #10H,R5
DEC.B R4
JNZ LOOP_CLR_MEM
;;;;;;;;第0次
MOV #KEY,R4;源地址
MOV #KEY_A,R5;目标地址
CALL #KEY_PARTED;等分密钥;结果放入KEY_A;KEY_B
;;;;;;;;第1次 循环左平移1bit
MOV #KEY_A,R4
CALL #KEY_RL;2个 28bit循环左平移1bit
MOV #KEY_A,R4;入口
MOV #CHILD_KEY1,R5;结果
CALL #KEY_56TO48;密钥的选取
;;;;;;;;第2次 循环左平移1bit
MOV #KEY_A,R4
CALL #KEY_RL;2个 28bit循环左平移1bit
MOV #KEY_A,R4;入口
MOV #CHILD_KEY2,R5;结果
CALL #KEY_56TO48;密钥的选取
;;;;;;;;第3次 循环左平移2bit
MOV #KEY_A,R4
CALL #KEY_RL;2个 28bit循环左平移1bit
MOV #KEY_A,R4
CALL #KEY_RL;2个 28bit循环左平移1bit
MOV #KEY_A,R4;入口
MOV #CHILD_KEY3,R5;结果
CALL #KEY_56TO48;密钥的选取
;;;;;;;;第4次 循环左平移2bit
MOV #KEY_A,R4
CALL #KEY_RL;2个 28bit循环左平移1bit
MOV #KEY_A,R4
CALL #KEY_RL;2个 28bit循环左平移1bit
MOV #KEY_A,R4;入口
MOV #CHILD_KEY4,R5;结果
CALL #KEY_56TO48;密钥的选取
;;;;;;;;第5次 循环左平移2bit
MOV #KEY_A,R4
CALL #KEY_RL;2个 28bit循环左平移1bit
MOV #KEY_A,R4
CALL #KEY_RL;2个 28bit循环左平移1bit
MOV #KEY_A,R4;入口
MOV #CHILD_KEY5,R5;结果
CALL #KEY_56TO48;密钥的选取
;;;;;;;;第6次 循环左平移2bit
MOV #KEY_A,R4
CALL #KEY_RL;2个 28bit循环左平移1bit
MOV #KEY_A,R4
CALL #KEY_RL;2个 28bit循环左平移1bit
MOV #KEY_A,R4;入口
MOV #CHILD_KEY6,R5;结果
CALL #KEY_56TO48;密钥的选取
;;;;;;;;第7次 循环左平移2bit
MOV #KEY_A,R4
CALL #KEY_RL;2个 28bit循环左平移1bit
MOV #KEY_A,R4
CALL #KEY_RL;2个 28bit循环左平移1bit
MOV #KEY_A,R4;入口
MOV #CHILD_KEY7,R5;结果
CALL #KEY_56TO48;密钥的选取
;;;;;;;;第8次 循环左平移2bit
MOV #KEY_A,R4
CALL #KEY_RL;2个 28bit循环左平移1bit
MOV #KEY_A,R4
CALL #KEY_RL;2个 28bit循环左平移1bit
MOV #KEY_A,R4;入口
MOV #CHILD_KEY8,R5;结果
CALL #KEY_56TO48;密钥的选取
;;;;;;;;第9次 循环左平移1bit
MOV #KEY_A,R4
CALL #KEY_RL;2个 28bit循环左平移1bit
MOV #KEY_A,R4;入口
MOV #CHILD_KEY9,R5;结果
CALL #KEY_56TO48;密钥的选取
;;;;;;;;第10次 循环左平移2bit
MOV #KEY_A,R4
CALL #KEY_RL;2个 28bit循环左平移1bit
MOV #KEY_A,R4
CALL #KEY_RL;2个 28bit循环左平移1bit
MOV #KEY_A,R4;入口
MOV #CHILD_KEY10,R5;结果
CALL #KEY_56TO48;密钥的选取
;;;;;;;;第11次 循环左平移2bit
MOV #KEY_A,R4
CALL #KEY_RL;2个 28bit循环左平移1bit
MOV #KEY_A,R4
CALL #KEY_RL;2个 28bit循环左平移1bit
MOV #KEY_A,R4;入口
MOV #CHILD_KEY11,R5;结果
CALL #KEY_56TO48;密钥的选取
;;;;;;;;第12次 循环左平移2bit
MOV #KEY_A,R4
CALL #KEY_RL;2个 28bit循环左平移1bit
MOV #KEY_A,R4
CALL #KEY_RL;2个 28bit循环左平移1bit
MOV #KEY_A,R4;入口
MOV #CHILD_KEY12,R5;结果
CALL #KEY_56TO48;密钥的选取
;;;;;;;;第13次 循环左平移2bit
MOV #KEY_A,R4
CALL #KEY_RL;2个 28bit循环左平移1bit
MOV #KEY_A,R4
CALL #KEY_RL;2个 28bit循环左平移1bit
MOV #KEY_A,R4;入口
MOV #CHILD_KEY13,R5;结果
CALL #KEY_56TO48;密钥的选取
;;;;;;;;第14次 循环左平移2bit
MOV #KEY_A,R4
CALL #KEY_RL;2个 28bit循环左平移1bit
MOV #KEY_A,R4
CALL #KEY_RL;2个 28bit循环左平移1bit
MOV #KEY_A,R4;入口
MOV #CHILD_KEY14,R5;结果
CALL #KEY_56TO48;密钥的选取
;;;;;;;;;第15次 循环左平移2bit
MOV #KEY_A,R4
CALL #KEY_RL;2个 28bit循环左平移1bit
MOV #KEY_A,R4
CALL #KEY_RL;2个 28bit循环左平移1bit
MOV #KEY_A,R4;入口
MOV #CHILD_KEY15,R5;结果
CALL #KEY_56TO48;密钥的选取
;;;;;;;;第16次 循环左平移1bit
MOV #KEY_A,R4
CALL #KEY_RL;2个 28bit循环左平移1bit
MOV #KEY_A,R4;入口
MOV #CHILD_KEY16,R5;结果
CALL #KEY_56TO48;密钥的选取
RET
;================================================
;数据加密
;================================================
CLR_TEMP0 CLR.B &TEMP0
CLR.B &TEMP1
CLR.B &TEMP2
CLR.B &TEMP3
CLR.B &TEMP4
CLR.B &TEMP5
CLR.B &TEMP6
CLR.B &TEMP7
RET
CLR_TEMP8 CLR.B &TEMP8
CLR.B &TEMP9
CLR.B &TEMP10
CLR.B &TEMP11
CLR.B &TEMP12
CLR.B &TEMP13
CLR.B &TEMP14
CLR.B &TEMP15
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
DATA_F_FUN
MOV #DATA_R,R4
MOV #TEMP0,R5
CALL #DATA_32TO48;数据扩展
XOR.B 0(R8),TEMP0;异或数据和子密钥!!!!
XOR.B 1(R8),TEMP1
XOR.B 2(R8),TEMP2
XOR.B 3(R8),TEMP3
XOR.B 4(R8),TEMP4
XOR.B 5(R8),TEMP5
MOV #TEMP0,R4;黑盒子压缩数据
MOV #TEMP8,R5;不用清目标寄存器
CALL #DATA_BOX
MOV #TEMP8,R4
MOV #TEMP0,R5
CALL #DATA_CHANGE;32倒32调整
XOR.B &(DATA_L+0),&TEMP0
XOR.B &(DATA_L+1),&TEMP1
XOR.B &(DATA_L+2),&TEMP2
XOR.B &(DATA_L+3),&TEMP3
MOV.B &(DATA_R+0),&(DATA_L+0)
MOV.B &(DATA_R+1),&(DATA_L+1)
MOV.B &(DATA_R+2),&(DATA_L+2)
MOV.B &(DATA_R+3),&(DATA_L+3)
MOV.B &TEMP0,&(DATA_R+0)
MOV.B &TEMP1,&(DATA_R+1)
MOV.B &TEMP2,&(DATA_R+2)
MOV.B &TEMP3,&(DATA_R+3)
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MAIN_DES;加密
;计算出16个子密钥
CALL #KEY_DES
;IP初试置换
MOV #IN_64BIT,R4
MOV #DATA_L,R5
CALL #DATA_IP
;数据加密
MOV #CHILD_KEY1,R8
LOOP_DATA_FUN CALL #DATA_F_FUN
ADD #08H,R8
CMP #CHILD_KEY16+8,R8
JNC LOOP_DATA_FUN
NEXT_DATA_FUN ;最后一次不进行交换
MOV.B &(DATA_L+0),&TEMP0
MOV.B &(DATA_L+1),&TEMP1
MOV.B &(DATA_L+2),&TEMP2
MOV.B &(DATA_L+3),&TEMP3
MOV.B &(DATA_R+0),&(DATA_L+0)
MOV.B &(DATA_R+1),&(DATA_L+1)
MOV.B &(DATA_R+2),&(DATA_L+2)
MOV.B &(DATA_R+3),&(DATA_L+3)
MOV.B &TEMP0,&(DATA_R+0)
MOV.B &TEMP1,&(DATA_R+1)
MOV.B &TEMP2,&(DATA_R+2)
MOV.B &TEMP3,&(DATA_R+3)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MOV #DATA_L,R4
MOV #OUT_64BIT,R5
CALL #DATA_IP_REVERSE
RET
MAIN_DES_REVERSE;解密过程
;计算出16个子密钥
CALL #KEY_DES
;IP初试置换
MOV #IN_64BIT,R4
MOV #DATA_L,R5
CALL #DATA_IP;IP初试置换
;数据加密
MOV #CHILD_KEY16,R8
LOOP_DE_DATA_FUN
CALL #DATA_F_FUN
SUB #08H,R8
CMP #CHILD_KEY1,R8
JC LOOP_DE_DATA_FUN
JMP NEXT_DATA_FUN
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -