一文搞懂 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 ...
随机推荐
- windows中MySQL迁移数据存放盘符位置
由于刚开始安装mysq时都选择了默认安装,数据存放在了c盘,后面数据量过大c盘不堪重负,所以迁移数据到D盘 windows中MySQL迁移数据存放盘符位置 参考: https://blog.csdn. ...
- 守护您的数字资产:API安全的最佳实践
在数字化时代,API(应用程序编程接口)已成为企业与用户.服务与服务之间沟通的桥梁.然而,随着API的广泛应用,安全问题也日益凸显.本文将探讨API安全的重要性,并提供一些实用的安全措施,帮助您保 ...
- C# 使用 PaddleOCRSharp 识别 图片中的文字、 使用QRCoder生成二维码
目录 使用PaddleOCRSharp识别图片中的文字 PaddleOCRSharp资料汇总: 1.将源码编译成对应的.Net 版本引入到项目中 2. 初始化PaddleOCREngine 3. 调用 ...
- Angular 18+ 高级教程 – Angular Compiler (AKA ngc) Quick View
前言 在 Get Started 那一篇,我们提到过 Angular Compilation.这篇稍微给点具体画面,让大家感受一下. 但不会讲细节,对细节感兴趣的可以看这篇 Medium – How ...
- TypeScript 高级教程 – 把 TypeScript 当强类型语言使用 (第一篇)
前言 原本是想照着 TypeScript 官网 handbook 写个教程的. 但提不起那个劲... 所以呢, 还是用我自己的方式写个复习和进阶笔记就好了呗. 以前写过的 TypeScript 笔记: ...
- Servlet——xml配置Servlet
XML配置方式编写 Servlet 步骤: 1.编写 Servlet 类 2.在 web.xml 中配置该Servlet
- 前端VUE调用后台接口,实现基本增删改查
设置接口请求 作为一个后台,个人一点感想:前端现在都是组件化开发,会看文档基本功能就能实现. js文件 import request from '@/router/axios' // 查询 expor ...
- Nuxt.js 应用中的 page:start 钩子详解
title: Nuxt.js 应用中的 page:start 钩子详解 date: 2024/10/8 updated: 2024/10/8 author: cmdragon excerpt: pag ...
- vue3读取所有的vue文件
- kotlin更多语言结构——>反射
类引用 最基本的反射功能是获取 Kotlin 类的运行时引用.要获取对静态已知的 Kotlin 类的引用,可以使用 类字面值 语法 val c = MyClass::class 请注意,Kotlin ...