⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 des_430.s43

📁 msp430的汇编des算法
💻 S43
📖 第 1 页 / 共 4 页
字号:
                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 + -