第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

如果只需要結(jié)果的較低部分,可以使用哪一個(gè)2的補(bǔ)整數(shù)運(yùn)算而不對(duì)輸入中的高位進(jìn)行零化?

如果只需要結(jié)果的較低部分,可以使用哪一個(gè)2的補(bǔ)整數(shù)運(yùn)算而不對(duì)輸入中的高位進(jìn)行零化?

牛魔王的故事 2019-07-12 15:31:37
如果只需要結(jié)果的較低部分,可以使用哪一個(gè)2的補(bǔ)整數(shù)運(yùn)算而不對(duì)輸入中的高位進(jìn)行零化?在匯編編程中,想要從寄存器的低位數(shù)計(jì)算某些東西是相當(dāng)常見的,而這些寄存器不一定要對(duì)其他位進(jìn)行零化。在高級(jí)語(yǔ)言(如C)中,您只需將輸入轉(zhuǎn)換為較小的大小,并讓編譯器決定是否需要將每個(gè)輸入的上位分別為零,或者是否可以在事實(shí)發(fā)生后將結(jié)果的上位切分。這在x86-64(又名AMD 64)中尤為常見,原因有多種。1,其中一些存在于其他“國(guó)際審計(jì)準(zhǔn)則”中。我將使用64位x86作為示例,但目的是詢問(wèn)/討論2補(bǔ)體和一般的無(wú)符號(hào)二進(jìn)制算法,因?yàn)樗鞋F(xiàn)代CPU都使用它。..(注意C+和C+不能保證兩個(gè)補(bǔ)語(yǔ)4,該簽名溢出是未定義的行為。)例如,考慮一個(gè)可以編譯為L(zhǎng)EA指令2..(在x8664 SysV(Linux)中)ABI3,前兩個(gè)函數(shù)args在rdi和rsi,隨著回歸rax. int是32位類型。); int intfunc(int a, int b) { return a + b*4 + 3; } intfunc:     lea  eax,  [edi + esi*4 + 3]  ; the obvious choice, but gcc can do better     retGCC知道,即使是負(fù)號(hào)整數(shù)的加法,也只能從右到左,所以輸入的上位不會(huì)影響輸入的內(nèi)容。eax..因此,它保存指令字節(jié)并使用 lea  eax,  [rdi + rsi*4 + 3]還有哪些其他操作不依賴于輸入的高比特而具有結(jié)果的低比特的屬性?為什么會(huì)起作用?腳注1為什么這經(jīng)常出現(xiàn)在x86-64x86-64有可變長(zhǎng)度的指令,其中額外的前綴字節(jié)會(huì)改變操作數(shù)的大小(從32到64或16),所以在以相同速度執(zhí)行的指令中,保存字節(jié)通常是可能的。它在寫入寄存器的低8b或16b(或稍后讀取完整寄存器時(shí)的失速(Intel預(yù)IVB)時(shí)也存在錯(cuò)誤依賴關(guān)系(AMD/P4/Silvermont):出于歷史原因,只寫入32b子寄存器,其余64b寄存器為零。..幾乎所有的算術(shù)和邏輯都可以用于一般用途寄存器的低8、16或32位,以及完整的64位。整數(shù)向量指令也是非正交的,有些操作對(duì)于某些元素大小是不可用的.此外,與x86-32不同,ABI在寄存器中傳遞函數(shù)args,對(duì)于窄類型,不要求上層位為零。2Lea:與其他指令一樣,默認(rèn)操作數(shù)為利婭是32位,但默認(rèn)地址大小是64位。操作數(shù)大小的前綴字節(jié)(0x66或REX.W)可以使輸出操作數(shù)大小為16或64位。地址大小的前綴字節(jié)(0x67)可以將地址大小減小到32位(64位模式)或16位(32位模式)。所以在64位模式下,lea eax, [edx+esi]比lea eax, [rdx+rsi].做這件事是可能的lea rax, [edx+esi],但地址仍僅用32位計(jì)算(進(jìn)位不設(shè)置32位)rax)。你得到了相同的結(jié)果lea eax, [rdx+rsi],即縮短了兩個(gè)字節(jié)。因此,地址大小前綴對(duì)LEA,正如AgnerFog出色的objconv反匯編程序的反匯編輸出中的注釋所警告的。3x86 ABI*來(lái)電者不必須為零(或符號(hào)擴(kuò)展)64位寄存器的上部,用于傳遞或返回較小類型的值。希望將返回值用作數(shù)組索引的調(diào)用方必須對(duì)其進(jìn)行簽名擴(kuò)展(使用movzx rax, eax,或特殊情況下的eax指令。cdqe..(不要混淆cdq,哪個(gè)符號(hào)-擴(kuò)展eax進(jìn)edx:eax為idiv.))這意味著返回一個(gè)函數(shù)。unsigned int中的64位臨時(shí)值中計(jì)算其返回值。rax,而不需要mov eax, eax 使上位為零的rax..此設(shè)計(jì)決策在大多數(shù)情況下運(yùn)行良好:調(diào)用方通常不需要任何額外的指令來(lái)忽略上半部分中未定義的位。rax.4C+和C+C+和C+不需要兩個(gè)補(bǔ)碼二進(jìn)制有符號(hào)整數(shù)(除C+std::atomic類型). 一個(gè)人的補(bǔ)足和符號(hào)/大小也是允許的。所以充分便攜C,這些技巧只適用于unsigned類型。顯然,對(duì)于有符號(hào)操作,符號(hào)/震級(jí)表示中的集合符號(hào)位意味著其他位被減去,而不是添加,例如。我還沒有完成一個(gè)人的補(bǔ)語(yǔ)的邏輯然而,鉆頭黑客那,那個(gè)只有兩個(gè)人的補(bǔ)語(yǔ)是廣布因?yàn)樵趯?shí)踐中沒有人關(guān)心其他的事情。與兩個(gè)補(bǔ)碼一起工作的許多東西也應(yīng)該與一個(gè)補(bǔ)語(yǔ)一起工作,因?yàn)榉?hào)位仍然不能改變對(duì)其他位的解釋:它只是值為-(2)N-1)(而不是2N)。符號(hào)/大小表示沒有這個(gè)屬性:每個(gè)位的位置值是正的還是負(fù)的,取決于符號(hào)位。還請(qǐng)注意,C編譯器可以假定簽名溢出從未發(fā)生過(guò)因?yàn)檫@是不確定的行為。因此,例如。編譯器可以并且確實(shí)假定(x+1) < x總是假的..這使得在C中檢測(cè)符號(hào)溢出非常不方便。注意,無(wú)符號(hào)環(huán)繞(進(jìn)位)和符號(hào)溢出之間的區(qū)別.
查看完整描述

1 回答

  • 1 回答
  • 0 關(guān)注
  • 473 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)