Introdução Assembly MIPS

download Introdução Assembly MIPS

of 22

Transcript of Introdução Assembly MIPS

Introduo ao MIPS

1

Figura 2 Nveis de organizao do software (adaptado de Patterson e Hennessy, 2000, pg. 88). 2

Noo Geral de Arquitetura de ComputadoresAs arquiteturas convencionais so compostas por: Unidade Central de Processamento: UCP Memria Dispositivos de entrada e sada de dados As interconexes entre estes elementos so feitas por meio de barramentos. Barramentos so linhas fsicas (fios, por exemplo) que fazem a conexo eltrica dos dispositivos. Em termos lgicos estes barramentos so de 3 tipos: Barramento de dados: conjunto de linhas fsicas onde trafega o dado transferido entre os elementos. Nos computadores atuais, normalmente o nmero de linhas do barramento de dados mltiplo de 8 (8/16/32/64/128...) Barramento de endereos: conjunto de linhas fsicas onde trafega o endereo de identificao da clula de memria ou de um dos dispositivos de entrada ou sada de dados. Em termos do nmero de linhas assemelha-se ao barramento de dados. Barramento de controle: conjunto de linhas fsicas onde trafegam os sinais que atuam sobre o hardware e indica o fluxo das informaes, os tipos de operao que devem ser efetuadas, a prioridade de eventos etc. Em termos do nmero de linhas no h um padro e bastante varivel de acordo com a complexidade da arquitetura.

Figura 3 - Detalhamento da arquitetura de barramentos.

No modelo do MIPS que ser estudado os barramentos de dados e de endereos so de 32 bits. No MIPS cada clula de memria de 8 bits, ou seja, a cada endereo de 32 bits corresponde 1 byte (232 X bytes). Nos acessos memria (leitura ou escrita) o melhor desempenho obtido quando 32 bits so lidos simultaneamente, ou seja, 4 bytes, ou seja 4 clulas de memria. Porm, o MIPS dispe de instrues para acessar 1 clula de memria (1 byte) apenas, 2 clulas (2 bytes) ou 4 clulas (4 bytes).

3

A Unidade Central de Processamento (UCP) A Figura 4 mostra a organizao interna da UCP. O Clock a referncia de tempo necessria a UCP. Trata-se de um circuito eletrnico oscilador que gera uma forma de onda quadrada, a qual essencial para o seqenciamento das operaes eletrnicas realizadas pela UCP. Ele est relacionado com a freqncia (ou taxa) de operao da UCP. A unidade central de processamento (UCP ou CPU) o "crebro" do computador. Sua funo executar programas armazenados na memria principal, buscando as instrues, examinando-as, e ento executando uma aps a outra. A UCP composta de vrias partes distintas, que so a unidade de controle, a unidade lgica e aritmtica e um conjunto de registradores. A Figura 5 ilustra uma UCP genrica. A unidade de controle UC - responsvel pela busca das instrues na memria principal, sua decodificao e execuo. a responsvel pelos sinais no barramento de controle externo e no barramento de controle interno UCP. Fornece todo seqenciamento de sinais eltricos necessrios operao dos circuitos eletrnicos. A unidade lgica e aritmtica ULA ou ALU encarregada das operaes lgicas e aritmticas, como por exemplo adies binrias e E booleano que a UCP realiza. A UCP contm uma memria interna de pequena capacidade de armazenamento mas de alta velocidade, usada para armazenar resultados temporrios e certas informaes de controle. Esta memria formada por um certo nmero de registradores, chamados de uso geral e outros de uso especfico. Os registradores de uso geral so acessveis ao usurio no nvel convencional de mquina j os demais so acessveis diretamente apenas pela unidade de controle (UC) durante a execuo de um programa.

4

O registrador de uso especfico mais importante o contador de programa PC (Program Counter), que aponta para a prxima instruo a ser executada. Isto , ele sempre contm o endereo de memria onde est a prxima instruo a ser executada. O nome "contador de programa" um tanto enganador, porque ele no tem nada a ver com a contagem de alguma coisa, mas o termo universalmente usado. Ele que determina o fluxo de execuo do programa. O registrador de instrues - RI ou IR - tambm importante. Ele contm a instruo, que est sendo executada. A maioria dos computadores tem outros registradores especficos, alguns deles disponveis aos programadores de nveis 2 e 3 para armazenamento de resultados intermedirios ou para uso exclusivo do sistema operacional. O acesso memria ou aos dispositivos de entrada/sada quase sempre muito mais demorado que o tempo necessrio para executar uma instruo com operandos em registradores. Conseqentemente, a UC deve manter os valores corretos no barramento de dados e endereos, por um tempo suficiente, at que o acesso informao tenha sido complemente efetuado. Assim, geralmente so necessrios dois registradores especficos para esta tarefa um chamado registrador endereo - RE e outro chamado registrador de dados RD. Ambos auxiliam a compatibilizao dos tempos da UCP com o tempo de acesso memria e aos dispositivos de E/S.clock UC = Unidade de controle

UCClock = referncia de tempo

ULA

ULA = Unidade lgica e aritmtica Registradores de uso geral: R0...Rk Registradores de uso especfico: PC = contador de programa RI = registrador de instruo RE = registrador de endereos RD = registrador de dados

R0 Rk ... PC RI RE RD

Figura 4 - Diagrama esquemtico da UCP genrica.

5

REGISTRADORES DO MIPS (R2000 e R3000) Nmero Nome Funo Guarda a constante zero. um registrador s de leitura. 0 $zero Reservado para uso do montador. 1 $at Retorno de parmetros do procedimento. 2 $v0 3 $v1 4 $a0 Envio de parmetros para o procedimento. 5 $a1 6 $a2 7 $a3 8 $t0 9 $t1 10 $t2 REGISTRADORES TEMPORRIOS: Guardam variveis 11 $t3 temporrias durante a programao. 12 $t4 13 $t5 14 $t6 15 $t7 16 $s0 17 $s1 REGISTRADORES DE SALVAMENTO: Guardam variveis mais 18 $s2 permanentes durante a programao. 19 $s3 20 $s4 21 $s5 22 $s6 23 $s7 REGISTRADORES TEMPORRIOS: Guardam variveis 24 $t8 temporrias durante a programao. 25 $t9 26 $k0 RESERVADOS PARA USO DO S.O. 27 $k1 28 $gp Global Pointer: define para o S.O. a rea de dados do usurio. Stack Pointer: define a rea da pilha, ponteiro da pilha. 29 $sp Frame Pointer: ponteiro auxiliar da pilha 30 $fp/$s8 Define o endereo de retorno de procedimento. 31 $ra

Observaes:

Proced.

S.O.

REGISTRADORES DE USO GERAL

Procedimentos

Os registradores so elementos de armazenamento interno da UCP. So os elementos de armazenamento mais velozes. Todos os registradores do MIPS so de 32 bits. A word no MIPS de 32 bits. Organizao da Memria: 232 X bytes ou 230 X words. As instrues lgicas e aritmticas operam sobre os dados presentes nos registradores. As instrues de acesso memria so s so para leitura ou escrita (load e store) de contedos (8/16/32 bits).

6

Introduo Linguagem de Montagem do MIPS:

lw (load word): l uma word na memriaFormato geral:

lw reg1, n(reg2) # reg1

M[n + reg2]32

Endereo do operando fonte na memria: M[n+reg2]32 Registrador destino Mnemnico da instruoExemplo: $t0 ABCDEF12H ; $s7 Memria Endereo Contedo (hexadec.)2007 2006 2005 2004 2003 2002 2001 2000 AD 9C 8B 7A F6 E5 D4 C3

30304050H, $s0

2000D; Operando alterado

a) lw $t0, 0($s0) b) lw $s7, 4($s0) c) lw $s7, 2($s0)

# $t0 # $t0 # $s7 # $s7 # $s7 # $s7

M[0+2000] C3D4E5F6H M[4+2000] 7A8B9CADH M[-2+2000] A1B2C3D4H

B2 1999 A1 1998 Observaes: reg1 e reg2 so quaisquer dos registradores de uso geral n valor inteiro sinalizado de 16 bits (-32 768D a +32 767D) No MIPS o acesso memria sempre feito de forma indireta com o endereo do operando dado por n+reg2

7

sw (store word): armazena uma word na memriaFormato geral:

sw reg1, n(reg2) # M[n + reg2]32

reg1

Endereo do operando destino na memria: M[n+reg2]32 (4 bytes) Registrador fonte Mnemnico da instruoExemplo: $t0

$s0

ABCDEF12H ; $s7 2000D; $t5 1500D

30304050H; $t6

906F7788H ;

Memria Endereo Contedo (hexadec.) 2007 AD 50 2006 9C 40 2005 8B 30 2004 7A 30 2003 F6 12 2002 E5 EF 2001 D4 CD 88 2000 C3 AB 77 1999 B2 6F 1998 A1 90

Operando alterado

a) sw $t0, 0($s0) b) sw $s7, 4($s0) c) sw $t6, 498($t5)

# M[0+2000] # M[4+2000] # M[498+1500]

$t0 $s7 $t6

8

lbu (load byte unigned): l um byte na memriaFormato geral:

lbu reg1, n(reg2)

# reg1

M[n + reg2]8

Endereo do operando fonte na memria: M[n+reg2]8 Registrador destino Mnemnico da instruoExemplos: $t0 ABCDEF12H ; $s7 30304050H, $t6 906F7788H $s0 2000D; $t5 1500D Memria Endereo Contedo 2007 2006 2005 2004 2003 2002 2001 2000 1999 1998 AD 9C 8B 7A F6 E5 D4 C3 B2 A1

Operando alterado

(hexadec.)

a) lbu $t0, 0($s0) b) lbu $s7, 5($s0)

# $t0 # $t0 # $s7 # $s7

M[0+2000]; 000000C3H M[5+2000]; 0000008BH M[506+1500] 0000009CH M[-2+2000] 000000A1H

c) lbu $t6, 506($t5) # $t6# $t6

d) lbu $s7, 2($s0) # $s7# $s7

como e o seu funcionamento, semelhante ao lbu. Porm, esta instruo difere desta ltima, pois considera o byte lido da memria como com sinal. Ao copi-lo no registrador destino os bits b31 a b8 do registrador destino so preenchidos com o valor de b7 (bit de sinal do byte na memria). Esta instruo ser comentada com detalhes mais adiante quando se analisar a aritmtica com e sem sinal.9

lb (load byte signed): l um byte sinalizado na memria. O formato geral desta instruo, bem

sb (store byte): armazena um byte na memriaFormato geral:

sb reg1, n(reg2)

# M[n + reg2]8

reg1

Endereo do operando destino na memria: M[n+reg2]8 Registrador fonte (byte menos significativo) Mnemnico da instruoExemplo: $t0 ABCDEF12H ; $s7 30304050H, 2000D; $t5 1500D $t6 906F7788H $s0

MemriaEndereo Contedo (hexadec.)

Operando alterado

2007 2006 2005 2004 2003 2002 2001 2000 1999 1998

AD 9C 88 8B 50 7A F6 E5 D4 C3 12 B2 A1 50

a) sb $t0, 0($s0) b) sb $s7, 5($s0)

# M[0+2000] # M[5+2000]

$t0 $s7 $t6 $s7

c) sb $t6, 506($t5) # M[506+1500] d) sb $s7, 2($s0) # M[-2+2000]

10

lhu (load half-word unigned): l uma meia palavra (half-word 16 bits) na memria.Formato geral:

lhu reg1, n(reg2)

# reg1

M[n + reg2]16

Endereo do operando fonte na memria: M[n+reg2]16 (duas posies) Registrador destino (dois bytes mais direita) Mnemnico da instruoExemplos: $t0 ABCDEF12H ; $s7 30304050H, $t6 906F7788H $s0 2000D; $t5 1500D Memria Endereo Contedo 2007 2006 2005 2004 2003 2002 2001 2000 1999 1998 AD 9C 8B 7A F6 E5 D4 C3 B2 A1

Operando alterado

(hexadec.)

a) lhu $t0, 0($s0) b) lhu $s7, 5($s0)

# $t0 # $t0 # $s7 # $s7

M[0+2000]; 0000C3D4H M[5+2000]; 00008B9CH M[506+1500] 00009CADH M[-2+2000] 0000A1B2H

c) lhu $t6, 506($t5) # $t6# $t6

d) lhu $s7, 2($s0) # $s7# $s7

instruo, bem como e o seu funcionamento, semelhante ao lhu. Esta instruo (lh) difere desta ltima (lhu), pois considera os 16 bits lidos na memria como com sinal. Ao copi-lo no registrador destino os bits b31 a b16 do registrador destino so preenchidos com o valor de b15 (bit de sinal da meia palavra (16 bits) lida na memria). Esta instruo ser comentada com detalhes mais adiante quando se analisar a aritmtica com e sem sinal.11

lh

(load half-word signed): l 16 bits (sinalizado) na memria. O formato geral desta

sh (store half-word): armazena um byte na memriaFormato geral:

sh reg1, n(reg2)

# M[n + reg2]16

reg1

Endereo do operando destino na memria: M[n+reg2]16 Registrador fonte (bits b15 a b0 apenas) Mnemnico da instruoExemplo: $t0 ABCDEF12H ; $s7 30304050H, 2000D; $t5 1500D $t6 906F7788H $s0

MemriaEndereo Contedo (hexadec.)

Operando alterado

2007 2006 2005 2004 2003 2002 2001 2000 1999 1998

AD 50 9C 40 8B 7A F6 88 E5 77 D4 12 C3 EF B2 50 A1 40

a) sh $t0, 0($s0) b) sh $s7, 6($s0)

# M[0+2000] # M[6+2000]

$t0 $s7 $t6 $s7

c) sh $t6, 502($t5) # M[502+1500] d) sh $s7, 2($s0) # M[-2+2000]

12

add (addition) : adiciona dois operandos. add reg1, reg2, reg3 # reg1 reg2 + reg3

Operando fonte Operando fonte Operando destino Mnemnico da instruo Obs.: No MIPS as instrues aritmticas s utilizam operandos em registradores Exemplo: $t0 ABCDEF12H ; $s7 1500D $s0 2000D; $t5 30304050H, $t7 906F7788H

a) add $t0, $t7, $s7 # $t0 b) add $s7, $s0, $t5 # $s7

30304050 + 906F7788 = C09FB7D8H

2000D + 1500D = 3500D

Exemplo: a) Duas words presentes na memria no endereo 100D e 104D devem ser somadas e o resultado colocado no endereo 108D. Considere que o registrador $s0 j foi inicializado com o valor 100D. Faa um programa na linguagem de montagem do MIPS que execute esta tarefa.

13

sub (subtraction) : subtrai dois operandosFormato geral:

sub reg1, reg2, reg3

# reg1

reg2 reg3

Operando fonte Operando fonte Operando destino Mnemnico da instruo Exemplo: $t0 ABCDEF12H ; $s7 $s0 2000D; $t5 1500D 30304050H, $t6 906F7788H ,

a) sub $t0, $s7, $t7 # $t0 b) sub $s7, $s0, $t5 # $s7

906F7788 30304050 = 603F3738H 2000D - 1500D = 500D

Exemplo: a) O byte presente no endereo 200D deve ser subtrado do byte presente no endereo 201D resultado colocado no endereo 199D. Considere que o registrador $t0 j foi inicializado com o valor 200D. Faa um programa na linguagem de montagem do MIPS que execute esta tarefa. b) Faa um programa na linguagem de montagem do MIPS que execute a seguinte operao: M[450]16 = M[452]16 + M[454]16- M[456]16. Onde M[450]16 significa o contedo da posio de memria 450 de 16 bits. Considere que o registrador $s7 foi inicializado com 400D.

14

addi (addition immediate): adiciona um operando emregistrador com um dado imediato de 16 bits sinalizado (que vm na prpria instruo)

addi reg1, reg2, n

# reg1

reg2 + n

Operando fonte: valor numrico inteiro sinalizado de 16 bits (-32 768 a +32 767) Operando fonte Operando destino Mnemnico da instruo Exemplo: $t0

$t5

1500D

ABCDEF12H ; $t6

906F7788H $s0

2000D;

a) addi $t7, $t5, 4500D # $t7 1500D + 4500D = 6000D b) addi $t0, $t0, 44H # $t0 ABCDEF12H + 0044H = ABCDEF56H Obs: A instruo addi pode ser utilizada para introduo de dados numricos no programa, para isto usada como no exemplo a seguir: addi $t0, $zero, 4ABCH # $t0 00004ABCHNeste caso o n deve ser menor ou igual a +32767D (7FFFH)Exemplo: Faa um programa para carregar o valor 7123 6AFBH no endereo de memria 00001000H. Esquematize como este contedo ficar presente na memria.

15

Instrues de desvio condicionalpermitem a tomada de deciso mudam o fluxo do programa se a condio testada for verdadeira a condio default (programado ao nvel de hardware) que as instrues so seqenciais

beq Branch if equal = desvia se igualFormato geral:

beq reg1, reg2, LABEL# se (if) reg1= reg2 ento v para (then go to) o endereo rotulado LABEL (um nome dado ao endereo de desvio pelo montador para evitar que o programador se preocupe com os valores numricos dos endereos)

bne Branch if not equal = desvia se no igualFormato geral:

bne reg1, reg2, LABEL(if) reg1 reg2 ento v para (then go to) o endereo rotulado LABEL# se

Instruo de desvio incondicional:

jump ( j ) go to em alto nvelFormato geral:

J LABEL# desvia para o endereo rotulado com LABEL16

Compilao de um comando if. Seja o seguinte cdigo escrito em C, sendo f, g, h, i e j variveis

if (i = = j) go to L1; f = g + h; L1: f = f i;

i=j? no f=g+h f=fi

sim

No MIPS; supondo $t0

f, $t1

g, $t2# f=g+h # f=f i

h, $t3

i, $t4

j ento:

beq $t3, $t4, L1 add $t0, $t1, $t2 L1: sub $t0, $t0, $t3

# se i = j ? v para L1

Compilao de um comando if-then-else. Seja o seguinte cdigo escrito em C, sendo f, g, h, i e j variveis

if (i = = j) f = g + h; else f = g h;simf=g+h

i=j

no f=g-h

No MIPS; supondo $t0

f, $t1

g, $t2

h, $t3

i, $t4

j ento:

ELSE: EXIT:

bne $t3, $t4, ELSE add $t0, $t1, $t2 j EXIT sub $t0, $t1, $t2

# se i j v para ELSE # f = f+g # f = gh

17

Estruturas de repetioComando FORExemplo: Faa um programa que calcule o somatrio dos valores inteiros de 1 a 10. Algoritmo proposto: SOMA b v para L2 Slt $t4, $t2, $t3 Beq $t4, $t0, L2 ______ ______ Ou Slt $t4, $t2, $t3 Bne $t4, $t1, L2 ______ ______ Slt $t4, $t3, $t2 Beq $t4, $t0, L3 ______ ______

Considere: $t0