gpt4 book ai didi

mips - 可以帮助我将 mips 转换为二进制吗?

转载 作者:行者123 更新时间:2023-12-04 20:35:00 33 4
gpt4 key购买 nike

我不明白如何翻译标签。任何人都可以给我一个帮助

假设我们有以下代码:

loop: 
add $t2,$t2,$t1
addi $t2,$t2,4
sw $t2,4($s0)
bne $t2,20,loop
jr $ra

如何转换为二进制 bne $t2,10,loop ?

最佳答案

有几点需要注意。

分支偏移总是从分支地址+4(即PC+4)开始计算,所以它是相对于jr的地址的操作说明。

由于 mips 指令必须与字对齐 [四字节边界],指令地址的最右边两位将 [必须始终] 为零。

mips 体系结构通过将分支偏移编码为字偏移(即字节偏移右移 2)来利用这一点。这将分支指令 16 位立即数编码的范围扩展到 18 位。

所以,这里是 list :

00:     loop:
00: add $t2,$t2,$t1
04: addi $t2,$t2,4
08: sw $t2,4($s0)
0C: bne $t2,20,loop
10: jr $ra
jr地址是 0x10 ,因此循环的字节偏移量将是 -0x10,编码偏移量将是 -0x04 或 0xFFFC 和 bne将是 xxxxFFFC
但是......这是有问题的。这个特别 bne对第二个参数使用立即值。这使得 bne伪操作而不是简单的 bne操作说明。

因此,实际序列变为:
00:     loop:
00: add $t2,$t2,$t1
04: addi $t2,$t2,4
08: sw $t2,4($s0)
0C: addi $at,$zero,20
10: bne $at,$t2,loop
14: jr $ra

请注意 bne变成两个指令序列: addibne jr地址现在是 0x14 ,因此循环的字节偏移量将是 -0x14,编码偏移量将是 -0x05 或 0xFFFB 和 bne将是 xxxxFFFB bne汇编格式为:
    bne    s,t,label
bne编码是:
0001 01ss ssst tttt iiii iiii iiii iiii

所以, s注册是 $at$1 --> 00001 t注册是 $t2$10 --> 01010
所以,现在我们有:
0001 01ss ssst tttt iiii iiii iiii iiii
00 0010 1010
0001 0100 0010 1010 iiii iiii iiii iiii

在十六进制中,这是 142Ayyyy .我们已经知道 yyyyFFFB ,所以最终的十六进制值为: 142AFFFB

关于mips - 可以帮助我将 mips 转换为二进制吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37636005/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com