FC Modulo 9 R2

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 50

2Cuatrimestre

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

Depende de la dcada donde se estudie:


Los 50: El cdigo mquina era la nica forma de
programar los computadores.
Los 60 y 70: Para recodificar partes crticas del
cdigo. En 1972, sobre un PDP9, se poda escribir
cdigo ensamblador que se ejecutaba el doble de
rpido que cdigo FORTRAN compilado.
Los 80: Para mantener gran cantidad de cdigo
heredado (legacy code), escrito en ensamblador.
Hoy: Ya hay poco Legacy code que mantener.

Se estudia para entender la arquitectura de los


computadores y su conexin con los
compiladores de alto nivel.
4
fc2
Siglas de la compaa Advanced Risc Machines Ltd.
Fundada en 1990 por Acorn, Apple y VLSI
Technologies
En 1993, se uni Nippon Investment and Finance
Desarrollan procesadores RISC y SW relacionado
NO realizan fabricacin de circuitos
Sus ingresos provienen de los royalties de las
licencias, de las herramientas de desarrollo (HW y
SW) y de servicios que ofrecen

5
fc2

Procesadores con la misma arquitectura


(compatibilidad binaria), pero distinta implementacin
Principales familias
ARM1, ARM2,
ARM6, ARM7,
ARM7TDMI, ARM9,
ARM9TDMI,ARM9E,
ARM10, ARM11
Otras familias:
StrongARM,
XScale,
Cortex

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

Etiqueta: Referenciassimblicasde .global start


posicionesdememoria(texto+datos) .equ ONE, 0x01 @Constant
.data @Data
Directiva: accionesauxiliaresduranteel MYVAR: .word 0x02 @Variable
ensamblado(reservadememoria) .bss
Instruccin: delrepertoriodelARM RES: .space 4
Operandos: .text @Program
start: MOV R0, #ONE
Registros LDR R1, =MYVAR
Constantes:Decimalespositivosynegativos, LDR R2, [R1]
ohexadecimal(0x) ADD R3, R0, R2
Etiquetas LDR R4, =RES
Comentarios: caracteresseguidosde@. STR R3, [R4]
Puedenaparecersolosenunalnea. END: B.
.end

fc2

ARMmachineinstructionsareinfactricherthantheprevioussimple
example.Considerforinstance:
1)Instruction:ADDR3,R0,R2
COND OPCODE S Rn Rd Shift Amount Shift Rm

1110 000 0100 0 0000 0011 00000 000


0010
Where:
Rd:Destinationregister;RnandRm:sourceregisters
Shift field(XYZ)
XYindicateswhatkindofshifting(lsl,lsr,asr,ror)isapplied
Zindicateswhethertheshiftingisimmediateorregister
ShiftAmountfield:
IfZ=0,indicatesthenumberofbitstobeshifted
IfZ=1,the4leftmostbitsindicatewhichregisterspecifiesthenumberofbitstobe
shiftedandtherightmostbitisazero

2)Instruction:ADDR3,R0,#15
COND OPCODE S Rn Rd Rotate Immediate

1110 001 0100 0 0000 0011 0000 00001111 12


fc2
UncomputadorNO entiendecdigoensamblador.
Sloentiendecerosyunos(cdigomquina)
Cadainstruccinescritaencdigoensambladory
cadaetiqueta,sontraducidosmedianteel
ensambladoyelenlazadoencdigomquina:
OPCODE OPERANDODESTINO OPERANDOFUENTE1 OPERANDOFUENTE2
Instr.ensamblador ADD R3,R4,
Ensamblado R5

Desensamblado
Desensamblado:
Es una Interpretacin
delcdigo mquina

Instr.mquina 0010 0011 0100 0101 13


fc2

LasoperacionesdelARMrealmentesonms
potentesycomplejas:
1)Instruction:ADDR3,R0,R2
COND OPCODE S Rn Rd Shift Amount Shift Rm

1110 000 0100 0 0000 0011 00000 000


0010
Where:
Rd:Destinationregister;RnandRm:sourceregisters
Shift field(XYZ)
XYindicateswhatkindofshifting(lsl,lsr,asr,ror)isapplied
Zindicateswhethertheshiftingisimmediateorregister
ShiftAmountfield:
IfZ=0,indicatesthenumberofbitstobeshifted
IfZ=1,the4leftmostbitsindicatewhichregisterspecifiesthenumberofbitstobe
shiftedandtherightmostbitisazero
2)Instruction:ADDR3,R0,#15
COND OPCODE S Rn Rd Rotate Immediate

1110 001 0100 0 0000 0011 0000 00001111 14


fc2
Uncomputadordebesercapazde:
Realizarlasoperacionesmatemticaselementales:
Instruccionesaritmeticolgicas
Obteneryalmacenarlosdatosqueutilizala
instruccin:Instruccionesdeaccesoamemoria
Modificarelflujosecuencialdelprograma:
Instruccionesdesalto
Otrasdependiendodelascaractersticas
particularesdelaarquitectura

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)

1 registro destino r15 (pc)

cpsr 19
fc2

Lenguaje de programacin: maneja estructuras de datos


complejas (por ejemplo una matriz de datos).
Necesitamos una estructura de almacenamiento de datos
mucho mayor que el Banco de Registros La MEMORIA

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:

SUB R2, R2, R3

32
fc2
Eloperandoestenmemoriayladireccinde
memoriadondesteseencuentraest
almacenadaenunregistro:

LDR R2, [R1]

33
fc2

Eloperandoestenmemoria
Dir.deacceso=registro+desplazamiento

LDR r1, [pc, #16]

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

Registro Contenido Registro Contenido


r1 0x000000FA r1 0x000000FA
r2 0x0000F132 r2 0x0000F132
andr3,r1,r2
r3 0x00000000 r3 0x00000032

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

Direccinde Contenido Direccinde Contenido


Memoria Memoria
0x00000100 0xAABBCCDD str r3,[r1] 0x00000100 0x12345678
0x00000104 0x11223344 0x00000104 0x11223344
0x00000108 0x00FF55EE 0x00000108 0x00FF55EE

Registro Contenido
Direccinde Contenido
r1 0x00000100 Memoria
r2 0x0000F132 0x00000100 0xAABBCCDD

r3 0x12345678 0x00000104 0x11223344


0x00000108 0x12345678

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

ldr r5,a R5=12

fc2

int a[10]; a:.word 1,3,7,5,2,,4

a[0]=1; a =1020 0x00000001


a[1]=3; 1024 0x00000003
a[2]=7;
1028 0x00000007
a[3]=5;
a[4]=2; 1032 0x00000005
1036 0xFFFFFFFE
a[9]=4;

1066 0x00000004

ldr r5,a R5=1

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

ldr r5,[r2] R5=5 ldr r5,[r1,#12] R5=5

fc2

Dndeestlacomponentei?1020+4*i

ldr r1,=a R1=1020 a =1020 0x00000001


1024 0x00000003
1028 0x00000007
mov r2,i R2=3 1032 0x00000005
1036 0xFFFFFFFE

1066 0x00000004
ldr r5,[r1,r2,LSL#2] R5=5

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

SUFIJO DESCRIPCIN DE CONDICIN FLAGs


EQ Igual Z=1
NE No igual Z=0
CS/HS Sin signo, mayor o igual C=1
CC/LO Sin signo y menor C=0
MI Menor N=1
PL Positivo o cero (Zero) N=0
VS Desbordamiento (Overflow) V=1
VC Sin desbordamiento (No overflow) V=0
HI Sin signo, mayor C=1 & Z=0
LS Sin signo, menor o igual C=0 or Z=1
GE Mayor o igual N=V
LT Menor que N!=V
GT Mayor que Z=0 & N=V
LE Menor que o igual Z=1 or N=!V
AL Siempre

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++;}

array: Componentes del vector



mov r2, #0
ldr r3, =array
LOOP: cmp r2, #10
bhs Salir
ldr r4, [r3]
add r4, r4, r2
str r4, [r3]
add r2, r2, #1
add r3, r3, #4
b LOOP
Salir: 55
fc2

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;
} }

Saltoincondicional alcomienzo delafuncin foo


Pero necesitamos recordar ladireccin alaque
hayque volver tras ejecutar lafuncin !!

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;
} }

Cmo sabe lafuncin fuu dnde escribir elvalor


finaldelavariablex?
65
fc2

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; }
}

Alllamar afaa seusan losregistros r0yr1


Qu hacemos para llamar afuu?

67
fc2

int a; global Variablesglobales


int faa(int c) { Vivasdurantelaejecucinde
int x; local todoelprograma
x = foo(c,2);
return a+c+x; Tienenunaposicinfijaen
}
memoria
Variableslocales
Sloestnvivas mientras
estemosejecutandolafuncin
quelasdeclar
Dndesealmacenan?
68
fc2
Una estructura tipo "pila"(lastin firstout)es
idnea para resolverestos problemas
Lapila es una zona dememoria reservada para esta
tarea.NOes una memoria fsicamente separada.
Cada hilo enejecucin debe tener su propia pila (pues
tendr su propio rbol dellamadas afunciones)
apilar 3 apilar 7 desapilar

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

Siguiendo elAAPCSS,qu ocurre conelregistro LR?


00h Main:
04h BL fun1
08h
1 1. Llamada afun1
0Ch
LR 08h.PC 10h
4
10h fun1: ADD r0,r0,r1 2. Llamadaafun2
14h BL fun2 PC 1Ch.LR 18h
18h MOV pc,lr 3. Salidadefun2
2
PC 18h
1Ch fun2: SUB r0,r0,#3 3
4. Salidadefun1
20h MOV pc,lr
PC 18h

Slo sedebe preservar si noes una rutina hoja


Rutina hoja es aquella que nollamaaotras subrutinas. 74
fc2
Zonadelapilaquepertenece alafuncinen
ejecucin
Importanteporquedeterminaelmbitodelas
variableslocales
PuedeestaracotadonicamenteporelSP
(sabiendoeltamaodelmarco)
Eshabitualcontarconunsegundoregistropara
acotarlabaseinferiordelmarco,FP=R11(frame
pointer).

fc2 75

Estructuradeunarutina:
Cdigo de entrada (prlogo):
Construye el marco

Cuerpo de la rutina
Implementa la funcionalidad

Cdigo de salida (eplogo)


Destruye el marco
y
hace el retorno

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

Cuerpo cdigo de la rutina (hace uso de r2, r3, r4 y r5)


Potencialmente, hay llamadas a otras rutinas

Eplogo ADD SP, SP, #SpaceForLocalVaribles @Preparo SP para restaurar


LDR LR, [SP,#12] @ Restauro LR
LDR FP, [SP,#8] @ Restauro FP
LDR R5, [SP,#4] @ Restauro R5
LDR R4, [SP,#0] @ Restauro R4
ADD SP, SP, #16 @ Dejamos SP a su valor original
MOV PC, LR @ Vuelta a la funcin llamante
79
fc2

Ejemplo desubrutina,que modifica r2,r3,r4yr5,usa 2


variableslocalesynohace llamadas con>4argumentos
Pilaantes/despusllamada Piladespusdelprologo
Sup:SP=0x0C7FEFF4;FP=0x0C7FEFFC SP=0x0C7FEFD8FP=0x0C7FEFF0
LR=0x0C002000;R4=3;R5=9 LR=0x0C002000R4=3R5=9
Direccin Contenido Direccin Contenido
0x0C7FEFD8 0x0C7FEFD8
0x0C7FEFDC SP 0x0C7FEFDC Space for Local_var 2
0x0C7FEFE0 0x0C7FEFE0 Space for Local_var 1
0x0C7FEFE4 0x0C7FEFE4 3
0x0C7FEFE8 0x0C7FEFE8 9
0x0C7FEFEC 0x0C7FEFEC 0x0C7FEFFC
0x0C7FEFF0 FP 0x0C7FEFF0 0x0C002000
SP 0x0C7FEFF4 0x0C7FEFF4
0x0C7FEFF8 0x0C7FEFF8

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

PUSH {R4-R10,FP,LR} @ Copiar registros en la pila


ADD FP, SP, #(4*NumRegistrosApilados-4) @ FP direccin base del marco
SUB SP, SP, #4*NumPalabrasExtra @ Espacio extra necesario

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}

Direc. Contenido Pila


fp =r11 fp_inicial
sp_nuevo r42
...

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

lr =r14 Dir_retorno sp_inicial


rutinallamante
Marcodepila

...
...

fp_inicial 88

fc2
SUBSP,SP,#4*NumPalabrasExtra
Direc. Contenido Pila
sp_nn

fp =r11 fp_nuevo Pals. Extra


rutinallamada
Marcodepila
sp_nuevo r42
...
sp =r13 sp_nuevo sp_nn
r10

lr =r14 Dir_retorno fp_inicial


fp_nuevo Dir_retorno
pc =r15 val_pc sp_inicial

rutinallamante
Marcodepila
...
...

fp_inicial 89

fc2

SUB SP, FP, #(4*NumRegistrosApilados-4) @ SP direccin del 1er registro apilado


@ Se descartan las variables locales y argumentos
POP {R4-R10,FP,LR} @ Restaura los registros desde la pila
BX LR @ Retorno de subrutina

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

Numricos Lgicos Caracteres

Naturales Enteros Reales

Magnitudy Puntofijo,
Signo,C'2 puntoflotante
94
fc2
Tamaohabitual delosdatosbsicosde
lenguajesdealtonivel

Tipo dedato Tamao


char /unsigned char 1byte
short int 2bytes
int /unsigned int 4bytes
float 4bytes
double 8bytes

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

También podría gustarte