汇编 的 RR 指令是怎么向右移位的?

汇编 的 RR 指令是怎么向右移位的?,第1张

这是单片机的一条指令RR:不带进位的循环右移

RR 0000 0001 结果为1000 0000

RR 1001 1100 结果为0100 1110

RR的图示为上面的那个图。

下面的那个图为RRC(带进位的循环右移)

假如三字节分别是 B0、B1、B2。

如果是右移,在B0 的左边复制一个 B2,即 B2、B0、B1、B2,然后从左往右分别执行 SHR、SCR、SCR、SCR 指令即可。(不超过8次移位,重复即可,反之就要再次复制 B2)

如果是左移,则在B2的右边 复制一个 B0,......

C语言

#include<reg51.h>

void delay(unsigned int a)

{

unsigned i,j

for(i=0i<ai++)

for(j=0j<1000j++)

}

main()

{

unsigned LED,i

LED = 0xfe

EA = 0

while(1)

{

for(i=0i<7i++){delay(100)LED = (LED<<1)|0x01P3 = LED}

for(i=0i<7i++){delay(100)LED = (LED>>1)|0x80P3 = LED}

}

}

汇编语言

LED EQU 30H

ORG 0000H

LJMP MAIN

ORG 0030H

MAIN:

CLR EA

MOV SP,#5FH

MOV LED,#0FEH

MOV R0,#7

LOOP:

MOV R7,#50

LCALL DELAY

MOV A,LED

RL A

MOV LED,A

MOV P3,A

DJNZ R0,LOOP

MOV R0,#7

LOOP1:

MOV R7,#50

LCALL DELAY

MOV A,LED

RR A

MOV LED,A

MOV P3,A

DJNZ R0,LOOP1

MOV R0,#7

SJMP LOOP

----------------------------

DELAY:

MOV R2,#8

DLY1:

MOV R3,#250

DJNZ R3,$

DJNZ R2,DLY1

DJNZ R7,DELAY

RET

-----------------------------

END


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12027529.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-20
下一篇 2023-05-20

发表评论

登录后才能评论

评论列表(0条)

保存