日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

MIPS 通用寄存器

發布時間:2024/4/18 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MIPS 通用寄存器 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
MIPS有32個通用寄存器($0-$31),各寄存器的功能及匯編程序中使用約定如下:

下表描述32個通用寄存器的別名和用途

REGISTER

NAME

USAGE

$0

$zero

常量0(constant value 0)

$1

$at

保留給匯編器(Reserved for assembler)

$2-$3

$v0-$v1

函數調用返回值(values for results and expression evaluation)

$4-$7

$a0-$a3

函數調用參數(arguments)

$8-$15

$t0-$t7

暫時的(或隨便用的)

$16-$23

$s0-$s7

保存的(或如果用,需要SAVE/RESTORE)(saved)

$24-$25

$t8-$t9

暫時的(或隨便用的)

$28

$gp

全局指針(Global Pointer)

$29

$sp

堆棧指針(Stack Pointer)

$30

$fp

幀指針(Frame Pointer)

$31

$ra

返回地址(return address)



下面給以詳細說明
$0:即$zero ,該寄存器總是返回零,為0這個有用常數提供了一個簡潔的編碼形式。
???????????move $t0,$t1
???????實際為
???????????add $t0,$0,$t1
???????使用偽指令可以簡化任務,匯編程序提供了比硬件更豐富的指令集。
$1:即$at,該寄存器為匯編保留 ,由于I型指令的立即數字段只有16位,在加載大常數時,編譯器或匯編程序需要
???????把大常數拆開,然后重新組合到寄存器里。比如加載一個32位立即數需要 lui(裝入高位立即數)和addi兩條
???????指令。像MIPS程序拆散和重裝大常數由匯編程序來完成,匯編程序必需一個臨時寄存器來重組大常數,這
???????也是為匯編 保留$at的原因之一。
$2..$3:($v0-$v1)用于子程序的非浮點結果或返回值, 對于子程序如何傳遞參數及如何返回,MIPS范圍有一套約
???????定,堆棧中少數幾個位置處的內容裝入CPU寄存器,其相應內存位置保留未做定義,當這兩個寄存器不夠存
???????放返回值時,編譯器通過內存來完成。
$4..$7:($a0-$a3)用來傳遞前四個參數給子程序,不夠的用堆棧 a0-a3和v0-v1以及ra一起 來支持子程序/過程
???????調用,分別用以傳遞參數,返回結果和存放返回地址。當需要使用更多的寄存器時,就需要堆棧(stack)
???????了,MIPS編譯器總是為參數在堆棧中留有空間以防有參數需要存儲。
$8..$15:($t0-$t7)臨時寄存器, 子程序可以使用它們而不用保留。
$16..$23:($s0-$s7)保存寄存器,在過程調用過程中需要保 留(被調用者保存和恢復,還包括 $fp和$ra ),MIPS
???????提供了臨時寄存器和保存寄存器,這樣就減少了寄存器溢出(spilling,即將不常用的變量放到存儲器的過程),
???????編譯器在編譯一個葉(leaf)過程(不調用其它過程的過程)的時候,總是在臨時寄存器分配完了才使用需要
???????保存的寄存器。
$24..$25:($t8-$t9)同($t0-$t7)
$26..$27:($k0,$k1)為操作系統/異常處理保留,至少要預留一個 。 異常(或中斷)是一種不需要在程序中顯示
???????調用的過程。MIPS有個叫異常程序計數器(exception program counter,EPC)的寄存器,屬于CP0寄存器,

???????用于保存造成異常的那條指令的地址。查看控制寄存器的唯一方法是把它復制到通用寄存器里,指令mfc0
? ? ? ?(move from system control)可以將EPC中的地址復制到某個通用寄存器中
通過跳轉語句(jr),程序可以
? ? ? ?回到造成異常的那條指令處繼續執行
。MIPS程序員都必須保留兩個寄存器$k0和$k1,供操作系統使用。

???????發生異常時,這兩個寄存器的值不會被恢復,編譯器也不使用k0和k1, 異常處理函數可以將返回地址放到這
???????兩個中的任何一個,然后使用jr跳轉到造成異常的指令處繼續執行
。
$28:($gp) 為了簡化靜態數據的訪問,MIPS軟件保留了一個寄存器:全局指針gp(global pointer,$gp),全局指針
???????只想靜態數據區中的運行時決定的地址,在存取位于gp值上下32KB范圍內的數據時,只需要一條以gp為基
???????指針的指令即可。在編譯時,數據須在以gp為基指針的64KB范圍內。
$29:($sp)MIPS硬件并不直接支持堆棧 ,你可以把它用于別的目的,但為了使用別人的程序或讓別人使用你的程
???????序, 還是要遵守這個約定的,但這和硬件沒有關系。
$ 30:($fp)GNU MIPS C編譯器使用了幀指針(frame pointer), 而SGI的C編譯器沒有使用, 而把這個寄存器當作保
???????存寄存器使用($s8),
這節省了調用和返回開銷,但增加了代碼生成的復雜性。
$31:($ra)存放返回地址, MIPS有個jal(jump-and-link,跳轉并 鏈接)指令,在跳轉到某個地址時,把下一條指令的
???????地址放到$ra中。用于支持子程序,例如調用程序把參數放到$a0~$a3,然后jal X跳到X過程,被調過程完成后
???????把結果放到$v0,$v1,然后使用jr $ra返回。

總結

以上是生活随笔為你收集整理的MIPS 通用寄存器的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 天天射天天操天天干 | 日韩欧美精品国产 | 国产一区视频在线免费观看 | 尤物在线观看 | 国产三级午夜理伦三级 | 大又大粗又爽又黄少妇毛片 | 久久538| 777色婷婷| 国产精品一区二区三区免费在线观看 | 熟女高潮一区二区三区视频 | 精品国产99久久久久久宅男i | 美女被男人插 | 国产亚洲视频一区 | 97色吧| 色综合狠狠操 | 成人夜色视频 | 青青青在线| 久久亚洲av成人无码国产电影 | 熟女肥臀白浆大屁股一区二区 | 国产调教av| 黄色小视频免费观看 | 色中文字幕在线观看 | 国产精品888 | 97超碰总站 | 婷婷麻豆 | 国产又爽又黄免费软件 | 美人被强行糟蹋np各种play | 日韩日b| 丰满人妻av一区二区三区 | 成人午夜天| 中文字幕在线观看视频一区 | 日本免费专区 | 91在线不卡| av二区在线 | 日韩毛片在线视频 | 日韩午夜在线视频 | 久久99伊人| 欧美亚洲一区二区在线观看 | 日韩女同互慰一区二区 | 人妻少妇偷人精品久久久任期 | 精品国产欧美 | 日韩激情文学 | 欧美日韩免费看 | 国产精品69毛片高清亚洲 | 国产高清欧美 | 韩日激情视频 | 日韩中文字幕网 | www.黄色网址 | porn麻豆| 男欢女爱久石 | 中文字幕精品一区二区三区精品 | 超碰在线公开 | 亚洲黄视频 | 告诉我真相俄剧在线观看 | 日韩三级欧美 | 爱爱网站视频 | 国产性―交一乱―色―情人 | 三点尽露的大尺度国产 | 亚洲欧美在线不卡 | 国产欧美日韩三级 | 图片区视频区小说区 | 九一爱爱 | 久操视频在线 | 国产精品亚洲专区无码牛牛 | 一级做a免费 | 日韩精品在线一区二区 | 九九热国产 | 亚洲激情自拍 | 黄色大全在线观看 | 99色热| 国产精品久久久久久久午夜 | 成人免费播放视频 | 夜夜操天天操 | 一区二区三区在线播放 | 综合色影院 | 制服丝袜亚洲色图 | 女女同性女同一区二区三区按摩 | 亚洲天堂h | 在线无码va中文字幕无码 | 亚洲av最新在线网址 | 午夜精品一区二 | 三级黄网站 | 我要看免费毛片 | 欧洲人妻丰满av无码久久不卡 | 久久精品无码一区二区三区 | 日本精品视频 | 精品3p| 天天草比 | 九九在线观看视频 | 亚洲欧美综合自拍 | 女同一区二区 | www.av色| 日本三级片在线观看 | 在线视频中文字幕 | 最新黄色网址在线观看 | 精品国产网| 土耳其xxxx性hd极品 | 亚洲乱亚洲 | 国产精品免费精品一区 |