Escolar Documentos
Profissional Documentos
Cultura Documentos
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;
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:
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
Modos de Endereamento
Exemplos de modos de endereamento:
(3)
(2)
(3)
(4)
AB-CDE*+
9
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
11
12
Opcode
31
25
20
15
Opcode
Rs
Rt
Immediate operand
(Extendido, em sinal, para 32 bits )
31
25
20
15
10
Opcode
Rs
Rt
Register Addresses (3)
Rd
Shift Amount
Function
13
Aritmtica
14
Aritmticas
16
42 8 6 funct
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
words
18
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
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
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
Jump to target address go to 10000 For switch, procedure return go to $ra $ra = PC + 4; go to 10000 For procedure call
19
20
10
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)
21
22
11
23
24
12
25
Saida:
26
13
27
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.
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
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.
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.
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
33
17