一文搞懂 ARM 64 系列: ADD(立即数版)

news/2024/11/15 1:36:37/文章来源:https://www.cnblogs.com/chaoguo1234/p/18547229

汇编中,加法指令很重要,因为它是执行其他很多指令的基础。

同时,加法指令也会影响NZCV标志。有关NZCV的介绍,可以参看《一文搞懂 ARM 64 系列: ADC》。

ARM64汇编中,ADD指令有3种形式,这里介绍第一种形式,也就是与立即数相加。

1 指令语法

ADD <Xd|SP>, <Xn|Sp>, #imm{, shift}

{}里的内容表示是可选的。

shift表示LSL(逻辑左移)的位数,有2个取值,一个是0,一个是120是其默认值。

所谓LSL(逻辑左移),是指将数值整体向左移动,低位补0。如果高位被移出去,直接丢弃。

image

2 指令语义

整个指令就是将源寄存器<Xn|SP>,与立即数imm(如果有必要,需要进行LSL)相加,将结果写入目的寄存器<Xd|SP>

注意,这条指令不影响NZCV标志。

(<Xd|SP>, _) = <Xn|Sp> + imm << shift

3 NZCV 如何受影响

虽然这条指令最终不影响NZCV标志,但是搞清楚NZCV如何受影响,还是很有必要的。

1 将源寄存器的值<Xn|SP>imm << shift都当成无符号整型数,两数相加,得到一个无符号整型数的结果,记作u_result。此时计算时不考虑溢出:

<Xn|SP> = 0xffffffffffffffff // 64 bit 全 1
(imm << shift) = 1
u_result = 0xffffffffffffffff + 1 = 0x10000000000000000 // 2^64,而不是 0

2将源寄存器的值<Xn|SP>imm << shift都当成有符号整型数,两数相加,得到一个有符号整型数的结果,记作s_result。此时计算时不考虑溢出:

<Xn|SP> = 0xffffffffffffffff // 64 bit 全 1,此时当成 -1 看待
(imm << shift) = 0x8000000000000000 // 64 bit 最小负整数 -9223372036854775808
s_result = -1 + (-9223372036854775808) = -9223372036854775809 // 而不是 0x7fffffffffffffff

3u_result中取(63~0)64bit,记作result;

4 如果result的最高位是1,那么N = 1;

5 如果result = 0,那么Z = 1;

6 如果把result当成无符号整型数,它的值等于u_result,那么C = 0;如果不等于,那么C = 1,也就是在进行加法运算时,发生了进位。

7 如果把result当成有符号整型数,它的值等于s_result,那么V = 0;如果不等于,那么V = 1,也就是说在进行加法运算,发生了溢出。

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

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

相关文章

Win10通过安装包安装Apple Music

打开Windows的开发者模式下载应用安装包 打开 https://store.rg-adguard.net用 URL 来搜索,只需要在 https://www.microsoft.com/zh-cn/store/ 找到你要安装的应用,然后复制 URL 即可在URL(Link)中输入https://apps.microsoft.com/store/detail/apple-music-preview/9PFHDD62…

01转二维码(不是二进制)

例题ctfhub/隐写v2.0打开是一张图片文件分离得到zip,爆破密码得到7878 打开得到0和1, !!!不是二进制转图片,直接是二维码 缩小能看到000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000…

LIS系统与仪器进行通信-软件

上一篇文章介绍了LIS系统与仪器进行通信的方式和协议。这篇文章主要介绍一下按照通信方式和协议开发的一个通信软件。 这个软件在LIS信息传输中充当一个中间者的角色,只负责在仪器和三方系统中传递消息。仪器、通信软件、三方系统三者之间的通信流程如下图:登录界面首页首页可…

iman——冲刺日志(第三天)

阉割版 团队成员分工与进度 📝👥组别 成员 完成的任务 完成任务所用时间 (小时) 剩余时间 (小时)前端 阿依娜孜 完成总览页面行程概览与高德地图接入,实现动态地图显示效果。 2 2前端 郭剑敏 优化并完善路线编辑功能的前端代码。 2 1前端 王梓铭 优化主页和导航栏布局,提…

雷电9安卓模拟器安装Xposed环境

参考:抹机王-雷电9-EdXposed框架安装 资源包:点击下载 备用链接 部署雷电9 开启雷电9的root权限修改模拟器磁盘共享方式为System.vmdk可写入安装Magisk 从资源包安装Magisk Delta.apk打开Magisk Delta,在 Magisk 那一栏点击安装下一步安装至系统分区注意:如果在该步骤没有出…

基于gossip流言算法实现alertmanager高可用

目录一.alertmanager高可用架构设计1 Gossip流言算法协议原理分析2 Gossip的优劣势3 Gossip中通信模式二.搭建alertmanager高可用架构实战1.搭建alertmanager高可用架构2..测试高可用 一.alertmanager高可用架构设计 1 Gossip流言算法协议原理分析如上图所示,我们可以发现aler…

iman——冲刺日志(第二天)

半成品 团队成员分工与进度 📝👥组别 成员 完成的任务 完成任务所用时间 (小时) 剩余时间 (小时)前端 阿依娜孜 完成每日行程展示页面,初步实现按钮切换功能。 3 2前端 郭剑敏 优化“账单管理”页面设计,编写路线编辑功能的前端代码。 3 1前端 王梓铭 完成主页和导航栏布…

先天软工圣体队——冲刺日记(第二天)

1. 每位团队成员的分工与进度成员 完成的任务 完成的任务时长 剩余时间何愉心、邱雨涵 对冲刺计划以及日常开发进行记录与剪辑 10小时 5小时陈思雨,郑奇键 “资料库”模块进一步完善 6小时 4小时陈尚冰 美化上传历年卷的前端页面 12小时 3小时柯鸿毅 API接口功能初步完成 15小…

攻防世界pwn-level0栈对齐

ret地址学习 NewStarCTFweek2-ez_game中出现了栈对齐相关知识点,所以特地前来学习,本篇主要为调试记录,由于远程非常轻易就可打通,故重点关注于本地打通 使用 ret_addr = hex(next(elf.search(asm(ret))))寻找汇编指令ret(n)的地址 ┌──(root㉿kali)-[~/Desktop/Adworl…

深度学习面试的时候,如何回答1x1卷积的作用

11月了,秋招已经开始了。不知最近有没有同学在投简历面试呢? 回想起几年前我面试某大厂的时候,被问到了很多深度学习相关的知识,那时的我懂的不多,可以说是被面试官360度无死角蹂躏。 那次面试,印象最深的是问了很多与卷积相关的问题,导致我后来工作一段时间看到卷积就时…

day4-Scrum

这个作业属于哪个课程 https://edu.cnblogs.com/campus/gdgy/CSGrade22-34/作业要求 需求&原型改进、系统设计、Alpha任务分配计划、测试计划团队项目仓库 https://github.com/bitpurleclude/GDUT-Goofish/issues团队成员 李嘉锐 车峤锐 于海洋 林进光 黄健 钟启…

GPU编程

来源:https://worktile.com/kb/p/2155928gpu编程有什么用? 图形处理单元(GPU)编程具有多种用途,主要包括:1、加速大规模计算任务、2、图形和视频渲染、3、深度学习和机器学习。GPU编程在深度学习和机器学习领域尤为重要。它允许数据科学家和研究人员利用GPU的并行处理能力…