Академический Документы
Профессиональный Документы
Культура Документы
Novembro de 2011
Assuntos
Tpicos
Programao em Assembly
Conjuntos de instrues
Novembro de 2011
2 / 35
Programao em Assembly
Conjuntos de instrues
Novembro de 2011
3 / 35
Dois princpios
Os computadores atuais seguem dois princpios-chave:
1 2
Instrues so representadas como nmeros; Programas (sequncias de instrues) so guardados em memria, tal como dados.
Programas podem ser fornecidos como cheiros (de dados binrios): os dados so as instrues do programa. Esses programas podem ser executados em computadores que aceitem o mesmo conjunto de instrues: compatibilidade binria. Um programa (A) tambm pode ser executado por outro programa (V), que interpreta as instrues de A: V um simulador ou uma mquina virtual. Questo: Como codicar as instrues? critrios (tipos de instrues, tipos de dados, modelo de execuo) formatos
Conjuntos de instrues
Novembro de 2011
4 / 35
Converso de cdigo assembly para cdigo-mquina tambm feita por um programa: assembler Cada microprocessador tem o seu cdigo-mquina, denido pela especicao do processador.
Joo Canas Ferreira (FEUP/DEEC) Conjuntos de instrues Novembro de 2011 5 / 35
Modelo de programao
O modelo de programao de um microprocessador denido por:
1 2
registos
1 2
Modelo de execuo:
1 2 3 4
inicializar PC (program counter) obter instruo da posio PC da memria executar instruo e atualizar PC repetir a partir de 2
PC um registo dedicado.
Joo Canas Ferreira (FEUP/DEEC) Conjuntos de instrues Novembro de 2011 6 / 35
Classes de instrues
As classes de instrues mais comuns so:
1
Transferncias de dados
leitura e escrita de dados em memria
Modos de endereamento
Modos de endereamento = modos de especicao dos operandos Os mais comuns so:
1 2
imediato: o valor (constante) est includo na instruo. registo: o valor est num registo; a instruo inclui a especicao do registo. direto: a instruo inclui o endereo da posio de memria. indireto (via registo): o registo contm o endereo da posio de memria onde est o valor; a instruo especica o registo. indireto com deslocamento constante: instruo especica registo e um valor constante: a posio de memria obtida por soma do valor constante com o contedo do registo.
( uma generalizao da categoria anterior.)
3 4
Vantagens Codicao simples, comprimento nico. Gerao de cdigo simplicada. Durao similar. Acesso a dados sem load em separado. Tendem a ter boa densidade de codicao. Programas compactos. No ocupa registos com resultados temporrios.
Operandos no so equivalentes. Durao varia com a localizao dos operandos. Pode restringir o nmero de registos codicveis. Comprimento de instrues muito varivel. Complexidade de instrues muito varivel. Acesso a memria crtico.
As duas principais caratersticas que dividem arquiteturas com registos de uso genrico so:
1 2
Tipos de operandos
Tipos comuns de operandos:
1
A interpretao dos dados e o seu tamanho so denidos pela instruo usada para os processar. O programador e/ou o compilador so responsveis pela utilizao coerente das instrues. Endereo de memria do item especica a posio do primeiro byte.
acesso posio N N+4 N+3 N+2 N+1 N
palavra: s endereos mltiplos de 4 meia palavra: s endereos mltiplos de 2 byte: qualquer endereo
Conjuntos de instrues Novembro de 2011 10 / 35
Programao em Assembly
Conjuntos de instrues
Novembro de 2011
11 / 35
$s1 = Mem[$s2 + 20] Mem[$s2 + 20] = $s1 $s1 = Mem[$s2 + 20] $s1 = Mem[$2 + 20] Mem[$s2 + 20] = $s1 $s1 = 20 216
Conjuntos de instrues
Novembro de 2011
13 / 35
op: Cdigo bsico da operao (opcode). rs: O primeiro operando (nmero do registo). rt: O segundo operando (nmero do registo). rd: O destino do resultado (nmero do registo). shamt: 0, excepto para instrues de deslocamento (shift amount). funct: Cdigo da funo, que especica a variante da operao. add: op=0, funct=2016 sub: op=0, funct=2216 and: op=0, funct=2416 or: op=0, funct=2516 slt: op=0, funct=2A16
Conjuntos de instrues
Novembro de 2011
15 / 35
Conjuntos de instrues
Novembro de 2011
16 / 35
op: Cdigo da operao (opcode). rs: Um registo (nmero do registo). rt: Outro registo (nmero do registo). constante: Valor imediato. Para instrues que usam valores com sinal (como addi) ou para endereos (lw e sw) o valor imediato em complemento para 2. addi: op=8 ori: op=D16 slti: op=A16 lw: op=2316 sw: op=2B16 lui: op=0F16
Conjuntos de instrues
Novembro de 2011
17 / 35
35 100011 op
9 01001 rs
8 01000 rt
Instruo lh faz expanso de sinal da meia-palavra lida de memria (para preencher o registo de destino, que de 32 bits). Instruo lhu acrescenta 16 zeros esquerda da meia-palavra lida.
Joo Canas Ferreira (FEUP/DEEC) Conjuntos de instrues Novembro de 2011 18 / 35
43 101011 op
9 01001 rs
8 01000 rt
Instrues de deslocamento
Instrues de deslocamento movem os bits de um registo para a direita ou para a esquerda. As posies livres so preenchidas com 0. Estas instrues usam o formato R, geralmente com shamt = 0. Exemplo: sll $t2,$s0,4 Estas instrues usam o formato R. Nmero dos registos: $t2: 10,$s0:16 0 op 0 rs 16 rt 10 rd 4 shamt 0 funct
Se $s0 = 0000 0000 0000 0000 0000 0000 0000 1001, ento $t2 = 0000 0000 0000 0000 0000 0000 1001 0000 Deslocamento de N posies para a esquerda multiplica um nmero positivo por 2N . (Porqu?)
Joo Canas Ferreira (FEUP/DEEC) Conjuntos de instrues Novembro de 2011 20 / 35
Saltos condicionais
Instrues de comparao (ex. slt) usam o formato R. Instrues de salto usam o formato I. O salto relativo: deslocamento em relao instruo seguinte. O deslocamento multiplicado por 4 (para contar instrues, que tm 4 bytes). O deslocamento pode ser positivo ou negativo. Exemplo: etiqueta: add ... slt $t0,$t1,$t2 beq $t0,$zero, etiqueta
26 25 21 20 16 15 0
31
4 000100 op
Joo Canas Ferreira (FEUP/DEEC)
0 01000 rs
8 00000 rt
Conjuntos de instrues
2 1 0
PC[31:28]
endereo parcial 26
00 2
Conjuntos de instrues
Novembro de 2011
22 / 35
2. Register addressing op rs rt rd . . . funct Registers Register 3. Base addressing op rs rt Address Memory + Byte Halfword Word
Register
PC
PC
Fonte: [COD4]
FIGURE 2.18 Illustration of the ve MIPS addressing modes. The operands are shaded in color. The operand of mode 3 is in memory, whereas the operand for mode 2 is a register. Note that versions of load and store access bytes, halfwords, or words. For mode 1, the operand is 16 bits of the instruction itself. Modes 4 and 5 address instructions in memory, with mode 4 adding a 16-bit address shifted left 2 bits to the PC and mode 5 concatenating a 26-bit address shifted left 2 bits with the 4 upper bits of the PC. Copyright 2009 Elsevier, Inc. All rights reserved.
Novembro de 2011
23 / 35
Programao em Assembly
Conjuntos de instrues
Novembro de 2011
24 / 35
Programao em Assembly
Preparar programa com editor de texto (1 ou mais cheiros) Invocar assembler para converter cheiros para cdigo mquina Ligar programa s subrotinas do sistema (linker) Executar (talvez usando um emulador) O programa deve ser carregado previamente para memria (loader) Depurar (voltar a 1)
organizao de memria (sistema operativo e aplicao) onde ca colocado o cdigo e as zonas de dados subrotinas disponveis (sistema ou bibliotecas de funes) como invocar servios do sistema operativo (se existir) e/ou como aceder a perifricos
Assemblador
Funo principal: cdigo assembly cdigo-mquina. Facilitar a programao:
1
2 3 4 5
nomes para posies de memria: etiquetas reserva de zonas de memria para dados (alocao de memria) especicao de valores iniciais para zonas de memria sntese de instrues teis (pseudo-instrues) ou de sinnimos
MIPS-32 no tem instruo para copiar um valor de um registo para outro, mas o assembler suporta a instruo move RD, RS que copia o contedo do registo RD para o registo RS.
6 7
ajuste de saltos, dependendo da distncia ao destino denir procedimentos para gerao de grupos de instrues (macros)
O prprio assembler programvel!
Programao em Assembly
Pseudo-instrues
Pseudo-instrues so convertidas pelo assembler em uma ou mais instrues nativas. Pseudo-instrues servem para colmatar uma desvantagem da simplicidade do conjunto de instrues. Exemplo: convertida em:
Pseudo-instruo branch on less than blt $t0, $t1, L convertida em: slt $at,$t0,$t1 bne $at,$zero,L Por conveno, o registo $at est reservado para o assembler.
Joo Canas Ferreira (FEUP/DEEC) Conjuntos de instrues Programao em Assembly Novembro de 2011 27 / 35
Constantes de 32 bits
Porqu usar apenas valores imediatos de 16 bits?
1
A maior parte das constantes que surge num programa tem um valor pequeno. A maior parte dos destinos dos saltos tambm est a curta distncia. Uma instruo de 32 bits no tem espao para mais (se necessitar de especicar vrios registos).
2 3
Instrues com valores imediatos de 16-bits so um bom compromisso. Soluo para dados: transformada em: move $s0,0xABCDEF98 lui $s0,0xABCD ori $s0,$s0,0xEF98
16 15 0
31
lui: ori:
Conjuntos de instrues
Novembro de 2011
28 / 35
Programao em Assembly
L2:
Para distncias ainda maiores, o assembler carrega o endereo de destino para um registo e usa a instruo jr.
Novembro de 2011
29 / 35
Cdigo para calcular a expresso f = (g + h - 100) - (i + 320) Atribuio de variveis a registos: f, . . . i $s0, . . . , $s3 add addi addi sub $t0, $t1, $t0, $s0, $s1, $s3, $t0, $t0, $s2 320 -100 $t1
Conjuntos de instrues
Novembro de 2011
30 / 35
Programao em Assembly
Vetor A[] com N elementos: V[0], , . . . , V[N-1]. Todos os elementos tm o mesmo tamanho S (em bytes). Um vetor de N elementos, cada um de S bytes, ocupa N S bytes. Cada elemento de um vetor pode ser especicado pelo par de nmeros (b, d):
1 2
100
102 V[0]
104
106
108
b = 102 endereo de V[1]: b + 1 2 = 104
Novembro de 2011
V[1] V[2]
31 / 35
Porque que o deslocamento 32? Cdigo correspondente a: A[12] = h + A[8] Atribuio de variveis a registos: h $s2, base de A $s3 lw $t0, 32($s3) add $t0, $s2,$t0 sw $t0, 48($s3)
Conjuntos de instrues
Novembro de 2011
32 / 35
Programao em Assembly
Instrues condicionais
Cdigo correspondente a: se (i = j) f = g + h Atribuio de variveis a registos: f, g, . . . j $s0, $s1, . . . , $s4 Cont: Cdigo correspondente a: se (i = j) f = g + h seno f = g - h Atribuio de variveis a registos: f, g, . . . j $s0, $s1, . . . , $s4 bne add j sub ... $s3, $s4, Alt $s0, $s1,$s2 Cont $s0, $s1, $s2 bne add ... $s3, $s4, Cont $s0, $s1,$s2
Alt: Cont:
Joo Canas Ferreira (FEUP/DEEC)
Novembro de 2011
33 / 35
Ciclos
Cdigo correspondente a: enquanto (V[i] = k) i = i + 1 Atribuio de variveis a registos: i $s3, k $s5, base de V[] $s6 Ciclo: sll add lw bne addi j Cont: ... $t1, $s3, 2 $t1, $t1,$s6 $t0, 0($t1) $t0, $s5, Cont $s3, $s3, 1 Ciclo
Novembro de 2011
34 / 35
Referncias
Referncias
COD4 D. A. Patterson & J. L. Hennessey, Computer Organization and Design, 4 ed. MARS K. Vollmar, MARS (MIPS Assembler and Runtime Simulator), http://courses.missouristate.edu/KenVollmar/MARS/ Os tpicos tratados nesta apresentao so abordados nas seguintes seces de [COD4]: 2.12.3, 2.52.7, 2.10
Conjuntos de instrues
Novembro de 2011
35 / 35