什麼是組譯器

將以組合語言撰寫的程式,轉換成機器碼指令位元序列的軟體。將標籤改為位址,並將虛擬指令替換成真正的指令。

日文名稱: アセンブラ

「組譯器」出現在2領域的6道練習題中(指令集與組合語言, 編譯器等)。

這個名詞所屬的領域: 指令集與組合語言

練習組譯器的題目

RISC-V的虛擬指令「nop」(什麼都不做),實際上會被組譯器替換為下列哪一個指令?

  1. Aaddi x0, x0, 0
  2. Bjal ra, 0
  3. Clw x0, 0(sp)
查看答案與解析

正確答案: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的設計理念。

解析中的「組譯器」

出現「組譯器」的題目(6題)

  1. RISC-V的虛擬指令「nop」(什麼都不做),實際上會被組譯器替換為下列哪一個指令?
  2. 下列何者是組合語言與機器語言之間的關係?
  3. 在RISC-V中,要將無法收進12位元立即值的32位元常數(例:0x12345678)放入暫存器,一般的方法是下列何者?
  4. 在RISC-V中以lui與addi兩個指令產生常數0x12345FFF時,正確的組合是下列何者?
  5. RISC-V的條件分支指令(B格式)以13位元帶正負號的位元組數表示到分支目標的距離,其最低位元永遠為0,不放入指令中。下列何者大致是分支指令可直接到達的範圍?
  6. 從C語言的程式到產生執行檔的一般流程,下列何者正確?

相關名詞

虛擬指令(Pseudo-instruction) 指令集架構(ISA) 立即值 連結器(Linker) 目的檔(Object file) 分支延遲槽 呼叫者保存暫存器 呼叫慣例 定址模式 返回位址

前往名詞解釋列表