❶ 谁知道单片机中这些缩写是什么意思ANL BIT ORL CPL JC JNC JB JBC JNB SETB RLC RL RRC RR CPL XRL ORL...
这些是汇编指令 包括“与,或,非,跳转(JC JNC JB JBC JNB) ,置位,左移,左环移,右移,右环移,带进位的加 ”
JC C为1跳转
JNC C为零跳转
JB B为1跳转
JBC
JNB B为0跳转
查一下51单片机的书就行了
❷ 单片机中汇编语言RLC是什么意思
RLC 是带进位的循环左移,RLC A即将A的内容左移一位,将进位位C中的值移到累加器A的最低位,A的最高位移到C里。
譬如说:设A=01000001,C=1;
则如果执行RL ,则A=10000010,C=1(A所有位左移一位,最低位补零,C不参加移位操作,保持原值不变),如果执行RLC后,则A=10000011,C=0(A的最高位移到C,C原值移到A最低位)。
C=1,A=55H,RLC A后则为:C=0 A=ABH,即:1 01010101变为:0 10101011
(2)rrc单片机扩展阅读:
汇编语言ROL和RCL的区别方法:
AL=10100000时,ROL AL,1就把最高位的 1 移到最后,使AL变成 0100 0001,同时移出的1送CF;ROL AL,CL(CL=2),相当于2次 ROL AL,1,所以AL变成 1000 0010,最后移出的0送CF。
RCL AL,1则把AL的最高位1送给CF,使CF=1,AL其它位相应左移,成为 0100 000X,最后空下的X位被CF原来的值补齐;同样,ROL AL,CL(CL=2),相当于2次 RCL AL,1,最后AL变成 1000 00X1,AL原第二位的0到了CF,CF原来的值补AL中的x。
❸ 单片机 RRC右移 指令的用法
RRC指令就是带进位累加器循环右移。举例说明:
C =1,A=1100 1100B,
执行RRC A后,C=0,A=1110 0110B(A的最低位移给C,并且C原来的值移给A的最高位。)
SETB C(cy=1)
XCH A,R2(两数交换R2=54H,A=C2H)
JB A.7 , ELSE(若A的最高位为1,则转至else)
CLR C
ELSE: RRC A(带进位位右移A=1110 0 001B=E1H Cy=0)
XCH A ,R2(两数交换后,R2=E1H,A=54H)
RRC A(带进位位右移A=0010 1 010B=2AH Cy=0)
所以,最终(R2)=E1H,(A)=2AH
(3)rrc单片机扩展阅读:
控制转移类指令还包括以下:
1、无条件转移指令 AJMP addrll (2字节指令),2K(地址211)字节范围内的无条件跳转指令。64K程序存储器空间分为32个区,每区2K字节,转移的目标地址必须与AJMP下一条指令的地址高5位地址码A15-A11相同。
指令执行时,先PC加2,然后把addrll送入PC.10~PC.0,PC.15~PC.11保持不变,程序转移到目标地址。注意:转移目标首地址必须在AJMP指令下一条指令地址(PC+2)的2KB范围内。
2、长跳转指令 LJMP addr16 (3字节指令),64K字节范围内的无条件跳转指令。指令执行时,把指令的第二和第三字节分别装入PC的高位和低位字节中,无条件地转向addr16指出的目标地址。
目标地址可以在64K程序存储器地址空间的任何位置。注意:短跳转、长跳转指令中addrll、addr16直接写上要转向的目标地址标号(即符号地址)就可以。
3、相对转移指令 SJMP rel (双字节),rel为8位带符号二进制补码数(-128~+127),实现程序的双向转移。在编写程序时,直接写上要转向的目标地址标号就可以。
4、间接跳转(散转)指令JMP @A+DPTR (三字节),由A中8位无符号数与DPTR的16位数内容之和来确定。以DPTR内容作为基址,A的内容作变址。
5、条件转移指令 (双字节)
JZ rel ; 如果累加器为“0”,则转移
JNZ rel; 如果累加器非“0”,则转移
❹ 汇编语言用RRC指令编写16位寄存器除8指令
RRC指令,是MCS-51单片机的指令。
----
假设,16位寄存器:R2
R3,其中R2是高八位
❺ 单片机程序中RRC A是什么意思
将累加器A中的数带进位右移一位 R 移动R向右C进位标志C
RLC A 将累加器A中的数带进位左移一位
❻ 51单片机的指令英文全名
MOV(英文为Move):对内部数据寄存器RAM和特殊功能寄存器SFR的数据进行传送;
MOVC(Move Code)读取程序存储器数据表格的数据传送;
MOVX (Move External RAM) 对外部RAM的数据传送;
XCH (Exchange) 字节交换;
XCHD (Exchange low-order Digit) 低半字节交换;
PUSH (Push onto Stack) 入栈;
POP (Pop from Stack) 出栈;
(2)算术运算类指令(8种助记符)
ADD(Addition) 加法;
ADDC(Add with Carry) 带进位加法;
SUBB(Subtract with Borrow) 带借位减法;
DA(Decimal Adjust) 十进制调整;
INC(Increment) 加1;
DEC(Decrement) 减1;
MUL(Multiplication、Multiply) 乘法;
DIV(Division、Divide) 除法;
(3)逻辑运算类指令(10种助记符)
ANL(AND Logic) 逻辑与;
ORL(OR Logic) 逻辑或;
XRL(Exclusive-OR Logic) 逻辑异或;
CLR(Clear) 清零;
CPL(Complement) 取反;
RL(Rotate left) 循环左移;
RLC(Rotate Left throught the Carry flag) 带进位循环左移;
RR(Rotate Right) 循环右移;
RRC (Rotate Right throught the Carry flag) 带进位循环右移;
SWAP (Swap) 低4位与高4位交换;
(4)控制转移类指令(17种助记符)
ACALL(Absolute subroutine Call)子程序绝对调用;
LCALL(Long subroutine Call)子程序长调用;
RET(Return from subroutine)子程序返回;
RETI(Return from Interruption)中断返回;
SJMP(Short Jump)短转移;
AJMP(Absolute Jump)绝对转移;
LJMP(Long Jump)长转移;
CJNE (Compare Jump if Not Equal)比较不相等则转移;
DJNZ (Decrement Jump if Not Zero)减1后不为0则转移;
JZ (Jump if Zero)结果为0则转移;
JNZ (Jump if Not Zero) 结果不为0则转移;
JC (Jump if the Carry flag is set)有进位则转移;
JNC (Jump if Not Carry)无进位则转移;
JB (Jump if the Bit is set)位为1则转移;
JNB (Jump if the Bit is Not set) 位为0则转移;
JBC(Jump if the Bit is set and Clear the bit) 位为1则转移,并清除该位;
NOP (No Operation) 空操作;
(5)位操作指令(1种助记符)
SETB(Set Bit) 位 置1
基本是全的,个别有的没有找到。虽说用到的机会很小,但是对于理解指令功能很有帮住
❼ 大家好,我想问一下单片机C语言中有没有带进位的循环右移或者左移的指令,与汇编语言中的RRC或者RLC类似。
C语言中没有提供循环移位的操作符,但可以通过简洁的方式实现循环移位
设一个操作数x有s位则循环左移n位的操作为:
(x << n) | (x >> (s - n));
同理右移n位位:
(x >> n) | (x << (s - n));
你可以#define XX (x<<n) | (x>>(s-n)
。。。
补充下:上面是当 n<=s的情况 当n>s的话 只要把n改为 (n%s)就可以了
❽ 从这两段单片机汇编程序来看,RR,RL和RRC,RLC在这里区别不大
不一样,
不带C的循环,就A里的8位数据自循环,移动8次,循环一周.
带C的就不一样,移动一次,C的状态会移入A,而A的移出的位会移进C.
就是C参与了移动,所以C的位的状态会影响结果.
❾ 51单片机中rr,rrc,rl,rlc这些指令除了位移做跑马灯外,还有其它有实际意义的作用吗 我觉得就是个废物
在数学运算中的意义就大了,左移一位就是乘以2,右移就是除以2,很有运算意义的!
❿ 那你知道RR指令(右移)跟RRC(右移包括CY位)指令用c语言分别怎么表达吗能举个例子吗先谢啦~
你好,
我了解C语言对51单片机的编程,对汇编不是很了解。我粗略看了一下,发现汇编的位移操作比C语言复杂很多,c语言的位移操作无非两个运算符:>>(右移)和<<(左移)
比如:
0x1<<2 得到 0x4
0xf>>3 得到 0x2
(C语言中0x开头表示十六进制)
可见左操作数是被操作的对象,右操作数是位移的位数。
一般来说我们在C51中都是对unsigned char类型进行位操作,所以移出的位都是补0(如果是对有符号整数>>,最高位也即符号位会保持不变),因此C语言在这方面能够实现的不如汇编。
当然你可以如楼上所说联合编程,也可以在C语言函数中直接插入汇编语句,这一点Keil C 编译器早已支持。联合编程我不了解,而C语言中插入汇编语句应这样进行:
1、在含有汇编语句的函数前声明:#pragma src;
2、在汇编语句的起始和末尾加#pragma asm 和 #pragma endasm标识始末位置。
如果希望进一步讨论欢迎hi我。