kodiak Posted April 8, 2012 at 04:03 PM Report #448115 Posted April 8, 2012 at 04:03 PM Viva pessoal. Estou aqui com uma dúvida relativamente à passagem de parâmetros das funções em assembly. Tenho um array de inteiros em C ( int array[] = {1,2,3} ) e tenho a função seguinte: Int funcTeste(int *ponteiro, int tamArray); Basicamente quero programar a função funcTeste em assembly (para testar a passagem dos argumentos). Se fizer o seguinte código: .data .text .globl funcTeste funcTeste: add $9,$5,$zero move $2,$9 jr $31 Vejo que está tudo OK porque é devolvido o valor do tamanho do array (neste caso é devolvido 3). Se fizer: .data .text .globl funcTeste funcTeste: move $2,$4 jr $31 Vejo que é devolvido o endereço de memória que é passado no primeiro argumento. Agora estou é com problemas a retirar o valor contido no endereço de memória. Está a dar segmentation fault. Estou a fazer o seguinte: .data .text .globl funcTeste funcTeste: lw $16,0($4) move $2,$16 jr $31 Alguém sabe o que estou a fazer mal?
bsccara Posted April 9, 2012 at 12:08 AM Report #448154 Posted April 9, 2012 at 12:08 AM Não percebo nada de MIPS mas não estarás a escrever por cima dum registo usado pelo compilador de C ? De acordo com isto (http://logos.cs.uic.edu/366/notes/mips%20quick%20tutorial.htm) os registos de 16 a 23 têm de ser preservados dentro das funções. Aliás a página que te indiquei noutro 'post' diz o mesmo. Tenta: .data .text .globl funcTeste funcTeste: lw $2,0($4) jr $31
kodiak Posted April 9, 2012 at 09:40 PM Author Report #448293 Posted April 9, 2012 at 09:40 PM Não percebo nada de MIPS mas não estarás a escrever por cima dum registo usado pelo compilador de C ? De acordo com isto (http://logos.cs.uic.edu/366/notes/mips%20quick%20tutorial.htm) os registos de 16 a 23 têm de ser preservados dentro das funções. Aliás a página que te indiquei noutro 'post' diz o mesmo. Tenta: .data .text .globl funcTeste funcTeste: lw $2,0($4) jr $31 Era isso mesmo. Alterei os registos e funcionou. Muito obrigado
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now