(1)
循环左移,楼主标的方向反了,应该是A7←A6←......←A0←A7
寄存器A是一个字节,所以一共有8位,A7,A6,....,A0分别表示这8位,
RL A就表示所有位都向右移,然后最后一位A7移到A0里。这8位是同时移的,所以不用担心覆盖问题。
(2)
寄存器A循环右移,A7→A6→......→A0→A7
和上一条指令类似,只是方向变了,SO就不多说了。
(3)
这句楼主也写错了,应该是RLC A
带进位标志标志Cy的循环左移Cy←A7←A6←......←A0←Cy
就是连同PSW里的进位标志Cy一起进行循环左移,和(1)是一样的,只是加了一个Cy
(4)
RRC A
带进位标志Cy的循环右移
和(3)类似,只是方向改为向右。
(1)
LJMP addr16 addr16→pc
跳转指令,顾名思义LJMP后面的addr16肯定就是所跳转到的位置的地址,16位的,单片机通过把这16位地址送入PC里,来达到跳转的目的。因此这条指令能跳转的最大距离就是2^16=64K,
举个例子:
Main: MOV A,50H
.
.
.
LJMP Main
这里运行到LJMP Main的时候,就跳到了Main:这条语句了 。
LJMP和Main之间的距离不能超过2^16=64K
其实也不会超过了,因为51单片机内部的程序存储器最大就64K,所以放心使用。所以才叫长转移指令嘛。
(2)
AJMP addr11 pc←pc+2,pc(10-0)←addr11
楼主一定是不明白pc(10-0)←addr11 是什么意思喽,addr11和addr16的区别,对吧。
addr11其实是单片机自动把我们输入的16位地址的前11位送入PC,覆盖掉PC的前11位,然后PC根据这个值进行跳转。也就是pc(10-0)←addr11
因为我们可以改变的只是PC的前11位,所以能跳转的距离就是2^11=2K
还用刚才的例子:
Main: MOV A,50H
.
.
.
AJMP Main
同样执行到AJMP Main程序就跳到了Main: MOV A,50H这条指令了。都是一样的,但是这两条指令之间的最大距离为2^11=2K,超过的话就会出错了。
(3)
SJMP rel pc←pc+2,pc←pc+rel
其它作用之类的和上面的一样,只是其中rel是8位符号数,因此跳转距离为2^8=128B
补:也就是说,上面三个指令作用和用法都是一样的,只是允许跳转的最大距离不同。我们在用的时候其实不用考虑跳的距离,所以用哪个都可以,楼主如果不放心,就用LJMP,保证是对的。
(4)
DJNZ Rn,rel
寄存器Rn里的内容减1不等于0的话,就跳到rel这个地方。
举个例子:
Main: MOV A,50H
MOV R1,#5
.
.
.
DJNZ R1,Main
程序运行到DJNZ R1,Main就进行判断R1-1==0?不等于0就继续返回Main,因为R1里的内容是#5
所以Main这段程序会循环5次
楼主也是刚学汇编啊,其实书上写的满好的,不知道楼主是哪本书,我们学的是很薄的一本,语句都很精炼,稍微跳过一句就很难理解指令的意思了。建议楼主耐心的一个字一个的扣一下。
那他就是16位的啥,还是一样的写了啥,这样你肯定是要P0,P2都用来做地址用了
#ADDR0代表一个8位立即数,这条指令就是把这个数送到R0寄存器中。
比如:
MOV R0,#40H
没有源码,只能泛泛而谈的说一下,地址是液晶模块的控制端口,该地址选择,那么可以对液晶进行读写。0x80,这个数据一般而言,是D8位有效,是液晶的状态位,表示液晶是否准备好。
addr是什么单片机的介绍到此就结束了,感谢您耐心阅读,谢谢。
本文标签:addr是什么单片机