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. 队列的概念和结构 …...
[特殊字符] 智能合约中的数据是如何在区块链中保持一致的?
🧠 智能合约中的数据是如何在区块链中保持一致的? 为什么所有区块链节点都能得出相同结果?合约调用这么复杂,状态真能保持一致吗?本篇带你从底层视角理解“状态一致性”的真相。 一、智能合约的数据存储在哪里…...
【WiFi帧结构】
文章目录 帧结构MAC头部管理帧 帧结构 Wi-Fi的帧分为三部分组成:MAC头部frame bodyFCS,其中MAC是固定格式的,frame body是可变长度。 MAC头部有frame control,duration,address1,address2,addre…...
YSYX学习记录(八)
C语言,练习0: 先创建一个文件夹,我用的是物理机: 安装build-essential 练习1: 我注释掉了 #include <stdio.h> 出现下面错误 在你的文本编辑器中打开ex1文件,随机修改或删除一部分,之后…...
04-初识css
一、css样式引入 1.1.内部样式 <div style"width: 100px;"></div>1.2.外部样式 1.2.1.外部样式1 <style>.aa {width: 100px;} </style> <div class"aa"></div>1.2.2.外部样式2 <!-- rel内表面引入的是style样…...
招商蛇口 | 执笔CID,启幕低密生活新境
作为中国城市生长的力量,招商蛇口以“美好生活承载者”为使命,深耕全球111座城市,以央企担当匠造时代理想人居。从深圳湾的开拓基因到西安高新CID的战略落子,招商蛇口始终与城市发展同频共振,以建筑诠释对土地与生活的…...
MySQL JOIN 表过多的优化思路
当 MySQL 查询涉及大量表 JOIN 时,性能会显著下降。以下是优化思路和简易实现方法: 一、核心优化思路 减少 JOIN 数量 数据冗余:添加必要的冗余字段(如订单表直接存储用户名)合并表:将频繁关联的小表合并成…...
TSN交换机正在重构工业网络,PROFINET和EtherCAT会被取代吗?
在工业自动化持续演进的今天,通信网络的角色正变得愈发关键。 2025年6月6日,为期三天的华南国际工业博览会在深圳国际会展中心(宝安)圆满落幕。作为国内工业通信领域的技术型企业,光路科技(Fiberroad&…...
【Elasticsearch】Elasticsearch 在大数据生态圈的地位 实践经验
Elasticsearch 在大数据生态圈的地位 & 实践经验 1.Elasticsearch 的优势1.1 Elasticsearch 解决的核心问题1.1.1 传统方案的短板1.1.2 Elasticsearch 的解决方案 1.2 与大数据组件的对比优势1.3 关键优势技术支撑1.4 Elasticsearch 的竞品1.4.1 全文搜索领域1.4.2 日志分析…...
快速排序算法改进:随机快排-荷兰国旗划分详解
随机快速排序-荷兰国旗划分算法详解 一、基础知识回顾1.1 快速排序简介1.2 荷兰国旗问题 二、随机快排 - 荷兰国旗划分原理2.1 随机化枢轴选择2.2 荷兰国旗划分过程2.3 结合随机快排与荷兰国旗划分 三、代码实现3.1 Python实现3.2 Java实现3.3 C实现 四、性能分析4.1 时间复杂度…...
02.运算符
目录 什么是运算符 算术运算符 1.基本四则运算符 2.增量运算符 3.自增/自减运算符 关系运算符 逻辑运算符 &&:逻辑与 ||:逻辑或 !:逻辑非 短路求值 位运算符 按位与&: 按位或 | 按位取反~ …...
