.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 手册中阅读它吗?
更新
前四个指令是立即类型,因此应该使用字段形式。movi 和 subi 都是在 addi 中实现的伪指令,因此将使用 addi 的操作码。我得到了帮助,我知道该指令movi r16, val
将转化为
00000100000100011100010010000100
所以操作码是 000100 二进制,即 0x04 以十六进制为基数,手册还指出是 addi 的操作码。所以我认为我们有前四个操作码,它们都是 000100。
更新 2
我想我现在知道大多数指令的操作码和直接字段:
序列 0100011100010010 是 0x4712,它是用val
声明的变量.equ,
所以前四个操作码应该是 000100,因为它们都是 addi 并且 addi 说它是 0x04。如何翻译我现在不知道但可以查看手册的寄存器的两个五位字段。它说'br bne'has opcode 0x06 so it should say 000110 in the opcode for br.
有opkod 0x1E,二进制是011110 = 30(?)
这是一个正确的开始吗?