i基準指令集 mips MIPS彙編指令集

2021-10-13 04:01:45 字數 2445 閱讀 8116

mips彙編

mips指令集

mips指令集屬於精簡指令集

mips的所有指令都是32位,指令格式簡單,而x86的指令長度不是固定的。

簡單的指令和格式易於解碼和流水線操作,但是**密度不高,導致二進位制檔案大

mips有32個通用暫存器reg,為什麼是32個而不是更多呢?

因為更多的暫存器需要更多的指令空間對暫存器編碼,也會增加上下文切換的負擔。

mips指令格式

r格式op

rsrt

rdshamt

funct

用處:暫存器-暫存器alu操作

讀寫專用暫存器

i格式op

rsrt

立即數操作

用處:載入/儲存位元組,半字,字,雙字

條件分支,跳轉,跳轉並鏈結暫存器

j格式op

跳轉位址

用處:跳轉,跳轉並鏈結

陷阱和從異常中返回

各欄位含義:

op:指令基本操作,稱為操作碼。

rs:第乙個源運算元暫存器。

rt:第二個源運算元暫存器。

rd:存放操作結果的目的運算元。

shamt:位移量;

funct:函式,這個字段選擇op操作的某個特定變體。

例:add $t0,$s0,$s1

表示$t0=$s0+$s1,即16號暫存器(s0)的內容和17號暫存器(s1)的內容相加,結果放到8號暫存器(t0)。

指令各字段的十進位制表示為:

op=0和funct=32表示這是加法,

16=$s0表示第乙個源運算元(rs)在16號暫存器裡,

17=$s1表示第二個源運算元(rt)在17號暫存器裡,

8=$t0表示目的運算元(rd)在8號暫存器裡。

把各欄位寫成二進位制,為:

這就是上述指令的機器碼(machine code),可以看出是很有規則性的。

mips指令

mips沒有棧操作指令 ,呼叫子程式時沒有自動壓棧的call指令,只能用jal。

mips的記憶體對映、中斷等功能都做到了協處理器0(cp0)中,浮點運算做到了協處理器1(cp1)中。

mips的定址方式最簡單,僅有暫存器加偏移定址方式。

mips常用指令集

lb/lh/lw: 從儲存器中讀取乙個byte/half word/word的資料到暫存器中.如lb $1, 0($2)

sb/sh/sw: 把乙個byte/half word/word的資料從暫存器儲存到儲存器中.如 sb $1, 0($2)

add/addu:把兩個定點暫存器的內容相加add $1,$2,$3($1=$2+$3);u為不帶符號加。

addi/addiu:把乙個暫存器的內容加上乙個立即數add $1,$2,#3($1=$2+3);u為不帶符號加。

sub/subu:把兩個定點暫存器的內容相減。

div/divu:兩個定點暫存器的內容相除。

mul/mulu:兩個定點暫存器的內容相乘。

and/andi:與運算,兩個暫存器中的內容相與and $1,$2,$3($1=$2 & $3);i為立即數。

or/ori:或運算。

xor/xori:異或運算。

beq/beqz/benz/bne:條件轉移eq相等,z零,ne不等。

j/jr/jal/jalr:j直接跳轉;jr使用暫存器跳轉;

lui:把乙個16位的立即數填入到暫存器的高16位,低16位補零。

sll/srl:邏輯左移/右移sll $1,$2,#2。

slt/slti/sltui:如果$2的值小於$3,那麼設定$1的值為1,否則設定$1的值為0。slt $1,$2,$3。

mov/movz/movn:複製,n為負,z為零。mov $1,$2; movz $1,$2,$3($3為零則複製$2到$1)。

trap:根據位址向量轉入管態。

eret:從異常中返回到使用者態。

32個通用暫存器

0($zero): 永遠返回值為0

1($at): 用做彙編器的暫時變數

2-3($v0-$v1): 子函式呼叫返回結果

4-7($a0-$a3): 子函式呼叫的引數

8-15($t0-$t7): 暫時變數,子函式使用時不需要儲存與恢復

16-23($s0-$s7): 子函式暫存器變數。子函式必須儲存和恢復使用過的變數在函式返回之前,從而呼叫函式知道這些暫存器的值沒有變化。

24-25($t8-$t9): 暫時變數,子函式使用時不需要儲存與恢復

26-27($k0-$k1): 通常被中斷或異常處理程式使用作為儲存一些系統引數

28($gp): 全域性指標。一些執行系統維護這個指標來更方便的訪問「static「和」extern」變數。

29($sp): 堆疊指標

30($s8/$fp): 第9個暫存器變數。子函式可以用來做楨指標

31($ra): 子函式的返回地

cp0:協處理器0,mips對cpu的控制用cp0完成

mysql bin指令集 mysql指令集

一 連線mysql。1 連線到本機上的mysql。首先開啟dos視窗,然後進入目錄mysql bin,再鍵入命令mysql u root p,回車後提示你輸密碼.注意使用者名稱前可以有空格也可以沒有空格,但是密碼前必須沒有空格,否則讓你重新輸入密碼.如果剛安裝好mysql,超級使用者root是沒有密...

gbip指令集 GB CPU 指令與指令集

gb cpu 指令與指令集 到目前為止,雖然 cpu 已經擁有了算術邏輯單元 alu 進行算術邏輯運算和使用暫存器儲存資料,但它仍然缺少一些正常工作時需要的資訊.就像建築工人無法僅僅依靠材料和工具憑空造出一棟高樓大廈,除非建築師能為其提供詳細的建築圖紙.cpu 也是一樣的,開發者需要通過某種方式告訴...

RISC V指令集介紹 整數基本指令集

前段時間在修改 picorv32 核心 乙個riscv 32的cpu核心 閱讀了一下riscv指令集的手冊。在此,做一下簡單記錄。rv32i 32位risc v整數指令集 1.暫存器 32個x暫存器,rv32下x reg是32位寬 x0 硬連線 常數0 x1 x31 31個通用reg pc 額外的使...