Escolar Documentos
Profissional Documentos
Cultura Documentos
Prof. Fbio M. Costa Instituto de Informtica UFG 1S/2005 ISA Parte II: Arquiteturas-Exemplo Simuladores e Mquinas Reais
Objetivos Gerais
Demonstrar os conceitos genricos de arquiteturas de computadores (nvel ISA) atravs do uso de algumas arquiteturasexemplo representativas
Introduzir o tpico de programao em baixo nvel, como ferramenta para o entendimento de arquiteturas de computadores
Arquiteturas estudadas
Weber, Raul F. Fundamentos de Arquitetura de Computadores. Srie de Livros Didticos do Instituto de Informtica da UFRGS, Nmero 8, 2a. Edio. Sagra-Luzzatto, 2001
Computadores reais:
O Computador Neander
arquitetura de acumulador
1 apontador de programa de 8 bits (PC) 1 registrador de estado (flags) com 2 cdigos de condio:
Memria
opcode operando
x: Endereo x+1:
7 opcode
endereo direto Obs.: o segundo byte (operando) ocorre apenas em instrues de manipulao de dados, i.e., que fazem referncia memria
...
256 palavras de 8 bits: 256 bytes Primeiros 128 bytes (metade inferior):
1: resultado negativo 0: resultado positivo 1: resultado igual a zero 0: resultado diferente de zero
Neander: Simulador
Object 1
O Computadore Ahmes
Largura de dados e endereos: 8 bits Dados representados em complemento de 2 1 acumulador de 8 bits (AC) 1 apontador de programa de 8 bits (PC) 1 registrador de estado (flags) com 5 cdigos de condio:
negativo (N) e zero (Z) carry out (C), borrow out (B), overflow (V)
JNV end
Ahmes: Simulador
Object 2
O Computadore Ramses
Outros modos de endereamento (o NEANDER s tem o direto) Novos registradores Novos bits no registrador de estado (cdigos de condio) Novas instrues (mais poderosas)
compatvel com o cdigo escrito para o NEANDER ( capaz de rodar os programas do NEANDER)
Ramses: Caractersticas
Tamanho da memria = 256 bytes Isso tem efeito nos clculos que envolvem a ULA
De uso geral: A e B (8 bits) Registrador de ndice: X (8 bits) Apontador de programa (PC) Registrador de estado
Cdigos de condio N, Z e C
Semelhante ao Neander
00 Direto: endereo do operando no segundo byte (como no Neander) 01 Indireto: endereo do endereo do operando no segundo byte 10 Imediato: o prprio operando no segundo byte 11 Indexado: o segundo byte contm um endereo (base), que somado ao contedo do registrador RX (ndice) para compor o endereo do operando
(rea de dados)
00: Registrador A (RA) 01: Registrador B (RB) 10: Registrador de ndice (RX) 11: indefinido
Direto: end = n
Ex1: NOME Ex2: 93H Ex1: NOME,I Ex2: 93H,I Ex1: #NOME Ex2: #25H Ex1: NOME,X Ex2: 93H,X
Imediato: end = #n
Os seguintes modos de endereamento podem ser usados para especificar o endereo alvo de desvios
Endereo de desvio:
O que equivalente a:
Endereo de desvio
MEM(MEM(PC)) MEM(MEM(MEM(PC)))
Prxima instruo
Endereo de desvio
Prxima Instruo
Acesso memria
STR r end LDR r end ADD r end SUB r end OR r end AND r end NOT r NEG r
Aritimticas e lgicas
JMP JN JZ JC JSR
; PC end ; IF N=1 THEN PC end ; IF Z=1 THEN PC end ; IF C=1 THEN PC end ; MEM(end) PC; PC end+1
SHR r
; r r/2
Exerccio
Ex. 3 (Weber):
O Montador Daedalus
Jump to SubRoutine
Exemplo:
Exemplos de chamadas
... 10 JSR 60 ;guarda end. 12 na pos. 60 da mem. 12 ... ;instruo a executar aps o retorno ... 16 JSR 60 ;guarda end. 18 na pos. 60 da mem. 18 ... ; instruo a executar aps o retorno ... 60 NOP ;posio onde ser guardado o end. retorno 61 xxx ;posio onde fica a primeira instr. da rotina
No permite recursividade
No permite reentrncia
Por que???
Duas modalidades:
Por valor passa-se o valor da varivel Por nome passa-se o endereo da varivel via registrador via memria, em endereos pre-estabelecidos via memria, nas posies seguintes chamada via memria, em endereo apontado por RX (modo indexado)
Mecanismos:
Programa principal:
LDR A primeiro_operando LDR B segundo_operando JSR multiplica STR A resultado
Subrotina:
multiplica: NOP STR A op1 STR B op2 <multiplicao> LDR A result JMP multiplica, I
Programa principal:
LDR STR LDR STR JSR LDR STR A A A A primeiro_operando param1 segundo_operando param2 multiplica A param3 A resultado
Subrotina
NOP LDR A param1 STR A op1 LDR A param2 STR A op2 <multiplicao> LDR A result STR A param3 JMP multiplica,I
Subrotina:
A A A A A A A A A A multiplica, I param1 multiplica #1 multiplica multiplica, I param2 multiplica #1 multiplica
Programa principal:
JSR multiplica <valor do 1o. operando> <valor do 2o. operando> <endereo do resultado> <<instruo seguinte>> ...
multiplica: NOP LDR STR LDR ADD STR LDR STR LDR ADD STR
<multiplicao> LDR STR LDR STR LDR ADD STR A A B B A A A multiplica, I param3 result param3, I multiplica #1 multiplica
JMP multiplica, I
Subrotina
LDR X multiplica ;endereo do primeiro operando LDR A 0,X ;valor do primeiro operando STR A param1 LDR A 1,X STR A param2 <multiplicao> STR LDR LDR STR X X A A end_ret 2,X result 0,X ;endereo do terceiro op. (retorno) ;resultado da rotina ;salva result. no endereo do 3o. parmetro ;valor do segundo operando
multiplica: NOP
LDR X end_ret ADD X #3 ;atualiza o endereo de retorno STR X multiplica JMP multiplica, I ;retorna da subrotina
Caractersticas gerais Organizao de memria Modos de endereamento Manipulao da Pilha Conjunto de instrues Entrada e Sada Subrotinas
N, Z, C, V
Processamento de pilha Incompatvel com o NEANDER e RAMSES Dados e endereos com 16 bits Representao dos dados em complemento de 2 Instrues com 0, 1 ou 2 endereos (operandos) Registradores de uso geral
R0 at R5: sem funo especfica R6: apontador de pilha (SP Stack Pointer) R7: apontador de programa (PC Program Counter)
Acomodar instrues com 1 byte Usada em processadores comerciais Em geral, dados mais largos possuem tamanhos mltiplos de 8 bits Big endian ou high/low: Motorola, CESAR Little endian ou low/high: Intel
Formas de armazenamento
Obs.: todos os modos (exceto 000) podem ser usados tanto para acesso a dados quanto para indicar endereos de desvio para endereo de desvio, o modo 000 (registrador) no vlido
O processador permite livre acesso ao PC (contador de programa). Alguns modos de endereamento comuns podem ser obtidos desta forma:
Uso do registrador R7 (PC) no modo registrador com ps-incremento A palavra (2 bytes) seguinte instruo atual contm o operando imediato
operando: MEM(PC) PC PC + 2
Uso do registrador R7 (PC) no modo ps-incremento indireto A palavra seguinte instruo atual contm o endereo do operando
operando: MEM(MEM(PC)) PC PC + 2
registrador R6
Desempilhamento
Dado := MEM(SP) SP := SP + 2
Obs.: no h instrues especficas para manipulao da pilha usar os modos de registrador ps- e pr-incremento com o registrador R6
NOP
CCC: 0 0 0 1 n z v c
desliga (zera) os cdigos de condio correspondentes aos bits selecionados (n, z, v, c) liga os cdigos de condio selecionados
SCC: 0 0 1 0 n z v c
0 0 d 1 d 1 d c d c d c d c d
em complemento de 2: faixa PC-128 at PC+127 valor do PC utilizado: endereo da prxima instruo (isto , aps o byte de deslocamento)
0 0 m 0 m x m x r x r x r
1 x
Subtract One and Branch if not zero utiliza um registrador como contador
7 0 d 0 1 d 0 d 1 d x d r d r d r d
Formato: SOB
bits r r r: registrador usado como contador bits d: endereo para o desvio (incio do lao), expresso como um deslocamento relativo ao PC
JSR
7 0 x
0 1 x 1 m 0 m x m r r r r r r
bits r r r do 1o. byte: registrador de retorno pode ser o prprio PC! (i.e., R7) bits mmm e rrr (2o. byte): modo de endereamento e registrador usados para calcular o endereo da subrotina
temporrio endereo da subrotina pilha registrador de retorno registrador de retorno R7 (i.e., PC) R7 temporrio
Execuo:
7 0 0 1 1 1 x r r r
Execuo:
Formato geral:
7 1 x
0 0 x 0 m 0 m c m c r c r c r
campo cccc: cdigo especfico da instruo campos mmm e rrr: modo de endereamento e registrador usados para calcular o operando da instruo
Formato geral:
7 1 r
0 c r c m c m m m m r m r r r
campo ccc: cdigo especfico da instruo primeiro par mmm e rrr: operando fonte segundo par mmm e rrr: operando destino
Modos de endereamento
Smbolo Rx (Rx)+ -(Rx) ddd(Rx) (Rx) ((Rx)+) (-(Rx)) (ddd(Rx)) #nnn (onde: nnn = valor da constante) nnn (onde: nnn = endereo de mem.)
Modo Registrador Reg. (indireto) com ps-decremento Reg. (indireto) com pr-decremento Indexado Registrador indireto Reg. ps-incr. (duplamente) indireto Reg. pr-decr. (duplamente) indireto Indexado Indireto Imediato Absoluto ou direto
Instrues (mnemnicos)
Codificao simblica
CCC [N] [Z] [V] [C] SCC [N] [Z] [V] [C] Bccc ddd (onde: ddd = deslocamento em relao ao R7. Ex.: BNE -16) JMP end (onde: end indica o endereo alvo do desvio, com uso de um modo de endereamento apropriado) SOB Rx, ddd (onde: ddd = deslocamento) JSR Rx, end (onde: end = endereo da subrotina) RTS Rx (e Rx = reg. de retorno) XXX op_end (onde: op_end = end. do operando) (Ex.: DEC op_end op op 1) XXX end_fonte, end_dest (Ex.: MOV end_fonte, end_dest dest fonte)
Categoria de Instrues
Instrues sobre cdigos de condio Instrues de desvio condicional Instruo de desvio incondicional
Instruo de controle de lao Instrues para desvio e retorno de subrotina Instrues de um operando Instrues de dois operandos
letras e dgitos leitura de um caractere teste se uma tecla foi digitada Usa o teclado do computador hospedeiro endereos 65500 a 65535: visor 65499: ltimo caractere digitado 65498: estado do teclado (80h se um caractere foi digitado)
Teclado
Este byte deve ser zerado toda vez que um caractere lido (em preparao para a leitura do prximo caractere)
Cesar: Subrotinas
Rx salvo na pilha Rx endereo de retorno (byte seguinte ao JSR) R7 end (i.e., desvio para end) R7 Rx Rx topo da pilha
Observao: Pode-se usar R7 como o prprio registrador de retorno (mais comum em arquiteturas atuais, mas menos flexvel)
RTS Rx
Exemplo
14 16 20 22 .. .. 64 .. .. 78 ... MOV R0, #64 JSR R5, (R0) ;chamada ... ... ... MOV R3, R4 ... ;corpo da subrotina ... RTS R5 ;retorno
;incio da subrotina ;obtm o primeiro parmetro ;obtm o segundo parmetro ;obtm o terceiro parmetro ;retorno da subrotina
A Biblioteca BibCesar
Limpar o visor rotina iterativa Multiplicar dois inteiros positivos de 16 bits Limpar o visor rotina mais rpida Dividir um nmero inteiro positivo de 32 bits por outro de 16 bits Escrever no visor Identificao da verso da biblioteca
Bibliografia
Captulos 4, 5 e 11