Conjunto de Instruções Flashcards
Quais são os tipos de flags mais comuns? Especifique cada uma.
FZ –> Flag zero, acontece quando uma operação tem resultado zero
FO –> Flag de overflox, é destinada e usada em números de sinais, acontece quando há alguma interferência que possa interferir no sinal
FS–> Flag de sinal, indica o sinal do resultado (1, -) (0, +)
AF –> Flag auxiliar, indica se houve um vai um nos 4 bits menos significativos
FC –> Flag de carry, acontece quando ocorre um vai 1, ultrapassa da sua capacidade máxima
FP–> Flag de Paridade, é análise de paridade dos 8 bits menos significativos
Quantos bytes é alocado em DB, DW, DD..
db -> 1 byte (4 bits)
dw -> 2 bytes
dd -> duplo word, 4 bytes
Como pode ser dado o tipo de operação lógico de movimentação (MOV)?
Pode ser dado entre registradores, entre reg e imediato, entre memória / registrador, registrador/memória, imediato/memória.
* O imediato é configurado dado o tamanho do registrador
* mov [mem], [mem] não é aceito
* Em operações envolvendo memória o endereço especificado é o menos significativo
* Em casos em que o operando é imediato, deve especificar a quantidade em memória que se deseja alocar
Ex mov [ dst ], org => endereço carregado na memória DS«4 + dst é org
** Quando estamos tratando de meíria. O endereço apontado é o litle end
Ex: mov byte[si], 0x11 ** Será só alocado 11 no primeiro segmento já que é de 1 byte
Como é determinado o endereço de memória no modo real ?
O endereço físico tem 20 bits com o shift de 4. Para acessar dados, o endereço é dado por DS com shift de 4 «4, somado ao offset indicador
O que é PUSHF e PUSHFD?
Ambos são usados para fazer o push do registrador de flags na memória, o segundo faz push das EFLAGS, que são os regs de 32 bits. Para PUSHF , sp é decrementado em 2, caso contrário em 4
PUSHA E PUSHAD. O que são?
PUSHA e PUSHAD é utilizado para fazer push de registradores de propósito geral de 16 bits e 32 bits respectivamente. A ordem é AX, CX, DX, BX, SP, BP, SI, DI.
Em quantos bytes a instrução POP, POPA, POPAD incrementa o registrador SP?
POP usa o SS:(E)SP a depender do operador. Para POP, será 2 ou 4 bytes. No que se trata de POPA ou POPAD seá 8 * qtd_bytes
Que registrador ou registradores são usados como endereço de offset para instruções de String?
DI (Dest index) e SI(Source Index). São comumente usados com MOVS, LODS, STOS
Como se dá a manipulação aritmética de multiplicação de sinal?
Sem sinal: mul org
Há a multiplicação de origem com AX, AL, EAX, a depender de origem, a operação só acontece com registrador ou operando em memória, não se usa imediato.
Os valores multiplicados dobram de tamanho.
Se org tiver 8 bits, AH fica com 8 bits + e AL fica com 8 bits -. Se org 16 bits, DX 16 bits +, AX 16 bits -. Se 32 bits, EDX 32 bits +, EAX 16 bits -.
Como se dá a manipulação aritmética de multiplicação de sinal?
1 : imul org (Tem as mesmas funcionalidades do mul normal, usando os regs de AX, AL, EAX, e com armazenamentos padrões (AH, AL)/ (DX/AX) / (EDX/EAX))
Este consideramos os sinais. Há 3 formas:
obs: Para operandos múltiplos o resultado é do tamanho deles.
#2: imul dest, org
Onde dest tem 16/32 bits, nesse daqui, temos dest = dest * mul
org não pode ser imediato, dest tem que ter 16/32 bits. dest = org * imediato
Como se dá a divisão sem sinal. Onde é armazenado resto e quociente?
A divisão é dado entre o divisor que é indicado na operação e um registrador (a depender do tamanho do divisor/ O dividendo tem o dobro do dividendo).
Dividendo : AX (16 BITS)
DX:AX (32 BITS)
EDX: EAX (64 BITS)
DIVISOR: Quando o divisor é de 8 bits
AH: RESTO, AL : QUOCIENTE
Quando divisor é de 16 bits
DX: RESTO, AX: QUOCIENTE
Quando divisor é de 32 bits
EDX: RESTO, EAX: QUOCIENTE
Como se dá a divisão sem sinal. Onde é armazenado resto e quociente?
IDIV, funciona da mesma forma que DIV, porém, caso registrador muito grande, deve haver extensão de sinal.
Quantos bytes têm cada entrada da Tabela de vetor de interrupções do Modo
Real? Quais informações são armazenadas? E no caso do modo protegido?
Tem 4 bytes, o vetor de tratamento vai de 0 à 1024 bytes de armazenamento. O modo protegido tem um IDT que é uma tabela de descritores de interrupções, é usado 8 bytes para descrever cada interrupção.
Existe 256 vetores cada um contendo o endereço para a IST : CS + IP (2 BYTES)
Quando acontece uma interrupção, o controle deve ser enviado para um controle de tratamento. O que é e qual o nome do processo que controla tal questão?
ISR -> Serviço de interrupção de Instrução
O ISR está em memória e trata das instruções, que podem ser de hardware e software
O que as interrupções tem de diferente dos procedimentos normais?
As interrupções podem ser de HW e SW, podem ocorrer de forma imprevisível, não necessariamente precisam ser tratadas no mesmo momento, o ISR, é responsável por tal tratamento de rotina das interrupções. Quando há interrupção, as pilhas de flags são empilhadas na memória. As interrupções são identificas por números e não nomes
O que pode causar interrupções?
Divisão por zero, acesso indevido a memória. Comunicações de entradas e saídas.
Quais são os tipos de interrupções existentes?
Falts: Sinaliza a interrupção antes ou durante o processamento dela. Retorna para contexto antes da interrupção. Assim a instrução pode ser reiniciadas.
Falts, aborts, traps.
Como as interrupções de Hardware acontecem?
São ativadas por duas entradas do processador: NMI (Non- Markable interruption) e INTR (Interruption request)
Como são ativados e desativados o INTR (Interruption Request) por algumas instruções?
Por STI e CTI , que são respectivamente set interruption flag e clean interruption flag
Como funciona o NMI (Non markable interruption)?
O NMI não pode ser marcada, apenas tratadas, geralmente associada a problemas de paridades do hardware
Quais são os tipos de interrupções de software que o X86 oferece tratamento?
INT/INTO/BOUND/IRET/IRETD
Quais as ações executadas quando uma instrução de INT é usada para gerar uma
interrupção no Modo Real?
Registrador (E)FLAGS é empilhado (manuteção do estado do processador)
Zera as flags IF (interrupt-enable flag) e TF (trap flag) – prevenir que interrupções via INTR e single-step sejam reconhecidas durante o processamento da interrupção
Registradores CS e (E)IP são empilhados
Carrega CS com o seletor de segmento (16-bits) vindo do vetor de interrupção/IDT Carrega (E)IP com o valor de offset vindo do vetor de interrupção/IDT
Descreva os tipos de interrupção INT existente.
INT 16 – Interrupção de leitura.
AH é usado para setar o tipo de funcionalidade.AH ==00H (Le o teclado); AH == 01H (Obtém o estado do buffer); AH == 02H (Obtém o estado do teclado)
** Ao usar o int 16 AH==00H, AL tem registrado nela o tipo de caracter clicado
INT 10
Fornece serviços de vídeo, com EOH em AH, digita um caracter na tela e avança para próximo
. Em al tem o caracter a ser printado na tela
O que se trata o IRET e IRETD
São utilizados para retornar à instrução que causou a interrupção. É importante destacar que nessa parte temos o desempilhamento de CS e IP da pilha, além das (E)FLAGS. IRET é utilizado com endereços de 32 bits
Que tipo de interrupção é chamada para tratamento de overflow?
O tipo de interrupção chamada é o INTO, que ativa a interrupção tipo 4, isso ocorre quando OF (Overflow flag)==1
Há prioridades em tratamento de interrupções, ilustre as prioridades:
Divisão por Zero, INT/INTO, NMI, INRT, SINGLE-STEP
Como encontrar índice de entrada no vetor de interrupções no modo real?
Pega tipo da instrução, multiplica por 4 e passa para hexadecimal.
O que é uma CALL?
Call é usado para chamada de rotina/procedimento. O seu endereço de retorno é salvo na pilha. Pode haver uma chamada intra-segmento e uma inter-segmento(FAR)
Como fica a pilha para as chamadas de CALL
NEAR (intra-segmento) apenas o endereço de retorno (IP). FAR (intra-segmento) primeiro o CS e depois o endereço de retorno IP
Quantos bytes têm cada entrada da Tabela de vetor de interrupções do
Modo Real? Quais informações são armazenadas e qual a ordem de
armazenamento?
4 bytes. 2 para IP, 2 para CS. Empilhados nessa ordem.