您的位置:首页 > 软件教程 > 教程 > ARM64汇编中的ADD指令详解

ARM64汇编中的ADD指令详解

来源:好特整理 | 时间:2024-11-15 09:57:19 | 阅读:196 |  标签: a 系 AR ARM   | 分享到:

汇编中,加法指令很重要,因为它是执行其他很多指令的基础。 同时,加法指令也会影响NZCV标志。有关NZCV的介绍,可以参看《一文搞懂 ARM 64 系列: ADC》。 ARM64汇编中,ADD指令有3种形式,这里介绍第一种形式,也就是与立即数相加。 1 指令语法 ADD <Xd|SP>,

在汇编语言中,加法指令是非常重要的,因为它是执行其他许多指令的基础。

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

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

1 指令语法

ADD , , #imm{, shift}

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

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

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

ARM64汇编中的ADD指令详解

2 指令语义

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

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

(, _) =  + imm << shift

3 NZCV 如何受影响

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

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

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

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

 = 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,也就是说在进行加法运算,发生了溢出。

小编推荐阅读

好特网发布此文仅为传递信息,不代表好特网认同期限观点或证实其描述。

a 1.0
a 1.0
类型:休闲益智  运营状态:正式运营  语言:中文   

游戏攻略

游戏礼包

游戏视频

游戏下载

游戏活动

《alittletotheleft》官网正版是一款备受欢迎的休闲益智整理游戏。玩家的任务是对日常生活中的各种杂乱物

相关视频攻略

更多

扫二维码进入好特网手机版本!

扫二维码进入好特网微信公众号!

本站所有软件,都由网友上传,如有侵犯你的版权,请发邮件[email protected]

湘ICP备2022002427号-10 湘公网安备:43070202000427号© 2013~2024 haote.com 好特网