MIPS 彙編/算術指令
指令
|
add | 型別
|
R 型 |
此指令將兩個運算元相加,並將結果儲存在目標暫存器中。負數使用 二進位制補碼錶示法 自動處理,因此不需要使用不同的指令來處理有符號數和無符號數。
指令
|
sub | 型別
|
R 型 |
sub 指令從第一個源運算元中減去第二個源運算元,並將結果儲存在目標運算元中。在虛擬碼中,操作執行以下操作
rd := rs - rt
add 和 sub 都會在發生溢位時產生陷阱。但是,某些程式設計系統(如 C)會忽略整數溢位,因此為了提高效能,“無符號”版本的指令不會在溢位時產生陷阱。
指令
|
addu | 型別
|
R 型 |
指令
|
subu | 型別
|
R 型 |
乘法和除法操作與其他操作略有不同。即使它們是 R 型操作,它們也只接受 2 個運算元。結果儲存在一個特殊的 64 位結果暫存器中。我們將在本節之後討論結果暫存器。
指令
|
mult | 型別
|
R 型 |
此操作將兩個運算元相乘,並將結果儲存在 rd 中。乘法操作必須區分有符號量和無符號量,因為二進位制補碼錶示法的簡單性在乘法中不適用。mult 指令將有符號數相乘並進行符號擴充套件。
將 2 個 32 位數相乘的結果是一個 64 位結果。我們將在下面討論 64 位結果。
指令
|
multu | 型別
|
R 型 |
multu 指令將兩個運算元相乘,並將結果儲存在 rd 中。此指令僅用於無符號數,不會對負結果進行符號擴充套件。此操作也會產生 64 位結果。
指令
|
div | 型別
|
R 型 |
div 指令將第一個引數除以第二個引數。商儲存在結果暫存器的最低 32 位中。餘數儲存在結果暫存器的最高 32 位中。與乘法一樣,除法也需要區分有符號數和無符號數。此操作使用有符號數。
指令
|
divu | 型別
|
R 型 |
與 div 指令一樣,此操作將第一個運算元除以第二個運算元。商儲存在結果的最低 32 位中,餘數儲存在結果的最高 32 位中。此運算元將無符號數相除,不會對結果進行符號擴充套件。
64 位結果暫存器被分成兩個 32 位段:HI 和 LO。我們可以分別使用 mfhi 和 mflo 操作與這些暫存器互動。
指令
|
mfhi | 型別
|
R 型 |
只接受 1 個運算元。此指令將結果暫存器的最高 32 位移動到目標暫存器中。
指令
|
mflo | 型別
|
R 型 |
也只接受 1 個運算元。將結果暫存器 LO 部分的值移動到指定的暫存器中。
如果乘積的最高(最顯著)32 位對計算不重要,程式設計師可以跳過一步,使用丟棄最高 32 位的指令。
指令
|
mul | 型別
|
R 型 |
mul 指令沒有無符號版本。mul 指令也可能會覆蓋 HI 和 LO 中的現有值。
這些操作對它們的運算物件執行按位邏輯運算。
指令
|
and | 型別
|
R 型 |
對兩個運算元執行按位 AND 運算,並將結果儲存在 rd 中。
指令
|
or | 型別
|
R 型 |
對兩個運算元執行按位 OR 運算,並將結果儲存在 rd 中。
指令
|
nor | 型別
|
R 型 |
對兩個運算元執行按位 NOR 運算,並將結果儲存在 rd 中。
指令
|
xor | 型別
|
R 型 |
對兩個運算元執行按位 XOR 運算,並將結果儲存在 rd 中。
這些指令將 16 位立即數的值符號擴充套件到 32 位,並執行與不帶尾隨“i”的指令相同的操作。
指令
|
addi | 型別
|
I 型 |
指令
|
addiu | 型別
|
I 型 |
要減去,請使用負立即數。
所有邏輯函式都將立即數零擴充套件。
指令
|
andi | 型別
|
I 型 |
將 rs 與立即數的按位 AND 相結合,並將結果儲存在 rt 中。
指令
|
ori | 型別
|
I 型 |
將 rs 與立即數的按位 OR 相結合,並將結果儲存在 rt 中。
指令
|
xori | 型別
|
I 型 |
將 rs 與立即數的按位 XOR 相結合,並將結果儲存在 rt 中。
指令
|
sll | 型別
|
R 型 |
邏輯左移:rd ← rt << shamt。從右邊用零填充位。
指令
|
srl | 型別
|
R 型 |
邏輯右移:rd ← rt >> shamt。從左邊用零填充位。
指令
|
sra | 型別
|
R 型 |
算術右移。如果 rt 為負數,則用 1 而不是 0 填充前導位:rd ← rt >> shamt。
由於並非所有移位量都是預先知道的,MIPS 定義了這些指令的版本,這些版本按 rs 暫存器中的量進行移位。行為在其他方面是相同的。
指令
|
sllv | 型別
|
R 型 |
指令
|
srlv | 型別
|
R 型 |
指令
|
srav | 型別
|
R 型 |