Explorar E-books
Categorias
Explorar Audiolivros
Categorias
Explorar Revistas
Categorias
Explorar Documentos
Categorias
software
Conjunto de instrues
hardware
Abstrao
Descendo no nvel de abstraes revelam-se outras informaes
Assembly language program (for MIPS)
swap(int v[], int k) {int temp; temp = v[k]; v[k] = v[k+1]; v[k+1] = temp; }
C compiler
swap: muli $2, $5,4 add $2, $4,$2 lw $15, 0($2) lw $16, 4($2) sw $16, 0($2) sw $15, 4($2) jr $31
Assembler
Exemplo ampliado
swap(int v[], int k); { int temp; temp = v[k]
v[k] = v[k+1];
} v[k+1] = temp; swap: muli $2, $5, 4 add $2, $4, $2 lw $15, 0($2) lw $16, 4($2) sw $16, 0($2) sw $15, 4($2) jr $31
Aritmtica MIPS
Todas as instrues tem 3 operandos A ordem dos operandos fixa (primeiro o operando destino) Exemplo:
C code:
MIPS code:
A = B + C
add $s0, $s1, $s2 (associado s variveis pelo compilador)
Aritmtica MIPS
Princpio: simplicidade favorece regularidade.
C code:
A = B + C + D; E = F - A; add $t0, $s1, $s2 add $s0, $t0, $s3 sub $s4, $s5, $s0
MIPS code:
Input
Output
I/O
Organizao de Memria
Vista como um grande vetor unidimensional, com endereos. Um endereo de memria um ndice para o vetor "Byte addressing" significa que o ndice aponta para um byte de memria.
0 1 2 3 4 5 6 ...
8 bits of data 8 bits of data 8 bits of data 8 bits of data 8 bits of data 8 bits of data 8 bits of data
Organizao de Memria
A maioria dos dados usam palavras ou "words" Para MIPS, um word constitudo de 32 bits ou 4 bytes.
0 4 8 12 ...
32 bits of data 32 bits of data 32 bits of data 32 bits of data
32 bits
232 bytes tm endereos de 0 a 232-1 230 words tm endereos de bytes 0, 4, 8, ... 232-4 Words so alinhados: O que significam os dois bits menos significativos de um endereo de word?
Store-Word tem destino por ltimo Lembrar que os operandos aritmticos so de registradores, no de memria!
v[k] = v[k+1];
} v[k+1] = temp; swap: muli $2, $5, 4 add $2, $4, $2 lw $15, 0($2) lw $16, 4($2) sw $16, 0($2) sw $15, 4($2) jr $31
O que vimos:
MIPS carrega words mas enderea bytes aritmtica somente usando registradores Instruo add $s1, $s2, $s3 sub $s1, $s2, $s3 lw $s1, 100($s2) sw $s1, 100($s2) Significado $s1 = $s2 + $s3 $s1 = $s2 $s3 $s1 = Memory[$s2+100] Memory[$s2+100] = $s1
Linguagem de Mquina
Instrues, como registradores e words, tem tambm 32 bits Exemplo: add $t0, $s1, $s2 registradores tem numeraes, $t0=9, $s1=17, $s2=18 Formato de Instrues aritmticas - tipo-R (registradores):
op
rs
rt 10010
rd 01001
shamt 00000
funct 100000
000000 10001
Linguagem de Mquina
Considerar as instrues load-word e store-word, Introduz um novo tipo de formato de instruo tipo-I para instrues de transferncia de dados outro formato o tipo-R para registradores Exemplo: lw $t0, 32($s2) Formato das instrues tipo-I
op 35 rs 18 rt 9 16 bit number 32
Processor
Memory
Ciclos de Fetch & Execute Instrues so lidas (fetched) e colocadas num registrador especial Os bits no registrador "controlam" as aes subsequentes Busca (Fetch) a prxima instruo e continua
Instrues de Controle
Instrues de tomadas de deciso altera o fluxo de controle, i.e., muda a prxima instruo a ser executada Instrues de desvio condicional do MIPS: bne $t0, $t1, Label beq $t0, $t1, Label Exemplo: if (i==j) h = i + j;
bne $s0, $s1, Label add $s3, $s0, $s1 Label: ....
Instrues de Controle
Reviso:
Instruo add $s1,$s2,$s3 sub $s1,$s2,$s3 lw $s1,100($s2) sw $s1,100($s2) bne $s4,$s5,L beq $s4,$s5,L j Label Formatos: Significado $s1 = $s2 + $s3 $s1 = $s2 $s3 $s1 = Memory[$s2+100] Memory[$s2+100] = $s1 Next instr. is at Label if $s4 = $s5 Next instr. is at Label if $s4 = $s5 Next instr. is at Label
R I J
op op op
rs rs
rt rt
rd
shamt
funct
16 bit address
26 bit address
Fluxo de Controle
Temos: beq, bne, que tal Branch-if-less-than? Nova instruo: if $s1 < $s2 then $t0 = 1 slt $t0, $s1, $s2 else $t0 = 0 Pode-se usar essa instruo para "blt $s1, $s2, Label" pode agora construir estruturas de controle geral Note que o assembler precisa de um registrador para tal, existe uma regra para o uso de registradores
Constantes
Constantes pequenas so usadas frequentemente (50% dos operandos) p.ex., A = A + 5; B = B + 1; C = C - 18; Solues? Colocar as constantes tpicas nas instrues criar registradores hardwired (como $zero) para constantes como um. Instrues MIPS: addi $29, $29, 4 slti $8, $18, 10 andi $29, $29, 6 ori $29, $29, 4
E as constantes maiores?
Gostariamos de carregar constantes de 32 bits em um registrador Devemos usar duas instrues, a instruo "load upper immediate" lui $t0, 1010101010101010
Preenchido com zeros
1010101010101010 0000000000000000
Ento devemos carregar os bits menos significativos direita, i.e., ori $t0, $t0, 1010101010101010
0000000000000000 1010101010101010
1010101010101010
26 bit address
Confiar no compilador para obter desempenho quais so os objetivos do compilador? Ajudar o compilador onde possvel
A prxima instruo no Label se $t4 <>$t5 A prxima instruo no Label se $t4 = $t5 A prxima instruo no Label
I
J
op op
rs
rt
16 bit address
26 bit address
Endereos em Branchs
Instrues bne $t4,$t5,Label beq $t4,$t5,Label Formatos: I op rs rt 16 bit address
Pode especificar um registrador (como lw e sw) e adicion-lo ao endereo usar Instruction Address Register (PC = program counter) A maioria dos branchs so locais (princpio da localidade) Instrues de Jump usa apenas os bits de alta ordem do PC Limite de endereamento de 256 MB
Resumindo:
MIPS operands Example Comments $s0-$s7, $t0-$t9, $zero, Fast locations for data. In MIPS, data must be in registers to perform 32 registers $a0-$a3, $v0-$v1, $gp, arithmetic. MIPS register $zero always equals 0. Register $at is $fp, $sp, $ra, $at reserved for the assembler to handle large constants. Memory[0],
Accessed only by data transfer instructions. MIPS uses byte addresses, so sequential words differ by 4. Memory holds data structures, such as arrays, and spilled registers, such as those saved on procedure calls.
Name
30
Posio rpida para os dados: os dados devem estar em registradores para realizar aritmtica Registrador $zero sempre contem valor 0 Registrador $at reservado para o assembler manipular constantes grandes Memria: acessada somente por instrues de transferncia de dados Endereado por bytes, tal que as palavras seqenciais difiram de 4 no endereo Memria contem estrutura de dados, como arrays, e valores de registradores que transbordaram
Category
add
Instruction
MIPS assembly language Example Meaning add $s1, $s2, $s3 $s1 = $s2 + $s3 sub $s1, $s2, $s3 addi $s1, $s2, 100 lw $s1, 100($s2) sw $s1, 100($s2) lb $s1, 100($s2) sb $s1, 100($s2) lui $s1, 100 beq $s1, $s2, 25 $s1, $s2, 25 $s1, $s2, $s3 $s1 = $s2 - $s3
Comments
Three operands; data in registers Three operands; data in registers
Arithmetic
subtract
add immediate load w ord store w ord Data transfer load byte store byte load upper immediate branch on equal
$s1 = $s2 + 100 Used to add constants $s1 = Memory[$s2 + 100]Word from memory to register Memory[$s2 + 100] = $s1 Word from register to memory $s1 = Memory[$s2 + 100]Byte from memory to register Memory[$s2 + 100] = $s1 Byte from register to memory $s1 = 100 * 2
16
Loads constant in upper 16 bits Equal test; PC-relative branch Not equal test; PC-relative Compare less than; for beq, bne Compare less than constant
if ($s1 == $s2) go to PC + 4 + 100 if ($s1 != $s2) go to PC + 4 + 100 if ($s2 < $s3) $s1 = 1; else $s1 = 0 else $s1 = 0
Conditional branch
$s1, $s2, 100 if ($s2 < 100) $s1 = 1; 2500 $ra 2500
Unconditional jump
go to 10000 Jump to target address go to $ra For sw itch, procedure return $ra = PC + 4; go to 10000 For procedure call
Register
Byte
Halfword
Word
PC
Word
PC
Word
Arquiteturas Alternativas
Alternativas de Projeto: Prover operaes mais potentes A meta reduzir o nmero de instrues executadas
PowerPC
Indexed addressing exemplo: lw $t1,$a0+$s3 O que devemos fazer no MIPS?
#$t1=Memory[$a0+$s3]
Update addressing Atualizar um registrador como parte do load (para operar sobre elementos de vetores) exemplo: lwu $t0,4($s3) #$t0=Memory[$s3+4];$s3=$s3+4 O que devemos fazer no MIPS? Outros: load multiple/store multiple Um registrador contador especial bc Loop decrementar o contador, e se no for 0 vai para loop
Intel 80x86
A partir do 80386 , tambm chamado de IA-32 1978: Intel 8086 anunciado (arquitetura de 16 bits) 1980: 8087 adicionado o coprocessador de ponto flutuante 1982: 80286 aumenta o espao de endereamento para 24 bits, + instrues 1985: 80386 estende para 32 bits, novos modos de endereamento 1989-1995: 80486, Pentium, Pentium Pro e algumas novas instrues (a maioria para melhorar o desempenho) 1997: MMX adicionado