.text
.align 2
.global main
.equ val,0x4712 # 16-bit binary code for 0x4712: 0100 0111 0001 0010
# Program code starts now
main:
movi r16,val
movi r17,0
loop: addi r17,r17,1
subi r16,r16,1
bne r16,r0,loop
stop: br stop
上記をマシンコードに変換するにはどうすればよいですか?実際のコード以外に、翻訳の仕方を知る必要があります。命令のオペコードを取得できると思いますが、moviは疑似命令であり、どこで取得できるかわかりません。Nios IIのマニュアルで読む必要がありますか?
アップデート
最初の4つの命令は即時型であるため、フィールド形式を使用する必要があります。moviとsubiはどちらもaddiに実装された疑似命令であるため、addiのオペコードが使用されます。私は助けられました、そして私は指示movi r16, val
がに翻訳されることを知っています
00000100000100011100010010000100
したがって、オペコードは000100バイナリであり、16進数で0x04であり、マニュアルにもaddiのオペコードであると記載されています。したがって、最初の4つのオペコードがあると思います。それらはすべて000100です。
アップデート2
私は今、ほとんどの命令のオペコードと直接のフィールドを知っていると思います:
シーケンス0100011100010010は0x4712であり、これはval
で宣言された変数です。.equ,
したがって、最初の4つのオペコードはすべてaddiであり、addiは0x04であると言うため、000100である必要があります。レジスタの2つの5ビットフィールドを変換する方法は今はわかりませんが、マニュアルで確認できます。' has opcode 0x06 so it should say 000110 in the opcode for br.
brbne`にはopkod0x1Eがあり、バイナリは011110 = 30(?)
これは正しい始まりですか?