您的位置:首頁 > 軟件教程 > 教程 > ARM64匯編中的ADD指令詳解

ARM64匯編中的ADD指令詳解

來源:好特整理 | 時間:2024-11-15 09:57:19 | 閱讀:158 |  標簽: a 系 AR ARM   | 分享到:

匯編中,加法指令很重要,因為它是執(zhí)行其他很多指令的基礎。 同時,加法指令也會影響NZCV標志。有關NZCV的介紹,可以參看《一文搞懂 ARM 64 系列: ADC》。 ARM64匯編中,ADD指令有3種形式,這里介紹第一種形式,也就是與立即數(shù)相加。 1 指令語法 ADD <Xd|SP>,

在匯編語言中,加法指令是非常重要的,因為它是執(zhí)行其他許多指令的基礎。

同時,加法指令也會影響NZCV標志。有關NZCV的介紹,可以參看《一文搞懂 ARM 64 系列: ADC》。

ARM64匯編中,ADD指令有3種形式,這里介紹第一種形式,也就是與立即數(shù)相加。

1 指令語法

ADD , , #imm{, shift}

{ }里的內(nèi)容表示是可選的。

shift表示LSL(邏輯左移)的位數(shù),有2個取值,一個是0,一個是12。0是其默認值。

所謂LSL(邏輯左移),是指將數(shù)值整體向左移動,低位補0。如果高位被移出去,直接丟棄。

ARM64匯編中的ADD指令詳解

2 指令語義

整個指令就是將源寄存器,與立即數(shù)imm(如果有必要,需要進行LSL)相加,將結(jié)果寫入目的寄存器。

注意 ,這條指令不影響NZCV標志。

(, _) =  + imm << shift

3 NZCV 如何受影響

雖然這條指令最終不影響NZCV標志,但是搞清楚NZCV如何受影響,還是很有必要的。

1. 將源寄存器的值和imm << shift都當成無符號整型數(shù),兩數(shù)相加,得到一個無符號整型數(shù)的結(jié)果,記作u_result。此時計算時不考慮溢出:

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

2. 將源寄存器的值和imm << shift都當成有符號整型數(shù),兩數(shù)相加,得到一個有符號整型數(shù)的結(jié)果,記作s_result。此時計算時不考慮溢出:

 = 0xffffffffffffffff // 64 bit 全 1,此時當成 -1 看待
(imm << shift) = 0x8000000000000000 // 64 bit 最小負整數(shù) -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當成無符號整型數(shù),它的值等于u_result,那么C = 0;如果不等于,那么C = 1,也就是在進行加法運算時,發(fā)生了進位。

7. 如果把result當成有符號整型數(shù),它的值等于s_result,那么V = 0;如果不等于,那么V = 1,也就是說在進行加法運算,發(fā)生了溢出。

小編推薦閱讀

好特網(wǎng)發(fā)布此文僅為傳遞信息,不代表好特網(wǎng)認同期限觀點或證實其描述。

a 1.0
a 1.0
類型:休閑益智  運營狀態(tài):正式運營  語言:中文   

游戲攻略

游戲禮包

游戲視頻

游戲下載

游戲活動

《alittletotheleft》官網(wǎng)正版是一款備受歡迎的休閑益智整理游戲。玩家的任務是對日常生活中的各種雜亂物

相關視頻攻略

更多

掃二維碼進入好特網(wǎng)手機版本!

掃二維碼進入好特網(wǎng)微信公眾號!

本站所有軟件,都由網(wǎng)友上傳,如有侵犯你的版權(quán),請發(fā)郵件[email protected]

湘ICP備2022002427號-10 湘公網(wǎng)安備:43070202000427號© 2013~2025 haote.com 好特網(wǎng)