Docsity
Docsity

Prepara tus exámenes
Prepara tus exámenes

Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity


Consigue puntos base para descargar
Consigue puntos base para descargar

Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium


Orientación Universidad
Orientación Universidad


Tema 5 - Subrutines, Apuntes de Arquitectura de ordenadores

Asignatura: Estructura de Computadors I, Profesor: , Carrera: Enginyeria Informàtica, Universidad: UPC

Tipo: Apuntes

2012/2013

Subido el 16/05/2013

psicosis-1
psicosis-1 🇪🇸

3.9

(25)

10 documentos

1 / 44

Toggle sidebar

Esta página no es visible en la vista previa

¡No te pierdas las partes importantes!

bg1
Departament d’Arquitectura de Computadors
Tema 5
Subrutines
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17
pf18
pf19
pf1a
pf1b
pf1c
pf1d
pf1e
pf1f
pf20
pf21
pf22
pf23
pf24
pf25
pf26
pf27
pf28
pf29
pf2a
pf2b
pf2c

Vista previa parcial del texto

¡Descarga Tema 5 - Subrutines y más Apuntes en PDF de Arquitectura de ordenadores solo en Docsity!

Departament d’Arquitectura de Computadors

Tema 5 Subrutines

5. Subrutines ^ 5 1 Introducció^5

.1. Introducció

^ 5.2. Salvar l’estat del procesador ^ 5.3. Retornar valor ^ 5.4. Pas de paràmetres ^ 5.5. Variables locals ^ 5 6 Resum^ 5.6. Resum

4.4.1 Subrutines: Introducció 1. Crida a una subrutina 2. Instrucció JAL3. Exemple de subrutina sense paràmetres 4. Tipus de Subrutines

5.1 Subrutines: Introducció^ /* Programa complet en alt nivell*/

int suma (int p1 int p2) {int suma (int p1, int p2) {register int tmp;tmp = p1 + p2;t^
t
return tmp;
...... int a=3, b=2, c;main(){{ ... c= suma (a,b);
crida a subrutina
(^ ,^

5.1 Subrutines: Introducció^ Instrucció JMP: ^ Binari: 1010 ddd aaa 000011 ^ Ensamblador: JMP Ra ^ Semàntica: PC

←Ra

^ Descripció: Salt Incondicional mitjantçant registre:

^ passa a executar la instrucció que es troba a l’adreça dememòria que conté Ra.

5.1 Subrutines: Introducció^ Cóm es fa en SISA-F:

Primera Aprox :

SISA

- F

subr() {... }

Primera

Aprox.: SISA F subr:

... $MOVEI R1, retorno

} int a=3, b=2;main()

$MOVEI R1, retornoJMP R main:

...

main(){ ... subr();

$MOVEI R1, subrJMP R retorno:

subr();... }

...

5.1 Subrutines: Introducció^ Però i si tenim 2 crides?:

cóm es guarda l’adreça de retorn d’una subrutina? Jump And Link JAL:

Jump JMP:

Binari:

1010 ddd aaa 000100 Assemblador:

JAL Rd, Ra

Semàntica:

Rd^ ←

@ret

Binari:

1010 ddd aaa 000011 Assemblador

JMP Ra

Semàntica:

PC^ ←

Ra

@ PC^ ←

Ra

Descripció: Crida a subrutina.^ Salva l’adreça de retorn en Rd i

t^ l^

i^ t^

Descripció: Retorn de la subrutina:^ passa a executar la instrucció que es troba a

l’adreça de memòria que conté Ra.

passa a executar la instrucció quees troba a l’adreça de memòria

que conté Ra.

Retorn de subrutina: Restaura l’adreça de retornque està a Ra.

5.1 Subrutines: Introducció^ Però i si tenim 2 crides: C^

Primera Aprox.: SISA-F

subr() {

... } i t^

3 b 2

subr:

... JMP R main:

int a=3, b=2;main(){

... $MOVEI R6, subrJAL R6, R retorno:

... subr();... subr();

retorno:

... $MOVEI R6, subrJAL R6 R

subr(); }

JAL R6, R retorno2:^ no són necessàries les etiquetesno^ són necessàries les etiquetesde retorn, a R6 està el PC de

retorn

5.1 Subrutines: Introducció^ Exemples sense paràmetres:

SISA-Fmovxay:

$movei R4, x

C int^ x y;

y

$movei R3, yld R4, 0(R4)st 0(R3), R

int x, y;movxay (){

y=x;^

jmp R

main:

movi R1, 4$movei R3, x(^

)

y=x; } main(){^

st 0(R3), R1 $movei R6, movxayjal R6, R6 $^

i^ R

{

x=4;movxay();y++;^

$movei R0, yld R1, 0(R0)addi R1, R1, 1st 0(R0) R

y^ ; }

st 0(R0), R1halt

5.1 Subrutines: Introducció^ Exemple de subrutina: void i .global

SISA-Fmovxay:

$movei R4, x

C int^ x y;

y

$movei R3, yld R4, 0(R4)st 0(R3), R

int x, y;void movxay (){

y=x;^

jmp R

.global main:

movi R1, 4$movei R3, x

(^ )

y=x; } main(){^

st 0(R3), R1 $movei R6, movxayjal R6, R6 $^

i^ R

{

x=4;movxay();y++;^

$movei R0, yld R1, 0(R0)addi R1, R1, 1st 0(R0) R

y^ ; }

st 0(R0), R1halt

5.2 Salvar l’estat del processador^ 1.^

Estat del processador:Q á

i^

ó^

d?

^ Q

uán i a ón es guarda?

^ L’

Estat del processador

són els registres

^ Registres Ri Registres Fi^ Registres Ri, Registres Fi

^ Per què es guarda?

^ Qui crida a la subrutina pot necessitar els valors antics dels

p

registres

^ Es guardan tots els registres?

No^

només

els^

q e^

es^

olen

preser ar

els^

se s

alors

^ No

, només els que es volen preservar els seus valors

^ Ón guardem els valores antics?

^ Reservem memòria per a guardar

-los? Quanta?

^ Reservem memòria per a guardar los? Quanta? NO, els guardem a la pila

2.^ Exemple de Salvar l’Estat2.^ Exemple de Salvar l Estat

5.2 Salvar l’estat del processador^ Exemple de subrutina:^ C^ int^ x y=5;

SISA-Fmovxay:

$movei R4, x

int x, y=5;movxay (){

y = x;

y^ $movei R3, yld R4, 0(R4)st 0(R3), R

y = x; } main(){

jmp R main:

movi R1, 4$movei

R3 , x( )

{

x=4;movxay(); x++;

st 0( R

), R $movei R6, movxayJAL R6, R6 ld^ R

0(R3)

Què hi ha aR3?

x^ ; }^

ld R1,

0(R

) addi R1, R1, 1st 0(R3), R1HALT

Què hi hauriad’haver?

HALT

5.2 Salvar l’estat del processador Exemple de subrutina:

SISA-Fmovxay:

$movei R4, x$^

i R

Pensar en com es fan els pop i

$movei R3, yld R4, 0(R4)st 0(R3), R4 j^

R

p p

push. Ordre dels pops invers a

l’ordre dels push.

jmp R main:

movi R1, 4$movei

R3 , x st 0( R

) R st 0( R

), R push R

;salvem l’Estat

$movei R6, movxayJAL R6 R6JAL R6, R6pop R

;restaurem

ld R1,

0(R3) addi^

R1 R1 1 addi^

R1, R1, 1 st 0(R3), R1HALT

5.3 Retornar el valor ^ Les nostres subrutines poden tornar dades defi^

d

fins a 1 word  Cóm ho tornarem en Ensamblador SISA-F?^ ^ Mitjançant Memòria?^ ^ Mitjançant la Pila?

^ Més flexible, però més lent

^ Mitjançant Registre?

^ Cóm ho fa el compilador de C

^ és molt més ràpid

^ R0 si no és un float^ R0, si no és un float ^ F0, si és un float