Escola Politècnica Superior. UIB FONAMENTS DE COMPUTADORS Informàtica de Gestió i Sistemes Enunciats i sol.lucions problemes TEMA 1 c dels professors de l’assignatura ° Conjunt de problemes #1 P1. Atès el següent programa pel PDP-11: loop: N = 3. U: .BYTE 4.,10.,6.,3. S: .BLKW 1 .EVEN .REGDEF .ENTRY mov #0,S mov #0,R0 mov #N,R2 movb U(R0),R3 inc R0 movb U(R0),R4 sub R3,R4 add R4,S sob R2,loop halt Suposant que el programa s’emmagatzemarà a partir de la posició 200 Oct (això significa, en particular, que l’adreça d’inici d’U serà 200 Oct), indica quin seria el contingut de la memòria. És a dir, començant a la posició 200 Oct codifica tot el programa fins al HALT, incloent les dades (indica a més l’adreça de les posicions de memòria a mesura que vagis fent la codificació). Per tal de fer més clara la teva resposta empra la fulla TABULADA adjunta a l’enunciat i també deixa el resultat final en HEXADECIMAL. NOTA: Els formats de codificació per a les instruccions que apareixen al programa aixı́ com dels modes d’adreçament, s’indiquen a les taules següents: MNEMÒNIC add halt inc mov movb sob sub FORMAT 0110 src dst 0000 000 000 000 000 0000 101 010 dst 0001 src dst 1001 src dst 0111 111 reg q 1110 src dst MODE D’ADREÇAMENT registre postincrement predecrement indexat CODIFICACIÓ DIRECTE INDIRECTE 000 001 010 011 100 101 110 111 P2. Atès el següent programa pel PDP-11: et1: et2: N=3. U: .BYTE 5.,3.,8. V: .BYTE 4.,3.,9. C: .BLKW 1 .EVEN .REGDEF .ENTRY mov #0,C mov #N,R5 dec R5 cmpb U(R5),V(R5) bmi et2 inc C dec R5 bpl et1 halt Determina el nombre d’accessos a memòria que suposa la seva execució. Per accessos a memòria s’ha d’entendre no tan sols els accessos a operands, sino també el fetch de les diferents parts de la instrucció. Indica amb una F els accessos que són de fetch i amb ER i EW les lectures i escriptures, respectivament, generades amb l’execució de cada instrucció. NOTA: Recorda que el bus de dades del PDP-11 és de 16 bits. No confonguis els accessos a les diferents parts de la instrucció (accessos de fetch) amb la fase de fetch. (nota 1) (nota 2) (nota 3) loop: S: U: ADREÇA b15 4., 10. 200 0 6., 3. 202 0 ? 204 ? mov #0,S 206 0 210 0 (nota 1) 212 1 mov #0,R0 214 0 216 0 mov #N,R2 220 0 222 0 movb U(R0),R3 224 1 226 0 inc R0 230 0 movb U(R0),R4 232 1 234 0 sub R3,R4 236 1 add R4,S 240 0 (nota 2) 242 1 sob R2,loop (nota 3) 244 0 halt 246 0 204(8 = 214(8 + Xs ⇒ Xs = −8(10 204(8 = 244(8 + Xs0 ⇒ Xs0 = −32(10 224(8 = 246(8 − 2q ⇒ q = 9(10 z b14 0 0 ? 0 0 1 0 0 0 0 0 0 0 0 0 1 1 1 1 0 b13 0 0 ? 0 0 1 0 0 0 0 0 0 0 0 0 1 1 1 1 0 b12 0 0 ? 1 0 1 1 0 1 0 1 0 0 1 0 0 0 1 1 0 b11 1 0 ? 0 0 1 0 0 0 0 1 0 1 1 0 0 0 1 1 0 b10 0 0 ? 1 0 1 1 0 1 0 1 0 0 1 0 0 0 1 1 0 b9 1 1 ? 0 0 1 0 0 0 0 0 0 1 0 0 0 0 1 1 0 b8 0 1 ? 1 0 1 1 0 1 0 0 0 0 0 0 0 1 1 0 0 }| b7 0 0 ? 1 0 1 1 0 1 0 0 1 1 0 1 1 0 1 1 0 b6 0 0 ? 1 0 1 1 0 1 0 0 0 0 0 0 1 0 1 0 0 b5 0 0 ? 1 0 1 0 0 0 0 0 0 0 0 0 0 1 1 0 0 b4 0 0 ? 1 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 b3 0 0 ? 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 CONTINGUT DE LA MEMÒRIA EN BINARI b2 1 1 ? 1 0 0 0 0 0 0 0 0 0 1 0 1 1 0 0 0 b1 0 1 ? 1 0 0 0 0 1 1 1 0 0 0 0 0 1 0 0 0 b0 0 0 ? 1 0 0 0 0 0 1 1 0 0 0 0 0 1 0 1 0 { HEX 0 A 0 0 3 0 ? ? ? 1 5 F 0 0 0 F F F 1 5 C 0 0 0 1 5 C 0 0 0 9 C 0 0 0 8 0 A 8 9 C 0 0 0 8 E 0 C 6 1 3 F F E 7 E 8 0 0 0 4 6 ? 7 0 8 0 0 2 3 3 0 0 4 0 4 7 0 9 0 P1. P2. mov #0,C mov #N,R5 dec R5 cmpb U(R5),V(R5) bmi et2 inc C dec R5 bpl et1 halt 3 2 1 3 1 2 1 1 1 (F) (F) (F) (F) (F) (F) (F) (F) (F) + + + + + + + + + 0 0 0 2 0 1 0 0 0 (ER) (ER) (ER) (ER) (ER) (ER) (ER) (ER) (ER) + + + + + + + + + 1 0 0 0 0 1 0 0 0 (EW) (EW) (EW) (EW) (EW) (EW) (EW) (EW) (EW) 1 1 1 3 3 2 3 3 1 vegada vegada vegada vegades vegades vegades vegades vegades vegada Total F = 3 + 2 + 1 + 3 × 3 + 1 × 3 + 2 × 2 + 1 × 3 + 1 × 3 + 1 = 29 Total ER = 2 × 3 + 1 × 2 = 8 Total EW = 1 + 1 × 2 = 3 Total = 40 Conjunt de problemes #2 Sea el siguiente programa para el PDP-11, que comienza en la dirección 200 Oct: N = 3 D: .BYTE 7,10,15 R: .BYTE 0,0,0 .EVEN .REGDEF .ENTRY mov #N,R4 dec R4 proc1: bitb #1,D(R4) beq proc2 movb #1,R(R4) proc2: dec R4 bpl proc1 halt P1. Suponiendo que el programa se almacenará a partir de la posición 200 Oct, indica cuál serı́a el contenido de la memoria utilizando LA TABLA ADJUNTA DE LA PRIMERA HOJA. Es decir, comenzando en la posición 200 Oct codifica todo el programa hasta el HALT, incluyendo los datos (indica además la dirección de las posiciones de memoria correspondientes a cada palabra de memoria). Para facilitar la claridad de la respuesta indica también la codificación hexadecimal del contenido de cada posición de memoria. Los formatos de las diferentes instrucciones y la codificación de los direccionamientos aparecen en las tablas siguientes: MNEMÓNICO beq bit{b} bpl dec{b} halt mov{b} FORMATO 00000011 q β011 src dst 10000000 q β000101011 dst 0000 000 000 000 000 β001 src dst MODO DE DIRECCIONAMIENTO registro postincremento predecremento indexado CODIFICACIÓN DIRECTO INDIRECTO 000 001 010 011 100 101 110 111 β = 0 en operaciones sobre word β = 1 en operaciones sobre byte P2. (a) Determina el número de accesos a memoria que supone la ejecución del programa anterior. Por accesos a memoria se ha de entender no sólo los accesos a operandos, sino también el fetch de las diferentes partes de la instrucción. En LA TABLA ADJUNTA CORRESPONDIENTE DE LA SEGUNDA HOJA, indica en la columna F los accesos que son de fetch y en las columnas ER y EW las lecturas y escrituras, respectivamente, generadas con la ejecución de cada instrucción. (b) Ejecuta el programa instrucción a instrucción y en LA TABLA ADJUNTA CORRESPONDIENTE DE LA SEGUNDA HOJA indica los valores de los registros R4 y P C al final de la ejecución de cada instrucción, ası́ como el valor final de los vectores D y R. Tanto en el problema P1 como en el P2 se valorará la inclusión de comentarios aclaratorios sobre las respuestas aportadas. P1. NOTA: Cada fila de esta tabla representa una palabra de memoria (16 bits) contenido de la memoria en binario z }| dirección b15 b14 b13 b12 200 202 204 206 210 212 214 216 220 222 224 226 230 232 234 236 Oct Oct Oct Oct Oct Oct Oct Oct Oct Oct Oct Oct Oct Oct Oct Oct 0000 0000 0000 0001 0000 0000 1011 0000 0000 0000 1001 0000 0000 0000 1000 0000 { b11 b10 b09 b08 b07 b06 b05 b04 b03 b02 b01 b00 hexadec. comentarios 1000 0000 0000 0101 0000 1010 0101 0000 0000 0011 0101 0000 0000 1010 0000 0000 0000 0000 0000 1100 0000 1100 1111 0000 1000 0000 1111 0000 1000 1100 1111 0000 0111 1101 0000 0100 0011 0100 0100 0001 0000 0011 0100 0001 0011 0100 0111 0000 0807 000D 0000 15C4 0003 0AC4 B5F4 0001 0080 0303 95F4 0001 0083 0AC4 80F7 0000 D(0), D(1) D(2), R(0) R(1), R(2) mov #N,R4 #N dec R4 bitb #1,D(R4) #1 #D = 200 Oct beq proc2 (nota 1) movb #1,R(R4) #1 #R = 203 Oct dec R4 bpl proc1 (nota 2) halt (nota 1) 232 Oct = 224 Oct + 2q ⇒ q = 232 Oct−224 Oct 2 = 154−148 2 =3 (nota 2) 214 Oct = 236 Oct + 2q ⇒ q = 214 Oct−236 Oct 2 = 140−158 2 = −9 ³ 00001001(bnss = | − 9|(10 → 11110110 + 1 = 11110111(C2 = −9(10 ´ P2.(a) mov #N,R4 dec R4 proc1: bitb #1,D(R4) beq proc2 movb #1,R(R4) proc2: dec R4 bpl proc1 halt F 2 1 3 1 3 1 1 1 ER 0 0 1 0 0 0 0 0 EW 0 0 0 0 1 0 0 0 Num. ejecuciones ×1 = 2 ×1 = 1 ×3 = 12 ×3 = 3 ×2 = 8 ×3 = 3 ×3 = 3 ×1 = 1 TOTAL ACCESOS 33 P2.(b) 1a iter. z proc1: proc2: mov #N,R4 dec R4 bitb #1,D(R4) beq proc2 movb #1,R(R4) dec R4 bpl proc1 halt }| R4 3 2 2 2 2 1 1 { PC 212 214 222 224 232 234 214 valor final D valor final R (si procede) 2a iter. (si procede) 3a iter. (si procede) 4a iter. z z z }| { }| { R4 PC R4 PC 1 1 222 232 0 0 234 214 0 0 0 -1 -1 -1 222 224 232 234 236 240 7 10 1 0 15 octal 1 octal R4 }| { PC Conjunt de problemes #3 P1. Sea el siguiente programa para el PDP-11: V: W: Z: e2: e1: .BYTE 5.,10.,6.,7. .BYTE 0,0,0,0 .BLKB 1 .EVEN .REGDEF .ENTRY clr R1 clrb Z mov #V,R0 cmpb (R0)+,(R0) bmi e1 movb #1,W(R1) incb Z inc R1 cmp #3,R1 bne e2 halt Suponiendo que el programa se almacena a partir de la posición 200 Oct, indica cuál serı́a el contenido de la memoria utilizando LA TABLA ADJUNTA DE LA PRIMERA HOJA. Es decir, comenzando en la posición 200 Oct codifica todo el programa hasta el HALT, incluyendo los datos (indica además la dirección de las posiciones de memoria correspondientes a cada palabra de memoria). Para aumentar la claridad de la respuesta indica también la codificación hexadecimal del contenido de cada posición de memoria. Los formatos de las diferentes instrucciones y la codificación de los direccionamientos aparecen en las tablas siguientes: INSTRUCCIÓN FORMATO DESCRIPCIÓN bne et 00000010 d si Z = 0, PC ← [PC]+2d bmi et 10000001 d si N = 1, PC ← [PC]+2d clr{b} dst β000101000 dst dst ← 0 cmp{b} src,dst β010 src dst [src]-[dst] halt 0000000000000000 detener el procesador inc{b} dst β000101010 dst dst ← [dst]+1 mov{b} src,dst β001 src dst dst ← [src] β = 0 en operaciones de word β = 1 en operaciones de byte MODO CODIFICACIÓN DE DIRECC. DIR. IND. registro 000 001 postincremento 010 011 100 101 predecremento indexado 110 111 P2. Determina el número de accesos a memoria que supone la ejecución del programa siguiente. Por accesos a memoria se ha de entender no sólo los accesos a operandos, sino también el fetch de las diferentes partes de la instrucción. En LA TABLA ADJUNTA DE LA SEGUNDA HOJA, indica en la columna F los accesos que son de fetch y en las columnas ER y EW las lecturas y escrituras, respectivamente, generadas con la ejecución de cada instrucción. A: B: C: V: etiq: N = 2 .WORD 7,10 .WORD 3,60 .BLKW N .WORD 0 .REGDEF .ENTRY clr R0 clr R2 mov A(R0),R1 add B(R0),R1 noc1: noc2: bcc noc1 mov #1,R2 add V,R1 bcc noc2 mov #1,R2 mov R1,C(R0) movb R2,V add #2,R0 cmp #N,R0 bne etiq halt P1. NOTA: Cada fila de esta tabla representa una palabra de memoria (16 bits) contenido de la memoria en binario z dirección b15 b14 b13 b12 200 Oct 0000 202 0000 204 0000 206 0000 210 ???? 212 0000 214 1000 216 1111 220 0001 222 0000 224 1010 226 1000 230 1001 232 0000 234 0000 236 1000 240 1111 242 0000 244 0010 246 0000 250 0000 252 0000 }| b11 b10 b09 b08 1010 0111 0000 0000 ???? 1010 1010 1111 0101 0000 0100 0001 0101 0000 0000 1010 1111 1010 0101 0000 0010 0000 { b07 b06 b05 b04 0000 0000 0000 0000 ???? 0000 0011 1111 1100 1000 0000 0000 1111 0000 1000 1011 1110 1000 1100 0000 1111 0000 b03 b02 b01 b00 0101 0110 0000 0000 ???? 0001 0111 1000 0000 0000 1000 0101 0001 0001 0100 0111 0110 0001 0001 0011 0101 0000 hexadec. 0A05 0706 0000 0000 ???? 0A01 8A37 FFF8 15C0 0080 A408 8105 95F1 0001 0084 8AB7 FFE6 0A81 25C1 0003 02F5 0000 (nota 1) 210(8 = 220(8 + Xz ⇒ Xz = −8(10 = 1111 1111 1111 1000(C2 (nota 2) 242(8 = 230(8 + 2q ⇒ q = 5(10 = 0000 0101(C2 (nota 3) 210(8 = 242(8 + Xz0 ⇒ Xz0 = −26(10 = 1111 1111 1110 0110(C2 (nota 4) 224(8 = 252(8 + 2q ⇒ q = −11(10 = 1111 0101(C2 comentarios V(1), V(0) V(3), V(2) W(1), W(0) W(3), W(2) .EVEN, Z clr R1 clrb Z Xz (nota 1) mov #V,R0 dir. inicio V cmpb (R0)+,(R0) bmi e1 (nota 2) movb #1,W(R1) 1 dir. inicio W incb Z Xz0 (nota 3) inc R1 cmp #3,R1 3 bne e2 (nota 4) halt P2. etiq: noc1: noc2: clr R0 clr R2 mov A(R0),R1 add B(R0),R1 bcc noc1 mov #1,R2 add V,R1 bcc noc2 mov #1,R2 mov R1,C(R0) movb R2,V add #2,R0 cmp #N,R0 bne etiq halt TOTAL ACCESOS F 1 1 2 2 1 2 2 1 2 2 2 2 2 1 1 ER 0 0 1 1 0 0 1 0 0 0 0 0 0 0 0 EW 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 Num. ejecuciones 1 × 1 1 × 1 3 × 1 3 × 1 1 × 1 2 × 0 3 × 1 1 × 1 2 × 0 3 × 1 3 × 1 2 × 1 2 × 1 1 × 1 1 × 1 25 Conjunt de problemes #4 P1 Dados los dos siguientes programas en lenguaje ensamblador del PDP-11: M=3. A:.BYTE 7.,-6.,3.,-1. S:.BYTE 0,0,0,0 .REGDEF .ENTRY MOV #M,R0 ET1:CMPB A(R0),#0 BPL ET2 NEGB A(R0) MOVB #1,S(R0) ET2:DEC R0 BPL ET1 HALT N=4. A:.BYTE 7.,-6.,3.,-1. S:.BYTE 0,0,0,0 .REGDEF .ENTRY CLR R0 MOV #A,R1 MOV #S,R2 ET1:CMPB (R1),#0 BPL ET2 NEGB (R1) MOVB #1,(R2) ET2:INC R0 INC R1 INC R2 CMP R0,#N BNE ET1 HALT INSTRUCCIÓN FORMATO bne et 00000010 q bpl et 10000000 q clr{b} dst β000101000 dst cmp{b} src,dst β010 src dst dec{b} dst β000101011 dst inc{b} dst β000101010 dst halt 0000000000000000 mov{b} src,dst β001 src dst neg{b} dst β000101111 dst β = 0 en operaciones de word β = 1 en operaciones de byte MODO DE DIRECC. registro postincremento predecremento indexado DESCRIPCIÓN if Z=0, PC ← et if N=0, PC ← et dst ← 0 [src] - [dst] dst ← [dst] - 1 dst ← [dst] + 1 para la CPU dst ← [src] dst ← -[dst] CODIFICACIÓN DIRECTO INDIRECTO 000 001 010 011 100 101 110 111 (a) Indica cuál serı́a el contenido de la memoria una vez codificado y almacenado SÓLO EL PROGRAMA DE LA IZQUIERDA (EL DEL RECUADRO), incluyendo los datos, y suponiendo que la memoria se llena a partir de la dirección 200 Oct. Para responder a este apartado emplea la HOJA TABULADA adjunta, especificando cuál es la dirección de cada fila, y expresando también la codificación hexadecimal. (b) Calcula el número total de accesos a memoria que provoca la EJECUCIÓN DEL PROGRAMA DE LA DERECHA (EL QUE NO ESTÁ EN EL RECUADRO), distinguiendo entre accesos de fetch, accesos de escritura y de lectura. Por accesos a memoria se entenderá no solamente los accesos a operandos, sino también los accesos de fetch de las diferentes partes de la instrucción. En la tabla adjunta se indica con una F los accesos que son de fetch y con ER y EW las lecturas y escrituras de datos, respectivamente. Se valorará la inclusión de comentarios aclaratorios a las soluciones a ambos apartados P1.(a) y P1.(b). P1.(a) NOTA: Cada fila de esta tabla representa una palabra de memoria (16 bits) contenido de la memoria en binario z dirección }| { b15 b14 b13 b12 b11 b10 b09 b08 b07 b06 b05 b04 b03 b02 b01 b00 hexadec. comentarios 200 Oct 1111 1010 0000 0111 FA07 2a comp. A; 1a comp. A 202 Oct 1111 1111 0000 0011 FF03 4a comp. A; 3a comp. A 204 Oct 0000 0000 0000 0000 0000 2a comp. S; 1a comp. S 206 Oct 0000 0000 0000 0000 0000 4a comp. S; 3a comp. S 210 Oct 0001 0101 1100 0000 15C0 mov #M,R0 212 Oct 0000 0000 0000 0011 0003 M = 3 214 Oct 1010 1100 0001 0111 AC17 cmpb A(R0),#0 216 Oct 0000 0000 1000 0000 0080 #A = 200 Oct 220 Oct 0000 0000 0000 0000 0000 0 222 Oct 1000 0000 0000 0101 8005 bpl ET2 (q = 5(10 ) dir. ET 2 z }| { [P C] z }| { 236(8 = 224(8 +2q 224 Oct 1000 1011 0011 0000 8B30 negb A(R0) 226 Oct 0000 0000 1000 0000 0080 #A = 200 Oct 230 Oct 1001 0101 1111 0000 95F0 movb #1,S(R0) 232 Oct 0000 0000 0000 0001 0001 1 234 Oct 0000 0000 1000 0100 0084 #S = 204 Oct 236 Oct 0000 1010 1100 0000 0AC0 dec R0 240 Oct 1000 0000 1111 0101 80F5 bpl ET1 (q = −11(10 ) dir. ET 1 z }| { [P C] z }| { 214(8 = 242(8 +2q 242 Oct 0000 0000 0000 0000 0000 halt P1.(b) Instrucción CLR R0 MOV #A,R1 MOV #S,R2 ET1: CMPB (R1),#0 BPL ET2 NEGB (R1) MOVB #1,(R2) ET2: INC R0 INC R1 INC R2 CMP R0,#N BNE ET1 HALT TOTAL ACCESOS F ER EW 1 2 2 2 1 1 2 1 1 1 2 1 1 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 Número de ejecuciones 1 1 1 4 4 2 2 4 4 4 4 4 1 Número total de accesos 1 2 2 12 4 6 6 4 4 4 8 4 1 58 Conjunt de problemes #5 P1 Dado el siguiente programa en lenguaje ensamblador del PDP-11: A: B: ET1: N=4. .BYTE 7.,3.,1.,10. .BLKW N .REGDEF .ENTRY CLR R0 CLR R1 MOV #N,R2 MOVB A(R0),-(SP) JSR PC,SUBRUT MOV (SP)+,B(R1) INC R0 ADD #2,R1 SOB R2,ET1 HALT INSTRUCCIÓN add src,dst clr{b} dst inc dst jsr reg,et SUBRUT: ET2: ET3: MOV R0,-(SP) MOV 4(SP),R0 DEC R0 BMI ET3 ADD R0,4(SP) BR ET2 MOV (SP)+,R0 RTS PC FORMATO 0110 src dst β000101000 dst β000101010 dst 0000100 reg 110111 qet halt 0000000000000000 mov src,dst β001 src dst sob reg,et 0111111 reg qet β = 0 en operaciones de word β = 1 en operaciones de byte MODO DE DIRECC. registro postincremento predecremento indexado CODIFICACIÓN DIRECTO INDIRECTO 000 001 010 011 100 101 110 111 (a) Indica cuál serı́a el contenido de la memoria una vez codificado y almacenado el módulo principal (sólo la columna de la izquierda), incluyendo los datos, y suponiendo que la memoria se llena a partir de la dirección 200 Oct. Para responder a este apartado emplea la HOJA TABULADA adjunta, especificando cuál es la dirección de cada fila, y expresando la codificación también hexadecimal para incrementar la claridad de la respuesta. Las tablas siguientes indican los formatos de las diferentes instrucciones involucradas y sus códigos de operacin. (b) Calcula el número total de accesos a memoria que provoca la ejecución de la subrutina durante la ejecución del programa completo, distinguiendo entre accesos de fetch, accesos de escritura y de lectura. Por accesos a memoria se entenderá no solamente los accesos a operandos, sino también los accesos de fetch de las diferentes partes de la instrucción. En la tabla adjunta se indica con una F los accesos que son de fetch y con ER y EW las lecturas y escrituras de datos, respectivamente. 0000100 111 110111 de forma qet que, cuando se ejecuta, la dirección de salto se determina como [PC] + qet . En cuanto a la instrucción rts pc, no necesita más para codificarse que 0000000010000 111. NOTA: La codificación de la instrucción jsr pc,et es Se valorará la inclusión de comentarios aclaratorios a las soluciones a ambos problemas P1.(a) i P1.(b). P1.(a) NOTA: Cada fila de esta tabla representa una palabra de memoria (16 bits) contenido de la memoria en binario z }| dirección b15 b14 b13 b12 200 Oct 0000 202 0000 204 0000 206 0000 210 0000 212 0000 214 0000 216 0000 220 0001 222 0000 224 1001 226 0000 230 0000 232 0000 b11 b10 b09 b08 0011 1010 0000 0000 0000 0000 1010 1010 0101 0000 1100 0000 1001 0000 { b07 b06 b05 b04 0000 0000 0000 0000 0000 0000 0000 0000 1100 0000 0010 1000 1111 0000 b03 b02 b01 b00 0111 0001 0000 0000 0000 0000 0000 0001 0010 0100 0110 0000 0111 1110 hexadec. 0307 0A01 0000 0000 0000 0000 0A00 0A01 15C2 0004 9C26 0080 09F7 000E comentarios 2a comp A, 1a comp A 4a comp A, 3a comp A 1a comp B 2a comp B 3a comp B 4a comp B clr R0 clr R1 mov (r7)+,R2 4 movb A(R0),-(sp) #A = 200 Oct jsr pc,et qet = 14(10 [P C] dir. et z }| { z }| { 234 236 240 242 244 246 0001 0000 0000 0110 0000 0111 0101 0000 1010 0101 0000 1110 1011 1000 1000 1100 0000 1000 0001 0100 0000 0001 0010 1010 15B1 0084 0A80 65C1 0002 7E8A 252(8 = qet + 234(8 mov (sp)+,B(R1) #B = 204 Oct inc R0 add (r7)+,R1 2 sob R2,et; qet = 10(10 dir. et z }| { 250 0000 0000 0000 0000 0000 224(8 = 250(8 −2qet halt P1.(b) Instrucción SUBRUT: MOV R0,-(SP) MOV 4(SP),R0 ET2: DEC R0 BMI ET3 ADD R0,4(SP) BR ET2 ET3: MOV (SP)+,R0 RTS PC TOTAL ACCESOS F ER EW 1 2 1 1 2 1 1 1 0 1 0 0 1 0 1 1 1 0 0 0 1 0 0 0 Número de ejecuciones 4 4 8+4+2+11 = 25 8+4+2+11 = 25 7+3+1+10 = 21 7+3+1+10 = 21 4 4 [P C] z }| { Número total de accesos 8 12 25 25 84 21 8 8 191 Conjunt de problemes #6 P1. Suposant que el contingut de la memòria del PDP-11 en binari és el que s’indica a continuació, determina quin seria el programa assemblador corresponent. Per fer el desassemblatje has de tenir en compte les etiquetes que s’indiquen i que la primera instrucció del programa es troba a la posició 206 Oct. Això ho has de fer a la FULLA TABULADA adjunta, posant a la vora de cada posició de memòria el seu significat. NOTES: Recorda que una instrucció PDP-11 pot ocupar diverses posicions de memòria. A les taules adjuntes pots trobar els codis d’operació de diverses instruccions del PDP-11, aixı́ com dels modes d’adreçament. Al programa s’han posat tantes etiquetes com paraules de memòria ocupen el programa i les dades i, com a consequència, hi ha més de les que realment es necessiten; per tant, pots prescindir de les que no es derivin del desassemblatje. → adreça 200 Oct 202 Oct 204 Oct 206 Oct 210 Oct 212 Oct 214 Oct 216 Oct 220 Oct 222 Oct 224 Oct 226 Oct 230 Oct 232 Oct 234 Oct A: B: C: D: E: F: G: H: I: J: K: L: M: N: O: 15 0000 0001 0000 0001 0000 0000 1011 0000 0000 0000 0000 1111 0000 1000 0000 1000 0000 0000 0101 0000 1010 0101 0000 0000 0011 1010 1111 1010 0000 0000 0000 0000 0000 1100 0000 1100 1111 0000 1000 0000 1011 1110 1100 1111 0000 0 0111 1101 0000 0100 0100 0100 0100 0001 0000 0010 0111 1100 0100 1000 0000 INSTRUCCIÓ CODIFICACIÓ add src,dst 0110 src dst beq et 00000011 d bit{b} src,dst β011 src dst 10000000 d bpl et dec{b} dst β000101011 dst halt 0000000000000000 inc{b} dst β000101010 dst mov{b} src,dst β001 src dst sob reg,et 0111111 reg d sub src,dst 1110 src dst β = 0 en operacions de word β = 1 en operacions de byte MODE D’ADREÇAMENT registre postincrement predecrement indexat CODIFICACIÓ DIR. IND. 000 001 010 011 100 101 110 111 P2. Atés el següent programa per al PDP-11: 200 Oct N = 3. A:.WORD 34,2,20 B:.WORD 4,6,3 P:.WORD 0,0,0 S:.WORD 0 .REGDEF .ENTRY mov #N,R0 mov #0,R1 et2: * mov B(R1),R2 et1: * add A(R1),P(R1) * sob R2,et1 sub P(R1),S add #2,R1 sob R0,et2 halt (a) Indica quin seria el contingut de la memòria una vegada es codifiquès i emmagatzemès el fragment del programa anterior que es troba dins el requadre, suposant que la memòria s’omple a partir de l’adreça 200 Oct. Per respondre, empra la FULLA TABULADA adjunta, especificant quina es l’adreça de cada filera i expressant també la corresponent codificació en hexadecimal per tal d’incrementar la claredat de la resposta. Les taules del problema P1 indiquen els formats de les diferents instruccions i la seva codificació. (b) Determina el nombre d’accesos a memòria que suposa l’execució del fragment del programa anterior corresponent a les instruccions marcades amb ‘*’ si [R1] = 2. Per accessos a memòria has d’entendre no només els accessos a operands, sino també el fetch de les diferents parts de la instrucció. A la FULLA TABULADA adjunta, indica a la columna F els accesos que són de fetch i a les columnes ER i EW les lectures i escriptures, respectivament, provocades per l’execució de cada instrucció. Indica també el nombre de vegades que s’executa cada instrucció amb les condicions esmentades ([R1] = 2). Tant al problema P1 como al P2 es valorará la inclusión de comentaris aclaratoris sobre las respostes donades. P1. adreça 15 0 significat 200 Oct A: 0000 1000 0000 0111 2a comp. vector A, 1a comp. vector A 202 Oct B: 0001 0000 0000 1101 4a comp. vector A, 3a comp. vector A 204 Oct C: 0000 0000 0000 0000 variable C 206 Oct D: 0001 0101 1100 0100 mov #4,R4 210 Oct E: 0000 0000 0000 0100 4 212 Oct F: 0000 1010 1100 0100 dec R4 214 Oct G: 1011 0101 1111 0100 bitb #1,A(R4) 216 Oct H: 0000 0000 0000 0001 1 220 Oct I: 0000 0000 1000 0000 #A = 200 oct 222 Oct J: 0000 0011 0000 0010 beq M (dir. et. = 224 oct (=[PC]) + 2*2 (=d) = 230 oct) 224 Oct K: 0000 1010 1011 0111 inc C 226 Oct L: 1111 1111 1110 1100 XC (dir. var. = -20 (=XC ) + 230 oct (=[R7]) = 204 oct) 230 Oct M: 0000 1010 1100 0100 dec R4 232 Oct N: 1000 0000 1111 1000 bpl G (dir. et. = 234 oct (=[PC]) + 2*(-8) (=d) = 214 oct) 234 Oct O: 0000 0000 0000 0000 halt P2.(a) NOTA: Cada filera d’aquesta taula representa una paraula de memòria (16 bits) z contingut de la }| memòria en binari { adreça b15 b14 b13 b12 b11 b10 b09 b08 b07 b06 b05 b04 b03 b02 b01 b00 hexadec. comentaris 250 Oct 1110 1100 0111 0111 EC77 sub P(R1),XS (R7) 252 0000 0000 1000 1100 008C #P = 214 oct 254 1111 1111 1110 0100 FFE4 XS (nota 1) 256 0110 0101 1100 0001 65C1 add (R7)+,R1 260 0000 0000 0000 0010 0002 2 262 0111 1110 0000 1100 7E0C sob R0,et2 (nota 2) 264 (nota 1) 222 oct (=dir. S) = XS + 256 oct (=[R7]) ⇒ XS = −28(10 (nota 2) 234 oct (=dir. et2) = 264 oct (=[PC]) - 2d ⇒ d = 12(10) P2.(b) Instrucció F ER EW mov B(R1),R2 add A(R1),P(R1) sob R2,et1 2 3 1 1 2 0 0 1 0 TOTAL ACCESSOS Nombre d’execucions 1 6 6 Nombre total d’accessos 3 36 6 45 Conjunt de problemes #7 P1.(a) Atesos els dos programes següents en llenguatge assemblador de PDP-11 que fan exactament el mateix: Assemblador N = 4. V:.WORD 2,23,16,24 S:.WORD 0 .REGDEF .ENTRY mov #V,R0 mov #0,R1 et: add (R0)+,S inc R1 cmp R1,#N bne et halt Adreça 0 200 Oct 210 Oct 0 0 212 Oct 216 Oct 222 Oct 226 Oct 230 Oct 234 Oct 236 Oct Assemblador N = 4. V:.WORD 2,23,16,24 S:.WORD 0 .REGDEF .ENTRY mov #0,R0 mov #N,R1 et: add V(R0),S add #2,R0 dec R1 bne et halt Adreça 0 200 Oct 210 Oct 0 0 212 Oct 216 Oct 222 Oct 230 Oct 234 Oct 236 Oct 240 Oct ¿Quin dels dos dóna lloc a més accessos a memòria? Per respondre a aquesta questió has d’emprar la FULLA TABULADA ADJUNTA. P1.(b) Indicau quin seria el contingut de la memòria una vegada es codifiquès i emmagatzemès el següent programa assemblador pel PDP-11 (incloent les dades), suposant que la memòria s’omple a partir de l’adreça 200 Oct. Per respondre, empra la FULLA TABULADA ADJUNTA, especificant quina es l’adreça de cada filera, i expressant la codificació també en hexadecimal per tal d’incrementar la claredat de la resposta. Les taules següents vos indiquen els formats de les diferents instruccions i la seva codificació. A: B: et: .WORD 4. .WORD 3. .REGDEF .ENTRY add A,B bne et mov #1,B halt INSTRUCCIÓ FORMAT add src,dst 0110 src dst bne et 00000010 d halt 0000000000000000 mov{b} src,dst β001 src dst β = 0 en operacions de word β = 1 en operacions de byte MODE D’ADREÇ. registre postincrement predecrement indexat CODIFICACIÓ DIR. IND. 000 001 010 011 100 101 110 111 Es valorarà la inclusió de comentaris aclaratoris a les sol.lucions a ambdós apartats P1.(a) i P1.(b). P1.(a) et: Instrucció F ER EW mov #V,R0 mov #0,R1 add (R0)+,S inc R1 cmp R1,#N bne et halt 2 2 2 1 2 1 1 0 0 2 0 0 0 0 0 0 1 0 0 0 0 Nombre d’execucions 1 1 4 4 4 4 1 Nombre total d’accessos 2 2 20 4 8 4 1 TOTAL ACCESSOS et: 41 Instrucció F ER EW mov #V,R0 mov #N,R1 add V(R0),S add #2,R0 dec R1 bne et halt 2 2 3 2 1 1 1 0 0 2 0 0 0 0 0 0 1 0 0 0 0 Nombre d’execucions 1 1 4 4 4 4 1 Nombre total d’accessos 2 2 24 8 4 4 1 TOTAL ACCESSOS P1.(b) 45 NOTA: Cada filera d’aquesta taula representa una paraula de memòria (16 bits) contingut de la memòria en binari }| z adreça 200 Oct 202 204 206 b15 b14 b13 b12 0000 0000 0110 1111 b11 b10 b09 b08 0000 0000 1101 1111 { b07 b06 b05 b04 0000 0000 1111 1111 b03 b02 b01 b00 0100 0011 0111 1000 hexadec. 0004 0003 6DF7 FFF8 comentaris A B add A,B XA = −810 Adreca d0 A z}|{ 210 1111 1111 1111 1000 FFF8 200 = 210 +XA XB = −810 Adreca de B z}|{ 212 0000 0010 0000 0011 0203 z}|{ 0001 0000 1111 0101 0000 1111 1111 0000 1111 0111 0001 0000 15F7 0001 FFF0 z}|{ 0000 0000 0000 0000 0000 [P C] z}|{ 222 = 214 +2d mov #1,B 1 XB0 = −1610 Adreca de B 222 (et) [P C] z}|{ 202 = 212 +XB bne et (d = 3) Adreca d0 et 214 216 220 [P C] z}|{ 202 halt [P C] z}|{ = 222 +XB0 Conjunt de problemes #8 P1.(a) Suposant que el contingut de la memòria del PDP-11 en binari és el que s’indica a continuació, determina quin seria el programa assemblador corresponent. Per fer el desassemblatje has de tenir en compte les etiquetes que s’indiquen i que la primera instrucció del programa es troba a la posició 210 Oct. Això ho has de fer a la FULLA TABULADA ADJUNTA, posant a la vora de cada posició de memòria el seu significat. NOTES: Recorda que una instrucció PDP-11 pot ocupar diverses posicions de memòria. A les taules adjuntes pots trobar els codis d’operació de diverses instruccions del PDP-11, aixı́ com dels modes d’adreçament. → adreça 200 Oct 202 Oct 204 Oct 206 Oct 210 Oct 212 Oct 214 Oct 216 Oct 220 Oct 222 Oct 224 Oct 226 Oct 230 Oct 232 Oct 234 Oct 236 Oct R: S: T: 15 0000 0000 0000 0000 0000 0110 0000 1111 0110 0000 0010 0000 1000 0000 1111 0000 0000 0000 0000 0000 1010 1100 0000 1111 0101 0000 0101 0000 0000 1011 1111 0000 0000 0001 0001 0000 0000 1111 1000 1111 1100 0000 1100 0000 1111 0011 1110 0000 0 1000 1100 0110 0000 0011 0111 0000 0110 0011 0010 0011 0100 1000 0111 1000 0000 INSTRUCCIÓ CODIFICACIÓ add src,dst 0110 src dst bpl et 10000000 d clr{b} dst β000101000 dst cmp{b} src,dst β010 src dst halt 0000000000000000 neg{b} dst β000101100 dst β = 0 en operacions de word β = 1 en operacions de byte MODE D’ADREÇAMENT registro postincremento predecremento indexado CODIFICACIÓ DIR. IND. 000 001 010 011 100 101 110 111 P1.(b) Determina el nombre d’accessos a memòria que suposa l’execució de les instruccions marcades amb ‘*’ del programa següent. Per accessos a memòria has d’entendre no només els accessos a operands, sino també el fetch de les diferents parts de la instrucció. A la TAULA ADJUNTA, indica a la columna F els accesos que són de fetch i a les columnes ER i EW les lectures i escriptures, respectivament, provocades per l’execució de cada instrucció. Indica també el nombre de vegades que s’executa la mateixa instrucció durant l’execució del programa a la columna nombre d’execucions, i el nombre total d’accessos que ha provocat cada instrucció al cap de l’execució del programa a la columna nombre total d’accessos. V: W: Z: * .BYTE 10.,9.,4.,6. .BYTE 0,0,0,0 .BLKB 1 .EVEN .REGDEF .ENTRY clr R1 clrb Z mov #V,R0 e2: * * e1: * cmpb (R0)+,(R0) bpl e1 movb #1,W(R1) incb Z inc R1 cmp #3,R1 bne e2 halt Es valorarà la inclusió de comentaris aclaratoris a les sol.lucions a ambdós problemes P1.(a) i P1.(b). P1.(a) adreça 200 Oct 15 significat 0000 0000 0000 1000 10 Oct - 1a. component vector R (word) 202 Oct 0000 0000 0001 1100 34 Oct - 2a. component vector R (word) 204 Oct 0000 0000 0001 0110 26 Oct - 3a. component vector R (word) 0000 0000 0000 0000 S (word) 0000 1010 0000 0011 clr R3 0110 1100 1111 0111 add R(R3),S 214 Oct 0000 0000 1000 0000 #R 216 Oct 1111 1111 1111 0110 XS = -10 Dec (220 Oct ([PC]) - 10 Dec = 206 Oct) 220 Oct 0110 0101 1100 0011 add #2,R3 222 Oct 0000 0000 0000 0010 2 224 Oct 0010 0101 1100 0011 cmp #4,R3 226 Oct 0000 0000 0000 0100 4 230 Oct 1000 0000 1111 1000 bpl T (d = -8 Dec, 232 Oct ([PC]) - 2*8 Dec = 212 Oct) 232 Oct 0000 1011 0011 0111 neg S 234 Oct 1111 1111 1110 1000 XS0 = -24 Dec (236 Oct ([PC]) - 24 Dec = 206 Oct) 236 Oct 0000 0000 0000 0000 halt 206 Oct R: 0 S: 210 Oct 212 Oct T: P1.(b) Instrucció F ER EW clrb Z cmpb (R0)+,(R0) incb Z bne e2 2 1 2 1 0 2 1 0 1 0 1 0 Nombre d’execucions 1 3 1 3 Nombre total d’accessos 3 9 4 3 Conjunt de problemes #9 P1. Sea el siguiente programa para el PDP-11: V: A: B: et1: et2: et3: N=4. .BYTE 173,101,131,41 .BYTE 0 .BYTE 177 .EVEN .REGDEF .ENTRY mov #0,R3 cmpb V(R3),A bmi et2 movb V(R3),A cmpb V(R3),B bpl et3 movb V(R3),B add #1,R3 cmp R3,#N bne et1 halt Suponiendo que el programa se almacena a partir de la posición 200 Oct, indica cuál serı́a el contenido de la memoria utilizando LA TABLA ADJUNTA DE LA PRIMERA HOJA. Es decir, comenzando en la posición 200 Oct codifica todo el programa hasta el HALT, incluyendo los datos (indica además la dirección de las posiciones de memoria correspondientes a cada palabra de memoria). Para aumentar la claridad de la respuesta indica también la codificación hexadecimal del contenido de cada posición de memoria. Los formatos de las diferentes instrucciones y la codificación de los direccionamientos aparecen en las tablas siguientes: INSTRUCCIÓN FORMATO DESCRIPCIÓN add src,dst 0110 src dst [dst] ← [dst]+[src] bmi et 10000001 d si N = 1, PC ← [PC]+2d bne et 00000010 d si Z = 0, PC ← [PC]+2d bpl et 10000000 d si N = 0, PC ← [PC]+2d cmp{b} src,dst β010 src dst [src]-[dst] halt 0000000000000000 detener el procesador mov{b} src,dst β001 src dst dst ← [src] β = 0 en operaciones de word β = 1 en operaciones de byte MODO CODIFICACIÓN DE DIRECC. DIR. IND. registro 000 001 postincremento 010 011 100 101 predecremento indexado 110 111 P2. Determina el número de accesos a memoria que supone la ejecución del programa siguiente. Por accesos a memoria se ha de entender no sólo los accesos a operandos, sino también el fetch de las diferentes partes de la instrucción. En LA TABLA ADJUNTA DE LA SEGUNDA HOJA, indica en la columna F los accesos que son de fetch y en las columnas ER y EW las lecturas y escrituras, respectivamente, generadas con la ejecución de cada instrucción. V: W: Z: et1: .WORD 3.,6.,10. .WORD 1.,0.,4. .BLKW 3 .REGDEF .ENTRY mov #0,R0 mov #0,Z(R0) mov W(R0),R1 et2: et3: cmp R1,#0 beq et3 add V(R0),Z(R0) dec R1 br et2 add #2,R0 cmp #6,R0 bne et1 halt Tanto en el problema P1 como en el P2 se valorará la inclusión de comentarios aclaratorios sobre las respuestas aportadas. P1. NOTA: Cada fila de esta tabla representa una palabra de memoria (16 bits) contenido de la memoria en binario dir. (octal) 200 202 204 206 210 et1: 212 214 216 220 222 224 226 et2: 230 232 234 236 240 242 244 et3: 246 250 252 254 256 260 z b15 b14 b13 b12 0100 0010 0111 0001 0000 1010 0000 1111 1000 1001 0000 1111 1010 0000 1111 1000 1001 0000 1111 0110 0000 0010 0000 0000 0000 }| b11 b10 b09 b08 0001 0001 1111 0101 0000 1100 0000 1111 0001 1100 0000 1111 1100 0000 1111 0000 1100 0000 1111 0101 0000 0000 0000 0010 0000 { b07 b06 b05 b04 0111 0101 0000 1100 0000 1111 1000 1111 0000 1111 1000 1110 1111 1000 1110 0000 1111 1000 1101 1100 0000 1101 0000 1110 0000 b03 b02 b01 b00 1011 1001 0000 0011 0000 0111 0000 0100 0011 0111 0000 1100 0111 0000 0111 0011 0111 0000 1111 0011 0001 0111 0100 1101 0000 hexadec. 417B 2159 7F00 15C3 0000 ACF7 0080 FFF4 8103 9CF7 0080 FFEC ACF7 0080 FFE7 8003 9CF7 0080 FFDF 65C3 0001 20D7 0004 02ED 0000 comentarios 200:V(0); 201:V(1) 202:V(2); 203:V(3) 204:A; 205:B mov #0,R3 0 cmpb V(R3),A #V = 200 oct XA = 10100C2 (1) bmi et2: d = 00000011C2 (2) movb V(R3),A #V = 200 oct XA0 = 101100C2 (3) cmpb V(R3),B #V = 200 oct XB = 100111C2 (4) bpl et3: d = 00000011C2 (5) movb V(R3),B #V = 200 oct XB0 = 1011111C2 (6) add #1,R3 1 cmp R3,#N N=4 bne et1: d = 11101101C2 (7) halt (1) dir. efectiva A = XA + [P C] ⇒ 204 oct = XA + 220 oct ⇒ 132 = XA + 144 ⇒ XA = −12 (2) dir. et2 = [P C] + 2d ⇒ 230 oct = 222 oct + 2d ⇒ 152 = 146 + 2d ⇒ d = 3 (3) dir. efectiva A = XA0 + [P C] ⇒ 204 oct = XA0 + 230 oct ⇒ 132 = XA0 + 152 ⇒ XA0 = −20 (4) dir. efectiva B = XB + [P C] ⇒ 205 oct = XB + 236 oct ⇒ 133 = XB + 158 ⇒ XB = −25 (5) dir. et3 = [P C] + 2d ⇒ 246 oct = 240 oct + 2d ⇒ 166 = 160 + 2d ⇒ d = 3 (6) dir. efectiva B = XB0 + [P C] ⇒ 205 oct = XB0 + 246 oct ⇒ 133 = XB0 + 166 ⇒ XB0 = −33 (7) dir. et1 = [P C] + 2d ⇒ 212 oct = 260 oct + 2d ⇒ 138 = 176 + 2d ⇒ d = −19 P2. V: .WORD 3.,6.,10. W: .WORD 1.,0.,4. Z: .BLKW 3 .REGDEF .ENTRY mov #0,R0 et1: mov #0,Z(R0) mov W(R0),R1 et2: cmp R1,#0 beq et3 add V(R0),Z(R0) dec R1 br et2 et3: add #2,R0 cmp #6,R0 bne et1 halt TOTAL ACCESOS F 2 3 2 2 1 3 1 1 2 2 1 1 ER 0 0 1 0 0 2 0 0 0 0 0 0 EW 0 1 0 0 0 1 0 0 0 0 0 0 Total 2 4 3 2 1 6 1 1 2 2 1 1 Num. ejecuciones 1 3 3 8 8 5 5 5 3 3 3 1 103 = = = = = = = = = = = = 2 12 9 16 8 30 5 5 6 6 3 1 Conjunt de problemes #10 P1.(a) Indicau quin seria el contingut de la memòria una vegada es codifiquès i emmagatzemès el següent programa assemblador pel PDP-11 (incloent les dades), suposant que la memòria s’omple a partir de l’adreça 200 Oct. Per respondre, empra la FULLA TABULADA adjunta, especificant quina es l’adreça de cada filera i expressant també la corresponent codificació en hexadecimal per tal d’incrementar la claredat de la resposta. Les taules següents vos indiquen els formats de les diferents instruccions i la seva codificació. A: B: C: et: .BYTE 10,34,26 .BYTE 04,32,12 .WORD 0 .REGDEF .ENTRY mov #2,R3 mov #B,R1 movb A(R3),R2 movb (R1)+,R4 add R2,C add R4,C sob R3,et halt INSTRUCCIÓ add src,dst halt mov{b} src,dst sob reg,et FORMAT 0110 src dst 0000000000000000 β001 src dst 0111111 reg q DESCRIPCIÓ [dst] ← [dst]+[src] aturar el processador dst ← [src] reg ← [reg] - 1 if [reg] 6= 0, PC ← [PC] - 2q β = 0 en operacions de word β = 1 en operacions de byte MODE D’ADREÇAMENT registre postincrement predecrement indexat CODIFICACIÓ DIR. IND. 000 001 010 011 100 101 110 111 P1.(b) Determina el nombre d’accessos a memòria que suposa l’execució del programa següent. Per accessos a memòria heu d’entendre no només els accessos a operands, sino també el fetch de les diferents parts de la instrucció. A la TAULA ADJUNTA, indica a la columna F els accesos que són de fetch i a les columnes ER i EW les lectures i escriptures, respectivament, provocades per l’execució de cada instrucció. Indica també el nombre de vegades que s’executa la mateixa instrucció durant l’execució del programa a la columna nombre d’execucions, i el nombre total d’accessos que ha provocat cada instrucció al cap de l’execució del programa a la columna nombre total d’accessos. A: Z: N = 3 .WORD 5.,10.,17. .BLKW 1 .EVEN .REGDEF .ENTRY mov #A,-(sp) mov #N,-(sp) mov #Z,-(sp) jsr pc,sr add #6,sp halt sr: lp: mov mov mov clr add sob rts 6(sp),R0 4(sp),R1 2(sp),R2 (R2) (R0)+,(R2) R1,lp pc 0000100 111 110111 de forma que, q quan s’executa, l’adreça de bot es determina com [PC] + q. Quant a la instrucció rts pc, no necessita més per a codificar-se que 0000000010000 111. NOTA: La codificació de la instrucció jsr pc,sr és Es valorarà la inclusió de comentaris aclaratoris a les sol.lucions a ambdós apartats P1.(a) i P1.(b). P1.(a) NOTA: Cada filera d’aquesta taula representa una paraula de memòria (16 bits) contingut de la memòria en binari z adreça 200 Oct 202 Oct 204 Oct 206 Oct 210 Oct 212 Oct 214 Oct 216 Oct 220 Oct 222 Oct 224 Oct 226 Oct }| b15 b14 b13 b12 0001 0000 0000 0000 0001 0000 0001 0000 1001 0000 1001 0110 b11 b10 b09 b08 1100 0100 1010 0000 0101 0000 0101 0000 1100 0000 0100 0000 { b07 b06 b05 b04 0000 0001 0001 0000 1100 0000 1100 1000 1100 1000 0100 1011 b03 b02 b01 b00 1000 0110 1010 0000 0011 0010 0001 0011 0010 0000 0100 0111 hexadec. 1C08 0416 0A1A 0000 15C3 0002 15C1 0083 9CC2 0080 9444 60B7 comentaris 1 i 2 comp. d’A 3a comp. d’A i 1a de B 2a i 3a comp. de B C mov #2,R3 2 mov #B,R1 adreça inici de B = 203 Oct movb A(R3),R2 adreça inici d’A = 200 Oct movb (R1)+,R4 add R2,C a a [P C] AE 230 Oct 1111 1111 1110 1100 FFEC 232 Oct 0110 0001 0011 0111 6137 z}|{ z}|{ 206 = XC0 + 232 ⇒ XC0 = 134 − 154 = −20 add R4,C [P C] AE 234 Oct 1111 1111 1110 1000 FFE8 z}|{ XC0 z}|{ 206 = + 236 0 ⇒ XC = 134 − 158 = −24 @et 236 Oct 0111 1110 1100 1000 7EC8 240 Oct 0000 0000 0000 0000 0000 z}|{ sob R3,et: 220 = 240 −2d ⇒ d = (160 − 144)/2 = 8 halt P1.(b) Instrucció F ER EW mov #A,-(sp) mov #N,-(sp) mov #Z,-(sp) jsr pc,sr add #6,sp halt sr: mov 6(sp),R0 mov 4(sp),R1 mov 2(sp),R2 clr (R2) lp: add (R0)+,(R2) sob R1,lp rts pc 2 2 2 2 2 1 2 2 2 1 1 1 1 0 0 0 0 0 0 1 1 1 0 2 0 1 1 1 1 1 0 0 0 0 0 1 1 0 0 TOTAL ACCESSOS Nombre d’execucions 1 1 1 1 1 1 1 1 1 1 3 3 1 [P C] z}|{ Nombre total d’accessos 3×1=3 3×1=3 3×1=3 3×1=3 2×1=2 1×1=1 3×1=3 3×1=3 3×1=3 2×1=2 4 × 3 = 12 1×3=3 2×1=2 43 Conjunt de problemes #11 P1.(a) Indicau quin seria el contingut de la memòria una vegada es codifiquès i emmagatzemès el següent programa assemblador pel PDP-11 (incloent les dades), suposant que la memòria s’omple a partir de l’adreça 200 Oct. Per respondre, empra la FULLA TABULADA adjunta, especificant quina es l’adreça de cada filera, i expressant la codificació també en hexadecimal per tal d’incrementar la claredat de la resposta. Les taules següents vos indiquen els formats de les diferents instruccions i la seva codificació. A: C: e1: .WORD 10,34,26 .WORD 0 .REGDEF .ENTRY clr R3 add A(R3),C add #2,R3 cmp #4,R3 bpl e1 neg C halt INSTRUCCIÓ FORMAT add src,dst 0110 src dst bpl et 10000000 d clr{b} dst β000101000 dst cmp{b} src,dst β010 src dst halt 0000000000000000 neg{b} dst β000101100 dst β = 0 en operacions de word β = 1 en operacions de byte MODE D’ADREÇAMENT registro postincremento predecremento indexado DESCRIPCIÓ [dst] ← [dst]+[src] si N = 0, PC ← [PC]+2d dst ← 0 [src]-[dst] aturar el processador dst ← -[dst] CODIFICACIÓ DIR. IND. 000 001 010 011 100 101 110 111 P1.(b) Determina el nombre d’accessos a memòria que suposa l’execució del programa següent. Per accessos a memòria heu d’entendre no només els accessos a operands, sino també el fetch de les diferents parts de la instrucció. A la TAULA ADJUNTA, indica a la columna F els accesos que són de fetch i a les columnes ER i EW les lectures i escriptures, respectivament, provocades per l’execució de cada instrucció. Indica també el nombre de vegades que s’executa la mateixa instrucció durant l’execució del programa a la columna nombre d’execucions, i el nombre total d’accessos que ha provocat cada instrucció al cap de l’execució del programa a la columna nombre total d’accessos. V: W: Z: .BYTE 5.,10.,6.,7. .BYTE 0,0,0,0 .BLKB 1 .EVEN .REGDEF .ENTRY clr R1 clrb Z mov #V,R0 e2: e1: cmpb (R0)+,(R0) bmi e1 movb #1,W(R1) incb Z inc R1 cmp #3,R1 bne e2 halt Es valorarà la inclusió de comentaris aclaratoris a les sol.lucions a ambdós problemes P1.(a) i P1.(b). P1.(a) NOTA: Cada filera d’aquesta taula representa una paraula de memòria (16 bits) contingut de la memòria en binari z adreça 200 Oct 202 Oct 204 Oct 206 Oct 210 Oct 212 Oct 214 Oct }| b15 b14 b13 b12 0000 0000 0000 0000 0000 0110 0000 b11 b10 b09 b08 0000 0000 0000 0000 1010 1100 0000 { b07 b06 b05 b04 0000 0001 0001 0000 0000 1111 1000 b03 b02 b01 b00 1000 1100 0110 0000 0011 0111 0000 hexadec. 0008 001C 0016 0000 0A03 6CF7 0080 comentaris 1 comp. d’A 2a comp. d’A 3a comp. d’A C clr R3 add A(R3),C adreça d’inici d’A = 200 Oct a [P C] AE 216 Oct 1111 1111 1111 0110 FFF6 220 222 224 226 0110 0000 0010 0000 0101 0000 0101 0000 1100 0000 1100 0000 0011 0010 0011 0100 65C3 0002 25C3 0004 Oct Oct Oct Oct z}|{ z}|{ 206 = XC + 220 ⇒ XC = 134 − 144 = −10 add #2,R3 2 cmp #4,R3 4 [P C] @e1 230 Oct 1000 0000 1111 1000 80F8 232 Oct 0000 1011 0011 0111 0B37 bpl e1: 212 = 232 +2q q = (138 − 154)/2 = −8 neg C [P C] AE 234 Oct 1111 1111 1110 1000 FFE8 236 Oct 0000 0000 0000 0000 0000 z}|{ z}|{ z}|{ XC0 z}|{ 206 = + 236 0 ⇒ XC = 134 − 158 = −24 halt P1.(b) Instrucció F ER EW clr R1 clrb Z mov #V,R0 e2: cmpb (R0)+,(R0) bmi e1 movb #1,W(R1) incb Z e1: inc R1 cmp #3,R1 bne e2 halt 1 2 2 1 1 3 2 1 2 1 1 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 1 1 0 0 0 0 TOTAL ACCESSOS Nombre d’execucions 1 1 1 3 3 1 1 3 3 3 1 Nombre total d’accessos 1 3 2 3 3 4 4 3 6 3 1 33