Assembly 在MIPS宏中传递值
我一直在学习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
.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