No montagem MIPS , há um registro para o ponteiro da pilha, e outro registro para o ponteiro do quadro. O que é o ponteiro do frame e qual é sua finalidade? Como ele difere do ponteiro da pilha?

Comentários

  • Que pesquisa você já fez – e qual é a sua familiaridade com os termos? Para que sistema se destina (diferentes sistemas têm diferentes terminologias)?
  • Eu só quero me familiarizar com o ponteiro de quadro (montagem mips). Não ' não entendo como isso ajuda, por que precisamos disso? Muito obrigado

Resposta

Na montagem MIPS, o ponteiro da pilha aponta para o topo da pilha. Conforme 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 no assembly MIPS (os registros eram muito valiosos naquela época – parâmetros baseados em registros onde não convencional), grava-se os parâmetros na pilha e avança o ponteiro da pilha.

Quando o método começa, 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 pode agora estar localizado em 24($sp). Isso pode tornar o código um pouco confuso.

O ponteiro do frame ($ fp) aponta para o início do frame da pilha e não se move durante a chamada da sub-rotina. Isso aponta para a base do frame da pilha e os parâmetros que são passados para a sub-rotina permanecem em um ponto constante em relação ao ponteiro do frame.

Perceba que o ponteiro do frame precisará ser armazenado e restaurado com chamadas de sub-rotina que o modificam.

Leitura adicional:

Comentários

  • Eu não ' não sei o que significa " os registros eram caros naquela época – parâmetros baseados em registro, onde " não convencionais, mas parâmetros também pode ser colocado na pilha quando o # de regi sters é limitado. Se você tiver 35 parâmetros, por exemplo (eu acredito que MIPS tem 32 regs.), Então você precisaria colocar os 3 parâmetros finais na pilha. Também mais específico para implementação, o FP estaria no endereço na memória onde está o endereço de retorno.
  • @Jonathan MIPS Desses 32 registradores, $ 0 foi 0. $ em foi reservado, $ v0 e $ v1 foram para o valor de retorno de chamadas de função, $ a0 – $ a3 foram parâmetros de função, $ t0 – $ t9 eram temporários (preservação do chamador), $ s0 – $ s7 foram salvos e $ gp, $ sp, $ fp e $ ra foram usados pelo próprio sistema. Ao todo, havia apenas 24 registradores de propósito geral e alguns daqueles incorridos em sobrecarga se você quisesse usar. Você geralmente usa apenas os registradores $ t (10). Compare isso com o Itanium, que tem 128 registradores. Chamando uma função no MIPS com 35 parâmetros, você provavelmente colocaria todos eles na pilha.
  • @Jonathan I ' também aponta para este comentário : " AMD Bulldozer: 96 GPRs físicos, Intel Sandy Bridge: 160 GPRs físicos, Intel Haswell: 168 GPRs físicos ". As coisas ficam engraçadas com várias máquinas de núcleo. SPARC teve 160 registros . Também aponto a janela de registro que abordou parte da filosofia de design do MIPS com metade dos registros de seus contemporâneos.
  • , é a mesma coisa que o uso convencional do %ebp registro ponteiro de base na convenção de chamada x86? (Eu ' sou novo em tudo isso, mas parece a mesma coisa básica que usar sth como MOV 8(%ebp), %eax ou algo semelhante?)
  • A linha Realize that the frame pointer will need to be stored and restored with subroutine calls that modify it. não é muito clara o que isso significa

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *