ac 17 subrutinasarc imp
DESCRIPTION
aTRANSCRIPT
-
AclaracionesPaso de parametros
Llamada a funciones
Arquitectura de ComputadorasSubrutinas
Oscar Alvarado Nava
Departamento de ElectronicaDivision de Ciencias Basicas e Ingeniera
Universidad Autonoma Metropolitana, Unidad Azcapotzalco
15-Primavera, junio de 2015
Oscar Alvarado Nava UAM Azcapotzalco Subrutinas 1/22
-
AclaracionesPaso de parametros
Llamada a funciones
Contenido
1 AclaracionesFunciones, procedimientos y subrutinasCompilacion
2 Paso de parametrosRegistrosZona de memoriaPila
3 Llamada a funcionesFunciones independientesAnidamiento de funciones
Oscar Alvarado Nava UAM Azcapotzalco Subrutinas 2/22
-
AclaracionesPaso de parametros
Llamada a funciones
Funciones, procedimientos y subrutinasCompilacion
Aclaraciones
Funcion
Procedimiento
Subprograma
Subrutina
Oscar Alvarado Nava UAM Azcapotzalco Subrutinas 3/22
-
AclaracionesPaso de parametros
Llamada a funciones
Funciones, procedimientos y subrutinasCompilacion
Funcion
Secuencia de sentencias a las que se le invoca con un soloindentificador
Pueden o no recibir parametros y pueden regresar o noresultados
De acuerdo al lenguaje
El paso de parametros y el resultado se puede hacer por valor(copia de valores) y/o por apuntadores (direcciones dememoria explcita)
Oscar Alvarado Nava UAM Azcapotzalco Subrutinas 4/22
-
AclaracionesPaso de parametros
Llamada a funciones
Funciones, procedimientos y subrutinasCompilacion
Procedimiento
Secuencia de sentencias a las que se le invoca con un soloindentificador
No reciben parametros y no regresan resultados de maneraexplcita
De acuerdo al lenguaje
Los parametros y el resultado se acceden por referencia(direccion de memoria, con manejo implcito)
Oscar Alvarado Nava UAM Azcapotzalco Subrutinas 5/22
-
AclaracionesPaso de parametros
Llamada a funciones
Funciones, procedimientos y subrutinasCompilacion
Subrutina
Secuencia de instrucciones a las que se le accede por medio debifurcaciones o saltos
Pueden o no recibir parametros y pueden regresar o noresultados
El paso de parametros y el resultado se puede hacer por mediode registros, una zona de memoria estatica o por una zona dememoria dinamica
Oscar Alvarado Nava UAM Azcapotzalco Subrutinas 6/22
-
AclaracionesPaso de parametros
Llamada a funciones
Funciones, procedimientos y subrutinasCompilacion
Funcion en C
1 /* Declaracion */2 int suma(int , int);34 /* Definicion */5 int suma(int a, int b)6 {7 int c;8 c = a + b;9 return c;
10 }11 int main()12 {13 int x=53;14 int y=10;15 int z=0;1617 /* Llamada */18 z = suma(x, y);1920 return 0;21 }
Oscar Alvarado Nava UAM Azcapotzalco Subrutinas 7/22
-
AclaracionesPaso de parametros
Llamada a funciones
Funciones, procedimientos y subrutinasCompilacion
Compilacion
oskr@kro:$ gcc -S funcion.c -o funcion.asm
Oscar Alvarado Nava UAM Azcapotzalco Subrutinas 8/22
-
AclaracionesPaso de parametros
Llamada a funciones
Funciones, procedimientos y subrutinasCompilacion
Subrutina en x86 (1/2)
1 .file "funcion.c"2 .text3 .globl suma4 .type suma , @function5 suma:6 .LFB0:7 .cfi_startproc8 pushl %ebp9 .cfi_def_cfa_offset 8
10 .cfi_offset 5, -811 movl %esp , %ebp12 .cfi_def_cfa_register 513 subl $16 , %esp14 movl 12( %ebp), %eax15 movl 8( %ebp), %edx16 addl %edx , %eax17 movl %eax , -4( %ebp)18 movl -4( %ebp), %eax19 leave20 .cfi_restore 521 .cfi_def_cfa 4, 422 ret23 .cfi_endproc24 .LFE0:
Oscar Alvarado Nava UAM Azcapotzalco Subrutinas 9/22
-
AclaracionesPaso de parametros
Llamada a funciones
Funciones, procedimientos y subrutinasCompilacion
Subrutina en x86 (2/2)
25 .size suma , .-suma26 .globl main27 .type main , @function28 main:29 .LFB1:30 .cfi_startproc31 pushl %ebp32 .cfi_def_cfa_offset 833 .cfi_offset 5, -834 movl %esp , %ebp35 .cfi_def_cfa_register 536 subl $24 , %esp37 movl $53 , -4( %ebp)38 movl $10 , -8( %ebp)39 movl $0, -12( %ebp)40 movl -8( %ebp), %eax41 movl %eax , 4( %esp)42 movl -4( %ebp), %eax43 movl %eax , ( %esp)44 call suma45 movl %eax , -12( %ebp)46 movl $0, %eax47 leave48 .cfi_restore 549 .cfi_def_cfa 4, 450 ret51 .cfi_endproc52 .LFE1:53 .size main , .-main54 .ident "GCC: (Debian 4.7.2 -5) 4.7.2"55 .section .note.GNU -stack ,"",@progbitsOscar Alvarado Nava UAM Azcapotzalco Subrutinas 10/22
-
AclaracionesPaso de parametros
Llamada a funciones
Funciones, procedimientos y subrutinasCompilacion
Subrutina en ARC (2/2)
1 .begin2 .macro push arg3 add %r14 , -4, %r144 st arg , %r145 .endmacro6 .macro pop arg7 ld [ %r14], arg8 addcc %r14 , 4, %r149 .endmacro
10 .org 204811 main:ld [stack], %r1412 ld [x], %r113 ld [y], %r214 push %r1515 push %r116 push %r217 call suma18 pop %r319 st %r3, [z]20 jmpl %r15+4, %r021 suma:pop %r1122 pop %r1223 addcc %r11, %r12, %r1324 push %r1325 jmpl %r15+4, %r026 x:5327 y:1028 z:029 stack: 0x0000A4030 .endOscar Alvarado Nava UAM Azcapotzalco Subrutinas 11/22
-
AclaracionesPaso de parametros
Llamada a funciones
Funciones, procedimientos y subrutinasCompilacion
Proceso de subrutinas
1 Paso de parametros, si los hay
2 Paso del control
3 Recuperacion de parametros en subrutina
4 Ejecucion de instrucciones de la subrutina
5 Paso de un valor o resultado, si lo hay
6 Regreso del control a la instruccion inmediatamente siguientea la que genero la llamada
7 Recuperacion del valor resultado, si lo hay
Oscar Alvarado Nava UAM Azcapotzalco Subrutinas 12/22
-
AclaracionesPaso de parametros
Llamada a funciones
Funciones, procedimientos y subrutinasCompilacion
Estructura de subrutinas
callsuma
Envodeparmetros
Llamada
Recuperacinderesultado
suma: Recuperacindeparmetros
Envoderesultado
Oscar Alvarado Nava UAM Azcapotzalco Subrutinas 13/22
-
AclaracionesPaso de parametros
Llamada a funciones
RegistrosZona de memoriaPila
Por medio de registros
...
ld [x], %r1
ld [y], %r2
call suma
st %r3, [z]...
!subrutina
suma: addcc %r1, %r2, %r3
jmpl %r15+4, %r0...
x: 53
y: 10
z: 0
Oscar Alvarado Nava UAM Azcapotzalco Subrutinas 14/22
-
AclaracionesPaso de parametros
Llamada a funciones
RegistrosZona de memoriaPila
Por medio de una zona de enlace en memoria
.
.
.
st %r1, [x]
st %r2, [x+4]
sethi x %r5
srl 10, %r5
call suma
ld [x+8], %r3
.
.
.
!subrutina
suma: ld %r5, %r8
ld %r5+4, %r9
addcc %r8, %r9, %r10
st %r10, %r5+8
jmpl %r15+4, %r0
.
.
.
!Datos
x: .dwb 3
Oscar Alvarado Nava UAM Azcapotzalco Subrutinas 15/22
-
AclaracionesPaso de parametros
Llamada a funciones
RegistrosZona de memoriaPila
Por medio de una pila
%sp .eq %r14
.
.
.
addcc %sp, -4 %sp
st %r1, %sp
addcc %sp, -4 %sp
st %r2, %sp
call suma
ld %sp, %r3
addcc %sp, 4 %sp
.
.
.
!subrutina
suma: ld %sp, %r8
addcc %sp, 4 %sp
ld %sp, %r9
addcc %r8, %r9, %r10
st %r10, %sp
jmpl %r15+4, %r0
.
.
.
Oscar Alvarado Nava UAM Azcapotzalco Subrutinas 16/22
-
AclaracionesPaso de parametros
Llamada a funciones
RegistrosZona de memoriaPila
Macro instrucciones
.macro push arg1
addcc %14, -4 %r14
st arg1, %14
.endmacro
.macro pop arg1
ld %r14, arg1
addcc %14, 4 %r14
.endmacro
Oscar Alvarado Nava UAM Azcapotzalco Subrutinas 17/22
-
AclaracionesPaso de parametros
Llamada a funciones
RegistrosZona de memoriaPila
Por medio de una pila, con macro-instrucciones
...
push %r1
push %r2
call suma
pop %r3...
!subrutina
suma: pop %r8
pop %r9
addcc %r8, %r9, %r10
push %r10
jmpl %r15+4, %r0...
Oscar Alvarado Nava UAM Azcapotzalco Subrutinas 18/22
-
AclaracionesPaso de parametros
Llamada a funciones
RegistrosZona de memoriaPila
Llama a funciones en C
1 int main()2 {3 int w,z;4 w = fun1 (1,2);5 z = fun2 (10);6 return 0;7 }8 int fun1(int x, int y)9 {
10 int i,j;11 i = x * x;12 j = i + y;13 return j;14 }15 int fun2(int a)16 {17 int m,n;18 n = a + 5;19 m = fun1(a,n);20 return m;21 }
232
0
10
%r15
n
115sp
m
Oscar Alvarado Nava UAM Azcapotzalco Subrutinas 19/22
-
AclaracionesPaso de parametros
Llamada a funciones
Funciones independientesAnidamiento de funciones
Llamada a una funcion
%pc %r150x20 0x18
...0x10 push %r10x14 push %r20x18 call suma0x1c pop %r30x20 orcc %r3 %r1 %r4
...0x40 suma: pop %r80x44 pop %r90x48 addcc %r8, %r9, %r100x4c push %r100x50 jmpl %r15+4, %r0
...
Oscar Alvarado Nava UAM Azcapotzalco Subrutinas 20/22
-
AclaracionesPaso de parametros
Llamada a funciones
Funciones independientesAnidamiento de funciones
Llamada a dos funciones
%pc %r150x2c 0x28
0x10 push %r10x14 push %r20x18 call suma0x1c pop %r30x20 push %r10x24 push %r20x28 call resta0x2c pop %r4
.
.
.0x40 suma: pop %r80x44 pop %r90x48 addcc %r8, %r9, %r100x4c push %r100x50 jmpl %r15+4, %r0
.
.
.0xa0 resta: pop %r80xa4 pop %r90xa8 norcc %r8, %r0, %r80xac addcc %r8, 1, %r80xb0 addcc %r8, %r9, %r100xb4 push %r100xb8 jmpl %r15+4, %r0
Oscar Alvarado Nava UAM Azcapotzalco Subrutinas 21/22
-
AclaracionesPaso de parametros
Llamada a funciones
Funciones independientesAnidamiento de funciones
Llamada a dos funciones anidadas
%pc %r150x2c 0x54
0x10 push %r10x14 push %r20x18 call suma0x1c pop %r3
.
.
.0x40 suma: pop %r80x44 pop %r90x48 addcc %r8, %r9, %r100x4c push %r100x50 push %r90x54 call resta0x58 pop %100x5c push %r100x60 jmpl %r15+4, %r0
.
.
.0xa0 resta: pop %r80xa4 pop %r90xa8 norcc %r8, %r0, %r80xac addcc %r8, 1, %r80xb0 addcc %r8, %r9, %r100xb4 push %r100xb8 jmpl %r15+4, %r0
Oscar Alvarado Nava UAM Azcapotzalco Subrutinas 22/22
AclaracionesFunciones, procedimientos y subrutinasCompilacin
Paso de parmetrosRegistrosZona de memoriaPila
Llamada a funcionesFunciones independientesAnidamiento de funciones