Linguagem de montagem (7) - pilha

0. O que é uma pilha?

Empilhar estrutura de dados ( estrutura de dados de pilha) dos mesmos princípios e a pilha de placa: adicionar um novo valor ao topo da pilha, remover o topo do valor da pilha também é removido. A pilha também é chamada de estrutura LIFO (Último a Entrar, Primeiro a Sair), o motivo é que o último valor inserido na pilha também é o primeiro valor a sair da pilha. (A estrutura de dados será discutida)

1. O princípio operacional da pilha

A pilha de tempo de execução é uma matriz de memória, e a CPU a gerencia diretamente com o registro ESP (ponteiro de pilha estendido), que é chamado de registro de ponteiro de pilha. No modo de 32 bits, o registro ESP armazena o deslocamento de 32 bits de uma determinada posição na pilha. O ESP basicamente não é controlado diretamente pelo programador, pelo contrário, é modificado indiretamente por instruções como CALL, RET, PUSH e POP. ESP sempre aponta para o último valor adicionado ou colocado no topo da pilha. A pilha de tempo de execução funciona no nível do sistema e lida com chamadas de sub-rotina. Stack ADT é uma estrutura de programação usada para implementar algoritmos baseados em operações last-in first-out.

2. Instruções de empilhamento

(1) instrução PUSH

A instrução PUSH primeiro reduz o valor de ESP e, em seguida, copia o operando de origem para a pilha.

(2) instrução POP

A instrução POP primeiro copia o conteúdo do elemento de pilha apontado por ESP para um operando de destino de 16 ou 32 bits e, em seguida, aumenta o valor de ESP.

(3) Instruções PUSHFD e POPFD

A instrução PUSHFD empurra o conteúdo do registrador EFLAGS de 32 bits para a pilha, enquanto a instrução POPFD empurra o conteúdo da célula superior da pilha para o registrador EFLAGS. A instrução MOV não pode ser usada para copiar o conteúdo do registrador do sinalizador para uma variável, portanto, PUSHFD pode ser a melhor maneira de salvar o bit do sinalizador. Às vezes é muito útil salvar uma cópia do registrador de sinalização para que o valor original do registrador de sinalização possa ser restaurado posteriormente.

(4) PUSHAD, PUSHA, POPAD e POPA

A instrução PUSHAD empurra todos os registradores de uso geral de 32 bits na pilha na ordem de EAX, ECX, EDX, EBX, ESP (valor antes de PUSHAD), EBP, ESI e EDI.
 

A instrução POPAD retira o mesmo registro da pilha na ordem inversa. Da mesma forma, a instrução PUSHA sequencialmente (AX, CX, DX, BX, SP, BP, SI e DI) empurra registradores de uso geral de 16 bits na pilha.
 

A instrução POPA retira o mesmo registro da pilha na ordem inversa. No modo de 16 bits, apenas as instruções PUSHA e POPA podem ser usadas.

 

Acho que você gosta

Origin blog.csdn.net/qq_35789421/article/details/113738602
Recomendado
Clasificación