GNU环境下伪操作伪指令的测试

目录

1.伪操作ldr转为指令的验证

测试目标:

测试代码:

测试结果:

结果分析:

2、伪操作ALIGN使用的例子

测试目标:

测试代码:

测试结果:

(1)未使用align伪操作:

(2)使用了align伪操作:

结果分析:


1.伪操作ldr转为指令的验证

测试目标:

(1)理解并熟练运用ARM处理器的伪指令,理解ldr伪指令的功能。

(2)在GNU环境下练习ARM处理器伪指令和伪操作,并学会分析反汇编代码。

测试代码:

start.s

.globl _start

_start:

ldr r0,=0x70000000

orr r0,r0,#0x13

mcr p15,0,r0,c15,c2,4



ldr r0,=0x7e004000

mov r1,#0



str r1,[r0]



ldr r1,=0x7e000020

mov r0,#0x1000

str r0,[r1]



ldr r1,=0x7e000024

mov r0,#0

str r0,[r1]

halt:

b halt

测试结果:

结果分析:

start.txt是start.s反汇编后的文件。我们以当前正在执行的指令作为参考点,也就是以第一条指令为参考点,那么 R15(PC)中存放的就是第三条指令,换句话说就是 R15(PC)总是指向当前正在执行的指令地址再加上 2 条指令的地址。对于 32 位的 ARM 处理器,每条指令是 4 个字节,所以R15 (PC)值 = 当前执行的程序位置 + 8 个字节。

当执行到ldr伪指令时,会在代码末尾开辟一块内存,用来存放不是合法立即数的常数。

11行ldr r0,[pc,#32]中32 是指针指向从当前指令的下两条指令开始的第32个字节的位置,即第22行PC=30的位置。

14行ldr r1,[pc,#24]中24 是指针指向从当前指令的下两条指令开始的第24个字节的位置,即第23行PC=34的位置。

17行ldr r1,[pc,#16]中16 是指针指向从当前指令的下两条指令开始的第16个字节的位置,即第24行PC=38的位置。

2、伪操作ALIGN使用的例子

测试目标:

对齐方式设置ALIGN伪操作通过用0或NOP指令进行填充来使当前位置与指定的边界对齐。

测试代码:

align.s

.globl _start

_start:

 mov r1,r0

    mov r0,#12

    ldr r4,str1

    ldr r3, =str1



    ldr r5,str

    ldr r6,=str

    ldr r7,str



str1:

    .word 7777

str:

    .word 0x33f80000

    .byte 0x88

    .byte 0x77

    .align

reset:

mov r8,#0

测试结果:

利用arm-linux-gcc 生成可执行文件并对生成的可执行文件进行反汇编:

(1)未使用align伪操作:

(2)使用了align伪操作:

结果分析

通过反汇编我们可以看出,前面所有的指令都是4的倍数,而在未使用align伪操作reset这个地址处的指令却不是4的倍数,我们知道ARM是32位处理器,在当前ARM指令状态下,所有指令的执行都是按照4的倍数进行执行的,使用align伪操作的程序反汇编后PC所指地址为00000028,是4的倍数,实现了对齐。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Leetcode1038. 从二叉搜索树到更大和树(每日一题)

目录 ⚽题目: 🏐题目分析: 🏀题目解答: 🥎代码如下: ⚽题目: 给定一个二叉搜索树 root (BST),请将它的每个节点的值替换成树中大于或者等于该节点值的所有节点值…

Python类型注解必备利器:typing模块解读指南

更多资料获取 📚 个人网站:ipengtao.com 在Python 3.5版本后引入的typing模块为Python的静态类型注解提供了支持。这个模块在增强代码可读性和维护性方面提供了帮助。本文将深入探讨typing模块,介绍其基本概念、常用类型注解以及使用示例&am…

Java并发模式和设计策略

引言 小伙伴们,今天小黑要和咱们聊聊Java并发编程的那些事儿。在现代软件开发中,高效地处理多任务是一个不可或缺的能力。特别是对于服务成千上万用户的应用,能够同时处理多个操作不仅是一个加分项,简直是必备技能了!…

【踩坑】解决maven的编译报错Cannot connect to the Maven process. Try again later

背景 新公司新项目, 同事拷给我maven的setting配置文件, 跑项目编译发现maven报 Cannot connect to the Maven process. Try again later. If the problem persists, check the Maven Importing JDK settings and restart IntelliJ IDEA 虽然好像不影响, 项目最终还是能跑起来…

C++ 系列 第四篇 C++ 数据类型上篇—基本类型

系列文章 C 系列 前篇 为什么学习C 及学习计划-CSDN博客 C 系列 第一篇 开发环境搭建(WSL 方向)-CSDN博客 C 系列 第二篇 你真的了解C吗?本篇带你走进C的世界-CSDN博客 C 系列 第三篇 C程序的基本结构-CSDN博客 前言 面向对象编程(OOP)的…

Linux(14):进程管理

一个程序被加载到内存当中运作,那么在内存内的那个数据就被称为进程(process)。 进程是操作系统上非常重要的概念,所有系统上面跑的数据都会以进程的型态存在。 进程 在 Linux底下所有的指令与能够进行的动作都与权限有关,而系统如何判定权…

Android wifi连接和获取IP分析

wifi 连接&获取IP 流程图 代码流程分析 一、关联阶段 1. WifiSettings.submit – > WifiManager WifiSettings 干的事情比较简单,当在dialog完成ssid 以及密码填充后,直接call WifiManager save 即可WifiManager 收到Save 之后,就开…

JVM:双亲委派(未完结)

类加载 定义 一个java文件从编写代码到最终运行,必须要经历编译和类加载的过程,如下图(图源自b站视频up主“跟着Mic学架构”)。 编译就是把.java文件变成.class文件。类加载就是把.class文件加载到JVM内存中,得到一…

Shell数组函数:数组(一)

一、数组简介: 变量:用一个固定的字符串,代替一个不固定字符串。数组:用一个固定的字符串,代替多个不固定字符串。 二、类型 普通数组:只能使用整数作为数组索引关联数组:可以使用字符串作为…

【LeetCode热题100】【双指针】三数之和

给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k ,同时还满足 nums[i] nums[j] nums[k] 0 。请 你返回所有和为 0 且不重复的三元组。 注意:答案中不可以包含重复的三元组。 示例 …

具有五层协议的网络体系结构

目录 一、计算机的网络体系结构 二、五层协议的体系结构 1、物理层 2、数据链路层 3、网络层 4、传输层 5、应用层 三、数据在各层之间传输的过程 一、计算机的网络体系结构 二、五层协议的体系结构 1、物理层 利用传输介质为通信的网络结点之间建立、管理和释放物理连…

电压驻波比

电压驻波比 关于IF端口的电压驻波比 一个信号变频后,从中频端口输出,它的输出跟输入是互异的。这个电压柱波比反映了它输出的能量有多少可以真正的输送到后端连接的器件或者设备。

沐风老师3DMAX随机变换工具RandomTransform插件使用方法详解

3DMAX随机变换工具RandomTransform插件使用方法 3dMax随机变换工具RandomTransform,是一款用MAXScript脚本语言开发的3dsMax小工具,可以随机变换选中的单个或多个对象的位置、角度及大小。 在3dMax中“变换”工具是最常用的工具(移动、旋转和…

【hacker送书第8期】Java从入门到精通(第7版)

第8期图书推荐 内容简介编辑推荐作者简介图书目录参与方式 内容简介 《Java从入门到精通(第7版)》从初学者角度出发,通过通俗易懂的语言、丰富多彩的实例,详细讲解了使用Java语言进行程序开发需要掌握的知识。全书分为4篇共24章&a…

Java生成word[doc格式转docx]

引入依赖 <!-- https://mvnrepository.com/artifact/org.freemarker/freemarker --><dependency><groupId>org.freemarker</groupId><artifactId>freemarker</artifactId><version>2.3.32</version></dependency> doc…

家政服务预约小程序系统的开发;

家政服务预约小程序系统的开发&#xff0c;既是对传统加盟服务模式的创新&#xff0c;也是家政商家企业营销推广服务的升级。它推动整个家政服务行业实现线上线下深度融合&#xff0c;提升用户消费体验&#xff0c;实现了雇主、服务提供者、家政企业商家三者之间的无缝衔接&…

Spring之AOP理解与应用

1. AOP的认识 面向切面编程&#xff1a;基于OOP基础之上新的编程思想&#xff0c;OOP面向的主要对象是类&#xff0c;而AOP面向的主要对象是切面&#xff0c;在处理日志、安全管理、事务管理等方面有非常重要的作用。AOP是Spring中重要的核心点&#xff0c;AOP提供了非常强…

阿里云服务器租赁价格表,预算100元到5000元可选配置

阿里云服务器租用费用&#xff0c;阿里云轻量应用服务器2核2G3M带宽轻量服务器一年87元&#xff0c;2核4G4M带宽轻量服务器一年165元12个月&#xff0c;ECS云服务器e系列2核2G配置3M固定带宽99元一年、2核4G配置365元一年、2核8G配置522元一年&#xff0c;阿里云u1服务器2核4G、…

语义分割 DeepLab V1网络学习笔记 (附代码)

论文地址&#xff1a;https://arxiv.org/abs/1412.7062 代码地址&#xff1a;GitHub - TheLegendAli/DeepLab-Context 1.是什么&#xff1f; DeepLab V1是一种基于VGG模型的语义分割模型&#xff0c;它使用了空洞卷积和全连接条件随机&#xff08;CRF&#xff09;来提高分割…

RPG项目01_技能释放

基于“RPG项目01_新输入输出”&#xff0c; 修改脚本文件夹中的SkillBase脚本&#xff1a; using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.Events; //回复技能&#xff0c;魔法技能&#xff0c;物理技能…