Formatos de instruç instruções • Formato de instruções Organização e Arquitetura de computadores Conjunto de instruções: formatos de instruções e modos de endereçamento Prof. Dr. Luciano José Senger – O formato de instruções de uma arquitetura permite especificar, dentre os bits disponíveis para representar uma instrução, a quantidade de bits que será utilizada para o opcode e para os endereços de operandos ou imediatos – Em arquiteturas estruturadas, o tamanho de instruções é fixo e existem poucos formatos (p.e. MIPS tem 3 formatos básicos); arquiteturas não bem estruturadas podem ter vários modos de endereçamento e vários formatos de instruções, inclusive com a utilização de códigos de expansão Formatos de instruç instruções • Expansão de código de operação: – Pode-se empregar os campos de operandos para expandir o número de instruções de máquina – Ex: instruções de 16 bits, endereços de 4 bits, 16 registradores – 15 instruções de 3 endereços; – 14 instruções de 2 endereços; – 31 instruções de 1 endereço; – 16 instruções sem endereço Modos de endereç endereçamento Modos de endereç endereçamento • Modos de endereçamento • Modos de endereçamento – Permitem especificar como os operando estão disponíveis na memória ou no banco de registradores – Diferentes arquiteturas têm números de modos de endereçamento diferentes • Tipos comuns – – – – – – – Imediato Direto Indireto via Registrador Indireto via Registrador Indexado Pilha como especificar onde estão os operandos? – Ex: Arquitetura hipotética instrução LD carrega o operando para o registrador acumulador (AC) - instruções através da linguagem RTL; – XR - registrador especial para endereçamento Assembly Modo Ação – Direto LD ADR AC <- M[ADR] Indireto LD @ADR AC <- M[M[ADR]] Relativo LD $ADR AC <- M[PC + ADR] Imediato LD #NBR AC <- NBR LD ADR(X) AC <- M[ADR + XR] Indexado LD R1 AC <- R1 Registrador Registrador indireto Auto incremento LD (R1) AC <- M[R1] LD (R1)+ AC <- M[R1]; R1 <- R1+ 1 Modos de endereç endereçamento Endereço de memória 200 Load to AC Mode 201 Endereço = 500 202 próxima instrução Modo Endereço efetivo Conteúd o do AC Direto 500 800 399 450 400 700 Imediato 201 500 500 800 Indireto 800 300 600 900 702 325 Relativo 702 325 Indexado 600 900 Registrador ---- 400 Registrador indireto 400 700 Auto incremento 400 700 800 • Modos de endereç endereçamento: 8086 Conteúdo 300 Como os modos de de endereçamento funcionam: um exemplo: • PC = 200 • R1 = 400 • XR = 100 • AC Modos de endereç endereçamento: PDPPDP-11 Imediato Operando é uma constante constante está codificada na instrução mov ax,1000h ax <= 1000h Registrador Operando é um registrador um dentre: ax,bx,cx,dx,si,di,sp,bp mov ax, bx ax <= (bx) Direto Endereço do operando codificado na instrução Operando está na memória mov ax, [1000h] ax <= conteúdo da memória endereçada por 1000h e 1001h Indexado ou indireto via registrador Endereço do operando é o conteúdo de registrador (Apenas um dentre bx, bp, si, di, atuam como apontadores para o operando na memória) mov ax, [bx] ax <= conteúdo da memória cujo endereço está em bx Duplamente indexado Endereço do operando é a soma dos conteúdos de dois registradores (combinações possíveis: [bx+di], [bx+si], [bp+di], [bp+si] ) mov ax, [bx + di] ax <= conteúdo da memória cujo endereço é dado por (bx)+(di) Duplamente indexado com deslocamento Endereço do operando é a soma dos conteúdos de dois registradores mais uma constante combinações possíveis: acrescente uma constante às combinações acima mov ax, [bx+di+1000h] ax <= conteúdo da memória cujo endereço é dado por (bx)+(di)+ 1000h Modos de endereç endereçamento: Pentium II • Endereço virtual (ou efetivo) é um deslocamento dentro do segmento – endereço linear (LA) = endereço início do segmento + endereço efetivo (deslocamento) – se paginação está habilitada, este endereço linear é traduzido via tabela de páginas para um endereço físico • Alguns Recursos usados: – 6 reg. de segmento (SR): determinam o início do segmento • escolha depende do contexto da execução e da instrução – registradores descritores: associados a cada SR (não são visíveis) • mantêm direitos de acesso, endereços limites – registrador base (B) e registrador índice (I) • usados para a construção dos endereços Modos de endereç endereçamento: Pentium II • Estão disponíveis 12 modos de endereçamento – imediato • Operando = end. que está no campo da instrução [A] – operando registrador • LA = R – por deslocamento • LA = (SR) + A – base • LA = (SR) + (B) – base com deslocamento • LA = (SR) + (B) + A – índice com fator de escala e deslocamento • LA = (SR) + (I) x (S) + A – base mais índice e deslocamento • LA = (SR) + (B) +(I) + A – base mais índice com fator de escala e deslocamento • LA = (SR) + (I) x S + (B) + A – relativo • LA = (PC) + A Modos de endereç endereçamento: Pentium II Formato de instruç instruções: Pentium II Consideraç Considerações finais • Modos de endereçamento – Cada forma de endereçamento serve para um propósito específico: • Auto-indexação: empilhamento e desempilhamento de parâmetros de procedimentos • Direto: acesso a variáveis globais • Imediato: transferência de constantes • Indexado: acesso a variáveis locais • Registrador: armazenamento de variáveis locais • Registrador indireto: armazenamento de apontadores de estruturas Leituras Recomendadas • Stallings, capítulo 10 • Tanembaum, capítulo 5 (182 a 225)