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

📄 des11.s43

📁 基于msp430优化的3des算法
💻 S43
字号:
#include <msp430x13x.h>          // Standard Equations

    NAME getsptr
    PUBLIC	getsptr
    PUBLIC  E_kuozh
    PUBLIC  L_shift
    PUBLIC  S_Box_A
    EXTERN	sptr 				;Stack pointer variable declared in C file
    EXTERN  ls1
    EXTERN  ls2
    EXTERN  R_jicun
    EXTERN  lun
    EXTERN  Rotable_A
    EXTERN  C_jicun
    EXTERN  D_jicun
    EXTERN  S
    RSEG CODE
getsptr:
    mov SP,&sptr ;Copy the current stack pointer.
    ret
    //E扩张运算,已知数据存R_jicun内,结果存于ls2,8个字节
E_kuozh:
    MOV     #06,R13         ;占用8个字节
E_kuozh_1
    CLR     ls2(R13)
    DECD    R13
    JC      E_kuozh_1       ;对缓冲区清另
    MOV.B   #03,R13
E_kuozh_2
    MOV     R13,R15
    RLA.B   R15             ;目标地址为序号*2
    MOV     R15,R14
    MOV.B   R_jicun(R13),R12    ;取得Ri的数据
    RRA.B   R12             ;右移后赋值
    RRA.B   R12             ;右移后赋值
    RRA.B   R12             ;右移后赋值
    AND.B   #01EH,R12       ;先取高4位
    BIS.B   R12,ls2(R15)    ;完成低位字节,
    BIT.B   #010H,R12       ;查原位0为1否
    JNC     E_kuozh_3
    DEC.B   R14
    AND.B   #007H,R14       ;防止溢出
    BIS.B   #001H,ls2(R14)  ;置位低位重复位
E_kuozh_3
    INC.B   R15             ;指向高位字节
    BIT.B   #002H,R12       ;查原位3为1否
    JNC     E_kuozh_4
    BIS.B   #020H,ls2(R15)  ;置位高位重复位
E_kuozh_4               ;完成低位字节,再进行高位字节
    MOV     R15,R14
    MOV.B   R_jicun(R13),R12    ;取得Ri的数据
    RLA.B   R12             ;左移一位后取值
    AND.B   #01EH,R12       ;取低位作为高4位
    BIS.B   R12,ls2(R15)    ;完成高位字节,
    BIT.B   #010H,R12       ;查原位0为1否
    JNC     E_kuozh_5
    DEC.B   R14
    BIS.B   #001H,ls2(R14)  ;置位低位重复位
E_kuozh_5
    INC.B   R15             ;指向高位字节
    AND.B   #007H,R15       ;防止溢出
    BIT.B   #002H,R12       ;查原位3为1否
    JNC     E_kuozh_6
    BIS.B   #020H,ls2(R15)  ;置位高位重复位
E_kuozh_6               ;完成高位字节
    DEC.B   R13
    JC      E_kuozh_2       ;总计4个字节,完成后返回
    RET


    
L_shift:                ;移动操作,根据lun的标志,左移相应的位数
                        ;占用ls1
    PUSH    R10
    MOV.B   lun,R12         ;取得轮次
    MOV.B   Rotable_A(R12),R13      ;得到相应的移动次数
    MOV     &C_jicun,R10
    MOV     &C_jicun+2,R12
    MOV     &D_jicun,R14
    MOV     &D_jicun+2,R15          ;先放到缓冲区
    SWPB    R10
    SWPB    R12
    SWPB    R14
    SWPB    R15
L_shift_1:                          ;R13=0--移动次数
    RLA     R15
    RLC     R14
    JNC     L_shift_2
    BIS     #BIT4,R15
L_shift_2
    RLA     R12
    RLC     R10
    JNC     L_shift_3
    BIS     #BIT4,R12
L_shift_3
    DEC.B   R13
    JNZ     L_shift_1               ;完成所需的移动
    SWPB    R10
    SWPB    R12
    MOV     R10,ls1
    MOV     R12,ls1+2
    MOV.B   #03H,R13
L_shift_4
    CLRC
    RRC     R14
    RRC     R15                     ;将最低4位空出
    DEC.B   R13
    JC      L_shift_4               ;完成所需的移动
    
    MOV     R14,R10
    MOV     R15,R12
    SWPB    R14
    SWPB    R15
    BIS.B   R14,ls1+3                ;将C\D2个寄存器的数据合并
    MOV.B   R10,ls1+4
    MOV.B   R15,ls1+5
    MOV.B   R12,ls1+6                ;这样就占用7个字节
    
    POP     R10
    RET
    
S_Box_A:                    ;将ls2数据经S盒置换函数
    MOV.B   #07H,R14
S_Box_A_1:
    MOV.B   R14,R13         ;首先得到所在的字节序
    SWPB    R13             ;计算地址,序号*40H
    RRA     R13
    RRA     R13             ;得到S盒的相对地址
    MOV.B   ls2(R14),R15
    AND.B   #01EH,R15           ;R15的高6位地址作为低位
    RRA.B   R15
    BIT.B   #BIT0,ls2(R14)      ;开始计算高位地址
    JNC     S_Box_A_2
    BIS.B   #BIT4,R15           ;右端为1,置位
S_Box_A_2
    BIT.B   #BIT5,ls2(R14)      ;开始计算高位地址
    JNC     S_Box_A_3
    BIS.B   #BIT5,R15           ;左端为1,置位
S_Box_A_3:                      ;已经获得地址,进行S盒置换
    ADD     R13,R15
    MOV.B   S(R15),ls2(R14)     ;获得S盒数据置换
    DEC.B   R14
    JC      S_Box_A_1           ;完成8个字节
    CLR.B   R14                 ;开始合并数据
S_Box_A_4:
    MOV.B   R14,R15
    RLA.B   R15                 ;偶数地址为低位
    MOV.B   ls2(R15),R13        ;低位地址到高位
    RLA.B   R13
    RLA.B   R13
    RLA.B   R13
    RLA.B   R13
    INC.B   R15                 ;奇数地址为高位
    BIS.B   ls2(R15),R13        ;合并为一个字节
    MOV.B   R13,ls2(R14)        ;送到相应的地址0--3
    INC.B   R14
    CMP.B   #04H,R14
    JNC      S_Box_A_4           ;完成4个字节
    RET
    END

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -