📄 des_430.s43
字号:
#include "msp430X41X.h"
;=============== 中断向量地址表 ==========================
; MSP430 RESET Vector
ORG 0FFFEh
DW RESET ;复位中断
ORG 0FFE0h
DW RESET ;基本定时器中断
ORG 0FFE2h
DW RESET ;P2口中断
DW RESET
DW RESET
ORG 0FFE8h
DW RESET ;P1口中断 (用于流量测量)
ORG 0FFEAh
DW RESET ;TIME_A中断
ORG 0FFECh
DW RESET ;TIME_A中断CCR0
DW RESET
DW RESET
DW RESET
ORG 0FFF4h
DW RESET ;看门狗定时器中断
ORG 0FFF6h
DW RESET ;比较器_A中断
DW RESET
DW RESET
ORG 0FFFCh
DW RESET ;NMI中断
IN_64BIT EQU 200H
OUT_64BIT EQU 208H
KEY EQU 210H
KEY_A EQU 218H
KEY_B EQU 21CH
#define CHLID_KEY_FIRST 220H
CHILD_KEY1 EQU CHLID_KEY_FIRST
CHILD_KEY2 EQU CHLID_KEY_FIRST + (8 * 1)
CHILD_KEY3 EQU CHLID_KEY_FIRST + (8 * 2)
CHILD_KEY4 EQU CHLID_KEY_FIRST + (8 * 3)
CHILD_KEY5 EQU CHLID_KEY_FIRST + (8 * 4)
CHILD_KEY6 EQU CHLID_KEY_FIRST + (8 * 5)
CHILD_KEY7 EQU CHLID_KEY_FIRST + (8 * 6)
CHILD_KEY8 EQU CHLID_KEY_FIRST + (8 * 7)
CHILD_KEY9 EQU CHLID_KEY_FIRST + (8 * 8)
CHILD_KEY10 EQU CHLID_KEY_FIRST + (8 * 9)
CHILD_KEY11 EQU CHLID_KEY_FIRST + (8 *10)
CHILD_KEY12 EQU CHLID_KEY_FIRST + (8 *11)
CHILD_KEY13 EQU CHLID_KEY_FIRST + (8 *12)
CHILD_KEY14 EQU CHLID_KEY_FIRST + (8 *13)
CHILD_KEY15 EQU CHLID_KEY_FIRST + (8 *14)
CHILD_KEY16 EQU CHLID_KEY_FIRST + (8 *15)
DATA_L EQU 2A0H
DATA_R EQU 2A4H
#define TEMP_FIRST 2B0H
TEMP0 EQU TEMP_FIRST + 0
TEMP1 EQU TEMP_FIRST + 1
TEMP2 EQU TEMP_FIRST + 2
TEMP3 EQU TEMP_FIRST + 3
TEMP4 EQU TEMP_FIRST + 4
TEMP5 EQU TEMP_FIRST + 5
TEMP6 EQU TEMP_FIRST + 6
TEMP7 EQU TEMP_FIRST + 7
TEMP8 EQU TEMP_FIRST + 8
TEMP9 EQU TEMP_FIRST + 9
TEMP10 EQU TEMP_FIRST + 10
TEMP11 EQU TEMP_FIRST + 11
TEMP12 EQU TEMP_FIRST + 12
TEMP13 EQU TEMP_FIRST + 13
TEMP14 EQU TEMP_FIRST + 14
TEMP15 EQU TEMP_FIRST + 15
TEMP16 EQU TEMP_FIRST + 16
TEMP17 EQU TEMP_FIRST + 17
TEMP18 EQU TEMP_FIRST + 18
TEMP19 EQU TEMP_FIRST + 19
TEMP20 EQU TEMP_FIRST + 20
TEMP21 EQU TEMP_FIRST + 21
TEMP22 EQU TEMP_FIRST + 22
TEMP23 EQU TEMP_FIRST + 23
;=============== 复位中断 ==========================
ORG 0C000h ; Program Reset
;初始化
RESET
MAINLOOP ;MOV #WDT_ARST_1000,&WDTCTL ;看门狗工作在定时器模式1s,WDTPW+WDTTMSEL+WDTCNTCL
mov.w #WDTPW+WDTHOLD,&WDTCTL ; Stop WDT
mov.b #013h,210h
mov.b #034h,211h
mov.b #057h,212h
mov.b #079h,213h
mov.b #09bh,214h
mov.b #0bch,215h
mov.b #0dfh,216h
mov.b #0f1h,217h
mov.b #001h,200h
mov.b #023h,201h
mov.b #045h,202h
mov.b #067h,203h
mov.b #089h,204h
mov.b #0ABh,205h
mov.b #0CDh,206h
mov.b #0EFh,207h
/*
mov.b #031h,210h
mov.b #031h,211h
mov.b #031h,212h
mov.b #031h,213h
mov.b #031h,214h
mov.b #031h,215h
mov.b #031h,216h
mov.b #031h,217h
mov.b #031h,200h
mov.b #031h,201h
mov.b #031h,202h
mov.b #031h,203h
mov.b #031h,204h
mov.b #031h,205h
mov.b #031h,206h
mov.b #031h,207h
*/
DINT ;关中断
CALL #MAIN_DES
MOV.B 208H,200H
MOV.B 209H,201H
MOV.B 20AH,202H
MOV.B 20BH,203H
MOV.B 20CH,204H
MOV.B 20DH,205H
MOV.B 20EH,206H
MOV.B 20FH,207H
CALL #MAIN_DES_REVERSE
JMP MAINLOOP
;================================================
;功能: 第一次等分密钥,结果是56位
;名称: KEY_PARTED
;入口: r4 64位占用8字节
;出口: r5 56位占用8字节
;中间:
;备注: 高位在前
;================================================
KEY_PARTED ;KEY_A!!!!!!!!!!!!!!!!!!!!!!!!!!!!
BIT.B #(80H >> (56% 8)),( (56/ 8))(R4);0
RLC.B 0(R5)
BIT.B #(80H >> (48% 8)),( (48/ 8))(R4);1
RLC.B 0(R5)
BIT.B #(80H >> (40% 8)),( (40/ 8))(R4);2
RLC.B 0(R5)
BIT.B #(80H >> (32% 8)),( (32/ 8))(R4);3
RLC.B 0(R5)
BIT.B #(80H >> (24% 8)),( (24/ 8))(R4);4
RLC.B 0(R5)
BIT.B #(80H >> (16% 8)),( (16/ 8))(R4);5
RLC.B 0(R5)
BIT.B #(80H >> (8 % 8)),( (8 / 8))(R4);6
RLC.B 0(R5)
BIT.B #(80H >> (0 % 8)),( (0 / 8))(R4);7
RLC.B 0(R5)
BIT.B #(80H >> (57% 8)),( (57/ 8))(R4);8
RLC.B 1(R5)
BIT.B #(80H >> (49% 8)),( (49/ 8))(R4);9
RLC.B 1(R5)
BIT.B #(80H >> (41% 8)),( (41/ 8))(R4);10
RLC.B 1(R5)
BIT.B #(80H >> (33% 8)),( (33/ 8))(R4);11
RLC.B 1(R5)
BIT.B #(80H >> (25% 8)),( (25/ 8))(R4);12
RLC.B 1(R5)
BIT.B #(80H >> (17% 8)),( (17/ 8))(R4);13
RLC.B 1(R5)
BIT.B #(80H >> (9 % 8)),( (9 / 8))(R4);14
RLC.B 1(R5)
BIT.B #(80H >> (1 % 8)),( (1 / 8))(R4);15
RLC.B 1(R5)
BIT.B #(80H >> (58% 8)),( (58/ 8))(R4);16
RLC.B 2(R5)
BIT.B #(80H >> (50% 8)),( (50/ 8))(R4);17
RLC.B 2(R5)
BIT.B #(80H >> (42% 8)),( (42/ 8))(R4);18
RLC.B 2(R5)
BIT.B #(80H >> (34% 8)),( (34/ 8))(R4);19
RLC.B 2(R5)
BIT.B #(80H >> (26% 8)),( (26/ 8))(R4);20
RLC.B 2(R5)
BIT.B #(80H >> (18% 8)),( (18/ 8))(R4);21
RLC.B 2(R5)
BIT.B #(80H >> (10% 8)),( (10/ 8))(R4);22
RLC.B 2(R5)
BIT.B #(80H >> (2 % 8)),( (2 / 8))(R4);23
RLC.B 2(R5)
BIT.B #(80H >> (59% 8)),( (59/ 8))(R4);24
RLC.B 3(R5)
BIT.B #(80H >> (51% 8)),( (51/ 8))(R4);25
RLC.B 3(R5)
BIT.B #(80H >> (43% 8)),( (43/ 8))(R4);26
RLC.B 3(R5)
BIT.B #(80H >> (35% 8)),( (35/ 8))(R4);27
RLC.B 3(R5)
;KEY_B!!!!!!!!!!!!!!!!!!!!!!!!!!!!
BIT.B #(80H >> (62% 8)),( (62/ 8))(R4);28
RLC.B 3(R5)
BIT.B #(80H >> (54% 8)),( (54/ 8))(R4);29
RLC.B 3(R5)
BIT.B #(80H >> (46% 8)),( (46/ 8))(R4);30
RLC.B 3(R5)
BIT.B #(80H >> (38% 8)),( (38/ 8))(R4);31
RLC.B 3(R5)
BIT.B #(80H >> (30% 8)),( (30/ 8))(R4);32
RLC.B 4(R5)
BIT.B #(80H >> (22% 8)),( (22/ 8))(R4);33
RLC.B 4(R5)
BIT.B #(80H >> (14% 8)),( (14/ 8))(R4);34
RLC.B 4(R5)
BIT.B #(80H >> (6 % 8)),( (6 / 8))(R4);35
RLC.B 4(R5)
BIT.B #(80H >> (61% 8)),( (61/ 8))(R4);36
RLC.B 4(R5)
BIT.B #(80H >> (53% 8)),( (53/ 8))(R4);37
RLC.B 4(R5)
BIT.B #(80H >> (45% 8)),( (45/ 8))(R4);38
RLC.B 4(R5)
BIT.B #(80H >> (37% 8)),( (37/ 8))(R4);39
RLC.B 4(R5)
BIT.B #(80H >> (29% 8)),( (29/ 8))(R4);40
RLC.B 5(R5)
BIT.B #(80H >> (21% 8)),( (21/ 8))(R4);41
RLC.B 5(R5)
BIT.B #(80H >> (13% 8)),( (13/ 8))(R4);42
RLC.B 5(R5)
BIT.B #(80H >> (5 % 8)),( (5 / 8))(R4);43
RLC.B 5(R5)
BIT.B #(80H >> (60% 8)),( (60/ 8))(R4);44
RLC.B 5(R5)
BIT.B #(80H >> (52% 8)),( (52/ 8))(R4);45
RLC.B 5(R5)
BIT.B #(80H >> (44% 8)),( (44/ 8))(R4);46
RLC.B 5(R5)
BIT.B #(80H >> (36% 8)),( (36/ 8))(R4);47
RLC.B 5(R5)
BIT.B #(80H >> (28% 8)),( (28/ 8))(R4);48
RLC.B 6(R5)
BIT.B #(80H >> (20% 8)),( (20/ 8))(R4);49
RLC.B 6(R5)
BIT.B #(80H >> (12% 8)),( (12/ 8))(R4);50
RLC.B 6(R5)
BIT.B #(80H >> (4 % 8)),( (4 / 8))(R4);51
RLC.B 6(R5)
BIT.B #(80H >> (27% 8)),( (27/ 8))(R4);52
RLC.B 6(R5)
BIT.B #(80H >> (19% 8)),( (19/ 8))(R4);53
RLC.B 6(R5)
BIT.B #(80H >> (11% 8)),( (11/ 8))(R4);54
RLC.B 6(R5)
BIT.B #(80H >> (3 % 8)),( (3 / 8))(R4);55
RLC.B 6(R5)
RET
;================================================
;功能: 密钥的选取,迭代后 28 + 28 = 56 转换成为 48位
;名称: KEY_56TO48
;入口: r4 56位占用8字节
;出口: r5 48位占用8字节
;中间:
;备注: 高位在前
;================================================
KEY_56TO48 BIT.B #(80H >> (13% 8)),(13/ 8)(R4);0
RLC.B 0(R5)
BIT.B #(80H >> (16% 8)),(16/ 8)(R4);1
RLC.B 0(R5)
BIT.B #(80H >> (10% 8)),(10/ 8)(R4);2
RLC.B 0(R5)
BIT.B #(80H >> (23% 8)),(23/ 8)(R4);3
RLC.B 0(R5)
BIT.B #(80H >> (0 % 8)),(0 / 8)(R4);4
RLC.B 0(R5)
BIT.B #(80H >> (4 % 8)),(4 / 8)(R4);5
RLC.B 0(R5)
BIT.B #(80H >> (2 % 8)),(2 / 8)(R4);6
RLC.B 0(R5)
BIT.B #(80H >> (27% 8)),(27/ 8)(R4);7
RLC.B 0(R5)
BIT.B #(80H >> (14% 8)),(14/ 8)(R4);8
RLC.B 1(R5)
BIT.B #(80H >> (5 % 8)),(5 / 8)(R4);9
RLC.B 1(R5)
BIT.B #(80H >> (20% 8)),(20/ 8)(R4);10
RLC.B 1(R5)
BIT.B #(80H >> (9 % 8)),(9 / 8)(R4);11
RLC.B 1(R5)
BIT.B #(80H >> (22% 8)),(22/ 8)(R4);12
RLC.B 1(R5)
BIT.B #(80H >> (18% 8)),(18/ 8)(R4);13
RLC.B 1(R5)
BIT.B #(80H >> (11% 8)),(11/ 8)(R4);14
RLC.B 1(R5)
BIT.B #(80H >> (3% 8)),(3/ 8)(R4);15
RLC.B 1(R5)
BIT.B #(80H >> (25% 8)),(25/ 8)(R4);16
RLC.B 2(R5)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -