FC Modulo 9 R2
FC Modulo 9 R2
FC Modulo 9 R2
20132014
1
fc2
2
fc2
simple: 457f 464c 0101 0001 0000 0000 0000 0000
program simple; 0002 0003 0001 0000 8280 0804 0034 0000
var leal 4(%esp), %ecx 0df0 0000 0000 0000 0034 0020 0007 0028
a, b, p: andl $-16, %esp 0022 001f 0006 0000 0034 0000 8034 0804
8034 0804 00e0 0000 00e0 0000 0005 0000
integer pushl -4(%ecx) 0004 0000 0003 0000 0114 0000 8114 0804
begin pushl %ebp 8114 0804 0013 0000 0013 0000 0004 0000
movl %esp, %ebp 0001 0000 0001 0000 0000 0000 8000 0804
a := 5; 8000 0804 046c 0000 046c 0000 0005 0000
b := 3; pushl %ecx 1000 0000 0001 0000 046c 0000 946c 0804
p := a * b; subl $16, %esp 946c 0804 0100 0000 0104 0000 0006 0000
1000 0000 0002 0000 0480 0000 9480 0804
end movl $5, -16(%ebp) 9480 0804 00c8 0000 00c8 0000 0006 0000
movl $3, - 0004 0000 0004 0000 0128 0000 8128 0804
12(%ebp). 8128 0804 0020 0000 0020 0000 0004 0000
Interfazconusuario
CPU Memoria
3
fc2
5
fc2
6
fc2
Unos de los ms vendidos/empleados en el mundo
75% del mercado de procesadores empotrados de
32-bits
Usados especialmente en dispositivos porttiles debido
a su bajo consumo y razonable rendimiento (MIPS/Watt)
Disponibles como hard/soft core
Fcil integracin en Systems-On-Chip (SoC)
Ofrecen diversas extensiones
Thumb (cdigo compacto)
Jazelle (implementacin HW de Java VM). No
disponible en la versin que usaremos.
7
fc2
Elfuncionamientodeuncomputadorest
determinadoporlasinstruccionesqueejecuta.
LENGUAJEENSAMBLADOR: Conjuntodeinstrucciones,
smbolosyreglassintcticasysemnticasconelquese
puedeprogramarunordenadorparaqueresuelvaun
problema,realiceunatarea/algoritmo,etc.
Elreaqueestudialascaractersticasdeeseconjunto
deinstruccionessedenominaarquitecturadel
procesadoroarquitecturadelrepertoriode
instruccionesyenglobalossiguientesaspectos:
8
fc2
Repertoriodeinstrucciones
Operacionesquesepuedenrealizarysobrequtiposde
datosactan
Formatodeinstruccin
Descripcindelasdiferentesconfiguracionesdebitsqueadoptan
lasinstruccionesmquina
Registrosdelaarquitectura
Conjuntoderegistrosvisiblesalprogramador(dedatos,
direcciones,estado,PC)
Modosdedireccionamiento
Formadeespecificarlaubicacindelosdatosdentrodela
instruccinymodosparaaccederaellos
Formatodelosdatos
Tiposdedatosquepuedemanipularelcomputador
9
fc2
Analogaconunalengua:
Verbo Instruccin
Verbos deldiccionario Repertoriodeinstrucciones
Lenguajecompleto Lenguajeensamblador
Podemosdecirqueelcdigoensambladoresun
conjuntodeexpresionesfcilmenterecordablesporel
programador,enlasqueademssetieneencuentala
arquitecturadelprocesador:
Nosepuedeutilizarcualquierexpresin
Hayqueconsiderardondeseencuentranfsicamentelos
datos
10
fc2
Cadalneadelprogramapuedetenerloscampos:
Etiqueta Instruccin/Directiva Operandos Comentarios
fc2
ARMmachineinstructionsareinfactricherthantheprevioussimple
example.Considerforinstance:
1)Instruction:ADDR3,R0,R2
COND OPCODE S Rn Rd Shift Amount Shift Rm
2)Instruction:ADDR3,R0,#15
COND OPCODE S Rn Rd Rotate Immediate
Desensamblado
Desensamblado:
Es una Interpretacin
delcdigo mquina
LasoperacionesdelARMrealmentesonms
potentesycomplejas:
1)Instruction:ADDR3,R0,R2
COND OPCODE S Rn Rd Shift Amount Shift Rm
15
fc2
Ejemplo:
TraduciraensambladordeARMlasentenciaenC:
f=(g+h)*(i+j)
Suponemosqueinicialmenteg,h,i,j estnenlos
registrosr1,r2,r3,r4respectivamente.
add r5,r2,r1
add r6,r3,r4
mul r7,r5,r6
16
fc2
Pensemosunpocomsafondoqutareastieneque
realizarelprocesadorcuandoejecutaunainstruccin:
1. Detectartipodeinstruccinaejecutar P.ej.ADD
2. Leerdealgnlugarlosops.fuente
3. RealizarlasumadelosdosoperandosconalgnHW
4. Guardarelresultadoenalgnlugar
Dndeestarnlosoperandos?(datos)
TODOSlosdatoseinstruccionesquemanipulaun
programasealmacenanenlamemoria
Temporalmentesepuedenalmacenardatosenlos
registrosdelaCPU(bancoderegistros)
Eventualmentepuedensolicitarsedatosalosdispositivos
deE/S
17
fc2
Dndepuedeestarlosoperandos/resultado
deunainstruccin?
Memoria
Registros
Enlapropiainstruccin!!!(inmediato)
Cuntosoperandosexplcitos
tienecadainstruccin?
0
1
2(1fuente/destinoy1fuente)
3(2fuenteyundestino)
Msde3???
18
fc2
32-bits de longitud User r0
Mode r1
15 registros de propsito general (R0-R14) r2
r3
R13=SP suele usarse como puntero de pila
r4
R14=LR se usa como enlace o direccin de retorno r5
r6
Un registro contador de programa (PC=R15) r7
r8
Un registro de estado actual r9
del programa (CPSR) 4
r10
r11
Permite acceder a la vez a: 16x32Register r12
File r13 (sp)
2 registros fuente 4 4
r14 (lr)
cpsr 19
fc2
MemWrite
Pueden contener muchos
ADDR
ms datos que los registros Memoria
Una sola lnea de direcciones! del ARM DR
DW
MemRead
20
fc2
PorqunohacersimplementemsgrandeelBancode
Registros,deformaquealberguetodoslosdatos?
Cuantomspequeasealaestructura,msrpidofuncionar.
IDEA:
DATOS:
TenertodosdatosdelprogramaenMemoria
TraeralBancodeRegistrossloaquellosconlosquesevaa
operar.Cuandoseterminedeoperarconellos Guardar
el/losresultado/saMemoria.
INSTRUCCIONES:ProgramaAlmacenadoenMemoria
Tenerelprogramaalmacenadoenmemoria
Traeraunregistrolainstruccinqueseestejecutando
21
fc2
Queremoscontarelnmerodecerosquecontieneun
array de1000elementos Sinmemoria
imposible.
Altonivel:
ceros=0;
for(i=0;i<1000;i++){
if(A[i]==0){
ceros=ceros+1;
}
}
Qudebehacerelcomputadorencadaiteracindel
bucle?
22
fc2
Lamemoriaesunasecuenciadebytes(tabla)
Cadabytetieneasignadaunadireccinde
memoria(nmerodeentradaenlatabla)
Esdecir,esdireccionable aniveldebyte
Sidisponemosdek bitsparaexpresaruna
direccin
Podremosaccedera2k bytesdiferentes
Sik=16>216bytes 64Kbytesdireccionables
23
fc2
Enlasprimerasprcticasnoaccederemosa
niveldebyte:
Unainstruccinocupa4bytes
Undato(porejemplo,unentero)ocupa4bytes
Siempreaccederemosadireccionesmltiplode4
Enmuchossistemasrealesexistenrestricciones
aladireccindecomienzodeundato
Restriccionesdealineamiento
24
fc2
Restriccindeladireccindecomienzodeun
datoenfuncindesutamao
Instruccin:4bytes Slopuedecomenzaren
direccionesmltiplode4
Mismarestriccinparadatosde4bytes(int,float)
Datodetamao2bytes(shortint)>Slopuede
comenzarendireccionesmltiplosde2
Datadetamaobyte(char)>Puedecomenzaren
cualquierdireccin
25
fc2
Ejemplo.Declaramoscuatrovariables:
char a;int b;shortint c;int d;
Direccindelbyte Direccindelbyte
a Memoria
0 1 2 3
NOutilizada 0 1 2 3
Dir.decomienzo
b 4 5 6 7 4 5 6 7
c 8 9 10 11 a 0
8 9 10 11
d 12 13 14 15 b1
12 13 14 15
... ... c5
d7
2k4 2k3 2k2 2k1 2k4 2k3 2k2 2k1
palabras palabras
alineadas noalineadas
Lasrestriccionesdealineamientodesaprovechanmemoria:
Peroacelerannotablementeelacceso
La mayoradelasarquitecturasOBLIGANarealizaraccesos
alineados
26
fc2
Unapalabraesunconjuntodebytes
Duranteelcurso,unapalabraser32bits(4bytes)
ARM Accesosalineados
Nuestrosaccesossiempresernanivelde
palabra
Unainstruccinesunapalabra
Undatoesunapalabra
27
fc2
Cmoseorganizanlosbytesdentrodela
palabra?
Sealapalabra(4bytes),codificadaen
hexadecimal,AABBCCDD16
Direccindecomienzo:16(mltiplode4)
Quhayenmemoriaapartirdelaposicin16?
Direccin Contenido Direccin Contenido
16 AA 16 DD
17 BB 17 CC
18 CC 18 BB
19 DD 19 AA
BIGENDIAN:byteMS LITTLEENDIAN:byteMENOS
significativoprimero significativoprimero
28
fc2
Eshabitual(ensimuladores,entornosgrficos)
visualizarlamemoriaaniveldepalabra
Ejemplo:palabrasAABBCCDD16 y9070FFAA16apartir
deladireccin16.
Direccin +0 +1 +2 +3 Direccin +0 +1 +2 +3
16 AA BB CC DD 16 DD CC BB AA
20 90 70 FF AA 20 AA FF 70 90
BIGENDIAN:lecturade LITTLEENDIAN:lecturade
izquierdaaderecha derechaaizquierda
ARMadmiteambasorganizaciones
29
fc2
Cmoaccederaesosoperandos?
Modosdedireccionamiento:Formasquetienela
arquitecturaparaespecificardndeencontrarlos
datos/instruccionesquenecesita
Cadaarquitecturaofrecedistintasposibilidades:
Inmediato
Absoluto
DirectodeRegistro
IndirectodeRegistro
30
fc2
Eloperandoestcontenidoenlapropia
instruccin:
MOV R0, #0
Sirveparamanejarconstantes.
31
fc2
Eloperandoestcontenidoenunregistrodel
procesador:
32
fc2
Eloperandoestenmemoriayladireccinde
memoriadondesteseencuentraest
almacenadaenunregistro:
33
fc2
Eloperandoestenmemoria
Dir.deacceso=registro+desplazamiento
34
fc2
Operacionesaritmticasylgicas Muycomunes
encualquierprogramadealtonivel
Todocomputadordebesercapazderealizarlas
operacionesaritmticasylgicasbsicas:
Aritmticas:SUMA,RESTA,ETC.
Lgicas:AND,OR,ETC.
Equivalenciadirectaconlenguajedealtonivel:
L.ALTONIVEL L.ENSAMBLADOR
C=A+B Instruccindesuma(add )
C=A*B Instruccindemultiplicacin(mul )
C=A&&B InstruccinAND(and)
35
fc2
EnARM,lasoperacionesaritmticasylgicas
contienenengeneral2operandosfuentey1
operandodestino.Porejemplo:
add a , b , c
operacindestino fuentes
sub a , b , c
36
fc2
Lasoperacionesaritmticasylgicasquevamosa
utilizarmsfrecuentementeson:
SUMA add Rd,Rn,<Operando>
RESTA subRd,Rn,<Operando>
MULTIPLICACIN mul Rd,Rm,Rs
AND andRd,Rn,<Operando>
OR orr Rd,Rn,<Operando>
XOR eor Rd,Rn,<Operando>
MOVIMIENTO mov Rd,<Operando>
DESPLAZAMIENTO lsl Rd,Rm,<Operando>
lsr Rd,Rm,<Operando>
donde<Operando> deformasimplificadaes:
unregistro (empleamosdireccionamientodirectoregistro)
uninmediato (empleamosdireccionamientoinmediato).
37
fc2
Ejemplos:
add r1,r3,r4 sumaelcontenidodelosregistros
r3yr4yalmacenaelresultadoenelregistror1.A
todoslosdatosseaccedecondireccionamiento
directoregistro.
and r2,r5,#2 realizalaandlgicadel
contenidoder5con2yalmacenaelresultadoen
elregistror2.Alsegundooperandofuentese
accedecondireccionamientoinmediato.
38
fc2
Ejemplo
Operacioneslgicas(and,orr,eor,etc.)funcionan
aniveldebit
39
fc2
Instruccionesaritmticasylgicasslopuedenoperarsobre
registrosoinmediatos.
Losdatosdelprogramaestnenmemoria Necesidadde
transferirdatos: BancoRegistros Memoria
Equivalenciainexistenteconlenguajesaltonivel:enestosse
trabajaconvariables,quenonospreocupadndeestn.En
cambio,enensamblador,losdatosestnenmemoria,pero
paraoperarconelloshayquetraerlosalbancoderegistros.
L.ALTONIVEL L.ENSAMBLADOR (A,ByCenmemoria)
InstruccinmoverdatoAdeMemoriaaB.R.
InstruccinmoverdatoBdeMemoriaaB.R.
C=A+B Instruccindesuma(add )
InstruccinmoverresultadodeB.R.aMemoria
40
fc2
MueveundatodeunaposicindelaMemoriaaun
registrodelBancodeRegistros:
Memoria BancoRegs
Sintaxis:
ldr Rd,<Direccin>
Lainstruccincopiaeldatoquehayenlaposicinde
memoria<Direccin>enelregistroRd
Diversasformasparaespecificaresadireccin:
ldr Rd,[Rn]
Lainstruccincopiaeldatoquehayenlaposicindememoria
indicadaenelregistroRn(direccionamientoindirectoregistro)
alregistroRd.
ldr Rd,[Rn,#Desplazamiento]
Lainstruccincopiaeldatoquehayenlaposicindememoria
indicadapor Rn+Desplazamiento(direccionamiento
indirectoregistrocondespl.)aRd.
41
fc2
MueveundatodeunregistrodelBancodeRegistrosa
unaposicindelaMemoria:
BancoRegs Memoria
Sintaxis:
str Rd,<Direccin>
LainstruccincopiaeldatoquehayenelregistroRd enla
posicindememoria<Direccin>
Algunasformasparaespecificaresadireccin:
str Rd,[Rn]
LainstruccincopiaeldatoquehayenelregistroRd alaposicin
dememoriaindicadaenelregistroRn(direcc.indirecto registro)
str Rd,[Rn,#Desplazamiento]
LainstruccincopiaeldatoquehayenelregistroRd enla
posicindememoriaindicadaporRn+Desplazamiento
(direcc.indirectoregistrocondespl.)
42
fc2
Direccinde Contenido
Memoria Registro Contenido
0x00000100 0xAABBCCDD
r1 0x00000100
0x00000104 0x11223344
r2 0x0000F132
0x00000108 0x00FF55EE
r3 0xAABBCCDD
Registro Contenido
Registro Contenido
r1 0x00000100
r1 0x00000100
r2 0x0000F132
r2 0x0000F132
r3 0x00000000
r3 0x00FF55EE
43
fc2
Registro Contenido
Direccinde Contenido
r1 0x00000100 Memoria
r2 0x0000F132 0x00000100 0xAABBCCDD
44
fc2
Direccionamientoabsoluto:
Eloperandoestenladireccindememoriaindicada.
Seudoinstruccin:Nolaproporcionaelrep. deinstr.ARM
Lavariableaest 1020
int a=12; almacenadaenla
a=1024 0x0000000C
direccindememoria
1024. 1028
Seetiquetala 1032
direccincomoa
a:.word 12
fc2
Ysiquieroaccederaotracomponente?
fc2
Dndeestlacomponente3?1032
a =1020 0x00000001
ldr r1,=a R1=1020
1024 0x00000003
1028 0x00000007
1032 0x00000005
1036 0xFFFFFFFE
addr2,r1,#12 R2=1032 1066 0x00000004
fc2
Dndeestlacomponentei?1020+4*i
MododedireccionamientodelARM:
1032=1020+(3*4) Indirectoderegistrocondesplazamientoporregistro.
Ademscondesplazamiento(lgicoalaizquierda).
fc2
Diferenciacalculadora computador:Elcomputadorpuede
tomardecisiones Instruccionesparatomadedecisiones
Puedenromperelflujonormaldelprograma
Flujonormal Ejecucinsecuencial
Instruccindesalto Despusdestainstruccin,nose
ejecutalasiguiente,sinounasituadaenotrolugardelcdigo
SeSALTA aotrolugardelprograma
Equivalenciaconlenguajedealtonivel:
L.ALTONIVEL L.ENSAMBLADOR
Condicin: if(A==B)then Instruccindesalto
Bucle: for() Combinacindeinsts.salto
49
fc2
Formato:
bDesplazamiento
Enlugardeejecutarlasiguienteinstruccinalsaltoenelorden
secuencial,seejecutaaquellaqueestenlaposicinresultantedesaltar
unnmerodebytes igualalDesplazamiento(puedeser+,encuyocasose
saltahaciaadelante,onegativo,encuyocasosesaltahaciaatrs)
Ejemplo:Inicializara0lascomponentesdeunvector(buclefor)
V: Componentes del vector
mov r2, #0
ldr r1, =V
str r2, [r1]
add r1, r1, #4
b .-8 @Saltar 8 bytes hacia atrs
Problema:Nuncasalimosdelbucle Interesapodersaltaronoen
fc2 funcindeunacondicin 50
Formato:
cmp Rn,<Operando> V: Componentes del vector
bXX Desplazamiento
Dependiendodeculseael mov r2, #0
resultadodelacondicin mov r3, #9
XXevaluadasobreRny
Operando,seejecutatras ldr r1, =V
elsaltolasiguiente cmp r3, #0
instruccinenelorden beq .+20 @Saltar 20 bytes
secuencialobienlasituada @hacia adelante
enlaposicinresultantede str r2, [r1]
saltarunnmerode
instruccionesigualal add r1, r1, #4
Desplazamiento sub r3, r3, #1
Ejemplo:Inicializara0las b .-20 @Saltar 20 bytes
componentesdeunvector @hacia atrs
de10componentes str r2, [r1]
51
fc2
52
fc2
Aligualqueconlosload/store,podemos
emplearpseudoinstrucciones.
Porejemplo:
bEtiqueta
Enlugardeejecutarlasiguienteinstruccinalsaltoenelordensecuencial
seejecutalasituadaenladireccinasociadaalaEtiqueta
cmp r1,r2
beq Etiqueta
Sir1esigualar2,seejecutatraselsaltolainstruccinsituadaenla
direccinasociadaalaEtiqueta.
Sir1esdistintoar2,seejecutatraselsaltolainstruccinsituadaa
continuacindeste.
53
fc2
TraducirlasiguientesentenciadeCaensamblador(suponer
queAestenr1yBenr2):
If (A<B)then A=A+Belse A=AB
cmp r1, r2
bge MayIgu
add r1, r1, r2
b Salir
MayIgu: sub r1, r1, r2
Salir:
54
fc2
TraducirlasiguientesentenciadeCaensamblador(suponer
queAestenr1yBenr2):
while (i<10){array[i]=array[i]+i;i++;}
Etapasdecompilacin,ensambladoyenlazado
56
fc2
Directivas paradesenrrollar elcdigoendememoria
Directiva Propsito
.text Declara el comienzo de la seccin de texto (instrucciones)
.data Declara el comiezo de la seccin de variables globales
con valor inicial
.bss Declara el comiezo de la seccin de variables globales sin
valor inicial
.word w1,...,wn Reserva n palabras en memoria e inicializa el contenido a
w1,...,wn
.space n Reserva n bytes de memoria
.equ nom,valor Define una constante llamada nom como valor
.global Exporta un smbolo para el enlaza (por ejemplo, comienzo
del programa)
fc2
Zonade
instrucciones
58
fc2
Enlsedefinenlaszonasdememoriadondeubicar
DIRECCIN MEMORIA
SECTIONS
{ 0x00000000
. = 0x0C000000; Reservado
.data : {
*(.data) 0x0C000000
*(.rodata) Datosestticos
}
_start
.bss : {
Instrucciones
*(.bss)
*(COMMON)
} end Montn
.text : {
*(.text)
}
PROVIDE(end = .);
PROVIDE(_stack = 0x0C7FF000 );
0x0C7FF000
Pila
}
fc2 59
Ellenguajeensambladornosdalaposibilidad
deemplearpseudoinstruccionesquenos
facilitanmucholaprogramacincon
etiquetas.
Porejemplo:
ldr Rd,Etiqueta
Lainstruccincopiaeldatoquehayenlaposicindememoria
asociadaaEtiquetaalregistroRd.
str Rd,Etiqueta
LainstruccincopiaeldatoquehayenelregistroRd alaposicinde
memoriaasociadaaEtiqueta.
ldr Rd,=Etiqueta
LainstruccincopialadireccindememoriaasociadaaEtiquetaal
registro Rd.
60
fc2
Cmonosayudanlasetiquetasylaspseudoinstrucciones?
Porejemploamanejarvariables.
Ejemplo:Inicializara0lascomponentes Aspectolamemoria
Direc. Contenido*
deunvectordetrescomponentes. Memoria
Aspectodelprogramaen
X Desconocido
LenguajeEnsamblador Traduccina
X+4 Desconocido Vector
V: Componentes del vector. L.Mquina
X+8 Desconocido
X+12 mov r2,#0
mov r2, #0 Elprograma X+16 ldr r1,[pc,#24]
ldr r1, =V funcionaigual x+20 strr2,[r1]
str r2, [r1] seacualseala x+24 add r1,r1,#4
Programa
direccinX
add r1, r1, #4 x+28 str r2,[r1]
str r2, [r1] Evitamoscalcular x+32 add r1,r1,#4
add r1, r1, #4 eldesplazamiento X+36 str r2,[r1]
str r2, [r1] delldr
X+40 X
61
*Enrealidadestenbinario
fc2
Grupodeinstruccionesconunobjetivoparticular,
queestseparadodelcdigoprincipalyquese
invocadesdeste.
Permitereutilizarcdigo
Hacemscomprensibleelprograma.
void foo (int a, int b) {
. int fuu (int a) {
} int x;
int main() { return x;
int y; }
y = fuu(3);
foo(y,4);
}
62
fc2
Cmo invocar una funcin?
int main() { void foo (int a, int b) {
int x,y;
foo(y,4);
x = y +3; return;
} }
63
fc2
Instruccin BranchandLink:BL<etiqueta>
Saltoincondicionala<etiqueta>
AlmacenaenelregistroLR ladireccindelasiguiente
instruccin
VolvemosdelafuncinreestableciendoelPC
Podemosusarlainstruccinmov pc,lr
void foo (int a, int b) { foo:
.. = a+ b; ADD r1,r2,r3
return;
} mov pc,lr @ Cargo en PC la direccin de retorno
int Main() {
.
foo(x,y); Main:
x=x-y; BL foo @Llamada a funcin. LR<- dir. de sub
} SUB r2,r2,r3
64
fc2
Cmo comunicar argumentos auna funcin?
int fuu (int a) {
int main() { int x;
int x,y;
Llamadas alas mismas return x;
x=fuu(3); funciones con }
y=fuu(7); diferentes argumentos
foo(3,x); void foo(int a, int b) {
foo(y,4);
return;
} }
Ideasencilla:usar registros
ARMsigue elestndar AAPCS
Usar losregistros r0r3 parapasar loscuatro primeros
argumentos delafuncin
Elvalorderetorno sedevuelve por r0
int x; Main:
int Main() { MOV r0,#3 @Primer argumento en r0
x=fee(3,4); MOV r1,#4 @Segundo argumento en r1
} BL fee
int fee (int a, int b) { STR r0, x @ El resultado estar en r0
return a+b;
} fee: ADD r0,r0,r1 @ Escribe el valor de retorno en r0
MOV pc,lr
66
fc2
Ysi hayms decuatro argumentos?
Ysi hayllamadas anidadas?
int main() { int faa (int a, int b) { int fuu (int a) {
int x; int x,y; int x;
x = fuu(a);
x=faa(3,4); y = fuu(b); return x;
} return x+y; }
}
67
fc2
cima 7 7
cima 3 3 cima 3
cima
69
fc2
Lapila enARM:elregistro SP
Elregistro R13(SP>stackpointer)contiene la
direccin delacima delapila (ltima posicin
ocupada)
FullDescending:Lapilacrecededirecciones
superioresadireccionesinferioresdememoria
Enelscriptdeenlazadoinicializamosladireccinde
lapila.
PROVIDE(_stack = 0x0C7FF000 );
Qu sealmacena enlapila?
Argumentos deentrada:delquinto enadelante
Espacio paraalbergar las variableslocales
Registros cuyo contenido sedebe preservar
fc2
70
71
fc2
1. Situarparmetrosenlugaraccesibleala
funcinllamada(subrutina)
EnRegistrosyenpilasiesnecesario
2. Transferirelcontrolalasubrutina(BL)
3. Reservarespacioparalaejecucin
Var.localesyregistrosquesedeseenpreservar
4. Ejecutarlastareaspropiasdelasubrutina
5. Situarresultadoenlugaraccesiblealafuncin
llamante(r0)
6. Devolverelcontrolalpuntodellamada
72
fc2
Durantelaejecucindelasubrutinasepuedehaceruso
decualquierregistrodisponible.
Suelesernecesarioquelafuncinllamante nopierdalos
datosquetenaenesosregistros.
ElARMArchitecture Procedure Call Standard(AAPCS)
regulalasllamadasasubrutinasenlaarquitecturaARM:
LafuncinllamadaDEBEpreservar:
losregistrosr4r10,
elregistror11(FP)
elregistror13(SP).
Sisemodificandurantelallamada,debernapilarseal
principioydesapilarsealfinal.
Sepuedenusarlosregistrosr0r3contotallibertad
Lafuncinllamante NOdebeasumirqueconservansuvalortrasla
llamada
73
fc2
fc2 75
Estructuradeunarutina:
Cdigo de entrada (prlogo):
Construye el marco
Cuerpo de la rutina
Implementa la funcionalidad
76
fc2
Direccionesbajasdememoria
Direccionesaltasdememoria 77
fc2
Variablesglobales
Almacenadasensecciones.datao.bss
Persistenenmemoriadurantetodoelprograma
Variableslocales
Almacenadasenelmarcodepiladelarutina
Activassloenelcuerpodelarutina
78
fc2
Ejemplorutinaqueutilizar2,r3,r4yr5
Prlogo SUB SP, SP, #16 @ Actualizar SP para apilar contexto
STR R4, [SP,#0]
STR R5, [SP,#4]
STR FP, [SP,#8] @ Apilamos valor actual de FP (opcional)
STR LR, [SP,#12] @ Apilamos LR (si rutina no es hoja)
ADD FP, SP, #12 @ Set the new value of FP
SUB SP, SP, #SpaceForLocalVaribles @ Reserva espacio
FP 0x0C7FEFFC 0x0C7FEFFC
80
fc2
int x=3,y=-7,z; Escribeelcuerpodecadafuncin
int main() {
Sinprlogosnieplogos
z=abs(x)+abs(y);
return 0; Losargumentosdeentradaestarn
} enr0,r1.
Cmoevolucionalapila?
int abs(int a) {
int r;
Qudebemosapilarantesdecada
if (a<0)
llamada?
r=opuesto(a); Qudebemosapilaralcomienzode
else cadafuncin?
r=a;
return r;
EscribeelcdigoARMcompleto
}
decadafuncin
int opuesto(int a) { Yaesposibledeterminarquhay
return a; queincluirenprlogosyeplogos
}
81
fc2
LaarquitecturaARMofreceinstruccionesdeload
ystoremltiple.
Permitenlacarga/guardasimultneadevarios
registrosenposicionesdememoriaconsecutivas
LDM<Modo>Rb[!],{listaderegistros}
Donde: STM<Modo>Rb[!],{listaderegistros}
Rb eselregistrobasequecontieneunadireccinde
memoriaporlaquecomienzalaoperacin.
Elsigno !traselregistrobaseesopcional,sisepone,
elregistrobasequedaractualizadoadecuadamente
paraencadenarvariosaccesosdeestetipo.
Modo eselmododedireccionamiento,
existen4modos:IA,IB,DA,DB. 82
fc2
83
fc2
84
fc2
Paracodificarelprlogoyeleplogosolo
necesitamosdos:STMDB yLDMIA.
ElensambladordelARMproporcionaalias:
Insercin:
STMDBSP!,{R4R10,FP,LR}
PUSH{R4R10,FP,LR}
STMFDSP!,{R4R10,FP,LR} @FD>fulldescending.
Extraccin:
LDMIASP!,{R4R10,FP,LR}
POP{R4R10,FP,LR}
LDMFDSP!,{R4R10,FP,LR} @FD>fulldescending
85
fc2
Existenalgunoscasosespecialesenlosque
podemossimplificaresteprlogo:
Sinopasamosmsdecuatroparmetrosaninguna
subrutinanotendremosquereservarespacioextra.
Podemosentonceseliminarlatercerainstruccin.
Sisloapilamosunregistro(sucederaenuna
subrutinahojaquenomodifiqueningunodelos
registrosr4r10)lasegundainstruccinseconvertira
enADD FP,SP, #0.Enestecasoquizquedemsclaro
codificarlacomoMOV FP, SP.
86
fc2
stmdb sp!,{r4r10,fp,lr} PUSH{R4R10,FP,LR}
rutinallamada
Marcodepila
r10
sp =r13 sp_inicial sp_nuevo1 fp_inicial
Dir_retorno
lr =r14 Dir Retorno
sp_inicial
rutinallamante
Marcodepila
...
...
1 Elsp sedecrementaporefectodel
modificador!queapareceenelcdigo fp_inicial
delstmdb
2 Elalmacenamientodelosregistrosr4r10
noaparecerepresentadoenlafigura.
87
fc2
ADDFP,SP,#(4*NumRegistrosApilados4)
Pila
Direc. Contenido
fp_inicial fp_nuevo sp_nuevo r42
rutinallamada
Marcodepila
fp =r11
...
r10
fp_inicial
sp =r13 sp_nuevo
fp_nuevo Dir_retorno
...
...
fp_inicial 88
fc2
SUBSP,SP,#4*NumPalabrasExtra
Direc. Contenido Pila
sp_nn
rutinallamada
Marcodepila
sp_nuevo r42
...
sp =r13 sp_nuevo sp_nn
r10
rutinallamante
Marcodepila
...
...
fp_inicial 89
fc2
Situacionesparasimplificaresteeplogo:
Sisloapilamosunregistrolaprimerainstruccindel
eplogosereduceaSUB SP,FP, #0.Enestecasoquiz
quedemsclarocodificarlacomoMOV SP, FP.
Sinohemosreservadoespacioextra
(NumPalabrasExtra=0)ynohemosalteradoelvalorde
SP enelcuerpodelasubrutina,podemosincluso
eliminarestamismainstruccindeleplogo,yaqueSP
tendrelvalorqueleasignlaprimerainstruccindel
fc2 prlogo. 90
SUBSP,FP,#(4*NumRegistrosApilados4)
Direc. Contenido Pila
sp_nn
Pals. Extra
fp =r11 fp_nuevo
rutinallamada
Marcodepila
sp_nuevo r42
...
sp =r13 sp_nn sp_nuevo r10
fp_inicial
lr =r14 Cambiado!
fp_nuevo Dir_retorno
sp_inicial
rutinallamante
Marcodepila
...
...
fp_inicial 91
fc2
LDMIASP!,{R4R10,FP,LR} POP{R4R10,FP,LR}
Direc. Contenido Pila
fp =r11 fp_nuevo fp_inicial
sp_nuevo r42
...
sp =r13 sp_nuevo sp_inicial
rutinallamada
Marcodepila
r10
fp_inicial
lr =r14 Dir Retorno fp_nuevo Dir_retorno
sp_inicial
rutinallamante
Marcodepila
1 Elsp seincrementaporefectodel
modificador!queapareceenelcdigo ...
delldmia ...
2 Larestauracindelosregistrosr4r10no
aparecerepresentadoenlafigura. fp_inicial
BXLR @Retornodesubrutina
pc =r15 CambiadoDir_retorno
92
fc2
Enunaposicindememoriaencontramosla
siguientenmero0x39383700.Qu
representaeldatoledo?
Elnmeroentero(int)95998548
Lacadenadecaracteres"987"
Elnmeroreal(float)0.0001756809
Lainstruccinxor $24,$9,0x3700
93
fc2
Tiposde
Datos
Magnitudy Puntofijo,
Signo,C'2 puntoflotante
94
fc2
Tamaohabitual delosdatosbsicosde
lenguajesdealtonivel
95
fc2
Cmoserepresentaelcarcter'a'en
memoria?
Quocurrecuandoseescribelacadena
"HolaMundo"enunavariableenC?
Cadacarctertieneasociadounacodificacin
binaria(generalmentede8bits)
ASCII(ExtendedASCII).
UNICODE(UTF8,UTF16)
ISO88591(latin1),ISO885915(latin 9)
96
fc2
97
fc2
Magnitudysigno(MS)
Simtrico Ejemplo (tamao = 4 bits)
Dosrepresentacionesparaelcero: b3b2b1b0 MS C2
+0 000...00
0000 0 0
0 100...00 0001 1 1
Rango(tamao=n bits) 0010 2 2
POSITIVOS
0011 3 3
(2n11) x +(2n11) 0100 4 4
Complementoa2(C2) 0101
0110
5
6
5
6
Nosimtrico 0111 7 7
Unanicarepresentacionesparael
1000 0 8
cero 1001 1 7
Rango(tamao=n bits) 1010 2 6
NEGATIVOS
1011 3 5
(2n1) x +(2n11) 1100 4 4
Quocurreenlasentencia: 1101
1110
5
6
3
2
shorta=pow(2,15)+3;? 1111 7 1
98
fc2
char cadena[] = hola mundo\n; Loselementosdeun
arrayocupan
posiciones
consecutivasde
memoria
Lascadenasde
caracteresenC
acabanen\0
Enqudireccin
estv[16]delarray
int vector[100];sisu
primerelementoest
enladireccin
fc2 0x0C00? 99
struct mistruct {
short int a;
short int b; Loselementosde
int c; unstructocupan
};
posiciones
struct mistruct rec; consecutivasde
memoria
rec:0x0C00 shorta shortb Cmoseraun
arraydestructs?
0x0C04 int c Yunstructconun
arraycomo
0x0c08 elemento?
100
fc2