在Keil C51中调用汇编代码的三种方法

这篇具有很好参考价值的文章主要介绍了在Keil C51中调用汇编代码的三种方法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

在以下三个情况下, 我们可能会需要将汇编代码嵌入到我们开发的Keil C程序中.

  • 有一段现成的汇编代码, 只需少量修改便可投入使用, 减少工作量
  • 目前的程序需要提高速度, 如中断处理代码段
  • 需要直接操作寄存器或特定的IO设备.

那么, 我们怎么实现在C代码中融合汇编代码呢? 有以下三种方式:

一、使用内联汇编代码

具体方式

__asm
{
	/*Put your assembly here*/
}

实例如下

int my_char=65281;
int my_char_rev;
__asm
{		
	REV16 my_char_rev, my_char
}
printf("%d\n",my_char);
printf("%d",my_char_rev);	

注意
内联汇编器不提供对 ARM 处理器的物理寄存器的直接访问。如果将 ARM 寄存器名称用作内联汇编指令中的操作数,则它将成为对同名变量的引用,而不是物理 ARM 寄存器。

二、使用汇编宏

具体方式

#pragma ASM

; /*Put your assembly here*/

#pragma ENDASM

注意
此方法仅适用于C51

三、在C程序中直接调用汇编函数

具体方式
主函数如下, 注意调用的汇编函数需要用extern关键字

#include "HeadFile.h"
extern void my_assembly(void);
int main()
{
	my_assembly();
	return 0;
}

新建一个my_assembly.s文件

NAME    MY_ASSEMBLY
?PR?my_assembly?MY_ASSEMBLY    SEGMENT CODE
        PUBLIC  my_assembly
        RSEG    ?PR?my_assembly?MY_ASSEMBLY
my_assembly:
;		do something
        END

添加my_assembly.s进入工程中, 即可在工程中调用该汇编函数

:
目前, Keil的编译器已经比较智能, 能够将某些C代码翻译成特定的汇编指令以提高代码密度及程序效率, 如此大小端转换函数:

b = ((a & 0x00ff) << 8) | ((a & 0xff00) >> 8);

编译器会自动生成REV16指令, 极大的提高了程序的效率, 所以大部分情况下, 我们并不需要在Keil中特意的使用汇编代码.文章来源地址https://www.toymoban.com/news/detail-429980.html

到了这里,关于在Keil C51中调用汇编代码的三种方法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 使用 GNU 汇编语法编写 Hello World 程序的三种方法

    本篇我们使用汇编来写一个经典的  Hello world  程序。 运行环境: OS:Ubuntu 18.04.5 LTS x86-64 gcc:version 4.8.5 在用户空间编写汇编程序输出字符串,有三种方法: 调用C库函数  printf 使用软中断  int 0x80 使用  syscall 系统调用 下面对三种方法,分别进行说明。 为了更好的理解汇

    2024年02月06日
    浏览(59)
  • keil 5(C51)下载安装

    🔗链 接: 点此下载   🔑提取码:CC99   在这里我已经提前将压缩包放在桌面   我们右键将其解压到桌面,如下图;   打开文件夹,看到下列四项:   首先双击进入第一个exe文件,如下图(就是红色箭头指向的地方)   独立文件夹:新的文件夹,里面最好什么都没有

    2024年02月01日
    浏览(51)
  • Keil5 C51 安装与激活

    2023/03/15 安装过程较为简单,打开安装包后一直点击 NEXT 即可,中途出现的姓名、公司名称等信息可随意填写,但要注意两点: 若非特殊原因,安装路径尽量不要修改,保持默认的 C/keil_v5 即可 安装完成后不要汉化!不要汉化!不要汉化! 右键管理员身份运行keil5 依次点击

    2024年02月11日
    浏览(55)
  • Keil C51与ARM兼容安装

    安装C51 (1)下载keil C51 链接:https://pan.baidu.com/s/1yxFMljgEOrSaYbAOKsgddQ 提取码:g1vr (2)安装C51,点next,建议安装路径默认。information随便写 (3)注册C51  管理员打开Keil,打开File-License Management,复制CID 打开KEIL_lic注册工具 将CID复制到注册工具,按顺序获取注册码 复制注册码到

    2024年02月15日
    浏览(47)
  • 51单片机(STC8) -- 开发环境搭建(Keil C51)

    STC8H3K系列芯片概述 文章中所用的芯片选型为STC8H3K64S4,后续STC8案例均以该芯片展开 内核 • 超高速 8051 内核(1T),比传统 8051 约快 12 倍以上,指令代码完全兼容传统8051 • 21个中断源,4 级中断优先级 • 支持在线仿真 工作电压 • 1.9V~5.5V 工作温度 • -40℃~85℃ Flash 存储

    2024年01月25日
    浏览(52)
  • Vue子组件调用父组件事件的三种方法

    1. 在子组件中通过this.$parent.event来调用父组件的方法,data参数可选 2. 父组件使用v-bind绑定一个变量(v-bind:变量名=\\\"值\\\"),子组件用props接收(与created同级) 3.使用 $refs 传值

    2024年02月15日
    浏览(49)
  • Keil同时安装C51与ARM环境搭建

    一、准备Keil C51与ARM安装包 官网下载最新的安装包,如下,注册机如下 二、 安装C51过程 安装前关闭所有杀毒软件! 新建文件夹Keil_ARM与Keil_C51,需要注意51和32版本的Keil不能够安装在同一文件夹下 首先安装KeilC51,右键exe可执行文件,以 管理员方式运行 ,公司名填写都是1,

    2024年04月25日
    浏览(40)
  • 汇编语言实现C51单片机点亮流水灯

    P0作输出口,接8只发光二极管,编写程序实现二极管循环点亮 二极管为共阳极连接时,即二极管正极已接通电源,单片机输出接阴极,所以单片机输出为低电平有效。 所以为实现二极管轮流点亮,单片机的输出应为:0FEH,0FDH,0FBH,....0FEH,每输出一种状态,需要延时0.1us. 最后在

    2024年02月06日
    浏览(61)
  • python调用父类方法的三种方式(super调用和父类名调用)

    父类名.方法名(self) super(子类名,self).父类方法名() super().父类方法名 注意:super()通过子类调用当前父类的方法,super默认会调用第一个父类的方法(适用于单继承的多层继承 如下代码: 如下代码: 上面代码运行结果: 针对这种情况,正确的做法是定义Person类自己的构造方法

    2024年02月06日
    浏览(59)
  • Keil5 C51与ARM共同时用

    Keil是单片机的一款开发环境,分为不同的版本分别对应不同阶段的单片机。 主流的就是51单片机和STM32单片机。 一般的安装包分为C51版本和ARM版本,Keil选择芯片和设置页面也各不相同,所以仅能运行单独的Keil使 用 采用本文教程可以使得C51和ARM版本可以使用一个keil进行选择

    2024年02月06日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包