ETN 821 Soluciones Ejercicios SIC
ETN 821 Soluciones Ejercicios SIC
ETN 821 Soluciones Ejercicios SIC
Solución (Indexado)
1. Inicializar registro índice A(para X) DATOS: INSTRUCCIONES:
2. Inicializar registro índice B(para Y) 200+0 A 600 CLA(1)
3. Leer el dato de la dirección X 200+1 B 601 DTA(1)
4. Rotar acumulador a la derecha 200+2 C 602 DTB(2)
5. Es par? (LF=0?) … … 603 LAC IA 200(3)
a. No, salte al paso 9 400+0 ------ 604 RAR(4)
400+1 ------ 605 SZL(5)
6. Si, Leer dato de la dirección X
400+2 ------ 606 JMP 612(5.a)
7. Guardar el AC en dirección Y … … 607 LAC IA 200(6)
8. Moverse al siguiente destino(Y+1) 500 -10 610 DAC IB 400(7)
9. Moverse al siguiente dato(X+1) 501 ------ 611 INB(8)
10. Ultimo dato? 612 INA(9)
a. No, volver a 3 613 ISZ 500(10)
11. Si, salir del programa(HLT) 614 JMP 603(10.a)
615 HLT(11)
Solución (Indirecto)
1. Leer dato AUX DATOS: INSTRUCCIONES:
2. Complemento a AC(-AC-1) 200 A 600 LAC 11(1)
3. Sumar 1(-AC) 201 B 601 CMA(2)
4. Sumar dato de dirección X(DATO-AC) 202 C 602 TAD 10(3)
5. Positivo? (SKP) … … 603 TAD I 12(4)
a. No, ir al paso 8 10 1 604 SKP(5)
11 0 605 JMP 610(5.a)
6. Si, Leer dato de dirección X
12 200 606 LAC I 12(6)
7. Guardar en AUX 13 -16 607 DAC 11(7)
8. Movernos al siguiente dato(X+1) 610 ISZ 12(8)
9. Ultimo valor? 611 ISZ 13(9)
a. No, volver a 1 612 JMP 600(9.a)
10. Si, salir del programa 613 HLT(10)
11. Si, salir 614
AUX – DATO < 0 Reemplazar dato auxiliar (SKP?)
DATO – AUX > 0 Reemplazar dato auxiliar (SKP)
Solución
Rotación a la izquierda
Ac0 Ac1 Ac2 Ac3 Ac4 Ac5 Ac6 Ac7 Ac8 Ac9 Ac10 Ac11 Ac12 Ac13 Ac14 Ac15 Ac16 Ac17 link
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 lf
Ac0 Ac1 Ac2 Ac3 Ac4 Ac5 Ac6 Ac7 Ac8 Ac9 Ac10 Ac11 Ac12 Ac13 Ac14 Ac15 Ac16 Ac17 link
lf 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
1 0 1 0 Multiplicador
1 0 0 0 0 1 1 1 1
1 1 1 1 1 0 0 0 0
1 0 0 0 0 1 1 1 1
1 1 1 1 0 0 0 0
1 0 0 1 0 1 1 0 Producto 1 0 0 1 0 1 1 0
1er Momento: Se inicia con un producto que es igual a 0, luego se toma el Mdor y se lo rota
a la derecha para obtener el bit menos significativo.
Inicio 0 0 0 0 0 0 0 0 Mdor: 0 1 1 0 X
Rotar Mdor: X 0 1 1 0
Luego según el valor del bit extraido si este es 1 se suma el Mando a la parte alto del
producto en cambio si no es igual a 0 no se suma nada:
LF = 0; No se suma nada
Luego se rota el producto empezando desde la parte alta y continuando en la parte baja.
Este procedimiento se realiza hasta terminar de extraer todos los bits del Mdor.
2do Momento:
Inicio 0 0 0 0 0 0 0 0 Mdor: X 0 1 1 X
Rotar Mdor: X X 0 1 1
Sumar: 0 0 0 0
Mando 0 0 1 1
0 0 1 1
3er Momento:
Inicio 0 0 0 1 1 0 0 0 Mdor: X X 0 1 X
Rotar Mdor: X X X 0 1
Sumar: 0 0 0 1
Mando 0 0 1 1
0 1 0 0
4to Momento:
Inicio 0 0 1 0 0 1 0 0 Mdor: X X X 0 X
Rotar Mdor: X X X X 0
LF = 0; No se suma nada
Luego se rota el producto empezando desde la parte alta y continuando en la parte baja.
Resultado final: 0 0 0 1 0 0 1 0
Solución: Uso de subrutinas
1. Leer Mdor
2. Rotar Mdor a la derecha
3. Guardar Mdor modificado
4. Ver si se debe sumar al producto LF = 0 (SZL)
a. No, sumar Mando a la parte alta del producto
5. Si, Leer parte alta del producto
6. Rotar parte alta del producto (Salvar el acarreo)
7. Guardar la parte alta
8. Leer parte baja
9. Rotar la parte baja del producto (Salvar el ultimo bit de la parte alta)
10. Guardar la parte baja
11. Ultimo bit de Mdor?
a. No, volver al paso 1
12. Si, salir del programa
Propuesto. Se tiene una porción de memoria de 64 posiciones, con estas se desea obtener la
siguiente sumatoria:
13. Se tiene una porción de memoria que contiene 8 datos y que se encuentran dentro del
rango de direcciones 00200-00300, la dirección inicial de los datos se encuentra guardada en
la dirección 00100 y no la conocemos. Los 8 datos se encuentran guardados uno después
del otro. Escribir un programa para el computador SIC que guarde los datos de las
direcciones pares uno por uno en una porción de memoria que empieza en la dirección
00400.
Solución:
1. Leer dirección guardada en 100(AC) DATOS: INSTRUCCIONES:
2. Rotar a la derecha 100 ZZZ(X) 600 LAC 100(1)
… … 601 RAR (2)
3. Dirección par SZL (LF=0?)
ZZZ 123 602 SZL(3)
a. No, saltar parte de guardado(Saltar a 7) … … 603 JMP 607(3.a)
4. Si, leer el dato de la dirección X ZZZ+7 321 604 LAC I 100(4)
5. Guardar el dato en la dirección Y 301 -7 605 DAC I 302(5)
6. Incrementar la dirección Y 302 401(Y) 606 ISZ 302(6)
7. Incrementar la dirección X 607 ISZ 100(7)
8. Ultimo valor? 610 ISZ 301(8)
a. No, Volver al paso 1 607 JMP 600(8.a)
610 HLT(9)
9. Si, Salir del programa
14. Escribir un programa para el computador SIC que lea un dato en memoria y LO GUARDE
EN FORMA INVERTIDA en la memoria en la posición 100. El programa no debe tener más
de 15 instrucciones y puede utilizar hasta 5 direcciones de memoria para datos y operandos.
15. Escribir el programa para el computador SIC que lea un dato en memoria y lo analice en
busca de todos los bits que se encuentran en 0. Cada vez que encuentre un bit en 0 se debe
guardar en el acumulador el índice del bit analizado y se debe ir a la subrutina de la posición
500.
El programa no debe tener más de 15 instrucciones y puede utilizar hasta 5 posiciones de
memoria para datos y operandos.
Cont. rotaciones 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
0 1 1 1 1 1 0 0 1 1 1 0 0 0 1 0 1 0
ROTACIONES
Inicio 0 1 1 1 1 1 0 0 1 1 1 0 0 0 1 0 1 0
Rotación 1 1 1 1 1 1 0 0 1 1 1 0 0 0 1 0 1 0 0
Inicio 1 1 1 1 1 0 0 1 1 1 0 0 0 1 0 1 0 0
Rotación 2 1 1 1 1 0 0 1 1 1 0 0 0 1 0 1 0 0 0
Inicio 1 1 1 1 0 0 1 1 1 0 0 0 1 0 1 0 0 0
Rotación 3 1 1 1 0 0 1 1 1 0 0 0 1 0 1 0 0 0 0
...
...
...
Solución mejorada
SOLUCION
ISZ
3. Modificar el comando ISZ para que decremente el dato y si se produce acarreo salta una
dirección.
ISZ
4. Modificar algunos de los 24 pasos para realizar la siguiente operación
Modificar los pasos que sean necesarios para conseguir esta configuración.
JPA