匯編中,加法指令很重要,因?yàn)樗菆?zhí)行其他很多指令的基礎(chǔ)。 同時(shí),加法指令也會(huì)影響NZCV標(biāo)志。有關(guān)NZCV的介紹,可以參看《一文搞懂 ARM 64 系列: ADC》。 ARM64匯編中,ADD指令有3種形式,這里介紹第一種形式,也就是與立即數(shù)相加。 1 指令語法 ADD <Xd|SP>,
在匯編語言中,加法指令是非常重要的,因?yàn)樗菆?zhí)行其他許多指令的基礎(chǔ)。
同時(shí),加法指令也會(huì)影響NZCV標(biāo)志。有關(guān)NZCV的介紹,可以參看《一文搞懂 ARM 64 系列: ADC》。
ARM64匯編中,ADD指令有3種形式,這里介紹第一種形式,也就是與立即數(shù)相加。
ADD , , #imm{, shift}
{ }里的內(nèi)容表示是可選的。
shift表示LSL(邏輯左移)的位數(shù),有2個(gè)取值,一個(gè)是0,一個(gè)是12。0是其默認(rèn)值。
所謂LSL(邏輯左移),是指將數(shù)值整體向左移動(dòng),低位補(bǔ)0。如果高位被移出去,直接丟棄。
整個(gè)指令就是將源寄存器
注意 ,這條指令不影響NZCV標(biāo)志。
(, _) = + imm << shift
雖然這條指令最終不影響NZCV標(biāo)志,但是搞清楚NZCV如何受影響,還是很有必要的。
1. 將源寄存器的值
= 0xffffffffffffffff // 64 bit 全 1
(imm << shift) = 1
u_result = 0xffffffffffffffff + 1 = 0x10000000000000000 // 2^64,而不是 0
2. 將源寄存器的值
= 0xffffffffffffffff // 64 bit 全 1,此時(shí)當(dāng)成 -1 看待
(imm << shift) = 0x8000000000000000 // 64 bit 最小負(fù)整數(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當(dāng)成無符號(hào)整型數(shù),它的值等于u_result,那么C = 0;如果不等于,那么C = 1,也就是在進(jìn)行加法運(yùn)算時(shí),發(fā)生了進(jìn)位。
7. 如果把result當(dāng)成有符號(hào)整型數(shù),它的值等于s_result,那么V = 0;如果不等于,那么V = 1,也就是說在進(jìn)行加法運(yùn)算,發(fā)生了溢出。
小編推薦閱讀機(jī)器學(xué)習(xí):神經(jīng)網(wǎng)絡(luò)構(gòu)建(下)
閱讀華為Mate品牌盛典:HarmonyOS NEXT加持下游戲性能得到充分釋放
閱讀實(shí)現(xiàn)對(duì)象集合與DataTable的相互轉(zhuǎn)換
閱讀鴻蒙NEXT元服務(wù):論如何免費(fèi)快速上架作品
閱讀算法與數(shù)據(jù)結(jié)構(gòu) 1 - 模擬
閱讀5. Spring Cloud OpenFeign 聲明式 WebService 客戶端的超詳細(xì)使用
閱讀Java代理模式:靜態(tài)代理和動(dòng)態(tài)代理的對(duì)比分析
閱讀Win11筆記本“自動(dòng)管理應(yīng)用的顏色”顯示規(guī)則
閱讀本站所有軟件,都由網(wǎng)友上傳,如有侵犯你的版權(quán),請(qǐng)發(fā)郵件[email protected]
湘ICP備2022002427號(hào)-10 湘公網(wǎng)安備:43070202000427號(hào)© 2013~2025 haote.com 好特網(wǎng)