#*# O que é Assembly?
#*# Registradores 8 bits, 16 bits e 32 bits:
#*# Flags(Registrador de estados)
Eita, muita coisa né? Mas nem precisa se assustar, quando nós começamos a programar, ver os Saltos e as comparações,
sua mente vai se abrir, você vai ver que não é tão dificil assim, rsrs...
Se escrevi algo de errado, por favor, comentar
Referências:
Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar...
Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar...
Assembly ou linguagem de montagem é uma notação legível por humanos para o código de máquina que uma
arquitetura de computador específica usa, utilizada para programar dispositivos computacionais, como
microprocessadores e microcontroladores. A linguagem de máquina, que é um mero padrão de bits, torna-se
legível pela substituição dos valores em bruto por símbolos chamados mnemónicos.
arquitetura de computador específica usa, utilizada para programar dispositivos computacionais, como
microprocessadores e microcontroladores. A linguagem de máquina, que é um mero padrão de bits, torna-se
legível pela substituição dos valores em bruto por símbolos chamados mnemónicos.
#*# Registradores 8 bits, 16 bits e 32 bits:
Registradores, são pequenas porções de memória, que servem para armazenar dados temporariamente, fica lozalizada no processador.
Os registradores podem armzenar três tipos de dados, Byte, Word e Dword, em Hexadecimal séria o seguinte:
Agora que já sabemos os tipos de dados que os registradores podem aramazenar vamos conhecer eles...
Os registradores EAX, ECX em diante, podemos ver logo ai em cima na ilustração, podem armazenar até 4 bytes, ou
seja, um DWORD de 32 bits, os AX, CX em diante, podem armazenar 2 bytes(16 bits), os AL, CL em diante, podem
armazenar 1 byte(8 bits)...
Além desses temos outros, que são os de Segmento, que são CS, SS, DS, ES. E temos os de Status(FLAGS) e o Ponteiro de
instrução, que é o IP. Esses que nós vimos, são os de uso Geral, dados e endereço.
Espero que tenha entendido essa parte, não entendeu? Tenha calma, leia novamente
com atenção, não é tal dificil como parece, rsrs (:
Os registradores podem armzenar três tipos de dados, Byte, Word e Dword, em Hexadecimal séria o seguinte:
BYTE 00 - Podem armazenar até 255, ou FF em Hexadecimal;
WORD 00 00 - Podem armazenar até 65535, ou FFFF em Hexadecimal;
DWORD 00 00 00 00 - Podem armazenar até 4,294,967,295 ou FFFFFFFF.
WORD 00 00 - Podem armazenar até 65535, ou FFFF em Hexadecimal;
DWORD 00 00 00 00 - Podem armazenar até 4,294,967,295 ou FFFFFFFF.
Agora que já sabemos os tipos de dados que os registradores podem aramazenar vamos conhecer eles...
Código PHP:
32bit 16bit 8bit
EAX AX AL
______EAX______ ECX CX CL
______|___AX___ EDX DX DL
______|_AH_|_AL EBX BX BL
00 00 | 00 | 00 ESP SP AH
EBP BP BH
ESI SI CH
EDI DI DH
Os registradores EAX, ECX em diante, podemos ver logo ai em cima na ilustração, podem armazenar até 4 bytes, ou
seja, um DWORD de 32 bits, os AX, CX em diante, podem armazenar 2 bytes(16 bits), os AL, CL em diante, podem
armazenar 1 byte(8 bits)...
Além desses temos outros, que são os de Segmento, que são CS, SS, DS, ES. E temos os de Status(FLAGS) e o Ponteiro de
instrução, que é o IP. Esses que nós vimos, são os de uso Geral, dados e endereço.
Espero que tenha entendido essa parte, não entendeu? Tenha calma, leia novamente
com atenção, não é tal dificil como parece, rsrs (:
#*# Flags(Registrador de estados)
* CF(Carry Flag) - É sinalizada quando excede o limite do tamanho do dado. Tipo, um byte de 255, se tentamos somar mais 1 dá 256,
mas esse resultado não dá em um byte, então a flag Carry é ativada.
* PF(Parity Flag) - Flag Paridade, ou seja, se a flag estiver setada, a paridade é par, se não é ímpar.
* AF(Auxiliaty Flag ) - Essa flag funciona como a CF, porém do bit 3 a 4, ou seja, como se indicasse o estouro de
nibble. Mas funciona apenas com sequência numéricas em formato Binary-Coded Decimal (Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar...).
* ZF(Zero Flag) - Se uma operação resultou em resultado zero, a flag é ativada, se não, fica desativada(lógico kkkk).
foi zero, se não, foi diferente de zero.
* SF(Sing Flag) - Ativa com resultados negativos.
* TF(Trap Flag) - Essa flag possibilita uma interrupção especial após executar uma única instrução com a
finalidade de acompanhar passo-a-passo a execução de cada instrução (operações de debug).
* IF(Interrupt Enable Flag) - Ativa ou desativa as chamadas de interrupção
* DF(Direction Flag) - A Flag de Direção indica a direção das operações de string. Se estiver
setada o registrador apontador ESI e EDI são decrementados, se não estiver setada ESI e EDI são
incrementados. Em outras palavras, a operação em corda é feita de frente-para-trás ou de trás-para-frente.
* OF(Overflow Flag) - Ativa quando tiver Overflow, ou seja, quando o tamanho de armazenamento não é suficiente.
mas esse resultado não dá em um byte, então a flag Carry é ativada.
* PF(Parity Flag) - Flag Paridade, ou seja, se a flag estiver setada, a paridade é par, se não é ímpar.
* AF(Auxiliaty Flag ) - Essa flag funciona como a CF, porém do bit 3 a 4, ou seja, como se indicasse o estouro de
nibble. Mas funciona apenas com sequência numéricas em formato Binary-Coded Decimal (Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar...).
* ZF(Zero Flag) - Se uma operação resultou em resultado zero, a flag é ativada, se não, fica desativada(lógico kkkk).
foi zero, se não, foi diferente de zero.
* SF(Sing Flag) - Ativa com resultados negativos.
* TF(Trap Flag) - Essa flag possibilita uma interrupção especial após executar uma única instrução com a
finalidade de acompanhar passo-a-passo a execução de cada instrução (operações de debug).
* IF(Interrupt Enable Flag) - Ativa ou desativa as chamadas de interrupção
* DF(Direction Flag) - A Flag de Direção indica a direção das operações de string. Se estiver
setada o registrador apontador ESI e EDI são decrementados, se não estiver setada ESI e EDI são
incrementados. Em outras palavras, a operação em corda é feita de frente-para-trás ou de trás-para-frente.
* OF(Overflow Flag) - Ativa quando tiver Overflow, ou seja, quando o tamanho de armazenamento não é suficiente.
As Flag sevem para emiti sinais na execução do código. Se nós fazemos uma operação, que nessa operação resulto em zero,
então, a flag ZF(Zero Flag) é ativada, por sua vez, se logo a frente estiver um JZ(Salte se Zero) ele salta, porque, a maioria
dos saltos dependem das flag's para que possam pular pra próxima instrução. Esse foi um exemplo com a ZF, com as outras flags, será
diferente...
Exemplo:então, a flag ZF(Zero Flag) é ativada, por sua vez, se logo a frente estiver um JZ(Salte se Zero) ele salta, porque, a maioria
dos saltos dependem das flag's para que possam pular pra próxima instrução. Esse foi um exemplo com a ZF, com as outras flags, será
diferente...
EAX = 10
EAX = EAX - 10
comparar EAX == 0
JZ (endereço da proxima instrução)
EAX = EAX - 10
comparar EAX == 0
JZ (endereço da proxima instrução)
Eita, muita coisa né? Mas nem precisa se assustar, quando nós começamos a programar, ver os Saltos e as comparações,
sua mente vai se abrir, você vai ver que não é tão dificil assim, rsrs...
Se escrevi algo de errado, por favor, comentar
Att #M0rph... (:
Referências:
Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar...
Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar...
Comment