单片机c语言右移指令,单片机C语言左移和右移漫谈
#define uchar unsigned char
#define uint unsigned int
void main(void)
{
uchar a;
a=0x01;
a=a<<1;
}
在这段程序中,看起来没有什么问题,但是编译后不能生成代码
#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
这里我本来想象中应该有RL A这条指令的,但是没有。
当程序改成下面的时
#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;时
MOV 08H,#01H
MOV A,08H
RLC A
RLC A
RLC A
ANL A,#0F8
MOV 08H,A
这里有点搞不懂了,“<>”,到底是否带进位移动。
再来看看这个
#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
从这里看来,“<>”应该是带进位的。但是不能把C里原来的值移进去。而且移到C里的数会丢掉,这里千万小心,例如a=0x80; a=a<<1;现在这里a=0x00了,1被移到C里丢掉。
再来看看_crol_和_cror_,这里要程序开头要包含#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移动的,_iror_和_irol_是一样的。
单片机c语言右移指令,单片机C语言左移和右移漫谈相关推荐
- 单片机c语言常用指令,单片机C语言(C51)的常用库函数.doc
C51的常用库函数详解 C51语言的编译器中包含有丰富的库函数,使用库函数可以大大简化用户程序设计的工作量,提高编程效率.每个库函数都在相应的头文件中给出了函数原型声明,在使用时,必须在源程序的开始处 ...
- c语言不同指令意识,C语言必须理清的概念1
当今的社会的人或多或少都有点惰性和急功近利,在一开始学习编程的时候不喜欢阅读那些枯燥的文字,喜欢直接去阅读代码,渐渐地,发现一个问题,那就是编程时经常会犯一些低级错误,总结一下,这些错误源自于自己对这 ...
- c语言常用指令翻译,c语言常见专业词汇带翻译
每行每业都有相对的专业英语,那么学习c语言有那么必学的专业英语词汇呢?下面就一起来了解一些必备的c语言专业词汇吧,欢迎大家参阅. c语言专业词汇 identifier 标识符 keyword 关键字 ...
- R语言基础指令和并行算法初识(上篇)
一.R语言背景介绍 二. R语言基础指令 三. R语言并行算法 四. 计划打算 一.R语言背景介绍 1.2.起源:R是统计领域广泛使用的诞生于1980年左右的S语言的一个分支.可以认为R是S语言的一种 ...
- 关于循环位移指令ROL,RCL ;逻辑右移指令 SHR , 算术右移指令 SAR
关于循环位移指令ROL,RCL ;逻辑右移指令 SHR , 算术右移指令 SAR 书上说 ROL的功能为,对操作数进行循环左移,每执行一次,把最高位移到最低位,同时还把最高位移到CF 那么 CF=0 ...
- 左移和右移的运算规则_一文读懂JavaScript位的与、或、异或、取反及左移右移操作...
JavaScript基础教程二进制位运算 JavaScript中的位运算是针对二进制数据提供的运算与操作.在JavaScript标准中规定了二进制位运算时其操作数长度为32位,其最高位为符号位,因此能 ...
- 原码、补码以及正数/负数的左移和右移
文章目录 一 .原码和补码 1.1 原码表示法 1.2 补码表示法 二.C++正数/负数的左移和右移 2.1 正数的左移和右移 2.2 负数的左移和右移 2.3 扩展(对正负数都适用,下面以正数为例) ...
- c语言延空指令,单片机C语言编程空指令产生短延时怎么办.doc
单片机C语言编程空指令产生短延时怎么办.doc (6页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 7.9 积分 个人收集整理-仅供参考单片机语言编程空 ...
- mcs51单片机嵌入式c语言习题,MCS-51单片机复习题参考题库.doc
MCS-51单片机复习题参考题库 MCS-51单片机复习题参考题库 测控2011-1.2班 2014-4-19 一.填空题 167D= B= C7 H. 8051内部有 个并行口,P0口直接作输出口时 ...
最新文章
- Hive查询结果输出文件
- java死信队列_RabbitMQ 死信队列是什么鬼?
- Android7.0占用空间,Android7.0 开发者注意事项
- maven安装及集成myeclipse
- python 之面向对象
- android用java写文本框_Android 使用TextView实现验证码输入框
- 计算机操作系统英语,操作系统的英文介绍
- 计算机学硕缩招,专硕扩招、学硕缩招!又有院校初试科目改了!本周这些院校发布最新消息!...
- emui内核支持kvm吗_EMUI和MIUI为什么不基于安卓linux内核不使用虚拟机直接用c++开发一些更流畅系统自带软件呢?...
- linux php文件,如何在linux执行PHP文件
- 运行kettle-8.2源码
- 多尺度(有限元)降阶模型下的DNN方法
- uva 10246 Asterix and Obelix(最短路问题拓展 dijkstra)
- win10系统电脑提示此程序被组策略阻止的解决办法
- 红帽linux创建c文件,RedHat成功运行的第一个C程序全过程(适合新手)
- 投资理财-合理配置资产结构
- 商务周刊:别了,摩托罗拉
- Deep Speech笔记
- matlab 分类学习工具箱 Classification Learner
- 手机上能学计算机一级b,全国计算机等级考试一级B的学习方法