Na montagem do MIPS , há um registro para o ponteiro da pilha e outro registro para o ponteiro do quadro. Qual é o ponteiro do quadro e qual é o seu objetivo? Como ele difere do ponteiro da pilha?
28
Na montagem do MIPS , há um registro para o ponteiro da pilha e outro registro para o ponteiro do quadro. Qual é o ponteiro do quadro e qual é o seu objetivo? Como ele difere do ponteiro da pilha?
Respostas:
Na montagem do MIPS, o ponteiro da pilha aponta para o topo da pilha. À medida que você aloca espaço na pilha, o ponteiro da pilha ($ sp) se move para apontar para a memória livre.
Ao chamar uma sub-rotina na montagem do MIPS (os registradores eram muito bons naqueles dias - registre os parâmetros com base onde não eram convencionais), escreve-se os parâmetros na pilha e depois avança o ponteiro da pilha.
Quando o método inicia, um parâmetro pode estar em um deslocamento de
16($sp)
. No entanto, conforme as variáveis são colocadas na pilha, o ponteiro da pilha se move e o mesmo parâmetro agora pode estar localizado em24($sp)
vez disso. Isso pode tornar o código um pouco confuso.O ponteiro de quadro ($ fp) aponta para o início do quadro de pilha e não se move durante a chamada de sub-rotina. Isso aponta para a base do quadro da pilha e os parâmetros passados para a sub-rotina permanecem em um ponto constante em relação ao ponteiro do quadro.
Perceba que o ponteiro do quadro precisará ser armazenado e restaurado com chamadas de sub-rotina que o modificam.
Leitura adicional:
fonte
%ebp
registrador 'base pointer' na convenção de chamada x86? (Eu sou novo em tudo isso, mas parece que a mesma coisa básica como a utilização de sth comoMOV 8(%ebp), %eax
ou como?)Realize that the frame pointer will need to be stored and restored with subroutine calls that modify it.
não é muito claro o que isso significa