《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 嵌入式技術(shù) > 解決方案 > 計算機系統(tǒng)原理(十七) 特殊的算術(shù)操作指令詳解

計算機系統(tǒng)原理(十七) 特殊的算術(shù)操作指令詳解

2017-06-22
關(guān)鍵詞: 匯編語言

上一章我們討論了常見的算術(shù)與邏輯運算指令,其中比較有特點的是leal指令,,本章我們再來看幾個比較特殊的操作指令,,這些指令可以讓只有32位的寄存器存儲64位的數(shù)據(jù),是不是十分霸氣側(cè)漏呢,。

imull,、mull指令

這兩個指令一看就是雙胞胎,它們一個負責有符號全64位乘法,,一個負責無符號全64位乘法,。細心的猿友會發(fā)現(xiàn),imull這個指令好像是負責乘法的指令,,而且在之前的乘法并沒有區(qū)分有符號和無符號,,現(xiàn)在怎么又成雙胞胎指令了。

我們上一章當中出現(xiàn)的指令是imul指令,,當它操作雙字的時候,,也就是imull指令。不過不同的是,,它的一般形式是imull S D,,這里有兩個操作數(shù),它將計算S和D的乘積并截斷為雙字,,然后存儲在D當中,。由于在截斷時,無符號以及有符號的二進制序列是一樣的,,因此此處的乘法指令并不區(qū)分有符號和無符號,。

本次我們討論的imull指令,則與上面的普通乘法指令稍有不同,,它只有一個操作數(shù),,也就是說,它的一般形式為imull S,,這點在書中的表格中也能看出來,,而另外一個操作數(shù)默認為%eax寄存器。最終的結(jié)果,,會將高32位存入%edx寄存器,,而低32位存入%eax寄存器。

試想一下,,如果我們只取%eax寄存器當中的32位結(jié)果,,那其實這里計算的結(jié)果就是S*%eax,,此時imull S的作用就與imull S D是一樣的,只是目的操作數(shù)被固定為%eax罷了,。

cltd指令

這個指令相對來說就非常簡單了,,它就是簡單的將%eax寄存器的值符號擴展32位到%edx寄存器,也就是說,,如果%eax寄存器的二進制序列的最高位為0,,則cltd指令將把%edx置為32個0,相反,,如果%eax寄存器的二進制序列最高位為1,,則cltd指令將會自從填充%edx寄存器為32個1。

idivl,、divl指令

這兩個指令與前面的imull以及mull類似,,它也將計算結(jié)果存放在兩個寄存器當中,其中余數(shù)存放在%edx寄存器,,商存放在%eax寄存器,。如果各位理解了前面的imull以及mull,那么這里idivl和divl理解起來會非常簡單,。

文章小結(jié)

本章介紹了幾個特殊的算術(shù)運算指令,,其實這些指令的運算規(guī)則都建立在2.X的基礎(chǔ)之上,2.X當中所介紹的二進制算術(shù)規(guī)則,,就是這些指令的執(zhí)行方式規(guī)定,。理解這些指令的指令方式,有助于提高我們聯(lián)系程序代碼與匯編代碼之間的對應(yīng)關(guān)系的能力,,這是非常有用的,。





本站內(nèi)容除特別聲明的原創(chuàng)文章之外,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,,并不代表本網(wǎng)站贊同其觀點,。轉(zhuǎn)載的所有的文章、圖片,、音/視頻文件等資料的版權(quán)歸版權(quán)所有權(quán)人所有,。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無法一一聯(lián)系確認版權(quán)者。如涉及作品內(nèi)容,、版權(quán)和其它問題,請及時通過電子郵件或電話通知我們,,以便迅速采取適當措施,,避免給雙方造成不必要的經(jīng)濟損失。聯(lián)系電話:010-82306118,;郵箱:[email protected],。