arquitetura de computadores - fcupricroc/aulas/1718/ac/praticas/mips.pdf · mips –codificação...

61
Arquitetura de Computadores MIPS

Upload: trinhnhi

Post on 18-Jan-2019

220 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Arquitetura de Computadores - FCUPricroc/aulas/1718/ac/praticas/mips.pdf · MIPS –Codificação de instruções •opcodepermite diferenciar as instruções •Ver anexo A do livro

ArquiteturadeComputadores

MIPS

Page 2: Arquitetura de Computadores - FCUPricroc/aulas/1718/ac/praticas/mips.pdf · MIPS –Codificação de instruções •opcodepermite diferenciar as instruções •Ver anexo A do livro

Arquiteturadevon Neumann

CPU Memory Input/Output

SystemBUS

Control bus

Address bus

Databus

Page 3: Arquitetura de Computadores - FCUPricroc/aulas/1718/ac/praticas/mips.pdf · MIPS –Codificação de instruções •opcodepermite diferenciar as instruções •Ver anexo A do livro

Arquiteturadevon Neumann

CPU Memory Input/Output

SystemBUS

Control bus

Address bus

Databus

Working copydoprograma

Executaasinstruçõesdoprograma

Page 4: Arquitetura de Computadores - FCUPricroc/aulas/1718/ac/praticas/mips.pdf · MIPS –Codificação de instruções •opcodepermite diferenciar as instruções •Ver anexo A do livro

Arquiteturadevon Neumann

CPU Memory Input/Output

SystemBUS

Control bus

Address bus

Databus

Modificadadosdoprograma;lê/escreverinput/output

Working copydoprograma

Executaasinstruçõesdoprograma

Page 5: Arquitetura de Computadores - FCUPricroc/aulas/1718/ac/praticas/mips.pdf · MIPS –Codificação de instruções •opcodepermite diferenciar as instruções •Ver anexo A do livro

Arquiteturadevon Neumann

CPU Memory Input/Output

SystemBUS

Control bus

Address bus

Databus

Modificadadosdoprograma;lê/escreverinput/output

Narealidadeexecutasobreumacópiadoprograma

Working copydoprograma

Executaasinstruçõesdoprograma

Page 6: Arquitetura de Computadores - FCUPricroc/aulas/1718/ac/praticas/mips.pdf · MIPS –Codificação de instruções •opcodepermite diferenciar as instruções •Ver anexo A do livro

CPU

Main Memory

SystemClock

Control Unit

ALU

Registers Output

Input

Page 7: Arquitetura de Computadores - FCUPricroc/aulas/1718/ac/praticas/mips.pdf · MIPS –Codificação de instruções •opcodepermite diferenciar as instruções •Ver anexo A do livro

CPU

Main Memory

SystemClock

Control Unit

ALU

Registers Output

Input

Mantêmumacópiadosdados

programa

Efetuacálculossobreosdadosdosregistos

Controlaaexecuçãodoprograma

Page 8: Arquitetura de Computadores - FCUPricroc/aulas/1718/ac/praticas/mips.pdf · MIPS –Codificação de instruções •opcodepermite diferenciar as instruções •Ver anexo A do livro

ISA– Instruction SetArchitecture

• Interfaceentreohardwareeosoftware• Linguagemmáquina• Defineasregrasparacodificareinterpretarinstruçõesmáquina

• ISAdefine• Instruções• Regrasdeendereçamento• Tiposdedados• Registos• Arquiteturadamemória• Interrupt &exception handling• External I/O

Page 9: Arquitetura de Computadores - FCUPricroc/aulas/1718/ac/praticas/mips.pdf · MIPS –Codificação de instruções •opcodepermite diferenciar as instruções •Ver anexo A do livro

MIPS

• Processadorde32bits• 32registosde32bits• Versõesmaisrecentesde64bits

• ArquiteturaRISC• Reduced instruction setcomputer

• Cache• 32kbdadose63kbdeinstruções

Page 10: Arquitetura de Computadores - FCUPricroc/aulas/1718/ac/praticas/mips.pdf · MIPS –Codificação de instruções •opcodepermite diferenciar as instruções •Ver anexo A do livro

MIPS– RegistosNome Número U)lização$zero $0 Constante0$at $1 Reservadoaoassembler

$v0..$v1 $2..$3 Resultadodeumafunção/procedimento

$a0..$a3 $4..$7 Argumentos1,2,3e4

$t0..$t7 $8..$15 Temporários(nãopreservadosentrechamadas)

$s0..$s7 $16..$23 Persistentes(preservadosentrechamadas)

$t8..$t9 $24..$25 Temporários(nãopreservadosentrechamadas)

$k0..$k1 $26..$27 ReservadosaokerneldoS.O.

$gp $28 Ponteiroparaaáreaglobal(dadosestáticos)

$sp $29 Ponteiro dastack$fp $30 Ponteirodaframe

$ra $31 Enderecoderetorno(usadopelachamadadeumafunção)

Page 11: Arquitetura de Computadores - FCUPricroc/aulas/1718/ac/praticas/mips.pdf · MIPS –Codificação de instruções •opcodepermite diferenciar as instruções •Ver anexo A do livro

MIPS– Tipos dedados

• .word– 4bytes(32bits)

• .half– (half-word)2bytes(16bits)

• .byte– 1byte(8bits)

• .char– 1byte(8bits)

Page 12: Arquitetura de Computadores - FCUPricroc/aulas/1718/ac/praticas/mips.pdf · MIPS –Codificação de instruções •opcodepermite diferenciar as instruções •Ver anexo A do livro

MIPS– Endereçamento

• Endereçosde32bits(4bytes)• Little endian• Bitmenossignificativoestánoendereçodobytemenor

• Endereçamentoaobyte• Tamanhomáximodeumprograma:(232 – 1)bytes

3 2 1 0

F E D C

B A 9 8

7 6 5 4

3 2 1 00x10010000

0x10010004

0x10010008

0x1001000c

0x10010010

32bits(4bytes)1byte

Porquê?

Page 13: Arquitetura de Computadores - FCUPricroc/aulas/1718/ac/praticas/mips.pdf · MIPS –Codificação de instruções •opcodepermite diferenciar as instruções •Ver anexo A do livro

MIPS– Regrasdeendereçamento

• word – temqueocuparumalinhadememória• Temqueterendereçomúltiplode4

• half-word – ocupaos2primeiros/últimosbytes• Temqueterendereçopar

• byte– ocupao1ºbytelivre

3 2 1 0

F E D C

B A 9 8

7 6 5 4

3 2 1 00x10010000

0x10010004

0x10010008

0x1001000c

0x10010010

word – endereço0x10010000

half – endereço0x10010008

byte– endereço0x10010010

Page 14: Arquitetura de Computadores - FCUPricroc/aulas/1718/ac/praticas/mips.pdf · MIPS –Codificação de instruções •opcodepermite diferenciar as instruções •Ver anexo A do livro

MIPS– Memória

Reserved

.text

.data(staticdata)

Heap(dynamicdata)

Stack

0x00000000

0x00040000

0x10000000

0x7FFFFFFF32bits(4bytes)

Page 15: Arquitetura de Computadores - FCUPricroc/aulas/1718/ac/praticas/mips.pdf · MIPS –Codificação de instruções •opcodepermite diferenciar as instruções •Ver anexo A do livro

Program structure

#this is acomment.data

A:.word 10B:.byte20C:.half 30

.textmain:lw $s0,Alh $s1,Badd $s2,$s0,$s1

Definiçãodosegmentodedados(dadosestáticosdoprograma)

Definiçãodosegmentodetexto(instruçõesdoprograma)

Labels

Page 16: Arquitetura de Computadores - FCUPricroc/aulas/1718/ac/praticas/mips.pdf · MIPS –Codificação de instruções •opcodepermite diferenciar as instruções •Ver anexo A do livro

Programstructure

#thisisacomment.data

A:.word10B:.byte20C:.half30

.textmain:lw $s0,Alh $s1,Badd$s2,$s0,$s1

Reserved

.text

.data

Heap(dynamicdata)

Stack

0x00000000

0x00040000

0x10000000

0x7FFFFFFF

add$s2,$s0,$s1lh $s1,Blw $s0,A

C:.half30B:.byte20A:.word10

Page 17: Arquitetura de Computadores - FCUPricroc/aulas/1718/ac/praticas/mips.pdf · MIPS –Codificação de instruções •opcodepermite diferenciar as instruções •Ver anexo A do livro

Instruções

• Load(l?)/Store(s?)lw registo_destino,endereço_memórialh registo_destino,endereço_memórialb registo_destino,endereço_memória

sw registo_origem,endereço_memóriash registo_origem,endereço_memóriasb registo_origem,endereço_memória

Page 18: Arquitetura de Computadores - FCUPricroc/aulas/1718/ac/praticas/mips.pdf · MIPS –Codificação de instruções •opcodepermite diferenciar as instruções •Ver anexo A do livro

Instruções

• Aritméticaadd$s0,$s1,$s2##$s0=$s1+$s2sub$s0,$s1,$s2##$s0=$s1- $s2…

• Controlo (branchesejumps)bgt $s0,$s1,target##branchtotarget if$s0>$s1blt $s0,$s1,target##branchtotarget if$s0<$s1beq $s0,$s1,target##branchtotarget if$s0=$s1bne $s0,$s1,target##branchtotarget if$s0!=$s1…

Page 19: Arquitetura de Computadores - FCUPricroc/aulas/1718/ac/praticas/mips.pdf · MIPS –Codificação de instruções •opcodepermite diferenciar as instruções •Ver anexo A do livro

Program structure

• Tantoosdadoscomoasinstruções(programas)sãomantidasemmemória

• Dadospodemtertamanhosdiferentes(byte;half;word)

• Todasasinstruçõessãocodificadasem4bytes(1word)

Reserved

.text

.data

Heap(dynamic data)

Stack

0x00000000

0x00040000

0x10000000

0x7FFFFFFF

add $s2,$s0,$s1lh $s1,Blw $s0,A

C:.half 30B:.byte20A:.word 10

Page 20: Arquitetura de Computadores - FCUPricroc/aulas/1718/ac/praticas/mips.pdf · MIPS –Codificação de instruções •opcodepermite diferenciar as instruções •Ver anexo A do livro

Codificação deinstruções

• Trabalhoproduzidopeloassembler• Umadasfasesdacompilação• Compilarumprograma,transformarprogramaA->B

• Pré-processamento• Incluisubstituiçãodemacros,remoçãodecomentários,

• Processamento(oucompilação)• Traduçãodocódigofonteemcódigoassembly

• Paraaarquitectura deCPUcorrespondente(x86,x86_64,mips,arm64,powerpc,etc)

• Assembler• Traduçãodocódigoassembly emcódigomáquina

• Linker• Rearranjodocódigodeformaaincluircódigonãofornecido(ex:funçõesexternas)

Page 21: Arquitetura de Computadores - FCUPricroc/aulas/1718/ac/praticas/mips.pdf · MIPS –Codificação de instruções •opcodepermite diferenciar as instruções •Ver anexo A do livro

MIPS– Codificação deinstruções

• Todasasinstruçõestêmomesmotamanho• 1word — 4bytes— 32bits

• ISAdefine3formatosdeinstruções• R-Type (register)• I-Type (immediate)• J-Type (jump)

• Todososformatosãoconsistente• opcode ocupasempreosmesmosbits

Page 22: Arquitetura de Computadores - FCUPricroc/aulas/1718/ac/praticas/mips.pdf · MIPS –Codificação de instruções •opcodepermite diferenciar as instruções •Ver anexo A do livro

MIPS– Codificaçãodeinstruções

• R-type instructions (register instructions)

• opcode – códigodaoperação• rd – destination register• rs – source register• rt – source/destination register (transient)• shamt – used forshift operations• func – used forspecial functions

opcode rs rt rd shamt func6bits 5bits 5bits 5bits 5bits 6bits

Page 23: Arquitetura de Computadores - FCUPricroc/aulas/1718/ac/praticas/mips.pdf · MIPS –Codificação de instruções •opcodepermite diferenciar as instruções •Ver anexo A do livro

MIPS– Codificaçãodeinstruções

• R-type instructions (register instructions)

• opcode – códigodaoperação• rd – destination register• rs – source register• rt – source/destination register (transient)• shamt – used forshift operations• func – used forspecial functions

opcode rs rt rd shamt func6bits 5bits 5bits 5bits 5bits 6bits

Porquê5bits Porquê5bits

Porquê5bits

Page 24: Arquitetura de Computadores - FCUPricroc/aulas/1718/ac/praticas/mips.pdf · MIPS –Codificação de instruções •opcodepermite diferenciar as instruções •Ver anexo A do livro

MIPS– Codificaçãodeinstruções

• R-type instructions (register instructions)

• FormatoXXXrd,rt,rs

opcode rs rt rd shamt func6bits 5bits 5bits 5bits 5bits 6bits

Page 25: Arquitetura de Computadores - FCUPricroc/aulas/1718/ac/praticas/mips.pdf · MIPS –Codificação de instruções •opcodepermite diferenciar as instruções •Ver anexo A do livro

MIPS– Codificaçãodeinstruções

• I-type instructions (immediate instructions)

• rs – source register• rt – source/destination register (transient)• immed – 16bitimmediate value

• FormatoXXXi rt,rs,immed

opcode rs rt immed6bits 5bits 5bits 16bits

Page 26: Arquitetura de Computadores - FCUPricroc/aulas/1718/ac/praticas/mips.pdf · MIPS –Codificação de instruções •opcodepermite diferenciar as instruções •Ver anexo A do livro

MIPS– Codificaçãodeinstruções

• J-type instructions (Jump intructions)

• addr – address

• Formatoj? addr

opcode addr6bits 26bits

Page 27: Arquitetura de Computadores - FCUPricroc/aulas/1718/ac/praticas/mips.pdf · MIPS –Codificação de instruções •opcodepermite diferenciar as instruções •Ver anexo A do livro

MIPS– Codificaçãodeinstruções

• opcode permitediferenciarasinstruções• VeranexoAdolivro(ouwiki)

opcode

Page 28: Arquitetura de Computadores - FCUPricroc/aulas/1718/ac/praticas/mips.pdf · MIPS –Codificação de instruções •opcodepermite diferenciar as instruções •Ver anexo A do livro

MIPS– Codificaçãodeinstruções

• opcode permitediferenciarasinstruções• VeranexoAdolivro(ouwiki)

Mnemonic Meaning Type Opcode Funct

add Add R 0x00 0x20

addi AddImmediate I 0x08 NA

addiu AddUnsignedImmediate I 0x09 NA

addu AddUnsigned R 0x00 0x21

and BitwiseAND R 0x00 0x24

andi BitwiseANDImmediate I 0x0C NA

beq BranchifEqual I 0x04 NA

bne BranchifNotEqual I 0x05 NA

div Divide R 0x00 0x1A

divu UnsignedDivide R 0x00 0x1B

j JumptoAddress J 0x02 NA

… … … … …

Page 29: Arquitetura de Computadores - FCUPricroc/aulas/1718/ac/praticas/mips.pdf · MIPS –Codificação de instruções •opcodepermite diferenciar as instruções •Ver anexo A do livro

MIPS– Codificaçãodeinstruções

• Exemplo: add$s0,$s1,$s2• opcode->0x00–>0000002• funct ->0x20–>1000002• $s0–>$16–>100002• $s1–>$17–>100012• $s2–>$18–>100102

000000100011001010000000001000002ou 0x02328020

Mnemonic Meaning Type Opcode Funct

add Add R 0x00 0x20

addi AddImmediate I 0x08 NA

addiu AddUnsignedImmediate I 0x09 NA

addu AddUnsigned R 0x00 0x21

Nome Número$zero $0$at $1$v0..$v1 $2..$3$a0..$a3 $4..$7$t0..$t7 $8..$15$s0..$s7 $16..$23$t8..$t9 $24..$25$k0..$k1 $26..$27$gp $28$sp $29$fp $30$ra $31

Registos

Page 30: Arquitetura de Computadores - FCUPricroc/aulas/1718/ac/praticas/mips.pdf · MIPS –Codificação de instruções •opcodepermite diferenciar as instruções •Ver anexo A do livro

Machine,Assembly,andCCode

• 000100001000010100000000000001110000000010100100000100000010101000010100010000000000000000000011000000001010010000101000001000110000010000000001111111111111110000000000100001010010000000100011000001000000000111111111111110100000000000000100000100000010000100000011111000000000000000001000

Page 31: Arquitetura de Computadores - FCUPricroc/aulas/1718/ac/praticas/mips.pdf · MIPS –Codificação de instruções •opcodepermite diferenciar as instruções •Ver anexo A do livro

Machine,Assembly,andCCode

• 000100001000010100000000000001110000000010100100000100000010101000010100010000000000000000000011000000001010010000101000001000110000010000000001111111111111110000000000100001010010000000100011000001000000000111111111111110100000000000000100000100000010000100000011111000000000000000001000

beq $4,$5,28slt $2,$5,$4bne $2,$0,12subu $5,$5,$4bgez $0-16subu $4,$4,$5bgez $0-24addu $2,$0,$4jr $31

Page 32: Arquitetura de Computadores - FCUPricroc/aulas/1718/ac/praticas/mips.pdf · MIPS –Codificação de instruções •opcodepermite diferenciar as instruções •Ver anexo A do livro

Machine,Assembly,andCCode

• 000100001000010100000000000001110000000010100100000100000010101000010100010000000000000000000011000000001010010000101000001000110000010000000001111111111111110000000000100001010010000000100011000001000000000111111111111110100000000000000100000100000010000100000011111000000000000000001000

gcd:beq $a0,$a1,.L2slt $v0,$a1,$a0bne $v0,$zero,.L1subu $a1,$a1,$a0bgcd.L1:subu $a0,$a0,$a1bgcd.L2:move$v0,$a0j$ra

beq $4,$5,28slt $2,$5,$4bne $2,$0,12subu $5,$5,$4bgez $0-16subu $4,$4,$5bgez $0-24addu $2,$0,$4jr $31

Page 33: Arquitetura de Computadores - FCUPricroc/aulas/1718/ac/praticas/mips.pdf · MIPS –Codificação de instruções •opcodepermite diferenciar as instruções •Ver anexo A do livro

Machine,Assembly,andCCode

• 000100001000010100000000000001110000000010100100000100000010101000010100010000000000000000000011000000001010010000101000001000110000010000000001111111111111110000000000100001010010000000100011000001000000000111111111111110100000000000000100000100000010000100000011111000000000000000001000

gcd:beq $a0,$a1,.L2slt $v0,$a1,$a0bne $v0,$zero,.L1subu $a1,$a1,$a0bgcd.L1:subu $a0,$a0,$a1bgcd.L2:move$v0,$a0j$ra

beq $4,$5,28slt $2,$5,$4bne $2,$0,12subu $5,$5,$4bgez $0-16subu $4,$4,$5bgez $0-24addu $2,$0,$4jr $31

int gcd (int a,int b){while(a!=b){if(a>b)a=a- b;

elseb=b- a;

}returna;

}

Page 34: Arquitetura de Computadores - FCUPricroc/aulas/1718/ac/praticas/mips.pdf · MIPS –Codificação de instruções •opcodepermite diferenciar as instruções •Ver anexo A do livro

MIPS– Intruções

• Load

l*$reg,addresslb –>loadbytelh –>loadhalf-wordlw –>loadwordla–>loadaddressli–>loadimmediate

Page 35: Arquitetura de Computadores - FCUPricroc/aulas/1718/ac/praticas/mips.pdf · MIPS –Codificação de instruções •opcodepermite diferenciar as instruções •Ver anexo A do livro

MIPS– Intruções

• Load(exemplo) .dataA:.word10B:.byte30C:.half40.text

main:lw $s0,A#s0=valordeAlb $s1,B#s1=valordeBlh $s2,C #s2=valordecli$s3,25#s3=25la$s4,A#s4=endereço deA

Page 36: Arquitetura de Computadores - FCUPricroc/aulas/1718/ac/praticas/mips.pdf · MIPS –Codificação de instruções •opcodepermite diferenciar as instruções •Ver anexo A do livro

MIPS– Intruções

• Store

s*$reg,addresssb –>storebytesh –>storehalf-wordsw –>storeword

Page 37: Arquitetura de Computadores - FCUPricroc/aulas/1718/ac/praticas/mips.pdf · MIPS –Codificação de instruções •opcodepermite diferenciar as instruções •Ver anexo A do livro

MIPS– Intruções

• Store(exemplo) .dataA:.word0B:.byte0C:.half0.text

main:li$s0,15sw $s0,A#A=valordes0sb $s0,B#B=valordes0sh $s0,C #C=valordes0

Page 38: Arquitetura de Computadores - FCUPricroc/aulas/1718/ac/praticas/mips.pdf · MIPS –Codificação de instruções •opcodepermite diferenciar as instruções •Ver anexo A do livro

MIPS– Intruções

• Aritméticaadd$reg,$reg,$reg ->add$s0,$s1,$s2#s0=s1+s2addi $reg,$reg,value->addi $s0,$s1,20#s0=s1+20…sub$reg,$reg,$reg ->sub$s0,$s1,$s2#s0=s1-s2…mult $reg,$reg ->mult $s0,$s1#(hi,lo)=s0*s1div$reg,$reg ->div$s0,$s1#his0%s1,lo=s0/s1

Page 39: Arquitetura de Computadores - FCUPricroc/aulas/1718/ac/praticas/mips.pdf · MIPS –Codificação de instruções •opcodepermite diferenciar as instruções •Ver anexo A do livro

MIPS– Intruções

• Controlob**$reg1,$reg2,address

bgt $reg1,$reg2,addr #jump toaddr if reg1>reg2bge $reg1,$reg2,addr #jump toaddr if reg1>=reg2blt $reg1,$reg2,addr #jump toaddr if reg1<reg2ble $reg1,$reg2,addr #jump toaddr if reg1<=reg2beq $reg1,$reg2,addr #jump toaddr if reg1==reg2bne $reg1,$reg2,addr #jump toaddr if reg1!=reg2

Page 40: Arquitetura de Computadores - FCUPricroc/aulas/1718/ac/praticas/mips.pdf · MIPS –Codificação de instruções •opcodepermite diferenciar as instruções •Ver anexo A do livro

MIPS– BrancheseJumps

• Permitem definir estruturas decontrolo eciclosExemplo:

if(x<0)x=0

elsey+=x

.data

.textmain:…

blt $s0,$zero,LTadd $s1,$s1,$s0jEND

LT:li$s0,0END:....

Page 41: Arquitetura de Computadores - FCUPricroc/aulas/1718/ac/praticas/mips.pdf · MIPS –Codificação de instruções •opcodepermite diferenciar as instruções •Ver anexo A do livro

MIPS– BrancheseJumps

• Permitem definir estruturas decontrolo eciclosExemplo:

while(x<0)x+=1

.data

.textmain:…INIT:bge $s0,$zero,END

addi $s0,$s0,1jINIT

END:....

Page 42: Arquitetura de Computadores - FCUPricroc/aulas/1718/ac/praticas/mips.pdf · MIPS –Codificação de instruções •opcodepermite diferenciar as instruções •Ver anexo A do livro

MIPS– Arrays

• Array ->coleçãodevaloresdomesmotipoacedidosporindexação• Mantidosemmemóriaemposiçõescontiguas

Exemplos:.data

A:.word10,20,30,40,50B:.word5:10C:.space40.text

main:…

Page 43: Arquitetura de Computadores - FCUPricroc/aulas/1718/ac/praticas/mips.pdf · MIPS –Codificação de instruções •opcodepermite diferenciar as instruções •Ver anexo A do livro

MIPS– Arrays

Exemplos: .dataA:.word10,20,30,40,50B:.word5:10C:.space40.text

main:…

Page 44: Arquitetura de Computadores - FCUPricroc/aulas/1718/ac/praticas/mips.pdf · MIPS –Codificação de instruções •opcodepermite diferenciar as instruções •Ver anexo A do livro

MIPS– ArrayseCiclos

Exemplo 1:

.dataA:.word10,20,30,40,50B:.word0

.textmain:la$s0,A

li$s1,0li$s2,0

init: bge $s1,5,endadd$t2,$s1,$s1add$t2,$t2,$t2add$t2,$s0,$t2lw $s3,0($t2)add$s2,$s2,$s3addi $s1,$s1,1jinit

end: sw $s2,B

int x=[10,20,30,40,50];int i,sum=0;for(i =0;i <5;i++){

sum+=x[i];}

Page 45: Arquitetura de Computadores - FCUPricroc/aulas/1718/ac/praticas/mips.pdf · MIPS –Codificação de instruções •opcodepermite diferenciar as instruções •Ver anexo A do livro

MIPS– ArrayseCiclos

Exemplo 1:.data

A:.word10,20,30,40,50B:.word0

.textmain:la$s0,A

addi $s1,$s0,20li$s2,0

init: bge $s0,$s1,endlw $s3,0($s0)add$s2,$s2,$s3addi $s0,$s0,4jinit

end: sw $s2,B

int x=[10,20,30,40,50];int i,sum=0;for(i =0;i <5;i++){

sum+=x[i];}

Page 46: Arquitetura de Computadores - FCUPricroc/aulas/1718/ac/praticas/mips.pdf · MIPS –Codificação de instruções •opcodepermite diferenciar as instruções •Ver anexo A do livro

MIPS– ArrayseCiclos

Exemplo 2:.data

A:.word10,20,30,40,50B:.word0

.textmain:la$s0,A

addi $s1,$s0,20li$s2,0

init: bge $s0,$s1,endlw $s3,0($s0)addi $s3,$s3,1sw $s3,0($s0)addi $s0,$s0,4jinit

end: sw $s2,B

int x=[10,20,30,40,50];int i,sum=0;for(i =0;i <5;i++){

x[i]+=1;}

Page 47: Arquitetura de Computadores - FCUPricroc/aulas/1718/ac/praticas/mips.pdf · MIPS –Codificação de instruções •opcodepermite diferenciar as instruções •Ver anexo A do livro

MIPS– Syscalls

• Chamadas ao sistema permitem interagir comosistema• Ler doinput• Escrever p/output• Terminar oprograma• …

• Ocontextodaexecuçãodoprogramamuda• Aexecuçãodoprogramasócontinuaapósaexecuçãodachamada

Page 48: Arquitetura de Computadores - FCUPricroc/aulas/1718/ac/praticas/mips.pdf · MIPS –Codificação de instruções •opcodepermite diferenciar as instruções •Ver anexo A do livro

MIPS– Syscalls

• SãodefinidaspelocódigodaoperaçãoService Codein$v0 Arguments Result

printinteger 1 $a0=integertoprintprintfloat 2 $f12=floattoprintprintdouble 3 $f12=doubletoprint

printstring 4 $a0=addressofnull-terminatedstringtoprint

readinteger 5 $v0containsintegerreadreadfloat 6 $f0containsfloatreadreaddouble 7 $f0containsdoubleread

readstring 8$a0=addressofinputbuffer$a1=maximumnumberofcharacterstoread

exit 10

Page 49: Arquitetura de Computadores - FCUPricroc/aulas/1718/ac/praticas/mips.pdf · MIPS –Codificação de instruções •opcodepermite diferenciar as instruções •Ver anexo A do livro

MIPS– Syscalls

Exemplo:.data

txt: .asciiz “newxvalue:“.text

main:li$v0,5syscallmove$s0,$v0addi $s0,$s0,1li$v0,4la$a0,txtsyscallli$v0,1move$a0,$s0syscall

int x;scanf(“%d”,&x);x +=1;printf(“newxvalue:%d”,x);

Page 50: Arquitetura de Computadores - FCUPricroc/aulas/1718/ac/praticas/mips.pdf · MIPS –Codificação de instruções •opcodepermite diferenciar as instruções •Ver anexo A do livro

Funções

Page 51: Arquitetura de Computadores - FCUPricroc/aulas/1718/ac/praticas/mips.pdf · MIPS –Codificação de instruções •opcodepermite diferenciar as instruções •Ver anexo A do livro

Funções

• Funçõespermitemcriarabstrações,bemcomoreutilizarcódigo• Aassinaturadafunçãoabstraiasuautilizaçãodosdetalhesdeimplementação

• Omesmocódigopodeserusadoemdiferenteszonasdoprograma(semprequeafunçãoéchamada)

• Quandoumafunçãoéchamada• Osseusargumentossãoavaliadosepassadosavalores• Ofluxodeexecuçãodoprogramapassaparaocorpodafunção

• Quandooresultadoéobtido,ofluxodeexecuçãodoprogramaretornaparaoendereçoapósachamadadafunção

Page 52: Arquitetura de Computadores - FCUPricroc/aulas/1718/ac/praticas/mips.pdf · MIPS –Codificação de instruções •opcodepermite diferenciar as instruções •Ver anexo A do livro

Funções

• Asfunçõestêmoseupróprioespaçodememória• Variáveislocaisnãosãovisíveisdoexterior,evice-versa• Mesmoquandofunçõessechamamaelaspróprias(recursividade)

int max(int[]array,int n){int i,max=array[0];for(i =1;i <n;i ++){

if(array[i]>max)max=array[i];

}returnmax;

}

Page 53: Arquitetura de Computadores - FCUPricroc/aulas/1718/ac/praticas/mips.pdf · MIPS –Codificação de instruções •opcodepermite diferenciar as instruções •Ver anexo A do livro

MIPS– Funções

• Noentantoháumnºlimitadoderegistosdoprocessador• Comoéquesegarantequeumafunçãonãoalteravaloresderegistosutilizadosforadafunção?

Page 54: Arquitetura de Computadores - FCUPricroc/aulas/1718/ac/praticas/mips.pdf · MIPS –Codificação de instruções •opcodepermite diferenciar as instruções •Ver anexo A do livro

MIPS– Funções (stack)

• Stack – Segmentodememóriausadocomopilhadedados(comportamentoLIFO)• Permiteempilhar(push)edesempilhar(pop)dados

• Stack crescenosentidodosendereçosmenores• Temcomobaseo“maior”endereçodopograma

• Permiteguardarvaloresdosregistos,paraquepossamserreutilizados,semcomprometeraexecuçãodoprograma

Page 55: Arquitetura de Computadores - FCUPricroc/aulas/1718/ac/praticas/mips.pdf · MIPS –Codificação de instruções •opcodepermite diferenciar as instruções •Ver anexo A do livro

MIPS– Funções (stack)

• ISAdoMIPSnãoofereceoperaçõesdepush epop• Maspermitemanipularoregistostack pointer ($sp)

• $sp mantêmoendereçoatualdotopodastack• Oendereçodotopodapilhadiminui aofazerpush eaumenta quandosefazpop

Page 56: Arquitetura de Computadores - FCUPricroc/aulas/1718/ac/praticas/mips.pdf · MIPS –Codificação de instruções •opcodepermite diferenciar as instruções •Ver anexo A do livro

MIPS– Funções (stack)

0x7FFFFFFFStack

$sp

0x7FFFFFFFStack

$sp

0x7FFFFFFFStack

$sp

Push($sp =$sp – 12)

Pop($sp =$sp +12)

0x10010000 0x10010000 0x10010000

Page 57: Arquitetura de Computadores - FCUPricroc/aulas/1718/ac/praticas/mips.pdf · MIPS –Codificação de instruções •opcodepermite diferenciar as instruções •Ver anexo A do livro

MIPS– Funções (stack)

• Push ->permiteempilhardadosnastack• Guardarvaloresdosregistospréchamadasafunções

• Pop->permitedesempilhardadosnastack• Restaurarvaloresdosregistosapóschamadasafunções

pop: lw $s0,0($sp)lw $s1,4($sp)addi $sp,$sp,8

push:addi $sp,$sp,-8sw $s0,0($sp)sw $s1,4($sp)

Page 58: Arquitetura de Computadores - FCUPricroc/aulas/1718/ac/praticas/mips.pdf · MIPS –Codificação de instruções •opcodepermite diferenciar as instruções •Ver anexo A do livro

MIPS– Funções (chamada)

• Caller deve passar os argumentos utilizando osregistos $a0… $a3• Caller chamaafunçãousandoainstruçãojal• Realizaosaltoeguardaem$ra oendereçoderetorno(valorde$pc antesdosalto)

• Callee calculaoresultadoeguarda-onosregistos$v0e$v1• Callee retornaaexecuçãoparaoCaller usandoainstruçãojr

Page 59: Arquitetura de Computadores - FCUPricroc/aulas/1718/ac/praticas/mips.pdf · MIPS –Codificação de instruções •opcodepermite diferenciar as instruções •Ver anexo A do livro

MIPS– Funções (chamada)

• Caller éresponsávelporguardarovalordosregistos$t0..$t9• Convenção

• Callee éresponsávelporguardarovalordosregistos$s0..$s7• Convenção

• Caller deveguardarovalordo$ra edos$a0..$a3• Casoeleprópriotenhaquechamaroutrasfunções

Page 60: Arquitetura de Computadores - FCUPricroc/aulas/1718/ac/praticas/mips.pdf · MIPS –Codificação de instruções •opcodepermite diferenciar as instruções •Ver anexo A do livro

MIPS– Funções (exemplo)

int max(int[]array,int n){int i,max=array[0];for(i =1;i <n;i ++){if(array[i]>max)max=array[i];

}returnmax;

}

int main(){int max,x=[10,20,30,40,50];max=max(x,5);printf(“max:%d”,max);

}

.dataX:.word10,50,30,40,20Y:.asciiz "max:”

.textmain: la$a0,X

li$a1,5jal maxmove$s0,$v0li$v0,4la$a0,Ysyscallmove$a0,$s0li$v0,1syscallli$v0,10syscall

max: addi $sp,$sp,-12sw $s0,8($sp)sw $s1,4($sp)sw $s2,0($sp)lw $s0,($a0)li$s1,1

loop: addi $a0,$a0,4bge $s1,$a1,endlw $s2,($a0)blt $s2,$s0,contmove$s0,$s2

cont: addi $s1,$s1,1jloop

end: move$v0,$s0lw $s0,8($sp)lw $s1,4($sp)lw $s2,0($sp)addi $sp,$sp,12jr $ra

Page 61: Arquitetura de Computadores - FCUPricroc/aulas/1718/ac/praticas/mips.pdf · MIPS –Codificação de instruções •opcodepermite diferenciar as instruções •Ver anexo A do livro

MIPS– Funções (exemplo)

int fact(int x) {if (x == 1)return 1;

elsereturn x * fact(x-1);

}

int main() {int x = fact(5);printf("%d", x);

}

.data

.textmain:

li$a0,5jal factmove$a0,$v0li$v0,1syscallli$v0,10syscall

fact:add$sp,$sp,-8sw $a0,4($sp)sw $ra,0($sp)bne $a0,1,contaddi $v0,$zero,1add$sp,$sp,8jr $ra

cont:sub$a0,$a0,1jal factlw $a0,4($sp)lw $ra,0($sp)addi $sp,$sp,8mul $v0,$v0,$a0jr $ra