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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/725856.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Ubuntu】将多个python文件打包为.so文件

1.为什么要将python打包为.so文件&#xff1f; 保护源码 2.实战例子 a.安装相应的包 pip install cython 验证安装是否成功 cython --version b.实战的文件目录和内容 hi.py # This is a sample Python script.# Press ShiftF10 to execute it or replace it with your…

线性代数 --- 特征值与特征向量

特征值与特征向量 已知任意向量x&#xff0c;现有矩阵A对x进行操作后&#xff0c;得到新的向量Ax。这就好比是自变量x与函数f(x)的关系一样&#xff0c;向量x通过类似“函数”的处理得到了一个新的向量Ax。这个新的向量可能和原向量x方向相同&#xff0c;也可能不同(事实上大多…

Java开发工程师面试题(Spring)

一、Spring Bean的生命周期 生命周期可以分为以下几步&#xff1a; 通过Spring框架的beanFactory工厂利用反射机制创建bean对象。根据set方法或者有参构造方法给bean对象的属性进行依赖注入。判断当前bean对象是否实现相关aware接口&#xff0c;诸如beanNameAware、beanFactor…

P1305 新二叉树题解

题目 输入一串二叉树&#xff0c;输出其前序遍历。 输入输出格式 输入格式 第一行为二叉树的节点数n。(1≤n≤26) 后面n行&#xff0c;每一个字母为节点&#xff0c;后两个字母分别为其左右儿子。特别地&#xff0c;数据保证第一行读入的节点必为根节点。空节点用*表示。 …

Java-常见面试题收集(一)

一 Java 基础 1 列举 Java 的 8 大基础类型&#xff0c;并写出对应的占用大小 数据类型占位(字节)数据范围byte1[ -128 , 127 ]short2[ -32768 , 32767 ]int4[ -231 , -231 - 1 ] ≈ [-21 亿&#xff0c;21 亿]long8[ -263 , -263-1 ]float4[-3.4x1038 , ~ 3.4x1038]double8[…

Java的堆如何分代的?

前言&#xff1a; java对象一般都是朝生夕死&#xff0c;也有部分对象是一直存在的。两种对象如何都放在一起&#xff0c;进行垃圾回收的时候效率较低。所以通过将不同时期的对象放在不同的内存池中&#xff0c;节省垃圾回收的时间&#xff0c;提高性能。 组成&#xff1a; 新生…

HUAWEI华为MateBook D 14 2022款 12代酷睿版集显(NbF-16)工厂模式原厂Windows11预装OEM系统,含F10智能还原功能

系统下载链接&#xff1a;https://pan.baidu.com/s/1kgJvwSq5eOdme7J9PDXIxQ?pwdxvz8 提取码&#xff1a;xvz8 华为笔记本电脑原装出厂系统工厂安装包&#xff0c;含F10功能、系统自带所有驱动、系统属性专属联机支持标志、Office办公软件、华为电脑管家等预装程序&#xf…

刷怪日记-01背包理论问题(二维矩阵实现)

01背包理论问题(二维矩阵实现) 题目 解题思路 确定dp数组以及下标的含义 本题采用二维数组进行解题&#xff0c;那么dp[i] [j]表示从下标0-i的物品任意选择&#xff0c;放进容量为j背包&#xff0c;价值总合最大是多少 i 表示物品第几个物品&#xff0c;j 表示背包容量大小 …

Spring MVC PathPatternMatchableHandlerMapping原理解析

在Spring MVC框架中&#xff0c;路由机制是实现HTTP请求到具体处理器方法映射的核心。PathPatternMatchableHandlerMapping是Spring 5之后引入的一个新特性&#xff0c;它基于PathPattern来提供更为灵活和强大的URL路径匹配能力。与传统的RequestMappingHandlerMapping相比&…

ORACLE 如何使用dblink实现跨库访问

dbLink是简称&#xff0c;全称是databaselink。database link是定义一个数据库到另一个数据库的路径的对象&#xff0c;database link允许你查询远程表及执行远程程序。在任何分布式环境里&#xff0c;database都是必要的。另外要注意的是database link是单向的连接。在创建dat…

LeetCode刷题---填充每个节点的下一个右侧节点指针 II

题解:LeetCode题解 解题思想&#xff1a; 通过创建辅助指针来解决该问题 当当前节点cur不为空的时候&#xff0c;创建辅助节点dummy&#xff0c;使其一直作为每一层的第一个节点的前一个节点。 创建辅助指针pre&#xff0c;pre初始指向dummy&#xff0c;之后通过pre来填充当前层…

2.2 评估方法 机器学习

我们若有一个包含m个样例的数据集&#xff0c;若我们既需要训练&#xff0c;也需要测试&#xff0c;我们该如何处理呢&#xff1f;下面是几种方法&#xff1a; 2.2.1 留出法 “留出法”直接将数据集D划分为两个互斥的集合&#xff0c;其中一个作为训练集S&#xff0c;另一个作…

双指针算法(1)

目录 283.移动零 一、题目描述 二、思路解析 三、代码 1089.复写零 一、题目描述 二、思路解析 三、代码 202.快乐数 一、题目描述 二、思路解析 三、代码 11.盛水最多的容器 一、题目描述 二、思路解析 三、代码 283.移动零 一、题目描述 OJ题目链接&#xf…

Linux升级openssl

运行acme.sh更新SSL证书时出现报错&#xff1a;Register account Error 具体错误为&#xff1a; Register account Error: {"type":"urn:ietf:params:acme:error:malformed","status":400,"detail":"[External Account Binding]…

python基于django的药品进销存管理系统elsb2

本系统是通过面向对象的python语言搭建系统框架&#xff0c;通过关系型数据库MySQL存储数据。使用django框架进行药店药品的信息管理&#xff0c;用户只需要通过浏览器访问系统即可获取药店药品信息&#xff0c;并可以在线管理&#xff0c;实现了信息的科学管理与查询统计。本文…

OpenAI 大声朗读出来

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

【MySQL】not in遇上null的坑

今天遇到一个问题&#xff1a; 1、当 in 内的字段包含 null 的时候&#xff0c;正常过滤&#xff1b; 2、当 not in 内的字段包含 null 的时候&#xff0c;不能正常过滤&#xff0c;即使满足条件&#xff0c;最终结果也为 空。 测试如下&#xff1a; select * from emp e;当…

2024全国水科技大会之国际合作与新技术、新产品推介会

召集人&#xff1a;中华环保联合会水环境治理专委会 此论坛主要为筛选新技术、新产品&#xff0c;入选企业后续可参与到我会7月的国际考察中&#xff0c;可为企业推荐国际项目合作&#xff01; 一、会议背景 为积极应对“十四五”期间我国生态环境治理面临的挑战&#xff0c;加…

剑指offer面试题27 二叉搜索树与双向链表

考察点 树的遍历&#xff0c;双向链表知识点 题目 分析 题目要求把一颗二叉搜索树转换成排序的双向链表&#xff0c;二叉搜索树和双向链表一样都有2个指针&#xff0c;唯一的区别就是对于树来说一个结点具有左子树右子树&#xff0c;对于双向链表来说是直接前驱和直接后驱。…

【nodejs】“__dirname is not defined”错误修复

▒ 目录 ▒ &#x1f6eb; 问题描述环境 1️⃣ 原理CommonJS vs ESM错误原因 2️⃣ 禁用 ESM 模式并改用 CommonJS方案一&#xff1a;项目方案二&#xff1a;单文件 3️⃣ 在 ESM 模式下自实现__dirname&#x1f4d6; 参考资料 &#x1f6eb; 问题 描述 从网上找了一份代码&am…