Notas de Aula - MAC 211 - Laboratório de Programação I
Aula anterior (aula 2)
Aula 3 - 2/3/2010
-
Arquitetura do Computador
-
Entrada, saída, UCP, barramento (8, 16, 32 ou 64 bits), memória
-
Barramento do sistema é dividido em: dados, endereços e controle
-
Arquitetura da UCP: ULA, registradores
-
Lista de processadores da família x86 - possuem "backward compatibility",
mas não "forward compatibility"
-
Linguagem de montagem
-
instruções do 80x86: aritméticas, lógicas, transferência de dados, pilha,
transferência de controle, entrada e saída: MOV, ADD, SUB, MUL, DIV, etc.
-
registradores do 8086
-
AX - acumulador
-
BX - base
-
CX - contador
-
DX - dados
-
versões de 8 bits: AH, AL, BH, etc.
-
versões de 32 bits (a partir do 80386)
-
IP - apontador de instrução
-
indicadores (Flags) - guardam informações sobre resultados de operações
-
MOV
- copia um valor para um local
- possui várias formas diferentes:
-
mov reg, reg/memory/constant(ou dado imediato)
-
mov memory, reg (usa-se colchetes para indicar uma posição de memória)
-
mov memory, constant (dado imediato)
-
com registradores de 32 bits so' mov entre registradores e' permitido
(será que isso ainda é válido nos processadores mais recentes?)
- não é permitido mover algo da memória principal para a memória principal sem passar por um registrador
- para
evitar ambiguidade de registradores do tipo AH com o valor hexa AH,
muitas ferramentas, como o NASM obrigam o uso do número 0 antes de
valores hexa, por exemplo: 0AH para representar o número de dedos que
temos na mão.
-
XCHG
-
xchg reg, reg
-
xchg reg, mem
-
xchg mem, reg
-
operações aritméticas
-
add reg, reg/memory/constant
sub reg, reg/memory/constant
and reg, reg/memory/constant
or reg, reg/memory/constant
not reg/memory
-
exemplo: add AX, 34 -> AX := AX
+ 34
Rótulos e desvio incondicional
- nome_rotulo: (indentado à esquerda)
- JMP destino
- exemplo: JMP nome_rotulo
- exemplo: JMP 21A7:000211F3H
- Um programa em linguagem de montagem é:
- um conjunto de linhas
- cada linha consiste de 4 campos:
- rótulo
- operador mneumônico
- operando 1
- operando 2
- os itens 1 e 2 são opcionais; em alguns casos, o item 3 também.
Comparação
- cmp reg, reg/memory/constant
- exemplo: cmp AX, BX
- o resultado define ("seta") o valor dos flags correspondentes que influenciam os comandos de desvio condicional
Desvio condicional
- JE, JNE, JZ, JNZ, JPE (jump if parity is even), JPO, JG, JGE, JL, JLE
Soma de números em binário
- exercício: 11011011 + 10001111 = 101101010 <=> 219 + 143 = 362
Números negativos
- usando só bit de sinal e mantendo números do mesmo jeito
- usando complemento de 2: mais facil de fazer operacoes aritmeticas
- dois passos: 1) inverte todos os bits (NOT) 2) soma 1
- no 80x86 isso pode ser feito direto com NEG
- exercicio: calcular -5 em binario e depois somar a 5
- exercicio: calcular 133 + (-33) em binario
- 7FFFh: +32767, o maior positivo em 16 bits.
- 8000h: -32768, o menor negativo em 16 bits.
Na próxima aula: nosso primeiro programa completo em linguagem de montagem.
Próxima aula (aula 4)
Página de MAC211
Página do Fabio
Página do DCC