15
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/16 8/16 8 8/16 INT0 INT7 CInt 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 FFFF palabra FFFE byte 0 byte 1 byte 2 byte 3 byte 4 byte 5 byte 6 byte FFFF 64 KB 0 15 RPG R13 R0 R1 R14 = PP R15 = CP (1 KB de ROM: H’FC00–H’FFFF) Registro de estado: Z V N C PIN RAS H SUP 0 1 2 3 4 8 9 10 15 c 2009 DIT-ETSIT-UPM Algorítmez: la UCP transp. 2

lecc6

Embed Size (px)

Citation preview

Page 1: lecc6

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

Page 2: lecc6

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

Page 3: lecc6

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

Page 4: lecc6

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

Page 5: lecc6

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

Page 6: lecc6

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

Page 7: lecc6

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

Page 8: lecc6

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

Page 9: lecc6

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

Page 10: lecc6

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

Page 11: lecc6

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

Page 12: lecc6

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

Page 13: lecc6

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

Page 14: lecc6

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

Page 15: lecc6

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