AVR汇编(七):位操作和MCU控制指令

位操作指令

SBI / CBI

SBI 指令用于设置I/O寄存器中的第 b 位, CBI 指令用于清除I/O寄存器中的第 b 位。

例如:

SBI DDRB, 5     ; PB5设为输出模式
CBI PORTB, 5 ; PB5输出低电平

移位

LSL 指令用于逻辑左移,低位补0。

LSR 指令用于逻辑右移,高位补0。

ASR 指令用于算术右移,高位补符号位。

ROL 指令用于循环左移,低位补 C 标志位,高位进入 C 标志位。

ROR 指令用于循环右移,高位补 C 标志位,低位进入 C 标志位。

例如:

LDI R16, 0x88    ; R16 = 0x88
LSR R16 ; R16 = 0x44
LSL R16 ; R16 = 0x88
ASR R16 ; R16 = 0xC4
SEC ; C = 1
ROR R16 ; R16 = 0xE2, C = 0
ROL R16 ; R16 = 0xC4, C = 1

SWAP

SWAP 指令用于交换寄存器的高低4位。

例如:

LDI R16, 0xA5    ; R16 = 0xA5
SWAP R16 ; R16 = 0x5A

BSET / BCLR

BSET 用于设置 SREG 寄存器中的第 s 位, BCLR 用于清除 SREG 寄存器中的第 s 位。

例如:

BSET 0    ; C = 1
BCLR 0 ; C = 0

BST / BLD

BST 用于将寄存器中的第 b 位保存到 T 标志位, BLD 用于将 T 标志位加载到寄存器的第 b 位。

例如:

LDI R16, 0xAA
BST R16, 1 ; T = 1
BLD R16, 0 ; R16 = 0xAB

SEx / CLx

形如 SEx 的指令用于设置 SREG 寄存器中对应的标志位,形如 CLx 的指令用于清除 SREG 寄存器中对应的标志位,这两条指令作用和 BSET / BCLR 指令相同。

例如:

SEC    ; SREG = 0x01
SEZ ; SREG = 0x03
SEN ; SREG = 0x07
SEV ; SREG = 0x0F
SES ; SREG = 0x1F
SEH ; SREG = 0x3F
SET ; SREG = 0x7F
SEI ; SREG = 0xFF
CLI ; SREG = 0x7F
CLT ; SREG = 0x3F
CLH ; SREG = 0x1F
CLS ; SREG = 0x0F
CLV ; SREG = 0x07
CLN ; SREG = 0x03
CLZ ; SREG = 0x01
CLC ; SREG = 0x00

MCU控制指令

NOP 指令占用一个周期而不做任何操作。

SLEEP 指令用于进入睡眠模式。

WDR 指令用于复位看门狗。

BREAK 指令供调试系统使用,应用程序用不到。

参考资料

  1. ATmega328P Datasheet
  2. AVR Instruction Set Manual

AVR汇编(七):位操作和MCU控制指令的更多相关文章

  1. AVR之BOOTLOADER技术详解(转)

    源:http://blog.csdn.net/zhenhua10/article/details/6442412 ATmega128具备引导加载支持的用户程序自编程功能(In-System Progr ...

  2. 第九章 C语言在嵌入式中的应用

    上章回顾 编码的规范和程序版式 版权管理和申明 头文件结构和作用 程序命名 程序注释和代码布局规范 assert断言函数的应用 与0或NULL值的比较 内存的分配和释放细节,避免内存泄露 常量特性 g ...

  3. KeilC51高级编程

    第一节 绝对地址访问 C51提供了三种访问绝对地址的方法: 1. 绝对宏: 在程序中,用“#include<absacc.h>”即可使用其中定义的宏来访问绝对地址,包括: CBYTE.XB ...

  4. 单片机汇编语言实现DES加密算法

    目前在金融界及非金融界的保密通信中,越来越多地用到了DES算法.DES(Data Encryption Standard)即数据加密算法,是IBM公司于 1977年研究成功并公开发表的.随着我国三金工 ...

  5. A51汇编器的解释

    A51汇编器是运行于IBM PC系列及其兼容机上的交叉汇编软件,其主要功能是将MCS-51系列单片机汇编语言源程序翻译成符合Intel目标文件格式的可再定位的目标代码,经过L51连接器的连接和装配,产 ...

  6. Markdown 常用语言关键字

    Markdown 语法高亮支持的语言还是比较多的,记下来备用. 语言名 关键字 Bash bash CoffeeScript coffeescript C++ cpp C# cs CSS css Di ...

  7. 使用 VSCode 开发调试 STM32 单片机尝试

    使用 VSCode 开发调试 STM32 单片机尝试 本文记录基于 Windows + DAP-Link 开发 STM32F103C8T6 的实践过程,其他操作系统或芯片应该也只是大同小异的问题. 注 ...

  8. Ubuntu x86-64汇编(5) 控制指令

    控制指令 Control Instructions 汇编的控制指令主要包含标签, 无条件跳转和有条件跳转几种 标签 Label 标签用于标记跳转的目的, 必须以字母开头, 后面跟着字母, 数字和下划线 ...

  9. 汇编入门学习笔记 (七)—— dp,div,dup

    疯狂的暑假学习之  汇编入门学习笔记 (七)--  dp.div.dup 參考: <汇编语言> 王爽 第8章 1. bx.si.di.和 bp 8086CPU仅仅有4个寄存器能够用 &qu ...

  10. Swift系列七 - 汇编分析值类型

    通过汇编分下值类型的本质. 一.值类型 值类型赋值给var,let或者给参数传参,是直接将所有内容拷贝一份.类似于对文件进行复制粘贴操作,产生了全新的文件副本,属于深拷贝(deep copy). 示例 ...

随机推荐

  1. 2020-12-21:redis中,rpop和brpop的区别?

    福哥答案2020-12-21:[答案来自此链接:](http://bbs.xiangxueketang.cn/question/806)Redis Rpop 命令用于移除列表的最后一个元素,返回值为移 ...

  2. django视图中使用return redirect(reverse('')) 没有传参出现题:Reverse for ‘‘ with no arguments no arguments not

    redirect 的作用是跳转 reverse的作用是反向解析 当无法反向解析的时候要确认urls.py中的path参数,name参数是否一直

  3. 密码暴力破解工具——九头蛇(hydra)使用详解及实战

    转载出处:https://zhuanlan.zhihu.com/p/540998739 二.使用方法 语法:Hydra 参数 IP 服务 参数: -l login 小写,指定用户名进行破解 -L fi ...

  4. MySQL的sql语句执行流程(简述)

    导言: MySQL和服务器端对接的时候,我们知道一般就是服务器端会打包一些SQL命令去增删改查数据库,这个打包的数据库SQL语句数据包一般为4MB,再大一些就不会被数据库端接收了 但是我们可以自己更改 ...

  5. 源码解析:数据批量导入bukl_crete()原理

    在Django中需要向数据库中插入多条数据(list).使用如下方法,每次save()的时候都会访问一次数据库.导致性能问题: for i in resultlist: p = Account(nam ...

  6. hvv蓝初面试常见漏洞问题(下)

    hvv蓝初面试常见漏洞问题(上) 6.ssrf 服务端伪造请求 原理 服务端提供了向其他服务器应用获取数据的功能,而没有对目标地址做任何过滤和限制.攻击者进而利用其对内部资源进行攻击.(通俗来说:就是 ...

  7. UpSetR 高级参数使用教程

    在<UpSetR:多数据集绘图可视化处理利器>中我们介绍了 UpSetR 的一些概念和绘图基础参数使用,今天我们来学习一下 UpSetR 的 queries 和 attribute.plo ...

  8. 翻译:REST 和 gRPC 详细比较

    译者注:在微服务架构设计,构建API和服务间通信技术选型时,对 REST 和 gRPC 的理解和应用还存在知识盲区,近期看到国外的这篇文章:A detailed comparison of REST ...

  9. Go语言中的原子操作

    1. 引言 在并发编程中,多个协程同时访问和修改共享数据时,如果没有使用适当的机制来防止并发问题,这个时候可能导致不确定的结果.数据不一致性.逻辑错误等严重后果. 而原子操作是解决并发编程中共享数据访 ...

  10. 曾经辛苦造的轮子,现在能否用 ChatGPT 替代呢?

    上一篇文章 我在 vscode 插件里接入了 ChatGPT,解决了代码变量命名的难题 中,展示了如何在 vscode 插件中使用 ChatGPT 解决代码变量命名的问题.vscode 插件市场中有很 ...