c语言对应汇编写法(以中微单片机举例)
芯片手册资料
1. 赋值语句
C语言:
a = 5;
b = a;
汇编:
; 立即数赋值
LDIA 05H ; ACC = 5
LD R01,A ; R01 = ACC(a=5); 寄存器间赋值
LD A,R01 ; ACC = R01(读取a的值)
LD R02,A ; R02 = ACC(b=a)
2. 算术运算
C语言:
c = a + b;
d = a - 10;
汇编:
; 加法运算
LD A,R01 ; ACC = a
ADDA R02 ; ACC = a + b
LD R03,A ; c = ACC; 减法运算
LD A,R01 ; ACC = a
SUBIA 0AH ; ACC = a - 10
LD R04,A ; d = ACC
3. while循环
C语言:
while (a != 0) {// 循环体a--;
}
汇编:
LOOP:SZR R01 ; 判断R01(a)是否为0JP LOOP_END ; 如果为0则跳出循环; 循环体DECR R01 ; a--JP LOOP ; 继续循环
LOOP_END:
4. for循环
C语言:
for (int i=0; i<10; i++) {// 循环体
}
汇编:
LDIA 00H ; 初始化i=0LD R05,A ; R05 = iFOR_LOOP:LDIA 0AH ; 立即数10SUBA R05 ; 10 - iSNZB STATUS,C ; 检查C标志(若i<10则C=1)JP LOOP_END ; 若i>=10则跳出; 循环体INCR R05 ; i++JP FOR_LOOP ; 继续循环
5. 条件判断
C语言:
if (a > b) {// 分支1
} else {// 分支2
}
汇编:
LD A,R01 ; ACC = aHSUBA R02 ; 计算a - bSNZB STATUS,C ; 检查进位C(若a>=b则C=1)JP ELSE_BLOCK; 分支1JP END_IFELSE_BLOCK:; 分支2END_IF:
6. 函数调用
C语言:
void func() {// 函数体
}func(); // 调用函数
汇编:
CALL FUNC ; 调用函数...FUNC:; 函数体RET ; 返回
7. 位操作
C语言:
PORTB |= 0x01; // 置位RB0
汇编:
SETB PORTB,0 ; 直接置位PORTB的bit0
8. 移位操作
C语言:
a = a << 1;
汇编:
RLCR R01 ; 带进位循环左移(相当于左移1位)
关键差异说明:
-
寄存器分配:需要手动管理128字节RAM中的寄存器(如R00-R7F)
-
状态标志:需通过
STATUS
寄存器判断运算结果(Z/C/DC标志) -
跳转范围:
JP
指令只能跳转当前页(256地址范围),跨页需操作PCLATH
-
函数调用:无自动堆栈保护,需手动保存关键寄存器(ACC/STATUS)
-
延时循环:需通过定时器或精确计算指令周期实现
完整示例:LED闪烁程序
C语言:
while (1) {PORTB ^= 0x01; // 翻转RB0delay(1000);
}
汇编:
LDIA B'00000000'LD TRISB,A ; 配置PORTB为输出LDIA 01H ;翻转RB0LOOP:XORR PORTB ; 翻转PORTB(异或操作)XORR的操作将 PORTB的值和ACC异或结果存入PORTBCALL DELAY_1S ; 调用延时函数JP LOOPDELAY_1S:; 16MHz时钟下约1秒延时LDIA 0FFHLD R10,A
DELAY_LOOP:DECR R10SNZB STATUS,ZJP DELAY_LOOPRET
9.中断:
c语言:
void int_isr(void) __interrupt
{__asm movra _abuf swapar _STATUSmovra _statusbuf__endasm;if((INTIF)&&(INTIE)){P12D=!P12D;INTIF=0;}__asm swapar _statusbufmovra _STATUSswapr _abufswapar _abuf__endasm;
}
汇编:
INT_ISR:movra abufswapar STATUSmovra statusbufJBSET INTIFGOTO INT_ENDJBSET INTIEGOTO INT_ENDMOVAI 00000100BXORRA P1 ;P12 翻转BCLR INTIF
INT_END:swapar statusbufmovra STATUSswapr abufswapar abufEND_OF_INTERRUPTRETIE
汇编指令的用法看数据手册,可以进行对比,有什么错误大家也可以指正~
相关文章:
c语言对应汇编写法(以中微单片机举例)
芯片手册资料 1. 赋值语句 C语言: a 5; b a; 汇编: ; 立即数赋值 LDIA 05H ; ACC 5 LD R01,A ; R01 ACC(a5); 寄存器间赋值 LD A,R01 ; ACC R01(读取a的值) LD R02,A ; R02 ACC&…...
详解CSS `clear` 属性及其各个选项
详解CSS clear 属性及其各个选项 1. clear: left;示例代码 2. clear: right;示例代码 3. clear: both;示例代码 4. clear: none;示例代码 总结 在CSS布局中,clear 属性是一个非常重要的工具,特别是在处理浮动元素时。本文将详细解释 clear 属性及其各个选…...

算法设计与分析三级项目--管道铺设系统
摘 要 该项目使用c算法逻辑,开发环境为VS2022,旨在通过Prim算法优化建筑物间的连接路径,以支持管线铺设规划。可以读取文本文件中的建筑物名称和距离的信息,并计算出建筑物之间的最短连接路径和总路径长度,同时以利用…...

Page Assist - 本地Deepseek模型 Web UI 的安装和使用
Page Assist Page Assist是一个开源的Chrome扩展程序,为本地AI模型提供一个直观的交互界面。通过它可以在任何网页上打开侧边栏或Web UI,与自己的AI模型进行对话,获取智能辅助。这种设计不仅方便了用户随时调用AI的能力,还保护了…...

VMware Win10下载安装教程(超详细)
《网络安全自学教程》 从MSDN下载系统镜像,使用 VMware Workstation 17 Pro 安装 Windows 10 consumer家庭版 和 VMware Tools。 Win10下载安装 1、下载镜像2、创建虚拟机3、安装操作系统4、配置系统5、安装VMware Tools 1、下载镜像 到MSDN https://msdn.itellyou…...
DS目前曲线代替的网站汇总
DS目前还不稳定,好在国内外大厂平台都上线了,汇总如下: 秘塔搜索: https://metaso.cn 360纳米AI搜索: https://www.n.cn/ 硅基流动: https://cloud.siliconflow.cn/i/snHnLED8 字节跳动火山引擎…...
具有HiLo注意力的快速视觉Transformer
摘要 https://arxiv.org/pdf/2205.13213 视觉Transformer(ViTs)在计算机视觉领域引发了最新且最重要的突破。其高效设计大多以计算复杂度的间接指标,即浮点运算数(FLOPs)为指导,然而,该指标与吞吐量等直接指标之间存在明显差距。因此,我们建议使用目标平台上的直接速度…...
《AI “造脸术”:生成对抗网络打造超真实虚拟人脸》
在科技飞速发展的当下,人工智能的浪潮席卷而来,其中生成对抗网络(GANs)技术以其独特的魅力,成为了生成高度真实感虚拟人脸的强大引擎。无论是影视制作中虚拟角色的塑造,还是游戏领域中多样化角色形象的构建…...
2025.2.6总结
今天想聊聊工作。 1.到底什么是工作? 个人理解,工作就是在规定的时间下,高质量的完成领导交代的任务。刚开始工作时,我只懂一味的埋头苦干,能干多少干多少,最后结果怎么样我也不是很在乎。后面࿰…...

RK3576——USB3.2 OTG无法识别到USB设备
问题:使用硬盘接入到OTG接口无热插拔信息,接入DP显示屏无法正常识别到显示设备,但是能通过RKDdevTool工具烧录系统。 问题分析:由于热插拔功能实现是靠HUSB311芯片完成的,因此需要先确保HUSB311芯片驱动正常工作。 1. …...
低代码系统-插件功能分析( 某道云)
本文主要把其的插件进行了简单分析,不做业务上的梳理,不做推荐。 可大致分为: 群机器人 信息查询 智能识别 实名验证类 数据库类 通知类 通知类 aPaas增强 考勤同步 财务类 类别 插件名称 功能简介 群机器人类 某钉机器人 即在表单处完…...
如何在 FastAPI 中使用本地资源自定义 Swagger UI
要自定义 FastAPI 中的 Swagger UI,且使用本地资源来代替 CDN。只是需要稍微修改一下。 修改后的代码: 步骤: 挂载本地静态文件目录:我们将本地的 Swagger UI 资源文件(如 .js, .css, favicon.png 等)放…...

wxWidgets生成HTML文件,带图片转base64数据
编译环境大家可以看我之前的文章,CodeBlocks + msys2 + wx3.2,win10 这里功能就是生成HTML文件,没用HTML库,因为是自己固定的格式,图片是一个vector,可以动态改变数量的。 效果如下: #include <wx/string.h> #include <wx/file.h> #include <wx/ima…...

基于ArcGIS的SWAT模型+CENTURY模型模拟流域生态系统水-碳-氮耦合过程研究
流域是一个相对独立的自然地理单元,它是以水系为纽带,将系统内各自然地理要素连结成一个不可分割的整体。碳和氮是陆地生态系统中最重要的两种化学元素,而在流域系统内,水-碳-氮是相互联动、不可分割的耦合体。随着流域内人类活动…...

一键掌握多平台短视频矩阵营销/源码部署
短视频矩阵系统的介绍与应用 随着数字化营销策略的不断演进,传统的短视频矩阵操作方法可能已显陈旧。为此,一款全新的短视频矩阵系统应运而生,它通过整合多个社交媒体账户、创建多样化的任务、运用先进的智能视频编辑工具、实现多平台内容的…...
2.Python基础知识:注释、变量以及数据类型、标识符和关键字、输入函数、输出函数、运算符、程序类型转换
1. 注释 注释是用来解释代码,增强代码可读性的部分。在 Python 中,注释分为单行注释和多行注释。 单行注释:以 # 开头,后面的内容都被视为注释。 # 这是一个单行注释 print("Hello, World!") # 输出 "Hello, Wor…...
3NF讲解
3NF讲解 3NF(第三范式)是数据库设计中的一种规范化方法,目的是消除数据冗余和避免数据异常。它帮助数据库保持高效,灵活和一致性。理解3NF的关键点在于它依赖于前两个范式(1NF和2NF)的基础。 1. 第一范式…...
Spring Boot框架下的单元测试
1. 什么是单元测试 1.1 基本定义 单元测试(Unit Test) 是对软件开发中最小可测单位(例如一个方法或者一个类)进行验证的一种测试方式。在 Java 后端的 Spring Boot 项目中,单元测试通常会借助 JUnit、Mockito 等框架对代码中核心逻辑进行快…...

AI测试工程师成长指南:以DeepSeek模型训练为例
目录 引言:AI测试工程师的使命与挑战成长日记:从测试小白到AI测试专家核心能力:AI测试工程师的必备素养知识体系:技术栈与技能图谱AI测试工具全景:以DeepSeek为核心的工具链实战训练模式:以DeepSeek模型迭…...
【数据结构】_队列的结构与实现
目录 1. 队列的概念和结构 2. 队列的应用 3. 队列的实现 3.1 队列实现的底层结构选择 3.2 结构体设计 3.2.1 仅为链表结点设计结构体 3.2.2 为链表再设计一个结构体 3.3 Queue.h 3.4 Queue.c 3.5 Test_Queue.c 注:部分方法实现细节 1. 队列的概念和结构 …...

龙虎榜——20250610
上证指数放量收阴线,个股多数下跌,盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型,指数短线有调整的需求,大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的:御银股份、雄帝科技 驱动…...
ffmpeg(四):滤镜命令
FFmpeg 的滤镜命令是用于音视频处理中的强大工具,可以完成剪裁、缩放、加水印、调色、合成、旋转、模糊、叠加字幕等复杂的操作。其核心语法格式一般如下: ffmpeg -i input.mp4 -vf "滤镜参数" output.mp4或者带音频滤镜: ffmpeg…...
【论文笔记】若干矿井粉尘检测算法概述
总的来说,传统机器学习、传统机器学习与深度学习的结合、LSTM等算法所需要的数据集来源于矿井传感器测量的粉尘浓度,通过建立回归模型来预测未来矿井的粉尘浓度。传统机器学习算法性能易受数据中极端值的影响。YOLO等计算机视觉算法所需要的数据集来源于…...
镜像里切换为普通用户
如果你登录远程虚拟机默认就是 root 用户,但你不希望用 root 权限运行 ns-3(这是对的,ns3 工具会拒绝 root),你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案:创建非 roo…...

PL0语法,分析器实现!
简介 PL/0 是一种简单的编程语言,通常用于教学编译原理。它的语法结构清晰,功能包括常量定义、变量声明、过程(子程序)定义以及基本的控制结构(如条件语句和循环语句)。 PL/0 语法规范 PL/0 是一种教学用的小型编程语言,由 Niklaus Wirth 设计,用于展示编译原理的核…...
leetcodeSQL解题:3564. 季节性销售分析
leetcodeSQL解题:3564. 季节性销售分析 题目: 表:sales ---------------------- | Column Name | Type | ---------------------- | sale_id | int | | product_id | int | | sale_date | date | | quantity | int | | price | decimal | -…...

涂鸦T5AI手搓语音、emoji、otto机器人从入门到实战
“🤖手搓TuyaAI语音指令 😍秒变表情包大师,让萌系Otto机器人🔥玩出智能新花样!开整!” 🤖 Otto机器人 → 直接点明主体 手搓TuyaAI语音 → 强调 自主编程/自定义 语音控制(TuyaAI…...
浅谈不同二分算法的查找情况
二分算法原理比较简单,但是实际的算法模板却有很多,这一切都源于二分查找问题中的复杂情况和二分算法的边界处理,以下是博主对一些二分算法查找的情况分析。 需要说明的是,以下二分算法都是基于有序序列为升序有序的情况…...

技术栈RabbitMq的介绍和使用
目录 1. 什么是消息队列?2. 消息队列的优点3. RabbitMQ 消息队列概述4. RabbitMQ 安装5. Exchange 四种类型5.1 direct 精准匹配5.2 fanout 广播5.3 topic 正则匹配 6. RabbitMQ 队列模式6.1 简单队列模式6.2 工作队列模式6.3 发布/订阅模式6.4 路由模式6.5 主题模式…...

R语言速释制剂QBD解决方案之三
本文是《Quality by Design for ANDAs: An Example for Immediate-Release Dosage Forms》第一个处方的R语言解决方案。 第一个处方研究评估原料药粒径分布、MCC/Lactose比例、崩解剂用量对制剂CQAs的影响。 第二处方研究用于理解颗粒外加硬脂酸镁和滑石粉对片剂质量和可生产…...