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

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如果只需要結果的較低部分,可以使用哪一個2的補整數(shù)運算而不對輸入中的高位進行零化?

如果只需要結果的較低部分,可以使用哪一個2的補整數(shù)運算而不對輸入中的高位進行零化?

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

1 回答

  • 1 回答
  • 0 關注
  • 468 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號