ARM汇编[0] hello world

文章目录

  • 简述
  • 寄存器
  • 语法
  • 系统调用
  • 例程

简述

如果不了解x86汇编的话建议先了解下,x86资料多、环境好搞、容易入门

阿尔可是急于求成的人,希望赶快看到成果;
所以本篇文章不会东讲西讲展开讲,只讲让hello world汇编能跑起来的关键点

说句感慨:本科的时候一直没学会汇编,对我来说最大的阻碍就是“通用寄存器”,压根就想不明白,什么通用?我给寄存器丢几个数,CPU怎么知道我放在哪个寄存器了?只是自己把数据左手倒右手的话确实通用,但在现代操作系统下,每个寄存器都有固定的用途,通用个🍑,,,

寄存器

ARM32的寄存器貌似叫r0 r1 r2 …
但是用这个名称在aarch64架构的平台编译不过,
ARM64的寄存器叫x0/w0、x1/w1… 对应rax/rbx
ARM64一共有x0-x30

全部的寄存器可以上网搜,这里说一下关键的
在这里插入图片描述
存放系统调用号的寄存器 x8
存放返回值的寄存器        x0

在这里插入图片描述
传递参数的寄存器x0-x5

好了,能传参、能执行系统调用、能拿返回值,就好比Minecraft里有了铲子、镐子和斧头
——虽然仍然一无所有,但是,可以开始建造属于自己的一切了


语法

立即数:AT&T汇编中用$标识,ARM汇编用#
地址:AT&T汇编中直接用标签,ARM汇编需要在前面加上=
指令顺序:AT&T汇编是ins src, dst,ARM汇编是inc dst, src,这点和x86汇编比较像
注释:AT&T汇编用#作注释,ARM汇编用//或/**/(我用#作注释也一样能编译运行,不知道汇编器是怎么区分注释和立即数的)
伪指令:因为都是GNU汇编器,所以AT&T汇编和ARM64基本一样

描述比较困难,等下直接看例程


系统调用

汇编里没有printf这么高级的封装函数可以使用,想要使用一些功能就需要系统调用了

在这里插入图片描述
上面的unistd文件放的是c库的声明,
下面的unistd文件放的的系统调用号
openEuler20.03和Ubuntu22系统上都是

在其中我们查看write系统调用的调用号和声明

调用号
在这里插入图片描述

声明
在这里插入图片描述

那么就可以知道,write的系统调用号在aarch64平台上是64,需要三个参数:文件描述符、内容、输出长度

例程

.datastrr:   .string "hello world~\n"len = .-strr
.text.global _start// 以您对x86汇编的了解,相信我不注释您也明白↑↑↑这些细枝末节
_start:// write syscallmov     x8,     #64     mov     x0,     #1      // stdoutldr     x1,     =strrmov     x2,     lensvc     #0				// execute syscall/*首先是把write的系统调用号放到x8寄存器然后参数1(文件描述符)就用标准输出来打印到控制台上参数2内容,这里填字符串的地址,(ARM不能用mov来访问地址这老生常谈了相信我不说您也知道)参数3 字符串长度svc #0执行系统调用*/// exit syscallmov     x8,     #93// use x0 as return valuesvc     #0/*但是write系统调用完之后紧接着就exit直接让write调用完后x0里保存的值作为exit的参数1,不需额外操作程序执行完后在shell执行echo $?可以看到write系统调用执行的结果*/

编译
as hello.s -o hello.o
ld hello.o -o hello

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

编程实例分享,宠物诊所电子处方怎么开,兽医电子处方模板电子版操作教程

编程实例分享,宠物诊所电子处方怎么开,兽医电子处方模板电子版操作教程 一、前言 以下操作教程以 佳易王兽医电子处方软件V16.0为例说明 软件文件下载可以点击最下方官网卡片——软件下载——试用版软件下载 1、在系统 设置里可以设置打印参数&#x…

AI大模型开发架构设计(9)——AI 编程架构刨析和业务应用实战案例

文章目录 AI 编程架构刨析和业务应用实战案例1 AI编程代码生成模型剖析编程方式的发展代码自动生成基于大模型的AI编程工具——Github Copilot以 CodeGeeX 为例-发展过程以 CodeGeeX 为例-训练过程以 CodeGeeX 为例-大规模代码数据处理以 CodeGeeX 为例-模型结构以 CodeGeeX 为…

【BUUCTF N1BOOK】[第二章 web进阶] 通关

🍬 博主介绍👨‍🎓 博主介绍:大家好,我是 hacker-routing ,很高兴认识大家~ ✨主攻领域:【渗透领域】【应急响应】 【python】 【VulnHub靶场复现】【面试分析】 🎉点赞➕评论➕收藏…

Zoho Mail企业邮箱商业扩展第2部分:企业运营

在关于Zoho Mail企业邮箱商业扩展应用的这个系列的第一部分中,我们遇到了一位名叫王雪琳的个体企业家。她经营着自己的营销机构,并展示了如何创建和管理自己的企业。为了提升企业的专业形象,王雪琳使用了Zoho Mail来建立个性化的电子邮件域名…

018 Linux

文章目录 操作系统定义分类Linux系统构成 Linux文件系统Linux常用命令基础操作命令文件操作压缩解压权限管理显示展示命令其他命令 vi编译器操作使用 添加用户基本概念用户管理命令 ubuntu软件安装ssh服务终端启动Python服务 操作系统 定义 操作系统是管理计算机硬件与软件资…

1 月 NFT 市场动态:Polygon 增长,Mooar 崛起,TinFun 掀起文化浪潮

作者:stellafootprint.network 数据源:NFT Research - Footprint Analytics 2024 年 1 月,加密货币与 NFT 市场迎来了重要的转折点,其中美国首批现货比特币 ETF 的亮相尤为引人注目,这一金融一体化的里程碑事件吸引了…

折半查找练习

二分查找针对的是一个有序的数据集合。每次都通过跟区间的中间元素对比,将待查找的区间缩小为之前的一半,直到找到要查找的元素,或者区间被缩小为0。 时间复杂度:O(logn) 数据大小为n的数组,每次只比较中间的值&#x…

苏宁易购移动端首页(rem布局)

技术选型 方案∶采取单独制作移动页面方案技术:布局采取rem适配布局( less rem &#xff0b;媒体查询)设计图:设计图采用750px设计尺寸 设置视口标签以及引入初始化样式 <meta name"viewport" content"widthdevice-width, initial-scale1.0, user-scalable…

快速入门Safetensors

快速入门Safetensors 什么是Safetensors架构常用操作速度对比彩蛋 Safetensors官方网址 什么是Safetensors Safetensors是一种新的简单格式&#xff0c;用于安全存储张量(与pickle相反)&#xff0c;而且速度仍然很快(零拷贝)。 架构 常用操作 # pip install safetensors# L…

AI嵌入式K210项目(26)-二维码识别

文章目录 前言一、什么是二维码&#xff1f;二、实验准备三、实验过程四、API接口总结 前言 本章介绍基于机器视觉实现二维码识别&#xff0c;主要包含两个过程&#xff0c;首先检测图像中是否有二维码&#xff0c;如果有则框出并打印二维码信息&#xff1b; 一、什么是二维码…

揭开Markdown的秘籍:标题|文字样式|列表

&#x1f308;个人主页&#xff1a;聆风吟 &#x1f525;系列专栏&#xff1a;Markdown指南、网络奇遇记 &#x1f516;少年有梦不应止于心动&#xff0c;更要付诸行动。 文章目录 &#x1f4cb;前言一. ⛳️Markdown 标题二. ⛳️Markdown 文字样式2.1 &#x1f514;斜体2.2 &…

MacOS 查AirPods 电量技巧:可实现低电量提醒、自动弹窗

要怎么透过macOS 来查询AirPods 电量呢&#xff1f;当AirPods 和Mac 配对后&#xff0c;有的朋友想通过Mac来查询AirPods有多少电量&#xff0c;这个里有几个技巧&#xff0c;下面我们来介绍一下。 透过Mac 查AirPods 电量技巧 技巧1. 利用状态列上音量功能查询 如要使用此功能…

Spring Boot + 七牛OSS: 简化云存储集成

引言 Spring Boot 是一个非常流行的、快速搭建应用的框架&#xff0c;它无需大量的配置即可运行起来&#xff0c;而七牛云OSS提供了稳定高效的云端对象存储服务。利用两者的优势&#xff0c;可以为应用提供强大的文件存储功能。 为什么选择七牛云OSS? 七牛云OSS提供了高速的…

《Git 简易速速上手小册》第6章:Git 在持续集成/持续部署(CI/CD)中的应用(2024 最新版)

文章目录 6.1 CI/CD基础6.1.1 基础知识讲解6.1.2 重点案例&#xff1a;为 Python Web 应用实现 CI/CD6.1.3 拓展案例 1&#xff1a;自动化部署到云平台6.1.4 拓展案例 2&#xff1a;使用 Docker 容器化部署 6.2 Git 与自动化测试6.2.1 基础知识讲解6.2.2 重点案例&#xff1a;为…

【数据结构】数据结构

本文是基于中国MOOC平台上&#xff0c;华中科技大学的《数据结构》课程和浙江大学的《数据结构》课程所作的一篇课程笔记&#xff0c;便于后期讲行系统性查阅和复习。 从个人感受而言&#xff0c;华中科技大学的课程讲解更适合初学者&#xff08;缺点在于&#xff0c;从概念到…

2024-01-06-AI 大模型全栈工程师 - 机器学习基础

摘要 2024-01-06 阴 杭州 晴 本节简介: a. 数学模型&算法名词相关概念; b. 学会数学建模相关知识&#xff1b; c. 学会自我思考&#xff0c;提升认知&#xff0c;不要只会模仿&#xff1b; 课程内容 1. Fine-Tuning 有什么作用&#xff1f; a. 什么是模型训练&#xff…

redis的主从配置模拟(一主双从)

目录 先来给大家扩展机道面试官经常会问到关于redis的题 一、redis有哪些好处 二、redis相比memcached有哪些优势 三、redis常见性能问题和解决方案 四、redis集群的工作原理 五、redis主从的原理 redis的主从配置模拟&#xff08;一主双从&#xff09; 一、准备环境 …

TCP 传输控制协议——详细

目录 1 TCP 1.1 TCP 最主要的特点 1.2 TCP 的连接 TCP 连接&#xff0c;IP 地址&#xff0c;套接字 1.3 可靠传输的工作原理 1.3.1 停止等待协议 &#xff08;1&#xff09;无差错情况 &#xff08;2&#xff09;出现差错 &#xff08;3&#xff09;确认丢失和确认迟到…

JetpackCompose之状态管理

JetPack Compose系列&#xff08;13&#xff09;—状态管理 State 即&#xff0c;状态。官方的解释是&#xff1a; State in an application is any value that can change over time. And ****event can notify a part of a program that something has happened. 可以这样…

113.路径总和 II

给你二叉树的根节点 root 和一个整数目标和 targetSum &#xff0c;找出所有 从根节点到叶子节点 路径总和等于给定目标和的路径。 叶子节点 是指没有子节点的节点。 示例 1&#xff1a; 输入&#xff1a;root [5,4,8,11,null,13,4,7,2,null,null,5,1], targetSum 22 输出&a…