#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语言左移和右移漫谈相关推荐

  1. 单片机c语言常用指令,单片机C语言(C51)的常用库函数.doc

    C51的常用库函数详解 C51语言的编译器中包含有丰富的库函数,使用库函数可以大大简化用户程序设计的工作量,提高编程效率.每个库函数都在相应的头文件中给出了函数原型声明,在使用时,必须在源程序的开始处 ...

  2. c语言不同指令意识,C语言必须理清的概念1

    当今的社会的人或多或少都有点惰性和急功近利,在一开始学习编程的时候不喜欢阅读那些枯燥的文字,喜欢直接去阅读代码,渐渐地,发现一个问题,那就是编程时经常会犯一些低级错误,总结一下,这些错误源自于自己对这 ...

  3. c语言常用指令翻译,c语言常见专业词汇带翻译

    每行每业都有相对的专业英语,那么学习c语言有那么必学的专业英语词汇呢?下面就一起来了解一些必备的c语言专业词汇吧,欢迎大家参阅. c语言专业词汇 identifier 标识符 keyword 关键字 ...

  4. R语言基础指令和并行算法初识(上篇)

    一.R语言背景介绍 二. R语言基础指令 三. R语言并行算法 四. 计划打算 一.R语言背景介绍 1.2.起源:R是统计领域广泛使用的诞生于1980年左右的S语言的一个分支.可以认为R是S语言的一种 ...

  5. 关于循环位移指令ROL,RCL ;逻辑右移指令 SHR , 算术右移指令 SAR

    关于循环位移指令ROL,RCL ;逻辑右移指令 SHR , 算术右移指令 SAR 书上说 ROL的功能为,对操作数进行循环左移,每执行一次,把最高位移到最低位,同时还把最高位移到CF 那么 CF=0 ...

  6. 左移和右移的运算规则_一文读懂JavaScript位的与、或、异或、取反及左移右移操作...

    JavaScript基础教程二进制位运算 JavaScript中的位运算是针对二进制数据提供的运算与操作.在JavaScript标准中规定了二进制位运算时其操作数长度为32位,其最高位为符号位,因此能 ...

  7. 原码、补码以及正数/负数的左移和右移

    文章目录 一 .原码和补码 1.1 原码表示法 1.2 补码表示法 二.C++正数/负数的左移和右移 2.1 正数的左移和右移 2.2 负数的左移和右移 2.3 扩展(对正负数都适用,下面以正数为例) ...

  8. c语言延空指令,单片机C语言编程空指令产生短延时怎么办.doc

    单片机C语言编程空指令产生短延时怎么办.doc (6页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 7.9 积分 个人收集整理-仅供参考单片机语言编程空 ...

  9. mcs51单片机嵌入式c语言习题,MCS-51单片机复习题参考题库.doc

    MCS-51单片机复习题参考题库 MCS-51单片机复习题参考题库 测控2011-1.2班 2014-4-19 一.填空题 167D= B= C7 H. 8051内部有 个并行口,P0口直接作输出口时 ...

最新文章

  1. Hive查询结果输出文件
  2. java死信队列_RabbitMQ 死信队列是什么鬼?
  3. Android7.0占用空间,Android7.0 开发者注意事项
  4. maven安装及集成myeclipse
  5. python 之面向对象
  6. android用java写文本框_Android 使用TextView实现验证码输入框
  7. 计算机操作系统英语,操作系统的英文介绍
  8. 计算机学硕缩招,专硕扩招、学硕缩招!又有院校初试科目改了!本周这些院校发布最新消息!...
  9. emui内核支持kvm吗_EMUI和MIUI为什么不基于安卓linux内核不使用虚拟机直接用c++开发一些更流畅系统自带软件呢?...
  10. linux php文件,如何在linux执行PHP文件
  11. 运行kettle-8.2源码
  12. 多尺度(有限元)降阶模型下的DNN方法
  13. uva 10246 Asterix and Obelix(最短路问题拓展 dijkstra)
  14. win10系统电脑提示此程序被组策略阻止的解决办法
  15. 红帽linux创建c文件,RedHat成功运行的第一个C程序全过程(适合新手)
  16. 投资理财-合理配置资产结构
  17. 商务周刊:别了,摩托罗拉
  18. Deep Speech笔记
  19. matlab 分类学习工具箱 Classification Learner
  20. 手机上能学计算机一级b,全国计算机等级考试一级B的学习方法

热门文章

  1. 我关闭了微信朋友圈,把依赖感留给了身边人
  2. 携手14家车企亮相上海车展:百度Apollo的“AI者联盟”
  3. SPI、I2C、UART(即串口)三种串行总线详解
  4. haproxy+keepalived+nginx+php-fpm
  5. 使用多线程实现卖火车票
  6. Win11怎么开启3d加速?
  7. USMART调试组件
  8. percona 软件介绍
  9. 不同坐标系下角速度_「分析」驱动桥传动系典型工况下的一体化动力学仿真
  10. 【2020.09.01】 新学期,新气象