Documentos de Académico
Documentos de Profesional
Documentos de Cultura
SW
DIT-UPM, 2012. Algunos derechos reservados. Este material se distribuye bajo licencia Creative Commons disponible en: http://creativecommons.org/licenses/by-sa/3.0/deed.es
Procesador sotfware
Programa que, al ejecutarse en otro procesador (hardware o software), transforma unos datos de entrada en unos datos de salida
HW
SW
Tema 3: Estructura y funcionamiento de procesadores 4
Bajo
Ensambladores Se traducen con un programa ensamblador Compilados Se traducen con un programa compilador Interpretados Se interpretan con un programa intrprete De script Se interpretan con un programa intrprete
Alto
Dependiendo de qu es lo que interesa estudiar del sistema hay distintos niveles de abstraccin y distintos tipos de modelos. En este Tema estudiaremos
1
modelos de procesadores hardware en el nivel de mquina convencional y modelos de procesadores software (nivel de mquina simblica).
Tema 3: Estructura y funcionamiento de procesadores 7
Niveles de abstraccin
En procesadores hardware: Nivel de circuito elctrico: transistores, resistencias, voltajes, corrientes... (electrnica analgica). Pero un microprocesador puede contener miles de millones de transistores! Nivel de circuito lgico: puertas lgicas, operaciones (0 OR 1 = 1, etc.) (electrnica digital). Abstraccin de los circuitos internos de las puertas, de los voltajes... Pero un microprocesador puede contener decenas de millones de puertas! Nivel de mquina convencional: Buses, unidades aritmtica, lgica y de desplazamiento, registros, unidad de control, repertorio de instrucciones... Abstraccin de las puertas que componen las unidades. Modelos engorrosos por el lenguaje binario. Niveles superiores (hw+sw): Nivel de mquina operativa: instrucciones de mquina ms llamadas al sistema. Abstraccin de gestin de procesos, de almacenamiento... Nivel de mquina simblica: en lugar de instrucciones de mquina, su expresin en lenguaje ensamblador (o en un lenguaje de alto nivel). Abstraccin de ceros y unos.
Tema 3: Estructura y funcionamiento de procesadores 8
Modelos
R.A.E.: 11 acepciones de modelo: 1. m. Arquetipo o punto de referencia para imitarlo o reproducirlo. ... 4. m. Esquema terico [...] de un sistema o de una realidad compleja [...] que se elabora para facilitar su comprensin y el estudio de su comportamiento. ... 5. m. Objeto, aparato, construccin, etc., o conjunto de ellos realizados con arreglo a un mismo diseo. Auto modelo 1976. Lavadora ltimo modelo. ... Modelo estructural: descripcin del sistema como conjunto de partes (subsistemas) y sus interrelaciones. Modelo funcional: qu hace el sistema (cmo responde a las entradas, cmo se usa). Modelo procesal: cmo lo hace (cmo funciona).
UCP
datos UAL datos UE/S
instrucciones, y datos (operandos y resultados) direcciones (de MP y de UE/S) seales de control ("micrordenes")
10
4.096 palabras
Unidad de control:
micrordenes direccin de dato (a la UAL, la MP (a la MP y/o las UE/S) o las UE/S) direccin de la instruccin siguiente (a la MP)
UAL
UC
operando 1
operando 2
Tema 3: Estructura y funcionamiento de procesadores 11
Un programa es una sucesin de instrucciones de mquina. Cada instruccin es un conjunto de bits que especica una accin elemental en un subconjunto de bits llamado cdigo de operacin. Formato de instrucciones:
8 12 8 12
CO
CD
CO
CD
estado inicial
0 CP
Lee (extrae) de la MP la instruccin cuya direccin de memoria se encuentra en el registro contador de programa. Decodica los bits de la instruccin Ejecuta la instruccin generando las micrordenes oportunas.
ejecucin
lectura de instruccin
(M[(CP)]) (CP)+1 UC CP
decodificacin
(Simplicado: en los modelos de von Neumann haba dos instrucciones en cada palabra)
Tema 3: Estructura y funcionamiento de procesadores 14
Memoria:
20 KiB Caches varios GiB
Perifricos:
Terminales electromecnicos Ratn, LCD, almacenamiento, sensores y actuadores, comunicaciones... Con controladores inteligentes
15
Slo consideraremos buses paralelo, en los que se transmite un ujo de bytes o de n bytes. Tambin hay buses serie, en los que se transmite un ujo de bits serializados (USB), o 2n ujos de bits, si el bus es bidireccional y tiene n enlaces (PCIe).
Tema 3: Estructura y funcionamiento de procesadores 16
RA
incrementador (+4) bus UAL clk reset irq req r/w size
UAL
operando 2 operando 1
R0 R1
UC
UD
wait
WData[31:0]
RData[31:0]
C0
C1
C2
C3
MP
1b, 480 Mbps puerto USB puente sur puerto (southbridge, o USB ICH: I/O puerto Controller Hub) USB puerto puerto USB audio puerto PCIe x1 USB 2x500 MB/s switch
L2
bus del sistema (FSB: FrontSide Bus) 64b, 8512 MB/s PCIe x16 2x16b, 2x8000 MB/s
HDMI
puente PCI puerto 4b, 384 MB/s SATA puerto SATA puerto SATA
controlador super IO
modem
18
Fuente: http://focus.ti.com/docs/solution/folders/print/413.html
Tema 3: Estructura y funcionamiento de procesadores 20
Fuente: http://commons.wikimedia.org/wiki/File:Atm_blockdiagram.png
Tema 3: Estructura y funcionamiento de procesadores 21
Direccionamiento de la memoria
Espacio de direccionamiento: si el bus de direcciones tiene n bits, el procesador puede generar 2n direcciones de bytes. Entre la MP y los registros se pueden transferir bytes o palabras de k bytes. Convenios: Sobre el almacenamiento de una palabra en varios bytes: Extremista mayor o menor (estudiado en Tema 2). Sobre el direccionamiento de las palabras: En algunos procesadores (p. ej. ARM) es obligatorio que las direcciones de palabra sean mltplos de k : direcciones de palabra alineadas.
dir. byte 0 1 2 3 4 5 6 7 dir. palabra dir. byte 0 0 1 2 3 4 5 6 7 0 1 2 dir. palabra
23
Modos de direccionamiento
En las instrucciones que hacen referencia a memoria (las de transferencia de datos y las de transferencia de control) hay varios modos de obtener la direccin efectiva: Direccionamiento directo: El de von Neumman: la direccin est contenida en la misma instruccin. Direccionamiento inmediato: La instruccin contiene el operando. Direccionamiento indirecto: La direccin est en otra palabra de la memoria, o (ms frecuente) en un registro del procesador. Direccionamiento indexado: La direccin efectiva se obtiene sumando a un registro de base, o registro de ndice, un valor inmediato o el contenido de otro registro (veremos algunas variantes en BRM). Direccionamiento relativo al CP: La direccin efectiva se obtiene sumando una distancia (positiva o negativa) (offset) al valor que en ese momento tiene el contador de programa.
Tema 3: Estructura y funcionamiento de procesadores 24
Interrupciones
Mecanismo (combinacin de hardware y de software) para que el procesador pueda abandonar temporalmente la ejecucin de un programa y pasar a ejecutar una rutina de servicio que depende de la causa de la interrupcin: peticin de un perifrico, fallos del hardware... peticin del propio programa (llamadas al sistema operativo)
Tema 3: Estructura y funcionamiento de procesadores 26
El procesador BRM
BRM (Basic RISC Machine): Versin simplicada (subconjunto) de una arquitectura (familia de procesadores) real: ARM (Advanced RISC Machines): La arquitectura de 32 bits ms extendida Simulador ARMSim#: http://armsim.cs.uvic.ca/
27
RA
incrementador (+4) bus UAL clk reset irq req r/w size
UAL
operando 2 operando 1
R0 R1
UC
UD
wait
WData[31:0]
RData[31:0]
28
BRM: registros
R0 - R15: propsito general
Pero hay tres con funciones especiales: R13 = SP: puntero de pila (stack pointer) R14 = LR: registro de enlace (link register) R15 = PC: contador de programa (program counter)
Modo: 10000 = usuario; 10011 = supervisor I: 0 = interrupciones inhibidas; 1 = interrupciones permitidas N, Z, C, V: indicadores de negativo, cero, acarreo y desbordamiento RA, RDE, RDL, RIL, RID y RIE: transparentes en el nivel de mquina convencional
Tema 3: Estructura y funcionamiento de procesadores 29
lectura
decodificacin
ejecucin
tiempo
Cuando se est ejecutando la instruccin d el contador de programa contiene d + 8. Si la instruccin en d es una bifurcacin a d 1 hay que vaciar la cadena:
Direcciones de las instrucciones d+4
lec(d+4) dec(d+4)
lec(d)
dec(d)
ejec(d)
bifurca a d1
30
Instrucciones de procesamiento y movimiento de datos transferencias con MP y perifricos bifurcacin interrupcin de programa
0 0 I Cop S Rn Rd
Nmero 16 4 2 1
Op2
Cond
0 1
I P U B W L
Rn
Rd
Dist
Cond
1 0 1 L
Dist
Cond
1 1
1 1
31
Condiciones de ejecucin
Todas las instrucciones son condicionadas: Cond 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111 Hex. 0 1 2 3 4 5 6 7 8 9 A B C D E F Nem. EQ NE CS CC MI PL VS VC HI LS GE LT GT LE [AL] NV Condicin Z=1 Z=0 C=1 C=0 N=1 N=0 V=1 V=0 C=1yZ=0 C=0oZ=1 N=V N V Z=0yN=V Z=1oN V (por defecto) Signicado = sin signo < sin signo Negativo Positivo Desbordamiento No desbordamiento > sin signo sin signo con signo < con signo > con signo con signo Siempre Nunca
32
Cop 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111
Hex. 0 1 2 3 4 5 6 7 8 9 A B C D E F
Nem.
AND EOR SUB RSB ADD ADC SBC RSC TST TEQ CMP CMN ORR MOV BIC MVN
Accin operando1 AND operando2 Rd operando1 OR exclusivo operando2 Rd operando1 operando2 Rd operando2 operando1 Rd operando1 + operando2 Rd operando1 + operando2 + C Rd operando1 operando2 + C 1 Rd operando2 operando1 + C 1 Rd como AND, pero no se escribe en Rd como EOR, pero no se escribe en Rd como SUB, pero no se escribe en Rd como ADD, pero no se escribe en Rd operando1 OR operando2 Rd operando2 (el operando1 se ignora) Rd operando1 AND NOT operando2 Rd NOT operando2 (el operando1 se ignora) Rd
operando1 = (Rn); operando2 depende de I si S = 1 (nemnico: ADDS, etc.) se ponen los indicadores; con TST, TEQ, CMP y CMN, S = 1 siempre
Tema 3: Estructura y funcionamiento de procesadores 33
Operando1: El contenido del registro codicado en Rn (se ignora para MOV y MVN) Operando2: si I=0 (modo registro), el contenido del registro codicado en los 4 bits menos signicativos si I=1 (modo inmediato), el nmero binario en los 8 bits menos signicativos. Resultado en Rd (destino)
Cdigo fuente
Ejemplos:
MOV R6, R0 ADD R0, R0, R1 ADDS R0, R0, R1 MOV R6, #3 MOVEQ R6, #3 SUB R0, R0, #10
34
Un programa
Sumar 255 y 1 y dejar el resultado en R0 Pseudocdigo:
255 R1 1 R2 (R1)+(R2) R0
25 24 0 0 I Cop 21 20 19 S Rn 16 15 Rd 12 11 Op2 0
Instrucciones:
31
28
(formato
Cond
)
Hexadec. E3A010FF E3A02001 E0810002
35
Nemnico
Cdigo binario (cdigo objeto) 1110 00 1 1101 0 0000 0001 000011111111 1110 00 1 1101 0 0000 0010 000000000001 1110 00 0 0100 0 0001 0000 000000000010
Tema 3: Estructura y funcionamiento de procesadores
La aplicacin ARMSim#
Contiene: Un ensamblador del lenguaje ensamblador GNU Un simulador del procesador hardware ARM7TDMI Otras cosas (montador, simulador de cache...) Para empezar a usarlo:
1 2
4 5 6
Se carga el programa fuente (File Load). Automticamente, ARMSim# ensambla y, si no hay errores, presenta el resultado. El cdigo objeto se carga a partir de la direccin 0x1000 En la vista de memoria (activarla con View Memory) se pueden ver los contenidos Esta vista se puede seleccionar por bytes o por palabras Se simula la ejecucin con el botn Run Tambin se puede simular paso a paso (Debug Step into, o poniendo breakpoints) En todo momento se muestran los contenidos de los registros, en decimal o en hexadecimal
Tema 3: Estructura y funcionamiento de procesadores 37
El programa en ARMSim#
1: File > Load 5: Run 6: paso a paso 2: listados fuente y ensamblado
3: contenidos de la memoria
Recordar los casos sencillos: Operando1: El contenido del registro codicado en Rn (se ignora para MOV y MVN). Operando2: si I=0 (modo registro), el contenido del registro codicado en los 4 bits menos signicativos. Sobran 8 bits que se pueden aprovechar para indicar operaciones de desplazamiento o rotaciones previas sobre este registro. si I=1 (modo inmediato), el nmero binario en los 8 bits menos signicativos. [0..255]; si se usaran los 12, [0..4095]; con otro convenio, nmeros mayores.
Tema 3: Estructura y funcionamiento de procesadores 39
Si bits 4 a 11 = 0, Op2 = (Rm) Si bit 4 = 0, Op2 = despl(n,D,Rm); n = bits 7 a 11 D = 00: LSL; D = 01: LSR; D = 10: ASR; D = 11: ROR Si bit 4 = 1, Op2 = despl(n,D,Rm); n = (Rs)
despl_inmed
11 Rs
8 7 0
6 5 4 3 D 1
MOVS R3, R3, LSL #4 SUB R0, R1, R2, ASR #6 ADD R0, R0, R1, LSR R2
40
Si Operando2 255, en los bits 0 a 7, con bits 8 a 11 = 0 Si bits 8 a 11 0, indican una rotacin a la derecha de 2(rot) bits Ejemplos:
Cdigo fuente
UD
SUBS R0, R0, #10 MOV R6, #256 MOVEQ R6, #4080 MOV R6, #257
41
Necesidad de bifurcaciones
Frecuentemente, el algoritmo implica tomar un decisin. Ejemplo: clculo iterativo del factorial. Pseudocdigo: 1 fact repetir { factn fact n-1 n } hasta que n = 0 Adaptacin a BRM:
mov r0,#1 @ (R0) = fact mov r1,#n @ (R1) = n, n-1... mul r0,r0,r1 @ BRM no tiene "mul", pero ARM s subs r1,r1,#1 /* Si el resultado es 0, terminar; si no, volver a la instruccin "mul" */
Tema 3: Estructura y funcionamiento de procesadores 42
Transferencias de control
Valor R15 = PC. Ejemplos: MOV R15, #0xFFFFFF (direccionamiento directo) 0xE3E0F4FF MOVEQ PC, R0 (indirecto: si Z=1 bifurca a DE = (R0)) 0x01A0F000 Instrucciones de bifurcacin (B, BL, BEQ...BLHI...):
31 Cond 28 27 26 25 24 23 1 0 1 L Dist 0
DE = dir. instrucc. + 8 + 4Dist ( 32 MiB); DE R15 si L = 1 (instruccin BL), dir. instrucc. + 4 LR = R14 Instruccin de interrupcin de programa (SWI, SWIEQ...):
31 Cond 28 27 26 25 24 23 1 1 1 1 Ignorado por el procesador 0
43
El ensamblador ha calculado 0xFFC para el campo Dist, que es la representacin en complemento a 2 de -4. Al ejecutarse resultar DE = dir. instrucc. + 8 + 4Dist = 0x0010 + 8 + 4(-4) = 16 + 8 - 16 = 8, que es la direccin de mul (identicada por la etiqueta bucle en el cdigo fuente). Comprobar con ARMSim# que en R0 resulta 10! = 3628800 = 0x375F00 Como el programa se carga a partir de 0x1000, la direccin de mul es 0x1008, y la de bne, 0x1010.
Tema 3: Estructura y funcionamiento de procesadores 44
Subprogramas
Programa al que pueden llamar o invocar otros programas para realizar una funcin con distintos parmetros cada vez.
p d1 d2
Paso de parmetros
Programa llamada 1
Por registros (paso de valor) Por zonas de memoria apuntadas por registros (paso de referencia)
llamada 2
Direccin de retorno
En un registro especial (registro de enlace, LR)
Instruccin de llamada: guarda la direccin de retorno en LR y bifurca (instruccin BL en BRM) Instruccin de retorno: copia el contenido de LR en el contador de programa (MOV PC,LR en BRM)
Subprograma
retorno
45
001C E3A00001 0020 0024 0028 002C E0000091 E2511001 1AFFFFFC E1A0F00E
.equ n1,7 .equ n2,10 /* Llamadas al subprograma */ mov r1,#n1 bl fact mov r2,r0 @ (n1)! R2 mov r1,#n2 bl fact mov r3,r0 @ (n2)! R3 swi 0x11 /* Subprograma: (R1)! R0 */ fact: mov r0,#1 bucle: mul r0,r1,r0 subs r1,r1,#1 bne bucle mov pc,lr @ retorno del subprograma
Y si no disponemos de la instruccin mul? Escribimos un subprograma, mult, que haga (R1)(R0) R0 Pero al hacer bl mult se guardara la direccin de retorno a fact en LR, perdindose la de retorno al programa: problema del anidamiento Solucin: guardar previamente (LR) en la memoria (en una pila, ms adelante)
Tema 3: Estructura y funcionamiento de procesadores 46
Cuatro instrucciones: L 0 0 1 1 B 0 1 0 1 Nemnico STR STRB LDR LDRB Operacin (Rd) M[DE] (Rd[0..7]) 8 M[DE] (M[DE]) Rd (M[DE]) 8 Rd[0..7]; 0 Rd[8..31]
M[DE] = una palabra o un byte de la memoria, o un puerto (espacios compartidos) DE (direccin efectiva) = f(Rn,I,P,U,Dist) Rn: registro de ndice W: W = 1 para actualizar Rn en los modos preindexados Cuatro modos de direccionamiento determinados por I y P
Tema 3: Estructura y funcionamiento de procesadores 47
LDR R0, [R7], #4 STR R0, [R7], #-4 LDRB R0, [R7], #-8 STRB R0, [R7], #-1 STR LR,[SP],#-4 STRB R0, [R7]
Operacin (M[(R7)]) R0; (R7) + 4 R7 (R0) M[(R7)]; (R7) - 4 R7 (M[(R7)]) 8 R0; (R7) - 8 R7 (R0) 8 M[(R7)]; (R7) - 1 R7 (R14) M[(R13)]; (R13) - 4 R13 (R0) 8 M[(R7)]
Utilidad: Acceso a un byte (o una palabra) cuya direccin est en Rn Cuando Rn es R13 = SP, acceso a la pila
Tema 3: Estructura y funcionamiento de procesadores 48
El modo de direccionamiento es indirecto: R0 y R1 son punteros. En BRM se obtiene este efecto con postindexado inmediato y Dist = 0. Cdigo:
ldrb r2,[r0] @ Es lo mismo que ldrb r2,[r0],#0 ldrb r3,[r1] strb r2,[r1] strb r3,[r0] mov pc,lr @ Retorno del subprograma
Tema 3: Estructura y funcionamiento de procesadores 49
Escribir 50 veces las instrucciones? Mejor hacer un bucle: Las instrucciones de intercambio son solamente cuatro, pero, con ayuda de una instruccin de bifurcacin condicionada, se pueden ejecutar 50 veces Conforme se van ejecutando (a cada paso por el bucle) se van incrementado las direcciones: ldrb r2,[r0],#1, etc. Ser necesario un contador para comprobar el nal del bucle
Tema 3: Estructura y funcionamiento de procesadores 50
0000 E3A04000 0004 0008 000C 0010 0014 0018 001C 0020 E5D02000 E5D13000 E4C12001 E4C03001 E2944001 E3540032 1AFFFFF8 E1A0F00E
mov r4,#0 @ (R4) es un contador bucle: ldrb r2,[r0] @ (R0): puntero a una zona ldrb r3,[r1] @ (R1): puntero a la otra strb r2,[r1],#1 strb r3,[r0],#1 adds r4,r4,#1 cmp r4,r10 bne bucle @ FFFF8 = repr(-8); 0x1C+8-4*8 = 4 mov pc,lr @ (direccin de bucle)
rellene dos zonas de memoria con datos: dnde?, cmo? inicialice R10 con la longitud y R0 y R1 con las direcciones de comienzo: cmo?
.text @ @ @ @
Indica que lo que sigue es cdigo ejecutable Aqu vendran instrucciones de programa y subprogramas Como no hay nada, la direccin del primer dato es 0 (0x1000 una vez cargado en ARMSim#)
.data @ Indica que lo que sigue son datos .byte 64, 'A', 0b1000010 @ inserta los bytes 0x40, 0x41 y 0x42 .align @ inserta de uno a tres bytes 0x00 de modo que la @ direccin siguiente sea mltiplo de 4 .word 0x1AFFFFF8 @ inserta los bytes 0xF8, 0xFF, 0xFF y 0x1A @ (si el convenio es extremista menor) .skip 50 @ deja libres 50 bytes (valores indefinidos) .ascii "esta es una cadena" @ inserta los caracteres ASCII (18) .asciz "y esta es otra cad" @ aade 0x00 al final (19 bytes) .byte 255 @ otro byte, para comprobar lo anterior .end Mapa de memoria en ARMSim# (con Word Size 8 bits):
LDR R8, [R0, #4] LDR R8, [R0, #4]! STRB R8, [R0, #-1] STRB R8, [R0, #0] STRB R8, [R0] LDR R8, [PC, #500] LDR LR,[SP,#4]!
Utilidad: Cuando Rn es R15 = PC, el modo es relativo Cuando Rn es R13 = SP, acceso a la pila
Tema 3: Estructura y funcionamiento de procesadores 53
acceso a datos
00000008 E3E000FF ldr r0,=-256 @ igual que mvn r0, #0xFF: @ NOT(0x00...00FF) = 0xFF...FF00 @ = compl. a 2 de 256 R0 0000000C E59F0000 ldr r0 =4095 @ igual que ldr r0, [pc, #0] .end @ DE = (PC)+0 = 0x14 00000010 00000101 @ constantes generadas por el ensamblador 00000014 00000FFF @ ("pool de literales")
Tema 3: Estructura y funcionamiento de procesadores
55
El ensamblador ha calculado las direcciones de zona1 y zona2 y las ha puesto en un pool de constantes en 0x38 y 0x3C, y ha calculado las distancias a poner en las instrucciones que genera para las ldr
Tema 3: Estructura y funcionamiento de procesadores 56
0038 00000040 003C 0000004A 0040 00010203 zona1: .byte 0,1,2,3,4,5,6,7,8,9 04050607 0809 004A 0A0B0C0D zona2: .byte 10,11,12,13,14,15,16,17,18,19 0E0F1011 1213 .end
STR R0,[R2],R5 LDR R0,[R2],R5,ASR #4 LDREQB R0,[R2],R5,LSL #5 LDR R1,[R2,R4] LDR R1,[R2,-R4]! LDR R1,[R2,R4,LSL #2]
preindexados:
Operacin (R0) M[(R2)]; (R2) + (R5) R2 (M[(R2)]) R0; (R2) + (R5)16 R2 si Z = 0 no hace nada; si Z = 1: (M[(R2)])8 R0[0..7]; 0 R0[8..31]; (R2)+(R5)32 R2 (M[(R2)+(R4)]) R1 (M[(R2)-(R4)]) R1; (R2)-(R4) R2 (M[(R2)+(R4)4]) R1
SP (SP) = d d
4 +4 (pop) (push)
Guardar en la pila la direccin de retorno (push): STR LR,[SP],-#4 Bifurcar al subprograma: BL ... Sacar de la pila la direccin de retorno (pop): LDR LR,[SP,#4]! Introducirla en el contador de programa: MOV PC,LR
Instrucciones de retorno
1
En ARMSim#, 0x5400
fondo
00000000 00000004 00000008 0000000C 00000010 00000014 00000018 0000001C 00000020 00000024 00000028 0000002C 00000030 00000034
E3A01008 EB000004 E1A08000 E3A0100A EB000001 E1A0A000 EF000011 E40DE004 E3A00001 EB000003 E2511001 1AFFFFFC E5BDE004 E1A0F00E
/* Prueba de fact con llamadas */ mov r1,#8 bl fact @ (R1)! R0 mov r8, r0 @ para comprobar resultado: 8! en R8 mov r1, #10 bl fact mov r10,r0 @ 10! en R10 swi 0x11 /* Subprograma fact con llamada a un mult */ fact: str lr,[sp],#-4 @ push LR mov r0,#1 bucle: bl mult subs r1,r1,#1 bne bucle ldr lr,[sp,#4]! @ pop LR mov pc,lr
Tema 3: Estructura y funcionamiento de procesadores 59
Mdulos
Mdulo: programa que puede ensamblarse, dando como resultado un cdigo objeto (instrucciones de mquina en binario) este cdigo objeto no puede ejecutarse, porque necesita otros mdulos. Todo programa que no sea trivial debe descomponerse en mdulos para Facilitar la depuracin: comprobacin del buen funcionamiento de cada mdulo y correccin de posibles errores. Reutilizar los mdulos para otros programas. El montador (linker) es un programa que genera un cdigo objeto ejecutable combinando los cdigos objeto de los mdulos. En cada mdulo tienen que declararse: los smbolos externos (estn denidos en otros mdulos) con la directiva extern (para que el ensamblador no genere errores), y los smbolos de acceso (los pueden utilizar otros mdulos) con la directiva global (para que el montador no genere errores).
Tema 3: Estructura y funcionamiento de procesadores 60
Ejemplo de mdulos
/* Mdulo prueba */ .global _start .extern fact 00000000 E3A01008 _start: mov r1,#8 00000004 EBFFFFFE bl fact ... 00000010 EBFFFFFE bl fact ... .end /* Mdulo factorial */ .global fact .extern mult fact: str lr,[sp],#-4 mov r0,#1 bucle: bl mult ... mov pc,lr .end
El ensamblador genera el cdigo objeto, una tabla de smbolos de acceso (_start/0) y una tabla de smbolos externos (fact/{0x4, 0x10})) El ensamblador genera el cdigo objeto, una tabla de smbolos de acceso (fact/0) y una tabla de smbolos externos (mult/8) El ensamblador genera el cdigo objeto y una tabla de smbolos de acceso (mult/0).
61
/* Mdulo multiplica */ .global mult 00000000 E3A0C000 mult: mov r12, #0 ... mov pc,lr .end
Interrupciones en BRM
Para cada causa de interrupcin, una RS (rutina de servicio) Al pasar a atender a una interrupcin, el hardware, automticamente: (CPSR) SPSR Pone modo supervisor e inhibe interrupciones en CPSR (R15) R14_SVC (para volver de la RS: (R14) R15) Direccin comienzo RS R15 Vector de interrupcin: en BRM, primera instruccin de la RS Causas y vectores de interrupcin: Interrupcin Reset Instruccin desconocida de programa IRQ Causa Activacin de la seal reset El procesador no puede descodicar la instruccin Instruccin SWI. Activacin de la seal irq. Dir. vector 0x00 0x04 0x08 0x18
62
0x00000018
B 0x0002B8
0x00000100
RS Int. Desc.
0x00000600
RS SWI
0x00000B00
RS IRQ
0x3F000000
RS Reset
ROM
0x3FFFFFFF
63
Procesadores software
La denicin de la transparencia 4 (programa que transforma unos datos de entrada en unos datos de salida) es tan general que... todo programa es un procesador software! Nos referimos en particular a procesadores de lenguajes:
Procesador de lenguaje
Programa que procesa otros programas escritos en algn lenguaje no binario para que el resultado pueda ser interpretado por un procesador hardware (o por otro procesador de lenguaje intermedio). Ensambladores, compiladores e intrpretes (transparencias 5 y 6)
64
El proceso de ensamblaje
Normalmente, un ensamblador traduce en dos pasos:
1
Analiza el programa fuente. Si no tiene errores sintcticos construye una tabla de smbolos interna (etiquetas y sus direcciones). Vuelve a explorar las instrucciones del programa fuente y, con ayuda de la tabla de smbolos interna, va traduciendo cada una a binario. Genera un cdigo objeto, una tabla de smbolos de acceso, una tabla de smbolos externos y un diccionario de reubicacin.
Diccionario de reubicacin:
Lista de las direcciones cuyos contenidos deben cambiarse sumndoles d cuando el cdigo objeto se cargue a partir de la direccin d y no de 0. Ejemplo: En el programa del intercambio de zonas (transp. 56),
Direccin 0x0038 0x003C 0x0040 a 0x0049 0x004A a 0x0053 Contenido puesto por el ensamblador 0x0040 (direccin de la zona 1) 0x004A (direccin de la zona 2) datos de la zona 1 datos de la zona 2
Si el cdigo se carga a partir de la direccin d = 0x1000, 0x0038 y 0x003C pasarn a ser 0x1038 y 0x103C, y a sus contenidos hay que sumarles 0x1000.
Tema 3: Estructura y funcionamiento de procesadores 65
prueba
factorial
multiplica
00000000 E3A0C000
/* Mdulo multiplica */ .global mult mult: mov r12, #0 ... mov pc,lr
Smbolo Valor Externos fact 0x4,0x10 Acceso _start 0 Externos mult 0x8 Acceso fact 0 Externos Acceso mult 0
66
El proceso de montaje
El montador (linker) coloca los mdulos objeto generados por el ensamblador uno tras otro, pone los valores adecuados de acuerdo con las tablas de smbolos externos y de acceso, y genera un cdigo objeto ejecutable y un diccionario de reubicacin cdigo objeto global. tabla de smbolos
mdulo fuente factorial.s Ensamblador mdulo objeto: externos tabla de smbolos factorial.o de acceso diccionario de reubicacin (vaco) cdigo objeto mdulo de carga: diccionario de reubicacin prueba (vaco)
Montador
Cargador reubicador
cdigo ejecutable
67
El proceso de compilacin
Funcionalmente, un compilador hace lo mismo que un ensamblador: Mdulo fuente (nombre.c) Mdulo objeto (nombre.o)
mdulo objeto:
Optimizador
factorial.o
69
El proceso de interpretacin
El intrprete no genera ningn cdigo objeto Cada vez que analiza un sentencia genera las rdenes oportunas para el procesador hardware (o para otro procesador intermedio, como el de grcos)
70
<p>Un prrafo que puede contener otros elementos</p> Sin contenido. Ejemplo: <img src="URL de la imagen" width="160">
Las marcas de apertura pueden contener atributos con valores: src, width... El documento debe tener un elemento raz, <html>, conteniendo dos elementos: <head>, que contiene elementos con metadatos, y <body>, que contiene elementos con datos. Estructura general de un documento HTML:
<html> <head> <meta ... > <title>...</title> </head> <body> <!-- Esto es un comentario --> <!-- ... -> </body> </html>
Tema 3: Estructura y funcionamiento de procesadores 71
ste es un documento XML correcto. Nosotros entendemos lo que signican las marcas, pero un procesador no, a menos que lo acompaemos de otro documento en el que se denen los signicados.
Tema 3: Estructura y funcionamiento de procesadores 73
JavaScript
No es Java Lenguaje interpretado que se ejecuta en un navegador (o en otra aplicacin) Pginas HTML dinmicas:
Validacin de datos antes de su envo al servidor Apertura de ventanas emergentes Cambio del contenido de los elementos cuando el cursor pasa por ellos Cambios parciales en la presentacin respondiendo a mensajes del servidor Interaccin dinmica con el servidor ...
JavaScript: Ejemplo
<html> <head> <script type="text/javascript"> Antes: function factorial(n){ fact = 1; while (n != 0) { fact = fact * n; n = n-1; } return fact; } function numero(elemento) { return (parseInt(elemento.value)); Despus: } function presenta(z) { document.getElementById("F").innerHTML= "El factorial de "+z+" es "+factorial(z); } </script> </head> <body style="background:#FFF8DC"> <form>Escribe un nmero: <input type="text" value="" size="10" onChange="x = numero(this)"><br> <input type="button" value="Calcular el factorial" onClick="presenta(x)"> </form> <p id="F">Aqu aparecer el resultado</p> </body></html>
77
Internet
7. Procesa los datos 8. Actualiza la pgina
Tema 3: Estructura y funcionamiento de procesadores
78