Capítulo 2: Instruções Flashcards
- Operações - Operandos - Sinal e sem sinal - Representando instruções - Operações lógicas - Decisões - Funções e procedimentos - LEGv8 - Paralelismo e sincronização - Array vs Pointers - Falácias
O que é um conjunto de instruções?
Vocabulário de comandos entendido por uma determinada arquitetura.
Quais são os princípios de design de hardware?
- Simplicidade favorece regularidade
- Menor é mais rápido
- Um bom design exige bons compromissos.
Qual é a unidade natural de acesso em um computador geralmente representada como um grupo de 64 bits?
Doubleword.
Qual é a convenção LEGv8 para escrever instruções?
Usar X seguida pelo número do registrador.
O que é uma instrução de transferência de dados?
Comando que move dados entre a memória e os registradores.
Qual é a instrução LEGv8 para carregar dados da memória para um registrador?
LDUR (Load Unscaled Register).
Qual é a restrição de alinhamento para words e doublewords na memória?
- Words devem começar em endereços múltiplos de 4
- Doublewords devem começar em endereços múltiplos de 8.
O que é o processo de spilling registers?
Colocar variáveis usadas com menos frequência na memória.
Como os números são representados no hardware do computador?
Como uma série de sinais eletrônicos altos e baixos, ou seja, números binários.
O que é o bit menos significativo em uma doubleword LEGv8?
Bit mais à direita.
O que é a representação two’s complement?
Forma de representar números negativos onde todos os negativos têm 1 no bit mais significativo.
O que ocorre quando o bit retido mais à esquerda de um padrão de bit binário não corresponde ao bit de sinal?
Overflow.
Qual é a função de um signed load?
Copiar repetidamente o sinal para preencher o resto do registrador.
Qual é o atalho para negar números em two’s complement?
Inverter cada 0 para 1 e cada 1 para 0, depois somar um ao resultado.
O que é o conceito de programa armazenado?
Ideia de que instruções e dados podem ser armazenados na memória como números.
Quais são as operações lógicas básicas em um computador?
- AND
- OR
- NOT
- EOR.
Quais são os tipos de instruções de tomada de decisão no LEGv8?
- CBZ: compare and branch if zero
- CBNZ: compare and branch if not zero
- B: branch.
O que são códigos de condição ou flags?
São quatro bits que registram o que ocorreu durante uma instrução que termina com S.
Inclui se o resultado foi zero (Z), se negativo (N), se houve overflow (O), se houve carryout (C).
Quais são os quatro bits extras que registram o que ocorreu durante uma instrução?
Negative (N), Zero (Z), Overflow (V), Carry (C)
Esses bits são conhecidos como códigos de condição ou flags.
O que significa a flag Negative (N)?
O resultado que definiu o código de condição teve um 1 no bit mais significativo.
O que significa a flag Zero (Z)?
O resultado que definiu o código de condição foi 0.
O que significa a flag Overflow (V)?
O resultado que definiu o código de condição sofreu overflow.
O que significa a flag Carry (C)?
O resultado que definiu o código de condição teve um carry out do bit mais significativo ou um empréstimo no bit mais significativo.
Quais são algumas das instruções de comparação com sinal no LEGv8?
- EQ: branch if equal
- NE: branch if not equal
- LT: branch if less than
- LE: branch if less or equal
- GT: branch if greater than
- GE: branch if greater or equal to
- MI: branch on minus; N=1
- PL: branch on plus; N=0
- VS: branch on overflow set; V=1
- VC: branch on overflow clear; V=0
Quais são algumas das instruções de comparação sem sinal no LEGv8?
- LO: < or lower
- LS: ≤ or lower or same
- HI: > or higher
- HS: ≥ or higher or same
Por que se adiciona um S ao final de uma instrução no LEGv8?
Adicionando um S ao final de instruções como ADDS, ADDIS, ANDS, ANDIS, SUBS e SUBIS, define-se as flags Z, N, O, C.
O que é uma branch address table?
Uma tabela que codifica alternativas de forma mais eficiente como uma tabela de endereços de sequências de instrução alternativas.
Qual é o propósito do registrador LR (X30) no LEGv8?
Armazenar o endereço de retorno para retornar ao ponto de origem após a execução de um procedimento.
Quais são os passos para executar um procedimento?
- Colocar os parâmetros em um local acessível ao procedimento
- Transferir o controle para o procedimento
- Adquirir os recursos de armazenamento necessários
- Executar a tarefa desejada
- Colocar o valor do resultado em um local acessível
- Retornar o controle ao ponto de origem
O que representa o ponteiro da pilha (SP)?
O endereço alocado mais recentemente na pilha.
Como funciona o procedimento de push em uma pilha?
Adiciona um elemento à pilha, ajustando o ponteiro da pilha.
Como funciona o procedimento de pop em uma pilha?
Remove um elemento da pilha, ajustando o ponteiro da pilha.
Quais são os grupos de registradores no LEGv8?
- X9 – X17: registradores temporários (não preservados)
- X19 – X28: registradores salvos (devem ser preservados)
O que é um quadro de procedimento (procedure frame)?
Segmento da pilha que contém os registradores salvos e as variáveis locais de um procedimento.
Qual é a função do ponteiro de quadro (frame pointer)?
Aponta para a primeira doubleword do quadro de um procedimento.
Qual é o propósito do código ASCII?
Código Padrão Americano para Intercâmbio de Informações.
O que faz a instrução LDURB?
Carrega um byte da memória, colocando-o nos 8 bits mais à direita de um registrador.
O que faz a instrução STURB?
Pega um byte dos 8 bits mais à direita de um registrador e grava na memória.
Quais são as três opções para representar uma string?
- Reservar a primeira posição para o comprimento
- Usar uma variável acompanhante para o tamanho
- Indicar o final da string com um caractere especial
O que é a instrução MOVZ?
Transfere um valor de campo constante de 16 bits para um dos quadrantes mais à esquerda de um registrador de 64 bits, preenchendo os outros 48 bits com 0s.
O que é a instrução MOVK?
Altera apenas 16 bits do registrador, mantendo os outros bits iguais.
Qual é o formato de instrução usado para branches no LEGv8?
Tipo B.
O que é uma corrida de dados (data race)?
Dois acessos a memória formam uma corrida de dados se forem de diferentes threads e um deles realiza uma operação de escrita.
Qual é a função de uma operação de troca atômica (atomic exchange)?
Troca um valor em um registrador para um valor na memória de forma atômica.
O que é o contador de programa (PC)?
Registrador contendo o endereço da instrução do programa que está sendo executada.
O que é uma operação de memória atômica?
Uma operação que requer uma leitura de memória e uma gravação em uma única instrução ininterrupta.
Quais instruções compõem o par atômico no LEGv8?
load exclusive register (LDXR) e store exclusive register (STXR).
O que acontece se o conteúdo do local de memória mudar antes do store exclusive?
O store exclusive falhará e não gravará o valor na memória.
Quais registradores são especificados pelo STXR?
- Um para o endereço
- Um para indicar se a operação atômica falhou ou foi bem-sucedida
- Um para manter o valor a ser armazenado na memória.
Qual é a função do load exclusive no contexto de operações atômicas?
Retorna o valor inicial do local de memória especificado.
O que é um arquivo object?
Uma combinação de instruções de linguagem de máquina, dados e informações necessárias para colocar as instruções corretamente na memória.
Qual é a função principal de um assembler?
Transformar o programa em linguagem assembly em um object file.
O que é uma tabela de símbolos?
Combina nomes de labels com os endereços das palavras de memória que as instruções ocupam.
Quais passos são feitos pelo linker?
- Coloca o código e os módulos de dados simbolicamente na memória
- Determina o endereço de labels de dados e instruções
- Corrige as referências internas e externas.
O que são bibliotecas vinculadas dinamicamente (DLLs)?
Rotinas de bibliotecas vinculadas a um programa durante a execução, somente após serem chamadas.
Qual é a desvantagem da interpretação em programas?
Menor desempenho.
O que faz o compilador Just In Time (JIT)?
Compila segmentos de código interpretados no código nativo do computador em tempo de execução.
Preencha a lacuna: Uma _______ é uma variação comum de instruções de linguagem assembly, muitas vezes tratada como se fosse uma instrução por si só.
pseudo-instrução
Como um procedimento em C pode ser traduzido para assembly?
Seguindo passos como alocar registradores, fazer o código para o corpo do procedimento e salvar os registradores.
Qual é a vantagem do mecanismo load/store exclusive?
Pode ser usado para construir outras primitivas de sincronização.
Qual é o propósito do loader?
Colocar um object program na memória principal para que esteja pronto para executar.
O que é um arquivo executável?
Programa funcional no formato de um object file que não contém referências não resolvidas.
Qual é a função do Java Virtual Machine (JVM)?
Programa que interpreta bytecodes Java.
Como um programa Java é preparado para execução?
Compilado em uma versão binária de bytecodes Java.
O que deve ser minimizado entre o load exclusive e o store exclusive?
O número de instruções para minimizar a probabilidade de falha no store exclusive.
Qual é a consequência de um store exclusive falhar?
O valor não será gravado na memória.
O que significa ‘procedimento inlining’?
Copiar o código do corpo do procedimento onde a chamada aparece no código.
Qual é a função do linker editor?
Pegar todos os programas em linguagem de máquina montados de forma independente e os unir.
O que ocorre durante a primeira chamada de uma rotina da biblioteca em DLLs?
O programa chama o dynamic linker/loader para localizar e remapear a rotina desejada.
Qual é a fórmula para calcular X10?
X10 = i * 8
O que representa X11 no código?
Endereço de array[i]
Como é incrementado o valor de i no loop?
i = i + 1
O que acontece se i for menor que size?
Vai para loop1
Qual é a função clear2 e o que ela faz?
clear2 (long long int *array, size_t int size) zera todos os elementos do array
Como o ponteiro p é utilizado na função clear2?
p é incrementado para zerar os elementos do array
Qual é a diferença entre a versão em assembly usando índice e a versão usando ponteiro?
A versão em índice multiplica e adiciona dentro do loop, enquanto a versão de ponteiro incrementa o ponteiro diretamente
Quais são as instruções do ISA do MIPS?
MIPS-32 e MIPS-64
O que caracteriza um registrador de propósito geral (GPR)?
Pode ser usado para endereços ou dados com praticamente qualquer instrução
Quais são algumas características comuns entre ARMv8 e MIPS?
- Todas as instruções são de 32 bits
- Ambos têm 32 registradores de propósito geral
- A única maneira de acessar a memória é através de instruções de load e store
- Ambos têm instruções de branch com CBZ e CBNZ
Qual é a principal diferença entre ARMv8 e MIPS em relação a branches condicionais?
ARMv8 usa códigos de condição, enquanto MIPS depende de uma instrução de comparação
O que o ARMv7 não possui que o ARMv8 tem?
Um registrador reservado para armazenar 0 (XZR)
Qual é a implicação de não ter um registrador de contador de programa (PC) no ARMv8?
Evita branches inesperadas
Qual é a característica única do conjunto de instruções ARMv8?
O segundo registrador de operações aritméticas pode ser deslocado antes da operação
Qual é a diferença entre instruções de load e store no ARMv7 e ARMv8?
ARMv7 tem instruções load/store múltiplas, ARMv8 não
Quais são as classes principais de operações de inteiros no x86?
- Instruções de movimentação de dados
- Instruções aritméticas e lógicas
- Fluxo de controle
- Instruções de string
Como as instruções x86 diferem das instruções ARM?
Instruções aritméticas e lógicas do x86 podem ter um operando na memória
Qual é uma falácia comum sobre instruções mais poderosas?
Instruções mais poderosas significam maior desempenho
Qual é uma armadilha comum ao trabalhar com endereços de memória?
Esquecer que endereços de palavra sequencial em máquinas com endereçamento de bytes não diferem em um
O que pode acontecer com ponteiros para variáveis automáticas?
Podem levar ao caos se usados fora do procedimento de definição