Assembly 在MIPS宏中传递值

Assembly 在MIPS宏中传递值,assembly,macros,mips,Assembly,Macros,Mips,我一直在学习MIPS作为汇编的入门,最近开始使用宏。我想能够做的是将另一个宏生成的值,或任何特定寄存器中的任何值,传递到另一个宏中。即 .data .macro print_int(%x) #this macro prints a given integer %x li $v0, 1 li $a0, %x syscall .end_macro .macro terminate #this macro terminates a program li $v0

我一直在学习MIPS作为汇编的入门,最近开始使用宏。我想能够做的是将另一个宏生成的值,或任何特定寄存器中的任何值,传递到另一个宏中。即

.data

.macro print_int(%x) #this macro prints a given integer %x
li      $v0, 1
li      $a0, %x
syscall
.end_macro

.macro terminate     #this macro terminates a program
li      $v0, 10
syscall
.end_macro

.text
main:

li      $t0, 7       #first, load the value 7 into register t0
print_int($t0)       #then, attempt to pass the value in $t0 through print_int

terminate            #end program

这个程序(特别是
print\u int($t0)
行)没有通过汇编程序,结果是一个错误。有没有合适的语法方法可以做到这一点,或者我的方法根本不正确?

纠正错误永远不会太晚!你有很多错误。首先,不能使用寄存器值作为第二个参数调用
li
。然后,您应该使用
$x
,而不是
%x
。最后,宏位于
.text
部分(请参阅)。(还要注意,QtSpim不支持宏。但是,MARS支持宏。)


li$a0,%x
看起来有误。您可能需要
mov$a0,%x
.text

.macro print_int($x)
#lw $a0, $x #alternative call
la $a0, ($x)
li $v0, 1
syscall
.end_macro

.macro terminate
li $v0,10
syscall
.end_macro

main:

li $t0, 7

print_int($t0) #call print macro!

terminate #end program