📄 shift.asm
字号:
;六字节线性移位寄存器仿真程序(按键接在P1.0)
RANDS EQU 40H ;六字节线性移位寄存器首址。
RND0 DATA 40H ;第一字节。
RND1 DATA 41H ;第二字节。
RND2 DATA 42H ;第三字节。
RND3 DATA 43H ;第四字节。
RND4 DATA 44H ;第五字节。
RND5 DATA 45H ;第六字节。
X1H DATA 30H ;系数X1的高字节。
X1L DATA 31H ;系数X1的低字节。
X2H DATA 32H ;系数X2的高字节。
X2L DATA 33H ;系数X2的低字节。
Y1 DATA 34H ;系数Y1。
Y2 DATA 35H ;系数Y2。
ORG 0000H
LJMP TEST
ORG 100H
TEST: MOV TMOD,#11H ;将T0设置为16位定时器工作方式。
SETB TR0 ;启动T0。
MOV P1,#0FFH
LOOP: JB P1.0,LOOP ;未按键,继续循环。
MOV RND5,RND3 ;发生按键操作,处理线性移位寄存器。
MOV RND4,RND2
MOV RND3,RND1
MOV RND2,RND0
MOV RND1,TH0 ;将定时器的当前内容放入移位寄存器中。
MOV RND0,TL0
LCALL RUN ;转动“数字转盘”一格。
LCALL RUN ;再转动“数字转盘”一格。
LCALL RUN ;再转动“数字转盘”一格。
MOV X1H,RND0 ;读取随机数,给系数X1赋值。
MOV X1L,RND1
MOV X2H,RND2 ;读取随机数,给系数X2赋值。
MOV X2L,RND3
MOV Y1,RND4 ;读取随机数,给系数Y1赋值。
MOV Y2,RND5 ;读取随机数,给系数Y2赋值。
STOP: LJMP STOP
RUN: MOV A,RND5 ;取D41~D48的当前状态。
RLC A ;将d48提取到进位标志中。
MOV A,RND0 ;取D1~D8的当前状态。
ANL A,#5BH ;提取d7,d5,d4,d2和d1的当前值。
MOV ACC.7,C ;再加上d48的当前值。
MOV C,PSW.0 ;取得偶校验的结果。
CPL C ;转换成奇校验结果,得到反馈函数的输出值。
MOV A,RND0 ;开始移位操作,先处理低字节。
RLC A ;将反馈函数的输出值移入,最高位移出。
MOV RND0,A ;保存移位后的结果。
MOV A,RND1 ;再依次进行其它各字节的移位操作。
RLC A
MOV RND1,A
MOV A,RND2
RLC A
MOV RND2,A
MOV A,RND3
RLC A
MOV RND3,A
MOV A,RND4
RLC A
MOV RND4,A
MOV A,RND5
RLC A
MOV RND5,A
RET ;完成一次操作,巨型“数字转盘”转动一格。
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -