ARM64汇编05 - MOV系列指令

MOV(wide immediate)

MOV 可以将一个立即数移动到寄存器中。

.text:0000000000000834 80 46 82 D2                   MOV             X0, #0x1234             ; Keypatch modified this from:

MOV X0, #0x1234 对应的汇编代码为:80 46 82 D2

看手册可知,0x1234 的值储存在 5 - 20 位里面。

汇编指令对应的二进制为:

80 46 82 D2 ->
D2 82 46 80 ->
11010010 10000010 01000110 10000000 ->
1 10 100101 00 0001 0010 0011 0100 00000

其中最低5为都是0,所以寄存器是 X0 寄存器。

5-20 位的值分别是 4 3 2 1,刚好就是 0x1234。

这种 mov 指令还是比较常见的,但是由于指令的限制,它只能描述16位的立即数。

看另外的一个例子:

.text:0000000000000834 00 00 B0 D2                   MOV             X0, #0x80000000

MOV X0, #0x80000000 这条指令的立即数显然已经超过了16位,这又是咋回事呢?

这是 MOV 指令的另一种形式,由于 #0x80000000 这样的立即数实际的有效位数很少,所以ARM指令集对其表示做了优化。

手册里面有说到,MOV 实际上等同于 MOVZ:

而 MOVZ 是支持 shift 写法的:

MOVZ <Xd>, #<imm>{, LSL #<shift>}

所以上面的汇编实际上等同于:

MOVZ X0, #0x8000, LSL #16

汇编指令对应的二进制为:

00 00 B0 D2 ->
D2 B0 00 00 ->
11010010 10110000 00000000 00000000 ->
1 10 100101 01 1000 0000 0000 0000 00000

看其 hw 对应的位是 01,所以需要将 0x8000左移 1*16 位,得到 0x80000000。

hw 表示的是左移的位数,为 16 * (0~3)。

MOV (register)

MOV 可以将寄存器的值赋值给另一个寄存器。

Rm 与 Rd 都占据了5位,刚好可以描述所有的寄存器,MOV <Xd>, <Xm>

shift 有2位,这里固定是零值。imm6 与 Rn 也都是固定的值。

MOV 有个别名指令,ORR,它可以用到 shift,imm6,Rn的值。

看一个指令,MOV X0, X1

E0 03 01 AA                   MOV             X0, X1

汇编指令对应的二进制为:

E0 03 01 AA ->
AA 01 03 E0 ->
10101010 00000001 00000011 11100000 ->
1 01 01010 00 0 00001 000000 11111 00000

所以,Rd 的值是 0,表示 X0 寄存器,Rm 的值是1,表示 X1 寄存器。

顺便说一下 ORR 指令:

是将寄存器中值按位做“或”操作。

ORR <Xd>, <Xn>, <Xm>{, <shift> #<amount>}

Xm还可以做移位操作,具体移动多少位由 imm6 决定,怎么移动由 shift 决定。

MOVK

由于ARM64指令集是定长的4字节指令,这就决定了它无法在指令里面描述一个任意的数字,比如:0x123456789,这个就无法在指令中表示。

那么,当我们在程序中使用到这个数字的时候,arm64指令集是如何处理的呢?

我们写一个例子看看:

uint64_t num = 0x123456789abc;
printf("num = %llx\n", num);

查看汇编代码:

.text:00000000000008AC 81 57 93 D2                   MOV             X1, #0x9ABC
.text:00000000000008B0 00 00 00 90                   ADRP            X0, #aNumLlx@PAGE       ; "num = %llx\n"
.text:00000000000008B4 01 CF AA F2                   MOVK            X1, #0x5678,LSL#16
.text:00000000000008B8 00 00 24 91                   ADD             X0, X0, #aNumLlx@PAGEOFF ; "num = %llx\n"
.text:00000000000008BC 81 46 C2 F2                   MOVK            X1, #0x1234,LSL#32

我们只看 X1 相关的指令,它分为3个步骤:

MOV             X1, #0x9ABC
MOVK            X1, #0x5678,LSL#16
MOVK            X1, #0x1234,LSL#32

通过数据的拼接来达成目标,非常的合理。

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

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

相关文章

Unity制作马赛克效果

大家好&#xff0c;我是阿赵。   之前在玩怒之铁拳4里面&#xff0c;看到了马赛克场景转换的效果&#xff0c;觉得很有趣&#xff0c;于是也来做一下。 一、2D版本的马赛克转场效果 先看看视频效果&#xff1a; 马赛克转场 这里我是直接写shader实现的&#xff0c;我这里是把…

spring boot使用mybatisplus访问mysql的配置流程

网上教程大多教人新建一个带对应组件的项目&#xff0c;本文记录如何在一个已有springboot2.x项目中&#xff0c;配置使用mybatisplus来访问mysql。包括使用wrapper和自己写mapper.xml的自定义函数两种和数据库交互的方式。 关于项目的创建&#xff0c;参考创建springboot 2.x…

Shell正则表达式

目录 正则表达式的分类 基本组成部分 POSIX字符类 元字符 正则表达式的分类 基本的正则表达式&#xff08;Basic Regular Expression 又叫Basic RegEx 简称BREs&#xff09;扩展的正则表达式&#xff08;Extended Regular Expression 又叫Extended RegEx 简称EREs&#xf…

【QT+QGIS跨平台编译】之七十二:【QGIS_Analysis跨平台编译】—【qgis_analysis.h生成】

文章目录 一、qgis_analysis.h介绍二、信息分析三、qgis_analysis.h生成一、qgis_analysis.h介绍 qgis_analysis.h 是 QGIS(Quantum GIS)软件中的一个头文件,主要用于服务于QGIS_Analysis库的编译,包含导入、导出宏信息的定义。 二、信息分析 在qgis\src\analysis目录,CM…

pytest生成allure的报告

首先要下载安装配置allure allure serve ./outputs/allure_report 可以生成html的文件自动在默认浏览器中打开

Oceanbase使用BenchmarkSQL 进行tpcc测试及执行计划查询

Oceanbase使用BenchmarkSQL 进行tpcc测试及执行计划查询 文章目录 Oceanbase使用BenchmarkSQL 进行tpcc测试及执行计划查询环境介绍配置BenchmarkSQL开始BenchmarkSQL测试查看执行计划查询top sql查看执行计划 总结参考文档 环境介绍 操作系统&#xff1a;redhat7.9 内核版本…

unity3d Animal Controller的动物组件使用明天继续

控制器介绍 动物脚本负责控制动物的所有运动逻辑.它管理所有的动画师和刚体参数,以及所有的状态和模式,动物可以做。 动物控制器 是一个动画框架控制器,根动或到位,为任何生物或人形。它利用刚体与物理世界的互动和动画师的玩动画。 States States 是不互相重叠的动画。例如…

牛角表情生成器微信小程序版

1.纯前端输出&#xff0c;无需后台&#xff0c;无需域名&#xff0c;速度杠杠快&#xff01; 2.完美支持微信端和抖音端&#xff1b; 3.双端均支持配置开启流量主广告&#xff0c;包括&#xff1a;激励视频广告、插屏广告、banner广告、原生广告、封面广告等&#xff1b; 4.…

Codeforces Round 933 (Div. 3) A~D

比赛链接 : codeforces.com/contest/1941 A . Rudolf and the Ticket 直接暴力即可 ; #include<bits/stdc.h> #define IOS ios::sync_with_stdio(0);cin.tie(0);cout.tie(0); #define endl \n #define lowbit(x) (x&(-x)) #define sz(a) (int)a.size() #define p…

最好用的流程编辑器bpmn-js系列之基本使用

BPMN&#xff08;Business Process Modeling Notation&#xff09;是由业务流程管理倡议组织BPMI&#xff08;The Business Process Management Initiative&#xff09;开发的一套标准的业务流程建模符号规范。其目的是为用户提供一套容易理解的标准符号&#xff0c;这些符号作…

数学建模理论与实践国防科大版

目录 1.数学建模概论 2.生活中的数学建模 2.1.行走步长问题 2.2.雨中行走问题 2.3.抽奖策略 2.4.《非诚勿扰》女生的“最优选择” 3.集体决策模型 3.1.简单多数规则 3.2.Borda数规则 3.3.群体决策模型公理和阿罗定理 1.数学建模概论 1.数学模型的概念 2.数学建模的概…

前端之用html做一个用户登陆界面

用户登陆界面 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>用户注册页面</title></head> <body><form action"https://www.baidu.com" method"post">…

关于Node 中间件教程

在Node.js中&#xff0c;中间件是一种非常重要的概念&#xff0c;用于处理HTTP请求。中间件允许您在请求到达目标路由之前或之后执行某些功能。本教程旨在帮助您理解和使用Node.js中的中间件。 什么是中间件&#xff1f; 中间件是一个函数&#xff0c;可访问请求对象&#xf…

2023年全国职业院校技能大赛信息安全管理与评估

信息安全管理与评估三阶段理论 【注意事项】 1.理论测试前请仔细阅读测试系统使用说明文档&#xff0c;按提供的账号和密码登录测试系统进行测试&#xff0c;账号只限1人登录。 2.该部分答题时长包含在第三阶段比赛时长内&#xff0c;请在临近竞赛结束前提交。 3.参赛团队可…

数据库系统概念(第二周 第一堂)

前言 本文的所有知识点、图片均来自《数据库系统概念》&#xff08;黑宝书&#xff09;、山东大学李晖老师PPT。不可用于商业用途转发。 回顾 上周最后一个知识点说到数据库三级模式结构&#xff0c;在这个结构里面我们设立了模式/内模式映像、内模式/外模式映像&#xff0c;主…

闲聊Swift的枚举关联值

闲聊Swift的枚举关联值 枚举&#xff0c;字面上理解&#xff0c;就是把东西一件件列出来。 在许多计算机语言中&#xff0c;枚举都是一种重要的数据结构。使用枚举可以使代码更简洁&#xff0c;语义性更强&#xff0c;更加健壮。 Swift语言也不例外。但和其他语言相比&#xf…

docker搭建upload-labs

Upload-labs 是一个专门设计用于学习和练习文件上传安全的开源工具。它提供了各种场景的文件上传漏洞&#xff0c;供用户通过实践来学习如何发现和利用这些漏洞&#xff0c;同时也能学习到防御措施。使用 Docker 来搭建 upload-labs 环境是一种快速、简便的方法&#xff0c;它可…

[Django 0-1] Core.Cache模块

Caching 源码分析 Django 的 cache 缓存机制&#xff0c;包含了一些代理设计模式(代理了但没完全代理&#xff0c;多此一举)。 通过实现一个CacheHandler的manager类&#xff0c;来实现多缓存后端的统一管理和调用&#xff0c;避免到处实例使用。 缓存的目的 缓存的目的就是…

大华智慧园区综合管理平台 getNewStaypointDetailQuery SQL注入漏洞复现

0x01 产品简介 “大华智慧园区综合管理平台”是一款综合管理平台,具备园区运营、资源调配和智能服务等功能。平台意在协助优化园区资源分配,满足多元化的管理需求,同时通过提供智能服务,增强使用体验。 0x02 漏洞概述 由于大华智慧园区综合管理平台getNewStaypointDetai…

服务器被大流量攻击怎么办?如何防御攻击?

随着网络的发展&#xff0c;我们所遇到的安全挑战也越来越多。尤其是近年来&#xff0c;网络攻击频发&#xff0c;许多互联网企业深受其扰。为了不影响自身业务的稳定运行&#xff0c;许多企业都在想方设法的寻求解决方案&#xff0c;防止服务器被攻击而影响业务发展。下面我们…