MIPS匯編語言

原文地址:https://blog.csdn.net/weixin_36016360/article/details/112843378
就是自己做個筆記

通用寄存器(GPR)

在MIPS體系結構中有32個通用寄存器,在匯編程序中可以用編號$0~$31表示,也可以用寄存器的名字表示秋秤,如$sp嗡靡、$t1智政、$ta等酒觅,如圖易阳,堆棧是從內(nèi)存的高地址方向向低地址方向增長的贼陶。編號寄存器名稱寄存器描述

0zero第0號寄存器,其值始終為0

1$at保留寄存器

2~3 $v0~v1values, 保存表達式或函數(shù)返回結果

4-7 $a0~a3 arguments, 作為函數(shù)的前4個參數(shù)

8~15 $t0~$t7 temporaries孩灯,供匯編程序使用的臨時寄存器

16~23 $s0~$s7 saved values闺金,子函數(shù)使用時需要先保存原寄存器的值

24~25 $t8~t9 temporaries, 供匯編程序的臨時寄存器,補充$t0~t7

26~27 $k0~$k1 保留峰档,中斷處理函數(shù)使用

28 $gp global pointer败匹,全局指針

29 $sp stack pointer, 堆棧指針,指向堆棧的棧頂

30 $fp frame pointer, 保存棧指針

31 $ra return address, 返回地址$0:即$zero讥巡,該寄存器總是返回0掀亩,為0這個有用常數(shù)提供了一個簡潔的編碼形式。在MIPS處理器的通用寄存器中欢顷,沒有任何幫助運算判斷的標志寄存器槽棍,要實現(xiàn)相應的功能時,都是通過測試兩個寄存器是否相等完成的抬驴。MIPS編譯器常常會使用slt炼七、beq、bne等指令和由寄存器$0獲得0值產(chǎn)生比較所有的比較條件布持,如相等豌拙、不等、小于等于题暖、大于按傅、大于等于捉超。還可以用add指令創(chuàng)建move偽指令,如"move $t0, $t1; $t0=$t1"實際為“add $t0,$0,$t1; $t0= $t1 + 0"唯绍。使用MIPS偽指令可以簡化任務拼岳。

$1 ($at) : 該寄存器為匯編保留,用做匯編器的暫時變量况芒。

$2~$3($v0~$v1): 用于存放子程序的返回值或非浮點結果惜纸。當這兩個寄存器不夠存放返回值時,編譯器通過內(nèi)存來完成牛柒。

$4~$7($a0~$a3):用于將前4個參數(shù)傳遞給子程序,不夠的用堆棧處理痊乾。$a0~$a3皮壁、$v0~$v1和$ra 一起完成子程序函數(shù)調(diào)用過程,分別用以傳遞參數(shù)哪审、返回結果和存放返回地址蛾魄。當需要使用更多的寄存器時就需要堆棧了。MIPS編譯器總是為參數(shù)在堆棧中留有空間湿滓,以防有參數(shù)需要存儲滴须。

$8~$15($t0~$t7): 一個子函數(shù)可以不用保存并隨意使用這些寄存器。在進行表達式計算時叽奥,這些寄存器是非常好的臨時變量扔水。在使用時需要注意,當調(diào)用一個子函數(shù)時朝氓,這些寄存器的值有可能被子函數(shù)破壞魔市。

$16~$23($s0~$s7): 子函數(shù)必須保證當函數(shù)返回時這些寄存器的內(nèi)容將恢復到函數(shù)調(diào)用以前的值,或者子函數(shù)里不使用這些寄存器或把它們保存在堆棧上并保存在函數(shù)退出時恢復赵哲。這種約定使這些寄存器非常適合作為寄存器變量待德,或者用于存放一些函數(shù)調(diào)用期間必須保存的原值。

$24~$25($t8~$t9): 同$t0~$t7,作為$t0~$t7寄存器補充枫夺。

$26~$27($k0~$k1): 通常被中斷或異常處理程序使用将宪,以保存一些系統(tǒng)參數(shù)。

$28($gp): C語言中有兩種存儲類型橡庞,分別是自動型和靜態(tài)型较坛。自動變量是一個函數(shù)中的局部變量。靜態(tài)變量在進入和退出一個函數(shù)時都是存在的扒最。為了簡化靜態(tài)數(shù)據(jù)的訪問燎潮,MIPS保留了一個寄存器作為全局指針gp在編譯時,數(shù)據(jù)需要在以gp為基指針的64KB范圍內(nèi)扼倘。

$29($sp): MIPS硬件并不直接支持堆棧确封,X86有單獨的PUSH和POP指令除呵,而MIPS沒有單獨的棧操作指令,所有對棧的操作都是統(tǒng)一的內(nèi)存訪問方式爪喘,單這并非不影響MIPS使用堆棧颜曾。在發(fā)生函數(shù)調(diào)用時,調(diào)用者把函數(shù)調(diào)用之后要用的寄存器壓入堆棧秉剑,被調(diào)用者把返回地址寄存器$ra(并非任何時候都保存$ra)和保留寄存器壓入堆棧泛豪。同時,調(diào)整堆棧指針侦鹏,并在返回時從堆棧中恢復寄存器诡曙。

$30($fp): 不同編譯器可能對該寄存器使用方法不同。GNU MIPS C編譯器使用了棧指針(Frame Pointer)略水。SGI的C編譯器則沒有使用棧指針价卤,只是把這個寄存器當成保存寄存器使用($s8),這雖然節(jié)省了調(diào)用和返回開銷渊涝,但增加了代碼生成的復雜度性慎璧。

$31 ($ra): 存放返回地址。MIPS有一個jar(jump-and-link,跳轉并鏈接)指令跨释,在跳轉到某個地址時可把下一條指令的地址放到$ra中胸私,用于支持子程序。例如鳖谈,調(diào)用程序把參數(shù)放到$a0~$a3中岁疼,“jar X"指令跳到X過程,被調(diào)用時需要保存的寄存器為$a0~$a3缆娃、$s0~$s7五续、$gp、$sp龄恋、$fp疙驾、$ra。

————————————————
版權聲明:本文為CSDN博主「小二嘉」的原創(chuàng)文章郭毕,遵循CC 4.0 BY-SA版權協(xié)議它碎,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/weixin_36016360/article/details/112843378

匯編常用的指令

注意:$Rd表示目的寄存器显押, $Rs表示源寄存器扳肛,$Rt表示作為中間緩存的寄存器,"imm"表示立即數(shù)乘碑,“MEM[]“表示RAM中的一段內(nèi)存挖息,“offset"表示偏移量。

3.1兽肤、LOAD/STORE指令

LOAD/STORE指令有14條套腹,分別是lb绪抛、lbu、lh电禀、lhu幢码、ll、lw尖飞、lwl症副、lwr、sb政基、sc贞铣、sh、sw沮明、swl和swr辕坝。

以"l"開頭的都是加載指令,以"s"開頭的都是存儲指令珊擂,這些指令用于從存儲器中讀取數(shù)據(jù)圣勒,或者將數(shù)據(jù)保存在存儲器中费变。

3.1.1摧扇、LA(Load Address) 指令用于將一個地址或標簽存入一個寄存器。語法實例備注

la $Rd, Labella $t0, val_1復制val_1表示的地址到$t0寄存器中挚歧,其中val_1是一個Label

3.1.2扛稽、LI(Load Immediate)指令用于將一個立即數(shù)存入一個通用寄存器。語法實例備注

lw $Rt, offset($Rs)lw $s0, 0($sp)"$s0 = MEM[$sp+0]",相當于取堆棧地址偏移0內(nèi)存word長度的值到$s0中

3.1.3滑负、LW(Load Word) 指令用于從一個指定的地址加載一個word類型的值到一個寄存器中在张。語法實例備注

lw $Rt, offset($Rs)lw $s0, 0($sp)"$s0=MEM[$sp+0];",相當于取堆棧地址偏移0內(nèi)存word長度的值到$s0中

3.1.4、SW(Store Word)用于將源寄存器中的值存入指定的地址矮慕。語法實例備注

sw $Rt, offset($Rs)sw $a0,0($sp)"MEM[$sp+0]=$a0;",相當于將$a0寄存器中一個word大小的值存入堆棧帮匾,且$sp自動堆棧

3.1.5、MOVE指令用于寄存器之間值的傳遞痴鳄。語法實例備注

move $Rt, $Rsmove $t5, $t1$t5=$t1;

3.2瘟斜、算術運算指令

MIPS匯編指令的算術運算特點如下:算術運算指令的所有操作數(shù)都是寄存器,不能直接使用RAM地址或間接尋址痪寻。

操作數(shù)大小都為word(4 Byte)螺句。

算術運算指令有21條,分別為add橡类、addi蛇尚、sub、subu顾画、clo取劫、clz匆笤、slt、slti勇凭、sltiu疚膊、sltu、mul虾标、mult寓盗、madd、maddu璧函、msub傀蚌、msubu、div和divu蘸吓,實現(xiàn)了加善炫、減、比較库继、乘箩艺、乘累加、除等運算宪萄。指令格式與實例注釋

add $t0,$t1,$t2"$t0=$t1+$t2;"艺谆,帶符號數(shù)相加

sub $t0,$t1,$t2"$t0=$t2 - $t2;", 帶符號數(shù)相減

addi $t0,$t1,5$t0 = $t1 + 5;

addu $t0,$t1,$t2"$t0 = $t1 + $t2;",無符號數(shù)相加

subu $t0, $t1, $t2"$t0 = $t2 - $t2;",無符號數(shù)相減

mult $t3, $t4"$t3 * $t4", 把64 Bits的積存儲到"Lo,Hi"中,即"(Hi,Lo)=$t3 * $t4;"

div $t5, $t6"$LO=$t5/$t6", $LO為商的整數(shù)部分拜英;"$HI=$t5 mod $t6", $HI為余數(shù)

mfhi $t0$t0 = $HI

mflo $t1$t1 = $LO

以上是MIPS指令基礎静汤。

————————————————
版權聲明:本文為CSDN博主「小二嘉」的原創(chuàng)文章,遵循CC 4.0 BY-SA版權協(xié)議居凶,轉載請附上原文出處鏈接及本聲明虫给。
原文鏈接:https://blog.csdn.net/weixin_36016360/article/details/112843378

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市侠碧,隨后出現(xiàn)的幾起案子抹估,更是在濱河造成了極大的恐慌,老刑警劉巖弄兜,帶你破解...
    沈念sama閱讀 218,941評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件药蜻,死亡現(xiàn)場離奇詭異,居然都是意外死亡挨队,警方通過查閱死者的電腦和手機谷暮,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來盛垦,“玉大人湿弦,你說我怎么就攤上這事√诤唬” “怎么了颊埃?”我有些...
    開封第一講書人閱讀 165,345評論 0 356
  • 文/不壞的土叔 我叫張陵蔬充,是天一觀的道長。 經(jīng)常有香客問我班利,道長饥漫,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,851評論 1 295
  • 正文 為了忘掉前任罗标,我火速辦了婚禮庸队,結果婚禮上,老公的妹妹穿的比我還像新娘闯割。我一直安慰自己彻消,他們只是感情好,可當我...
    茶點故事閱讀 67,868評論 6 392
  • 文/花漫 我一把揭開白布宙拉。 她就那樣靜靜地躺著宾尚,像睡著了一般。 火紅的嫁衣襯著肌膚如雪谢澈。 梳的紋絲不亂的頭發(fā)上煌贴,一...
    開封第一講書人閱讀 51,688評論 1 305
  • 那天,我揣著相機與錄音锥忿,去河邊找鬼牛郑。 笑死,一個胖子當著我的面吹牛缎谷,可吹牛的內(nèi)容都是我干的井濒。 我是一名探鬼主播灶似,決...
    沈念sama閱讀 40,414評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼列林,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了酪惭?” 一聲冷哼從身側響起希痴,我...
    開封第一講書人閱讀 39,319評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎春感,沒想到半個月后砌创,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,775評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡鲫懒,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年嫩实,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片窥岩。...
    茶點故事閱讀 40,096評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡甲献,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出颂翼,到底是詐尸還是另有隱情晃洒,我是刑警寧澤慨灭,帶...
    沈念sama閱讀 35,789評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站球及,受9級特大地震影響氧骤,放射性物質發(fā)生泄漏。R本人自食惡果不足惜吃引,卻給世界環(huán)境...
    茶點故事閱讀 41,437評論 3 331
  • 文/蒙蒙 一筹陵、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧镊尺,春花似錦惶翻、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至旭愧,卻和暖如春颅筋,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背输枯。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評論 1 271
  • 我被黑心中介騙來泰國打工议泵, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人桃熄。 一個月前我還...
    沈念sama閱讀 48,308評論 3 372
  • 正文 我出身青樓先口,卻偏偏與公主長得像,于是被迫代替她去往敵國和親瞳收。 傳聞我的和親對象是個殘疾皇子碉京,可洞房花燭夜當晚...
    茶點故事閱讀 45,037評論 2 355

推薦閱讀更多精彩內(nèi)容