valores de passagem nas macros MIPS
Estive a estudar MIPS como introdução à montagem e comecei recentemente a tocar com macros. O que eu quero ser capaz de fazer é passar um valor gerado por outra macro, ou apenas qualquer valor em qualquer registro particular, para outra macro. ie,
.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
Este programa (especificamente a linha print_int($t0)
) não passa pelo montador e aparece como um erro. Existe uma maneira sintática adequada de fazer isso, ou minha abordagem é fundamentalmente incorreta?
2
Author: user3715913, 2014-06-08
1 answers
Nunca é tarde demais para corrigir um erro! Tens muitos erros. Em primeiro lugar, você não pode chamar
li
com um valor de registro como um segundo parâmetro. Então, deve usar $x
e não %x
. Finalmente, as macros estão dentro da secção .text
(ver MIPS). (Note também, que macros não são suportados pelo QtSpim. No entanto, eles são suportados por Marte.)
.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
0
Author: Pavlos Fragkiadoulakis, 2018-04-03 21:35:17