一文搞懂 ARM 64 系列: ADD(立即数版)
汇编中,加法指令很重要,因为它是执行其他很多指令的基础。
同时,加法指令也会影响NZCV标志。有关NZCV的介绍,可以参看《一文搞懂 ARM 64 系列: ADC》。
ARM64汇编中,ADD指令有3种形式,这里介绍第一种形式,也就是与立即数相加。
1 指令语法
ADD <Xd|SP>, <Xn|Sp>, #imm{, shift}
{}里的内容表示是可选的。
shift表示LSL(逻辑左移)的位数,有2个取值,一个是0,一个是12。0是其默认值。
所谓LSL(逻辑左移),是指将数值整体向左移动,低位补0。如果高位被移出去,直接丢弃。

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
3 从u_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,也就是说在进行加法运算,发生了溢出。
一文搞懂 ARM 64 系列: ADD(立即数版)的更多相关文章
- 一文搞懂所有Java集合面试题
Java集合 刚刚经历过秋招,看了大量的面经,顺便将常见的Java集合常考知识点总结了一下,并根据被问到的频率大致做了一个标注.一颗星表示知识点需要了解,被问到的频率不高,面试时起码能说个差不多.两颗 ...
- 三文搞懂学会Docker容器技术(下)
接着上面一篇:三文搞懂学会Docker容器技术(上) 三文搞懂学会Docker容器技术(中) 7,Docker容器目录挂载 7.1 简介 容器目录挂载: 我们可以在创建容器的时候,将宿主机的目录与容器 ...
- 一文搞懂指标采集利器 Telegraf
作者| 姜闻名 来源|尔达 Erda 公众号 导读:为了让大家更好的了解 MSP 中 APM 系统的设计实现,我们决定编写一个<详聊微服务观测>系列文章,深入 APM 系统的产品.架构 ...
- 一文搞懂Flink Window机制
Windows是处理无线数据流的核心,它将流分割成有限大小的桶(buckets),并在其上执行各种计算. 窗口化的Flink程序的结构通常如下,有分组流(keyed streams)和无分组流(non ...
- 一文搞懂RAM、ROM、SDRAM、DRAM、DDR、flash等存储介质
一文搞懂RAM.ROM.SDRAM.DRAM.DDR.flash等存储介质 存储介质基本分类:ROM和RAM RAM:随机访问存储器(Random Access Memory),易失性.是与CPU直接 ...
- 基础篇|一文搞懂RNN(循环神经网络)
基础篇|一文搞懂RNN(循环神经网络) https://mp.weixin.qq.com/s/va1gmavl2ZESgnM7biORQg 神经网络基础 神经网络可以当做是能够拟合任意函数的黑盒子,只 ...
- 一文搞懂 Prometheus 的直方图
原文链接:一文搞懂 Prometheus 的直方图 Prometheus 中提供了四种指标类型(参考:Prometheus 的指标类型),其中直方图(Histogram)和摘要(Summary)是最复 ...
- Web端即时通讯基础知识补课:一文搞懂跨域的所有问题!
本文原作者: Wizey,作者博客:http://wenshixin.gitee.io,即时通讯网收录时有改动,感谢原作者的无私分享. 1.引言 典型的Web端即时通讯技术应用场景,主要有以下两种形式 ...
- 一文搞懂vim复制粘贴
转载自本人独立博客https://liushiming.cn/2020/01/18/copy-and-paste-in-vim/ 概述 复制粘贴是文本编辑最常用的功能,但是在vim中复制粘贴还是有点麻 ...
- 三文搞懂学会Docker容器技术(中)
接着上面一篇:三文搞懂学会Docker容器技术(上) 6,Docker容器 6.1 创建并启动容器 docker run [OPTIONS] IMAGE [COMMAND] [ARG...] --na ...
随机推荐
- 在VS Code中使用Snippet Craft扩展提高编码效率
Snippet Craft 一个VS Code代码片段管理插件 功能 创建和插入代码片段 在编辑器区域右键菜单中点击插入Snippet,或在代码片段视图中点击条目,则会将代码片段插入到当前激活文档的光 ...
- DDD是软件工程的第一性原理?
本文书接上回<DDD建模后写代码的正确姿势>,关注公众号(老肖想当外语大佬)获取信息: 最新文章更新: DDD框架源码(.NET.Java双平台): 加群畅聊,建模分析.技术实现交流: 视 ...
- 音视频 SDK |合理配置视频参数,提升使用质量
一.前言 在视频通话或直播时,开发者可以根据需要指定推流和拉流视频相关配置,如视频采集分辨率.视频编码输出分辨率.视频帧率.码率.视图模式和镜像模式. 设置合适的视频分辨率.帧率和码率可以在音视频场景 ...
- 树莓派2 CentOS7.9 安装配置笔记
1. 镜像下载与安装 http://isoredirect.centos.org/altarch/7/isos/armhfp/找到https://mirrors.tuna.tsinghua.edu.c ...
- eBPF 概述:第 1 部分:介绍
1. 前言 有兴趣了解更多关于 eBPF 技术的底层细节?那么请继续移步,我们将深入研究 eBPF 的底层细节,从其虚拟机机制和工具,到在远程资源受限的嵌入式设备上运行跟踪. 注意:本系列博客文章将集 ...
- webpack中 ,有哪些常见的Loader?他们是解决什么问题的?
1. css-loader 翻译css ,可以把sass / less 代码翻译成 css 代码 : 2. imgage-loader 加载并压缩图片文件 3. source-map-loader 加 ...
- kotlin更多语言结构——>类型安全的构建器
通过使用命名得当的函数作为构建器,结合带有接收者的函数字面值,可以在 Kotlin 中创建类型安全.静态类型 的构建器 类型安全的构建器可以创建基于 Kotlin 的适用于采用半声明方式构建复杂层次数 ...
- JOI Open 2017(口胡)
T1 Amusement Park 题意:通信题.给定一张 \(n\) 个点 \(m\) 条边的无向连通图.Alice 会得到一个 \([0, 2^{60})\) 中的数 \(x\),并且她需要给这张 ...
- [2024领航杯] Pwn方向题解 babyheap
[2024领航杯] Pwn方向题解 babyheap 前言: 当然这个比赛我没有参加,是江苏省的一个比赛,附件是XiDP师傅在比赛结束之后发给我的,最近事情有点多,当时搁置了一天,昨天下午想起来这个事 ...
- Acrobat DC安装报错1603,Microsoft Visual C++2013(x64)失败
之前顺利安装过Acrobat DC,但可能因为自动更新了,导致让我重新登录才能使用,无法再次破解.于是我卸载后重新安装,发现提示Microsoft Visual C++2013(x64)运行安装失败. ...