私はこのアセンブラコードを持っています。これをバイナリ形式のマシンコードに変換することになっています。
.text
.align 2
.global main
.equ val,0x4712
main:
movi r16,val
movi r17,0
loop: addi r17,r17,1
subi r16,r16,1
bne r16,r0,loop
stop: br stop
.end
「bner16、r0、loop」と「brstop」がどのように解釈されるのかわかりません。
私の命令セットリファレンスは、bne命令がこれを行うと言っています:
if(rA != rB)
then PC ← PC + 4 + σ(IMM16)
else PC ← PC +4
これは、私が理解しているように、プログラムカウンターが4+オフセットまたは単に4だけインクリメントされていることです。
しかし、私の場合、offset / IMM16値は何ですか?命令セットリファレンスには次のように書かれています。
「命令エンコーディングでは、IMM16によって与えられるオフセットは、bneの直後の命令を基準にした符号付きバイト数として扱われます」。
私の解釈では、IMM16値は次の命令アドレスまでの「距離」ですが、これが正しいかどうかはわかりません。bneの16進アドレスは0x40010、brの16進アドレスは0x40014であるため、これはIMM16値が4であることを意味しますか?(これにより、rA!= rBの場合、PCが0x40014アドレスを飛び越えてしまいますか?)