ARM GNU 汇编 “每日读书“

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

GNU ARM汇编程序如果我们定义一个浮点数那么可以使用下面伪操作来定义

标签,命令

f:

.float 3.14

.equ f,3.1415

我们可以使用.float 伪操作定义一个浮点数f, 并初始化3.14 如果你想这个浮点数重新赋值3.1415可以通过.equ 伪操作来完成

.equ 伪操作除了数据赋值还可以常量定义代码然后代码直接引用这一点有点类似C语言#define 定义

.section .data

.equ DELAY,100

...

.section .text

...

MOV R0,$DELAY

3.7.7 汇编代码分析实战

有了GNU ARM汇编语言基础之后接下来我们做一个实验linux环境编写一个C程序使用ARM交叉编译器将其编译汇编文件然后利用本节所学知识分析汇编文件组织结构

C程序源码如下

hello.c

#include <stdio.h>

int global_val = 10;

int global_uvar;

int add(int a, int b)

{

return a + b;

}

int main(void)

{

int sum;

sum = add(1, 2);

printf("hello world\n");

return 0;

}

接下我们这个hello.c 源文件编译汇编程序文件对其进行分析

cat hello.s

.arch armvST ;//指令集版本

.fpu softvfp;//付点类型

.eabi_attribute,20,1 ;EABI 接口属性

.eabi_attribute,21,1 ;

.eabi_attribute,23,1 ;

.eabi_attribute,24,1 ;

.eabi_attribute,25,1 ;

.eabi_attribute,26,2 ;

.eabi_attribute,30,6 ;

.eabi_attribute,34,0 ;

.eabi_attribute,18,4 ;

.file "hello.c" ;当前汇编文件对应文件名

.global global_val 声明一个全局符号声明其他文件可以引用

.data 声明一个数据段

.align 2 数据段对齐方式22次方4字节对齐

.type global_val, %object 设置全局符号类型变量

.size global_val, 4 设置全局符号大小4字节

global_val:

.word 10 ;global_val 分配一个字大小存储空间初始化10

.comm global_uvar,4,4 .comm 临时段申请一段命名空间

.text 代码段起始地址

.align 2 代码段对齐方式22次方4字节对齐

.global add 声明一个全局符号add

.syntax unified

.arm 当前代码指令ARM指令

.type add, %function 设置符号add类型函数

add:

@args = 0pretend = 0, frame = 0注释

@frame needed = 1, uses_anonymous_args = 0

@ link register save elimitnated

str fp, [sp, #-4]f

add fp, sp, #0

sub sp, sp, #12

str r0, [fp, #-8]

str r1, {fp, #-12}

ldr r2, [fp, #-8]

ldr r3, [fp, #-12]

add r3, r2, r3

mov r0, r3

sub sp, fp, #0

@sp needed

ldr fp, [sp], #4

bx lr

.size add , -add 函数大小 --当前地址(函数结束地址)-add函数开始地址

.section .rodata 定义一个section .rodata 只读数据段

.align 2 只读数据对齐方式2字节对齐

.LC0

.ascli "hello world\n" 定义一个字符串

.text //代码开始地址

.global main 声明一个全局符号main

.syntax unifield

.arm

.type main, %function 全局符号main类型设置为函数

main:

#args 0, pretend = 0 frame = 0

#frame_needed = 1, uses_anonymous_args = 0;

push {fp, lr}

add fp, sp, #4

sub sp, sp, #8

mov, r1, #2

mov r0, #1

bl add

str r0, {fp, #-8}

ldr r0, LS

bl puts

mov r3, #0

mov r0, r3

sub sp, fp, #4

@sp needed

pop {fp, pc}

.L6

.align 2

.LS

.word .LC0 分配内存用来存放printf 要打印字符串地址, .LC0

.size main, -main 设置main函数大小=当前地址-main开始地址

.ldent "GCC"

.section .note.GNU-stack文章来源地址https://www.toymoban.com/news/detail-838677.html

到了这里,关于ARM GNU 汇编 “每日读书“的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索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)
  • [ARM 汇编]高级部分—ARM汇编编程实战—3.3.2 嵌入式开发环境搭建

    搭建一个嵌入式开发环境主要包括以下几个部分: 安装交叉编译器 配置集成开发环境(IDE) 安装调试工具 下载和烧录程序 接下来,我们将详细介绍每个部分,并提供相应的实例。 安装交叉编译器 交叉编译器是用于将您编写的ARM汇编代码编译成可执行文件的工具。在本教程

    2024年02月11日
    浏览(55)
  • Keil MDK配置ARM汇编/C语言混合开发环境

    1. 安装Keil MDK 安装方法这里不再说明,懂得都懂!🐶 2. 安装ARM开发包 在Keil MDK5之后,不再原生支持ARM7/9,需要自行安装软件包,链接在这,注意安装与自己MDK版本对应的那个包 我的版本是5.18,下载之后傻瓜式安装,因为它会自动检测你MDK所在的位置。 3. 新建工程 注意:选

    2024年02月02日
    浏览(60)
  • 【ARM64 常见汇编指令学习 12 -- ARM 汇编函数 的学习】

    上篇文章:ARM64 常见汇编指令学习 11 – ARM 汇编宏 .macro 的学习 下篇文章:ARM64 常见汇编指令学习 13 – ARM 汇编 ORG 伪指令学习 ARM汇编中的函数定义并不像高级语言那样有特定的语法,但通常可以通过 标签(label) 和 子程序调用指令 (如BL,BLX) 来实现类似于函数的功能。 例如

    2024年02月14日
    浏览(49)
  • 【ARM系列】ARM常用汇编指令

    在调试芯片启动代码或者分析ARM core运行流程的过程中,尝尝需要对照软件代码的反汇编文件进行分析,因此有必要掌握一些常用的arm汇编指令。 指令格式:MOV{条件}{S} 目的寄存器,源操作数 指令含义:将源操作数赋值给目的寄存器。源操作数可以是寄存器,立即数或带移位

    2024年02月04日
    浏览(40)
  • ARM64 常见汇编指令学习 11 -- ARM 汇编宏 .macro 的学习

    下篇文章:ARM64 常见汇编指令学习 12 – ARM 汇编函数 的学习 上篇文章:ARM64 常见汇编指令学习 10 – 无符号位域提取指令 BFXIL 在 ARM 汇编中,“ .macro ” 是用来定义一个宏的指令。宏可以看作是一个可以在汇编程序中重用的代码段。当调用宏时,汇编器会将宏的内容插入到调

    2024年02月14日
    浏览(47)
  • 【ARM64 常见汇编指令学习 13 -- ARM 汇编 ORG 伪指令学习】

    上篇文章:ARM64 常见汇编指令学习 12 – ARM 汇编函数 的学习 下篇文章:ARM64 常见汇编指令学习 14 – ARM 汇编 .balign,.balignw,.balign 伪指令学习 在ARM汇编中,\\\" org \\\"是一个汇编器伪指令,用于设置下一条指令的装入地址。\\\" org \\\"后面跟着的是一个表达式,这个表达式的值就是下一条

    2024年02月14日
    浏览(50)
  • 【ARM 常见汇编指令学习 5 -- arm64汇编指令 wzr 和 xzr】

    上篇文章:ARM 常见汇编指令学习 4 – ARM64 比较指令 cbnz 与 b.ne 区别 下篇文章:ARM 常见汇编指令学习 6 - bic(位清除), orr(位或), eor(异或) ARMv8 在硬件层名引入了一个新的 zero 寄存器 : XZR (64-bits), WZR (32-bits)。比如要将某一变量赋值为0x0, 由于ARM不允许直接操作内存单元上的数据

    2024年02月15日
    浏览(101)
  • 嵌入式:ARM内嵌汇编及C和ARM汇编相互调用

    在C程序中嵌入汇编程序可以实现一些高级语言没有的功能,并可以提高执行效率。armcc和armcpp内嵌汇编器支持完整的ARM指令集;tcc和tcpp用于Thumb指集。但是内嵌汇编器并不支持诸如直接修改PC实现跳转的底层功能。 内嵌的汇编指令包括大部分的ARM指令和Thumb指令,但是不能直

    2024年02月02日
    浏览(50)
  • 【理解ARM架构】不同方式点灯 | ARM架构简介 | 常见汇编指令 | C与汇编

    🐱作者:一只大喵咪1201 🐱专栏:《理解ARM架构》 🔥格言: 你只管努力,剩下的交给时间! 在学习C语言的时候,我们会写个 Hello World 程序来入门,当我们写ARM程序,也该有一个简单的程序引领我们入门,这个程序就是点亮LED。 查看原理图,确定控制LED的引脚: 如上图是

    2024年02月05日
    浏览(48)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包