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

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

為什么在32位寄存器上的x86-64指令為全64位寄存器的上部為零?

為什么在32位寄存器上的x86-64指令為全64位寄存器的上部為零?

為什么在32位寄存器上的x86-64指令為全64位寄存器的上部為零?在x8664英特爾手冊(cè)之旅,我讀到也許最令人驚訝的事實(shí)是,像這樣的指令MOV EAX, EBX的上32位自動(dòng)為零。RAX登記。同一來源引用的Intel文檔(3.4.1.1在手動(dòng)基本架構(gòu)中采用64位模式的通用寄存器)告訴我們:64位操作數(shù)在目標(biāo)通用寄存器中生成64位結(jié)果.32位操作數(shù)在目標(biāo)通用寄存器中生成32位結(jié)果,零擴(kuò)展到64位結(jié)果.8位和16位操作數(shù)產(chǎn)生8位或16位結(jié)果.目的通用寄存器的上56位或48位(分別)不被操作修改。如果8位或16位操作的結(jié)果用于64位地址計(jì)算,則顯式地將寄存器擴(kuò)展到64位。在x86-32和x86-64程序集中,16位指令如mov ax, bx不要表現(xiàn)出這種“奇怪”的行為,即eax的上端單詞是零的。因此:引入這種行為的原因是什么?乍一看,這似乎不合邏輯(但原因可能是我已經(jīng)習(xí)慣了x86-32程序集的怪癖)。
查看完整描述

2 回答

?
小唯快跑啊

TA貢獻(xiàn)1863條經(jīng)驗(yàn) 獲得超2個(gè)贊

我不是AMD,也不是他們的代言人,但我會(huì)用同樣的方式去做。因?yàn)閷?duì)上半部分進(jìn)行零化并不會(huì)造成對(duì)前一個(gè)值的依賴,所以CPU必須等待。如果沒有這樣做,注冊(cè)重命名機(jī)制將基本上失敗。這樣,您就可以在64位模式下編寫快速32位代碼,而不必始終顯式地中斷依賴關(guān)系。如果沒有這種行為,64位模式下的每一個(gè)32位指令都必須等待以前發(fā)生的事情,盡管這個(gè)高部分幾乎不會(huì)被使用。

16位指令的行為是奇怪的。依賴瘋狂是現(xiàn)在避免16位指令的原因之一。


查看完整回答
反對(duì) 回復(fù) 2019-06-03
?
RISEBY

TA貢獻(xiàn)1856條經(jīng)驗(yàn) 獲得超5個(gè)贊

它只需在指令和指令集中節(jié)省空間。您可以使用現(xiàn)有(32位)指令將小的即時(shí)值移動(dòng)到64位寄存器中。

它還使您不必對(duì)8字節(jié)值進(jìn)行編碼。MOV RAX, 42,何時(shí)MOV EAX, 42可以重復(fù)使用。

這種優(yōu)化對(duì)于8位和16位操作(因?yàn)樗鼈兏?不那么重要,而更改規(guī)則也會(huì)破壞舊代碼。


查看完整回答
反對(duì) 回復(fù) 2019-06-03
  • 2 回答
  • 0 關(guān)注
  • 1109 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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