什麼是組譯器
將以組合語言撰寫的程式,轉換成機器碼指令位元序列的軟體。將標籤改為位址,並將虛擬指令替換成真正的指令。
日文名稱: アセンブラ
「組譯器」出現在2領域的6道練習題中(指令集與組合語言, 編譯器等)。
這個名詞所屬的領域: 指令集與組合語言
將以組合語言撰寫的程式,轉換成機器碼指令位元序列的軟體。將標籤改為位址,並將虛擬指令替換成真正的指令。
日文名稱: アセンブラ
「組譯器」出現在2領域的6道練習題中(指令集與組合語言, 編譯器等)。
這個名詞所屬的領域: 指令集與組合語言
正確答案:A. addi x0, x0, 0
RISC-V沒有「什麼都不做」的專用指令,nop以「addi x0, x0, 0」表示。由於寫入x0的內容會被捨棄,暫存器與記憶體都不會有任何改變。同樣地,「mv rd, rs」是「addi rd, rs, 0」,「j label」是「jal x0, label」,「ret」是「jalr x0, 0(ra)」。善用x0來減少指令的種類,是RISC-V的設計理念。
組合語言是用「add a0, a0, a1」這種人類可讀的符號(助憶符號)來撰寫機器語言的指令,再由組譯器轉換為指令的位元列。
下列何者是組合語言與機器語言之間的關係?在組合語言中寫下「li a0, 0x12345678」時,組譯器會視需要將其展開為這兩個指令。
在RISC-V中,要將無法收進12位元立即值的32位元常數(例:0x12345678)放入暫存器,一般的方法是下列何者?當低12位元的位元11為1時,須事先在高位加1,這種修正由組譯器與連結器自動進行。
在RISC-V中以lui與addi兩個指令產生常數0x12345FFF時,正確的組合是下列何者?比這更遠的分支,組譯器會改寫成:以條件相反的短分支,跳過能到達遠處的jal(約±1MiB)。
RISC-V的條件分支指令(B格式)以13位元帶正負號的位元組數表示到分支目標的距離,其最低位元永遠為0,不放入指令中…C語言的原始檔,首先由編譯器轉換為接近機器碼的組合語言(或直接轉成目的檔),再由組譯器變成機器碼的目的檔。
從C語言的程式到產生執行檔的一般流程,下列何者正確?虛擬指令(Pseudo-instruction) 指令集架構(ISA) 立即值 連結器(Linker) 目的檔(Object file) 分支延遲槽 呼叫者保存暫存器 呼叫慣例 定址模式 返回位址