Você está na página 1de 17

Instrues de um Processador

Uma Instruo especifica uma operao a ser realizada por um processador e o conjunto de operandos ou dados a serem utilizados nessa operao:
OP X1, X2, X3, , Xn
OPCODE Endereos

Endereos podem ser: Explcitos Referenciam registos de uso geral do CPU ou posies de memria;

Implcitos Referenciam registos especficos do CPU

RMV FEUP - 2003/2004

Arquitectura de Computadores - Instrues

Instrues de um Processador (2)


No computador as instrues so armazenadas como palavras binrias. Podero existir diversos tamanhos e formatos, dependendo do tipo de instruo. Processadores RISC Poucos formatos; Processadores CISC Muitos formatos para acomodarem maior nmero de tipos de Opcode e de mtodos de endereamento de operandos.

RMV FEUP - 2003/2004

Arquitectura de Computadores - Instrues

Modos de Endereamento
Numa instruo, a funo do campo de endereo apontar para o valor actual de algum operando X utilizado por essa instruo. Esse valor pode ser especificado de vrios modos, que so designados Modos de Endereamento. Os modos de endereamento afectam os seguintes aspectos:

- A velocidade com que o CPU pode aceder ao valor do operando;


- A facilidade com que o operando pode ser especificado e alterado. Velocidade de acesso influenciada pela localizao fsica do operando (normalmente no CPU ou na memria externa). Operandos localizados em registos do CPU podem ser mais rapidamente acedidos do que operandos localizados na memria externa. A acessibilidade de um operando tambm influenciada pelo modo de endereamento.
RMV FEUP - 2003/2004

Arquitectura de Computadores - Instrues

Modos de Endereamento
Exemplos de modos de endereamento:

(2)

- Directo fornecido o endereo absoluto da posio de memria onde est o operando Ex: LDA X A (X) Carregar o Acumulador A com o contedo da posio X - Imediato - O prprio operando est a seguir ao OPCODE Ex: LDimA X A X Carregar o Acumulador A com o valor X

- Indexado -O endereo do operando est indexado ao contedo de um registo, dito de indexao (bom para aceder, por exemplo, aos elementos de um array)
Ex: LDixA X A (X+(I)) Carregar o Acumulador A com o contedo da posio X+(I) (I contedo do registo de indexao)
RMV FEUP - 2003/2004

Arquitectura de Computadores - Instrues

Modos de Endereamento
Exemplos de modos de endereamento:

(3)

- Indirecto fornecido o endereo da posio de memria onde est o endereo do operando


Ex: LDiA X A ((X)) Carregar o Acumulador A com o contedo da posio apontada por X - Relativo - O endereo do operando fornecido na instruo um endereo relativo (com referncia ao contedo de um Registo Base) Ex: LDrA X A ((R)+X) Carregar o Acumulador A com o contedo da posio (R)+X (R Registo Base)

RMV FEUP - 2003/2004

Arquitectura de Computadores - Instrues

Clculo de expresses aritmticas


Exemplo: Clculo da expresso Y = (A-B) (C+D*E) 1. Mquina de 3 endereos SUB Y, A, B MPY T, D, E ADD T, T, C DIVIDE Y, Y, T Y A - B T D * E T T + C Y Y T

RMV FEUP - 2003/2004

Arquitectura de Computadores - Instrues

Clculo de expresses aritmticas


2. Mquina de 2 endereos MOVE Y, A SUB Y, B MOVE T, D MPY T, E ADD T, C DIVIDE Y, T Y A Y Y - B T D T T * E T T + C Y Y T

(2)

RMV FEUP - 2003/2004

Arquitectura de Computadores - Instrues

Clculo de expresses aritmticas


3. Mquina de 1 endereo LOAD D MPY E ADD C STORE Y LOAD A SUB B DIVIDE Y STORE Y AC AC AC Y AC AC AC Y D AC * E AC + C AC A AC - B AC Y AC

(3)

RMV FEUP - 2003/2004

Arquitectura de Computadores - Instrues

Clculo de expresses aritmticas


4. Mquina de 0 endereos (ou mquina de " stack")
PUSH PUSH SUB PUSH PUSH PUSH MPY ADD DIVIDE POPY A B C D E

(4)

Em notao "reverse polish":


RMV FEUP - 2003/2004

AB-CDE*+
9

Arquitectura de Computadores - Instrues

Conjunto de Instrues de um Processador


Requisitos: - Deve ser completo (deveremos ser capazes de construir um programa que calcule qualquer funo computvel (passvel de ser calculada num nmero finito de passos) utilizando uma capacidade razovel de memria) - Deve ser eficiente (funes frequentemente necessrias devem ser executadas utilizando um nmero reduzido de instrues) - Deve ser regular (o conjunto de instrues deve conter opcodes e modos de endereamento esperados; por exemplo, se h um shift-left, tambm dever haver um shift-right) - Para reduzir os custos do projecto (Hw ou Sw), pode ser necessrio garantir compatibilidade de instrues com mquinas existentes

RMV FEUP - 2003/2004

Arquitectura de Computadores - Instrues

10

Tipos de Instrues
Cinco tipos:

- Intrues de Transferncia de Dados: Copiam informao de uma posio para outra, ou nos registos ou na memria
- Instrues Aritmticas: Executam operaes sobre dados numricos - Instrues Lgicas: Incluem operaes booleanas e outras no numricas

- Instrues de Controlo de Programa: Tais como instrues de salto, que alteram a sequncia pela qual os programas so executados
- Instrues de Entrada/Sada: Instrues que causam a transferncia de informao entre o processador ou a memria e os dispositivos de Entrada/ Sada externos

RMV FEUP - 2003/2004

Arquitectura de Computadores - Instrues

11

O Processador MIPS RX000


Processador RISC de 32 bits (Memria: 230 palavras de 32 bits); 32 registos ($0, , $31), dos quais $0 = 0, $1 reservado para o assemblador; 32 registos para dados em vrgula flutuante; Todas as operaes de processamento de dados usam registos para operandos e para o resultado (instrues de 3 endereos); Apenas as operaes Load/ Store acedem a memria; Conjunto de instrues ortogonal e de igual comprimento. os

RMV FEUP - 2003/2004

Arquitectura de Computadores - Instrues

12

Formatos das instrues do MIPS


31 25

Opcode

Branch Address ADR


(32 bits = 4 MS do PC + 26 ADR + 00)

31

25

20

15

Opcode

Rs

Rt

Immediate operand
(Extendido, em sinal, para 32 bits )

Register Addresses (2)

31

25

20

15

10

Opcode

Rs

Rt
Register Addresses (3)

Rd

Shift Amount

Function

RMV FEUP - 2003/2004

Arquitectura de Computadores - Instrues

13

Instrues bsicas do MIPS


Categoria Instruo Soma Subtraco Transferncia de Dados Ler palavra Escrever palavra Igualdade Salto Condicional Desigualdade Comparao Salto Incondicional Salto Salto Exemplo add $1, $2, $3 sub $1, $2, $3 lw $1, 100 ($2) sw $1, 100 ($2) beq $1, $2, L bne $1, $2, L slt $1, $2, $3 j 10000 jr $31 Significado $1=$2+$3 $1=$2-$3 $1=mem[$2+100] mem[$2+100]=$1 if ($1=$2) goto L if ($1!=$2) goto L if ($2<$3) $1=1; else $1=0 goto 10000 goto $31

Aritmtica

RMV FEUP - 2003/2004

Arquitectura de Computadores - Instrues

14

Exemplos de Cdigo MIPS


Suponhamos: f $16, g $17, h $18, i $19, j $20. Como implementar: f =(g+h) (i+j)? add $8, $17, $18 # o registo $8 contm g+h add $9, $19, $20 # o registo $9 contm i+j sub $16, $8, $9 # o resultado final vai para f E o programa seguinte? if (i = j) goto L1; beq $19, $20, L1 f = g + h; add $16, $17, $18 L1: f = f i; L1: sub $16, $16, $19
RMV FEUP - 2003/2004

# goto L1 se i = j #f=g+h # sempre


15

Arquitectura de Computadores - Instrues

Especificao de instrues no MIPS


O que necessrio especificar numa instruo? Depende do tipo de instrues: op rs, rt rd shamt funct Cdigo de operao Registos com dados Registo de destino Deslocamento Variante da operao

Aritmticas

Memria, Comparao No tm rd, shamt ou funct; tm um endereo de 16 bits


Salto S tm op e um endereo de 26 bits.

RMV FEUP - 2003/2004

Arquitectura de Computadores - Instrues

16

Codificao de instrues no MIPS


Nome add sub lw sw beq bne slt j jr Tamanho Formato R Formato I Formato J Formato R R I I I I R J R R I J 0 0 35 43 4 5 0 2 0 6 op op op 2 2 2 2 1 1 2 31 5 rs rs 3 3 1 1 2 2 3 0 5 rt rt Exemplo 1 1 0 0 100 100 100 100 0 32 34 Comentrio add $1, $2, $3 sub $1, $2, $3 lw $1, 100($2) sw $1, 100($2) beq $1, $2, 100 bne $1, $2, 100 slt $1, $2, $3 j 10000 jr $31 Total: 32 bits Instrues aritmticas Transferncia de dados Saltos

1 10000 0 0 5 5 rd shamt address address

42 8 6 funct

RMV FEUP - 2003/2004

Arquitectura de Computadores - Instrues

17

Operandos no MIPS

MIPS operands Name 32 registers Example Comments $s0-$s7, $t0-$t9, $zero, Fast locations for data. In MIPS, data must be in registers to perform $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.

30

memory Memory[4], ...,


Memory[4294967292]

words

RMV FEUP - 2003/2004

Arquitectura de Computadores - Instrues

18

Linguagem Assembly do MIPS


Category
add

Instruction

MIPS assembly language Example Meaning add $s1, $s2, $s3 $s1 = $s2 + $s3 sub $s1, $s2, $s3 $s1 = $s2 - $s3 $s1 = $s2 + 100 $s1 = Memory[$s2 + 100] Memory[$s2 + 100] = $s1 $s1 = Memory[$s2 + 100] Memory[$s2 + 100] = $s1 $s1 = 100 * 2
16

Comments
Three operands; data in registers

Arithmetic

subtract

Three operands; data in registers

Data transfer

addi $s1, $s2, 100 lw $s1, 100($s2) sw $s1, 100($s2) store word lb $s1, 100($s2) load byte sb $s1, 100($s2) store byte load upper immediate lui $s1, 100
add immediate load word branch on equal

Used to add constants Word from memory to register Word from register to memory Byte from memory to register Byte from register to memory Loads constant in upper 16 bits

beq bne slt slti j jr jal

$s1, $s2, 25 $s1, $s2, 25 $s1, $s2, $s3

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

Equal test; PC-relative branch

branch on not equal

Not equal test; PC-relative

Conditional branch

set on less than

Compare less than; for beq, bne

set less than immediate jump

$s1, $s2, 100 if ($s2 < 100) $s1 = 1; 2500 $ra 2500

Compare less than constant

Unconditional jump

jump register jump and link

Jump to target address go to 10000 For switch, procedure return go to $ra $ra = PC + 4; go to 10000 For procedure call

RMV FEUP - 2003/2004

Arquitectura de Computadores - Instrues

19

Convenes no uso de registos do MIPS


Name Register number $zero 0 $v0-$v1 2-3 $a0-$a3 4-7 $t0-$t7 8-15 $s0-$s7 16-23 $t8-$t9 24-25 $gp 28 $sp 29 $fp 30 $ra 31 Usage the constant value 0 values for results and expression evaluation arguments temporaries saved more temporaries global pointer stack pointer frame pointer return address

Register 1 ($at) reserved for assembler, 26-27 for operating system

RMV FEUP - 2003/2004

Arquitectura de Computadores - Instrues

20

10

Exemplos de Cdigo Assembly MIPS (1)


1. f = (g+h) (i+j)
f $t0, g $t1, h $t2, i $t3, j t4

add $t5, $t1, $t2 add $t6, $t3, $t4 sub $t0, $t5, $t6

# o registo $t5 contm g+h # o registo $t6 contm i+j # o registo $t5 contm (g+h) (i+j)

RMV FEUP - 2003/2004

Arquitectura de Computadores - Instrues

21

Exemplos de Cdigo Assembly MIPS (2)


2. g = h + A [ i ] g $t0, h $t1, A $t2, i $t3 sll $t4, $t3, 2 add $t5, $t2, $t4 lw $t6, 0 ($t5) add $t0, $t1, $t6

RMV FEUP - 2003/2004

Arquitectura de Computadores - Instrues

22

11

Exemplos de Cdigo Assembly MIPS (3)


3. A [ i ] = h + A [ i ] h $t1, A $t2, i $t3 sll $t4, $t3, 2 add $t5, $t2, $t4 lw $t6, 0 ($t5) add $t6, $t1, $t6 sw $t6, 0 ($t5)
RMV FEUP - 2003/2004

Arquitectura de Computadores - Instrues

23

Exemplos de Cdigo Assembly MIPS (4)


4. If (i = = j) f = g + h; else f = g h; f $t0, g $t1, h $t2, i $t3, j $t4 bne $t3, $t4, L1 add $t0, $t1, $t2 j C1 L1: sub $t0, $t1, $t2 C1: ......
RMV FEUP - 2003/2004

Arquitectura de Computadores - Instrues

24

12

Exemplos de Cdigo Assembly MIPS (5)


5. Loop: g = h + A [ i ] i = i + j; if (i ! = h) goto Loop; A $t0, g $t1, h $t2, i $t3, j $t4 Loop: sll $t5, $t3, 2 add $t5, $t0, $t5 lw $t6, 0 ($t5) add $t1, $t2, $t6 add $t3, $t3, $t4 bne $t3, $t2, Loop

RMV FEUP - 2003/2004

Arquitectura de Computadores - Instrues

25

Exemplos de Cdigo Assembly MIPS (6)


6. while (vect [ i ] = = k) i = i + j;

i $t0, j $t1, k $t2, vect $t3


Loop: sll $t4, $t0, 2 add $t5, $t3, $t4 lw $t6, 0 ($t5) bne $t6, $t2, Saida add $t0, $t0, $t1 j Loop ...

Saida:

RMV FEUP - 2003/2004

Arquitectura de Computadores - Instrues

26

13

Exemplos de Cdigo Assembly MIPS (7)


7. O programa seguinte tenta copiar palavras da regio indicada por $4 para a regio indicada por $5, mantendo uma contagem das palavras no registo $2. O programa pra de copiar quando encontra o valor 0. No necessrio preservar os registos $3, $4 e $5. A ltima palavra deve ser copiada mas no contabilizada. loop: lw $3, 0 ($4) addi $2, $2, 1 sw $3, 0 ($5) addi $4, $4, 1 addi $5, $5, 1 bne $3, 0, loop O programa tem vrios erros. Pretende-se obter uma verso corrigida.

RMV FEUP - 2003/2004

Arquitectura de Computadores - Instrues

27

Exemplos de Cdigo Assembly MIPS (8)


Soluo: addi $2, $0, -1 loop: lw $3, 0 ($4) addi $2, $2, 1 sw $3, 0 ($5) addi $4, $4, 4 addi $5, $5, 4 bne $3, $0, loop

RMV FEUP - 2003/2004

Arquitectura de Computadores - Instrues

28

14

Invocao de Procedimentos

(1)

Durante a execuo de um programa que invoca um dado procedimento (funo), o programa dever seguir os seguintes passos: - Colocar parmetros em locais que possam ser acedidos pelo procedimento; - Transferir controlo para o procedimento; - Obter os recursos de memria necessrios para o procedimento; - Executar a correspondente tarefa; - Colocar o resultado num local que possa ser acedido pelo programa invocante; - Retornar o controlo ao ponto de origem, uma vez que um procedimento pode ser invocado de vrios pontos de um programa.

RMV FEUP - 2003/2004

Arquitectura de Computadores - Instrues

29

Invocao de Procedimentos

(2)

No MIPS utilizada a seguinte conveno na alocao de registos nas invocaes de procedimentos: - $a0-$a3: quatro registos de argumentos para passagem de parmetros - $vo-$v1: dois registos para retorno de valores - $ra: Um registo de endereo de retorno para o retorno ao ponto de origem Para alm da alocao destes registos, o MIPS possui uma instruo apropriada para procedimentos: Salta para um endereo e simultaneamente guarda o endereo da prxima instruo no registo $ra. Esta instruo a instruo jal ProcAdr (jump-and-link)
RMV FEUP - 2003/2004

Arquitectura de Computadores - Instrues

30

15

Invocao de Procedimentos

(3)

A instruo jal ProcAdr guarda o endereo da palavra seguinte ((PC)+4, endereo de retorno) no registo $ra e de seguida transfere controlo do programa para a posio ProcAdr. Para possibilitar o retorno ao ponto de origem o MIPS disponibiliza a instruo jr $ra que transfere o controlo do programa para o endereo armazenado no registo $ra. A invocao de um procedimento segue, portanto, os seguintes passos: O programa invocante (calling program) coloca os valores dos parmetros nos registos $a0-$a3 e usa jal X para saltar para o procedimento X (callee) (programa invocado). O invocado efectua as respectivas operaes, coloca os resultados em $v0-$v1, e retorna o controlo ao programa invocante utilizando jr $ra.

RMV FEUP - 2003/2004

Arquitectura de Computadores - Instrues

31

Invocao de Procedimentos

(4)

Frequentemente acontece que para o manuseamento de procedimentos so necessrios mais registos do que os que so disponibilizados nos processadores. Nesses casos h necessidade de recorrer a outras estruturas de dados, como o caso das Stacks (Pilhas, filas LIFO (Last In First Out)). H duas operaes associadas a uma stack: Push (colocao de um elemento na stack); Pop (retirada de um elemento da stack). Uma stack possui um apontador, o stack pointer, que aponta para a palavra mais recentemente colocada. O MIPS disponibiliza um registo especfico para a stack: $sp. No MIPS a stack cresce por ordem descrescente de endereos.

RMV FEUP - 2003/2004

Arquitectura de Computadores - Instrues

32

16

Invocao de Procedimentos
Imaginemos que pretendamos implementar a seguinte funo F: f = (g+h) (i+j)

(5)

F:

addi $sp, $sp, - 12 sw $t1, 8 (sp) sw $t0, 4 (sp) sw $s0, 0 (sp) add $t0, $a0, $a1 add $t1, $a2, $a3 sub $s0, $t0, $t1 add $v0, $s0, $zero lw $s0, 0 (sp) lw $t0, 4 (sp) lw $t1, 8 (sp) addi $sp, $sp, 12 jr $ra
g $a0, h $a1, i $a2, j $a3, f $s0

RMV FEUP - 2003/2004

Arquitectura de Computadores - Instrues

33

17

Você também pode gostar