Upload
cranckcracker123
View
6
Download
1
Embed Size (px)
Citation preview
Algorítmez: modelo estructural
bus A
bus C
bus D
UC ML
UAL
UD
UCP
16
16
RE
MP
UGM
16
8/16
13
8/16
49
CGraf CE/S
8/168/16
8
8/16
INT0
INT7CInt
8/16 8/16
CADM
8/16 8/16 8
20
8
c© 2009 DIT-ETSIT-UPM Algorítmez: la UCP transp. 1
Memoria y registros
♣ MP: ♣ ML:0000
0001
0002
0003
0004
0005
0006
palabra 0
palabra 2
palabra 4
palabra 1
palabra 3
palabra 5
FFFFpalabra FFFE
byte 0byte 1byte 2byte 3byte 4byte 5byte 6
byte FFFF
64 KB
015
RPG
R13
R0
R1
R14 = PP
R15 = CP
(1 KB de ROM: H’FC00–H’FFFF)
♣ Registro de estado:
ZV NCPINRAS HSUP
01234891015
c© 2009 DIT-ETSIT-UPM Algorítmez: la UCP transp. 2
Formatos y convenios de representación
Números enteros:
• 8 ó 16 bits
• Complemento a 2
• Extremista menor
Cadenas de caracteres:
• ISO Latin 9
• Extremista menor
Instrucciones:
7 4 3 0
CRX CR
7 0
CD0
7 0
CD1
7 6 5 4 3 0
T MD COI X
c© 2009 DIT-ETSIT-UPM Algorítmez: la UCP transp. 3
Tipos de instrucciones
T Instrucciones Long. Comentarios
00 no operando,no bifurcación
1 byte No direcciona MP ni ML;MD=φφ
01 registro 2 bytes Direcciona ML(con campo CR); MD=φφ
10 registro-memoria 2, 3 o 4bytes
Longitud depende de MD
11 BR, BZ... CALL(+CMP, LD .E...)
2, 3 o 4bytes
Longitud depende de MD
c© 2009 DIT-ETSIT-UPM Algorítmez: la UCP transp. 4
Instrucciones del tipo 0
7 6 5 4 3 0
I Xø ø CO0 0
hex. nem. hex. nem.00 CLRC 05 BRKV01 CLRV 06 NOP02 EI 07 WAIT03 DI 08 HALT04 BRK 09 RET
0A RETIc© 2009 DIT-ETSIT-UPM Algorítmez: la UCP transp. 5
Instrucciones del tipo 1
7 6 5 4 3 0
I Xø ø CO0 1
7 4 3 0
CRø ø ø ø
(salvo para IN y OUT)
hex. nem. hex. nem.40 SHR 48 IN41 SHL 49 OUT42 ROR 4A PUSH43 ROL 4B POP44 RORC 4C CLR45 ROLC 4D NOT46 SHRA 4E NEG47 SHLA 4F ADJ
c© 2009 DIT-ETSIT-UPM Algorítmez: la UCP transp. 6
Instrucciones del tipo 2
7 4 3 0
CRX CR
7 0
CD0
7 0
CD1
7 6 5 4 3 0
MD COI X1 0
si modo inmediato , o indexado, o relativo, o directo
si modo inmediato (2 bytes), o directo
hex. nem. hex. nem.?0 ADD ?8 AND?1 ADD.B ?9 OR?2 ADDC ?A LD?3 ADDC.B ?B LD.B?4 SUB ?C ST?5 SUB.B ?D ST.B?6 SUBC ?E —?7 SUBC.B ?F —
? ∈ {8, 9, A, B}
c© 2009 DIT-ETSIT-UPM Algorítmez: la UCP transp. 7
Instrucciones del tipo 3
El mismo formato del tipo 2, con T=11
hex. nem. hex. nem.?0 LD .E ?8 BC?1 ST .E ?9 BNC?2 LD.B .E ?A BV?3 ST.B .E ?B BNV?4 CMP ?C BN?5 CMP.B ?D BNN?6 CALL ?E BZ?7 BR ?F BNZ
? ∈ {C, D, E, F}
c© 2009 DIT-ETSIT-UPM Algorítmez: la UCP transp. 8
Modelo procesal
Para cada instrucción, el contador de programase incrementa 1, 2, 3 o 4 veces, dependiendo de T y de MD:H'FC00 → CP (primera dire ión de la ROM)repetir siempre {leer el byte MP[(CP)℄; (CP) + 1 → CP;des odifi arsi tiene segundo byte {leer el byte MP[(CP)℄; (CP) + 1 → CP;si tiene ter er byteleer el byte MP[(CP)℄; (CP) + 1 → CP;}eje utar;}¿Qué pasa con el cuarto byte?...
c© 2009 DIT-ETSIT-UPM Algorítmez: la UCP transp. 9
Modos de direccionamiento
MD Nombre Efecto Resultado para(CRX)=H’F
00 autoincremento DE=(RX)(RX)+2→ RXó (RX)+1→ RX
inmediato (conCD de 1 o 2bytes)
01 indexado DE=(CD)+(RX)CD: 1 bytecon signo
relativo a CP
10 autoincrementoindirecto
DE=((RX))(RX)+2→RX
directo (con CDde 2 bytes)
11 indexadoindirecto
DE=((CD)+(RX))CD: 1 bytecon signo
relativo a CP eindirecto
c© 2009 DIT-ETSIT-UPM Algorítmez: la UCP transp. 10
Autoincremento/inmediato: ejemplo
Código fuente:ADD .3, [.5++℄ Código objeto:1000000001010011 Comentarios:T = 2; MD = 00; CO = 0RX = R5; DE = (R5)(R3) + ((R5)) → R3,(R5) + 2 → R5Código fuente:ADD .3, [.15++℄DATA 10 Código objeto:[d℄ 10000000[d+1℄ 11110011[d+2℄ 00001010[d+3℄ 00000000
Comentarios:T = 2; MD = 00; CO = 0RX = R15; DE = (R15) = d+2(R3) + (MP[d+2℄) → R3,(R15) + 2 → R15El ensamblador reconoce ADD .3,#10 y lo traduce por ese mismo código.
c© 2009 DIT-ETSIT-UPM Algorítmez: la UCP transp. 11
Autoincremento indirecto/directo: ejemplo
Código fuente:ADD .3, [[.5++℄℄Código objeto:1010000001010011 Comentarios:T = 2; MD = 10; CO = 0RX = R5; DE = (MP[(R5)℄)(R3) + ((MP[(R5)℄)) → R3,(R5) + 2 → R5Código fuente:ADD .3, [[.15++℄℄DATA 10 Código objeto:[d℄ 10100000[d+1℄ 11110011[d+2℄ 00001010[d+3℄ 00000000
Comentarios:T = 2; MD = 10; CO = 0RX = R15;DE = (MP[d+2℄) = 10(R3) + (MP[10℄) → R3,(R15) + 2 → R15El ensamblador reconoce ADD .3, /10 y lo traduce por ese mismo código.
c© 2009 DIT-ETSIT-UPM Algorítmez: la UCP transp. 12
Direccionamiento relativo a programa: ejemplo
Código fuente:BR PRCIEN DATA 100PR ...
Código objeto:1101011111110000000000100110010000000000...
Comentarios:T = 3; MD = 01; CO = 7RX = R15CD = 2 (DE = dir. sgte. + 2)D'100 = H'64 en una palabra,extremista menor
c© 2009 DIT-ETSIT-UPM Algorítmez: la UCP transp. 13
Programas dependientes de su ubicación
Código fuente Código objetoORG 0BUCLE LD.B .1,/DATO [0℄ 10101011[1℄ 11110001[2℄ 00010000[3℄ 00000000SUB.B .1,#1 [4℄ 10000101[5℄ 11110001[6℄ 00000001ST.B .1,/DATO [7℄ 10101101[8℄ 11110001[9℄ 00010000[10℄ 00000000BNZ /BUCLE [11℄ 11101111[12℄ 11110000[13℄ 00000000[14℄ 00000000HALT [15℄ 00001000DATO DATA.B 10 [16℄ 00001010c© 2009 DIT-ETSIT-UPM Algorítmez: la UCP transp. 14
Programas independientes de su ubicación
Código fuente Código objeto ComentariosBUCLE LD.B .1, DATO [d℄ 10011011[d+1℄ 11110001[d+2℄ 00001010 D'10; d+3+10 = d+13SUB.B .1,#1 [d+3℄ 10000101[d+4℄ 11110001[d+5℄ 00000001ST.B .1, DATO [d+6℄ 10011101[d+7℄ 11110001[d+8℄ 00000100 D'4; d+9+4 = d+13BNZ BUCLE [d+9℄ 11011111[d+10℄ 11110000[d+11℄ 11110100 D'-12; d+12-12 = dHALT [d+12℄ 00001000DATO DATA.B 10 [d+13℄ 00001010c© 2009 DIT-ETSIT-UPM Algorítmez: la UCP transp. 15
Programas reubicables
El primer programa no es independiente de su ubicación,pero sí reubicable
En tiempo de carga, mediante un ensamblador reubicante y uncargador reubicador:
• ensamblador ⇒ diccionario de reubicación:{direcciones} = {2, 9, 13}
• cargador: suma a las palabras de esas direcciones laconstante de reubicación (dirección de carga)
O bien, en tiempo de ejecución, mediante hardware:
• registros de base, o de segmento (no en Algorítmez)
• en Algorítmez, UGM
c© 2009 DIT-ETSIT-UPM Algorítmez: la UCP transp. 16
Instrucciones privilegiadas
EI, DI, RETI, LD .E (pero no LD.B .E)IN, OUTWAIT, HALTSu intento de ejecución cuando (SUP)=0 provoca unainterrupción por violación del modo usuario
c© 2009 DIT-ETSIT-UPM Algorítmez: la UCP transp. 17
Lenguaje ensamblador
Seudoinstrucciones: RES, RES.B, DATA, DATA.BDirectivas:
• ORG <dir>
• EQU <cte, símb. o expr.>
• MODULE <nombre>
• FROM <nombre>IMPORT <simb1>,<simb2>,...
• EXPORT <simb1>, <simb2>, ...
• END, o END <etiqueta>
Expresiones:
• Se construyen con símbolos, «+», «–», «(» y «)»
• Se evalúan en tiempo de traducción
c© 2009 DIT-ETSIT-UPM Algorítmez: la UCP transp. 18
Lenguaje ensamblador: direccionamiento (1)
Modo Ejemplos Efectosauto-incremento
LD.B .0,[.3++℄ ((R3))→R0 (byte);(R3)+1→R3BR [.3++℄ (R3)→CP; (R3)+2→R3
indexado LD.B .0,/ETI[.3℄ (d(ETI)+(R3))→R0 (byte)BR /ETI[.3℄ d(ETI)+(R3)→CPauto-incrementoindirecto
LD.B .0,[[.3++℄℄ (((R3)))→R0 (byte);(R3)+2→R3BR [[.3++℄℄ ((R3))→CP; (R3)+2→R3
indexadoindirecto
LD.B .0,[/ETI[.3℄℄ ((d(ETI)+(R3)))→R0 (byte)BR [/ETI[.3℄℄ (d(ETI)+(R3))→CP
c© 2009 DIT-ETSIT-UPM Algorítmez: la UCP transp. 19
Lenguaje ensamblador: direccionamiento (2)
Modo Ejemplos Efectosinmediato LD.B .0,#-125 H’83→BR0 (8 bits)BR #-125 absurdorelativo aprograma
LD.B .0,$ETIo bien: LD.B .0,ETI ((CP)+drel(ETI))→BR0BR $ETIo bien: BR ETI (CP)+drel(ETI)→CP
directo LD.B .0,/ETI (d(ETI))→BR0BR /ETI d(ETI)→CPrelativo eindirecto
LD.B .0,[$ETI℄o bien: LD.B .0,[ETI℄ (((CP)+drel(ETI)))→BR0
BR [$ETI℄o bien: BR [ETI℄ ((CP)+drel(ETI))→CP
c© 2009 DIT-ETSIT-UPM Algorítmez: la UCP transp. 20
Programa ensamblador
módulofuente Ensamblador
móduloobjeto
PROG.ALG PROG.OBA
código objeto
tabla de símbolos externos
tabla de símbolos de acceso
diccionario de reubicación
Formato del fichero PROG.OBA:Cabecera (header):número mágico + nombre
El resto, como una sucesión deregistros (records) de longitud variable
Registro de código:NB
DIR
SUMPR
bytes de código
c© 2009 DIT-ETSIT-UPM Algorítmez: la UCP transp. 21
Montador y cargador
Montador
módulosobjeto
código objeto
diccionario de reubicación
módulode carga
PROG.OBA
PROG1.OBA
PROG2.OBA PROG.LNA
Cargadorreubicador
módulode carga
MP
códigoejecutable
constante dereubicación = CR
CRPROG.LNA
c© 2009 DIT-ETSIT-UPM Algorítmez: la UCP transp. 22
Intercambio en la MP, versión 1
R0 y R1 para punteros a las zonas
R2 y R3 para almacenamiento temporal
Lecturas con modo indexado sobre dirección 0
Escrituras con modo autoincremento
Bucle: BUCLE LD.B .2,/0[.0℄LD.B .3,/0[.1℄ST.B .2,[.1++℄ST.B .3,[.0++℄CMP .0,#FINALBNZ BUCLEc© 2009 DIT-ETSIT-UPM Algorítmez: la UCP transp. 23
Intercambio en la MP, versión 2 (mal)
R0 como registro de índice sobre direcciones de comienzo
R2 y R3 para almacenamiento temporal
Bucle: BUCLE LD.B .2,/100[.0℄LD.B .3,/200[.0℄ST.B .2,/200[.0℄ST.B .3,/100[.0℄ADD .0,#1CMP .0,#50BNZ BUCLE¡Imposible!
c© 2009 DIT-ETSIT-UPM Algorítmez: la UCP transp. 24
Intercambio en la MP, versión 3
R0 y R1 para LD (con modo autoincremento)R3 y R4 para ST (con modo autoincremento)R5 y R6 para almacenamiento temporal
Ejercicio: escribir un subprogramaArgumentos de entrada: direcciones comienzo zonasen R0 y R1, y longitud de ambas en R2
Bucle: BUCLE LD.B .5,[.0++℄LD.B .6,[.1++℄ST.B .5,[.4++℄ST.B .6,[.3++℄CMP .0,FINZ1BNZ BUCLERETc© 2009 DIT-ETSIT-UPM Algorítmez: la UCP transp. 25
Suma con doble precisión (subprograma)
(R1,R0)+(R3,R2)→R1,R0
Versión 1: Versión 2, reinvocable («reentrante»):MODULE SUMDPEXPORT SUMSUM ST .2,TEMP1ST .3,TEMP2ADD .0,TEMP1ADDC .1,TEMP2BRKVRETTEMP1 RES 1TEMP2 RES 1END
MODULE SUMDPEXPORT SUMSUM PUSH .3PUSH .2ADD .0, [.14++℄ADDC .1, [.14++℄BRKVRETENDc© 2009 DIT-ETSIT-UPM Algorítmez: la UCP transp. 26
Subprogramas: paso de argumentos (o parámetros)
Paso de valor o paso de referencia (dirección)
Reserva estática (en MP) o dinámica (en registros o en pila)
Ejemplo de paso de parámetros por la pila:
d
PP = R14
direcciónde retorno
multiplicador
multiplicandod−2
d−4
d−6
d−6
...PUSH .1; pasa el multipli andoPUSH .2; pasa el multipli adorCALL /MULT; (R1)×(R2) → pilaPOP .3; re oge el resultadoPOP .4; (32 bits)...¿Cómo los coge el subprograma?¿Cómo queda la pila al salir de MULT ?
c© 2009 DIT-ETSIT-UPM Algorítmez: la UCP transp. 27
Traducción de programas de alto nivel
Programa en C:int fa torial(int num) {int fa t = 1;do {fa t = num*fa t;num = num - 1;} while (num > 0);return fa t;} ...int f;/* llamada para 5!: */f = fa torial(5);
Resultado de la compilación:FACT LD .1,/2[.14℄LD .2,#1BUC CALL /MULT; (R1)×(R2)→ R2(16 bits)SUB .1,#1BNZ BUCRET...F RES 1...LD .0,#5PUSH .0CALL /FACT ; en [1500℄,ADD .14,#2; (p. ej.)ST .2,Fc© 2009 DIT-ETSIT-UPM Algorítmez: la UCP transp. 28
Traducción de una función recursivaint fa torial(int num) {int fa t;if (num < 2) fa t = 1;else fa t = num * fa torial(num-1);return fa t;}FACT LD .1,/2[.14℄CMP .1,#2BN CIERRESUB .1,#1PUSH .1CALL FACT ;en [516℄, p.ej.ADD .14,#2 ; en [519℄ADD .1,#1CALL /MULRETCIERRE LD .2,#1RET
1504
4 4
1504
3PP
PP
(a) tras la llamada del programa
(b) tras la primera llamada a sí misma
4
1504
3
2
4
1504
3
2
1PP
PP
(c) tras la segunda llamada a sí misma
(d) tras la tercera llamada a sí misma
519
519
519
519
519
519
c© 2009 DIT-ETSIT-UPM Algorítmez: la UCP transp. 29
Traducción del «paso por referencia»
Programa en C:void fa torial(int num, int *fa t){ *fa t = 1;do {*fa t = num * *fa t;num = num-1;} while (num > 0);}int f;/* Llamada para 5!: */fa torial(5,&f);
Resultado de la compilación:FACT LD .0,/2[.14℄LD .1,/4[.14℄LD .2,#1BUCLE CALL /MULSUB .1,#1BNZ BUCLEST .2,[.0++℄RET---F RES 1; Llamada:LD .0,#5PUSH .0LD .0,#FPUSH .0CALL /FACTADD .14,#4---c© 2009 DIT-ETSIT-UPM Algorítmez: la UCP transp. 30