<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 單片機C語(yǔ)言左移和右移漫談

單片機C語(yǔ)言左移和右移漫談

作者: 時(shí)間:2016-11-18 來(lái)源:網(wǎng)絡(luò ) 收藏
#include

#define uchar unsigned char
#define uint unsigned int
void main(void)
{
uchar a;
a=0x01;
a=a<<1;
}
在這段程序中,看起來(lái)沒(méi)有什么問(wèn)題,但是編譯后不能生成代碼

本文引用地址:http://dyxdggzs.com/article/201611/315811.htm

#include
#define uchar unsigned char
#define uint unsigned int
void main(void)
{
volatile uchar a;
a=0x01;
a=a<<1;
}
改成這樣后就能生成代碼,但是生成的代碼為
MOV 08H,#01H
MOV A,08H
ADD A,A
MOV 08H,A
這里我本來(lái)想象中應該有RL A這條指令的,但是沒(méi)有。

當程序改成下面的時(shí)
#include
#define uchar unsigned char
#define uint unsigned int
void main(void)
{
volatile uchar a;
a=0x01;
a=a<<2;
}
生成的代碼是
MOV 08H,#01H
MOV A,08H
ADD A,A
ADD A,A
MOV 08H,A
改成a=a<<3;時(shí)
MOV 08H,#01H
MOV A,08H
RLC A
RLC A
RLC A
ANL A,#0F8
MOV 08H,A
這里有點(diǎn)搞不懂了,“<<”和“>>”,到底是否帶進(jìn)位移動(dòng)。

再來(lái)看看這個(gè)
#include
#define uchar unsigned char
#define uint unsigned int
void main(void)
{
volatile uchar a;
a=0x01;
CY=1;
a=a>>1;
}
生成的代碼是
MOV 08H,#01H
MOV A,08H
CLR C
RRC A
MOV 08H,A
從這里看來(lái),“<<”和“>>”應該是帶進(jìn)位的。但是不能把C里原來(lái)的值移進(jìn)去。而且移到C里的數會(huì )丟掉,這里千萬(wàn)小心,例如a=0x80; a=a<<1;現在這里a=0x00了,1被移到C里丟掉。

再來(lái)看看_crol_和_cror_,這里要程序開(kāi)頭要包含#include
#include
#include
#define uchar unsigned char
#define uint unsigned int
void main(void)
{
volatile uchar a;
a=0x01;
a=_crol_(a,1);
}
生成的代碼為
MOV 08H,#01H
MOV R7,08H
MOV R0,#01H
MOV A,R7
INC R0
SJMP L1
L1:RL A
DJMZ R0,L1
MOV 08H,A
這里可以看出_crol_和_cror_是不帶C移動(dòng)的,_iror_和_irol_是一樣的。



評論


技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>