gpt4 book ai didi

assembly - MIPS 汇编中的 .word 指令

转载 作者:行者123 更新时间:2023-12-02 19:21:32 25 4
gpt4 key购买 nike

       .data
VALS: .half 0xbead, 0xface
RES: .space 4
.text
la $t0,VALS
lh $t1,($t0)
lhu $t2,2($t0)
sll $t2,$t2,16
or $t2,$t1,$t2
jal AVG
.word -2
.word -6
la $t4,RES
sw $v0,($t4)
li $v0,10
syscall
AVG: lw $v0,($ra)
lw $t3,4($ra)
add $v0,$v0,$t3
sra $v0,$v0,1
addi $ra,$ra,8
jr $ra

在此 MIPS 代码中,.word 部分的作用是什么?我的模拟器无法处理文本部分中的数据指令。这些指令有什么作用?执行 .word -2 和 .word -6 而不是 .word -8 有什么意义?

最佳答案

该指令将字值 -2 和 -6 放入代码流中。如果您查看该 block 的实际二进制表示,您会发现在指令编码的中间有一些 FFFFFFFEFFFFFFFA 或 FEFFFFFFFAFFFFFF,具体取决于字节顺序。

汇编器将分别发出 2 个字的数据值 -2 和 -6,与单个字的 -8 不同。

如果您查看 AVG: 标签上的内容,您会发现它使用

lw $v0, ($ra)
lw $t3, 4($ra)

从返回地址(即从哪里跳转,即从代码段中嵌入的数据)加载寄存器 v0 和 t3 中的 2 个字。所以... v0 得到 -2,t3 得到 -6。另请注意代码段如何在返回之前将 8 添加到 $ra,以跳过嵌入的数据。

简而言之,这是一种对常量值进行编码的方法,这些常量值将作为代码流的一部分加载到寄存器中。

现在,代码所做的是将 2 加在一起,右移,然后返回(我假设实现了 Average)。在这种特定情况下,当您可以简单地在编译时直接计算平均值(或者如果您直接在头脑中编写 asm)时,做那么多工作没有多大意义。我假设 AVG 应该从很多地方调用,但即使如此,由于它期望来自代码段的值(通常是只读),我看不到对常量值进行数学计算的意义。

关于assembly - MIPS 汇编中的 .word 指令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2376743/

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