Estoy tratando de implementar la multiplicación en una CPU que diseñé. Estoy tratando de lograr esto con algunas condiciones. Solo tengo dos registros de propósito general, Rx y Ry, y estas instrucciones:
- Agregar Rx, Ry [Agregar tomar Rx y Ry a ALU y devolver el resultado a Rx]
- LD Rx, address [Load toma los datos en la RAM de la dirección y los carga a Rx]
- STR Rx, dirección [La tienda toma los datos de Rx y los almacena en la RAM]
- BZ Rx, Ry, Address [Sucursal compara los datos en dos registros. Salta si es igual]
- Dirección de salto [Salta a dirección]
Si solo tengo 2 registros y RAM, ¿hay alguna forma de implementar la multiplicación? Sé que la forma general de implementarlo es mediante el uso de turnos, pero no tengo implementado y preferiría no hacerlo. Estaba pensando en hacer una llamada adicional, pero parece que no consigo ese trabajo ya que solo tengo 2 registros.
EDITAR: Puede seleccionar qué registro se direcciona a ellos 0 o 1. Además, mi RAM tiene solo 16 bytes y el bus solo tiene 8 bits dentro de la CPU.
- Añadir Rx, Ry [Rx < = Rx + Ry]
- LD Rx, dirección [Rx < = RAM (dirección)]
- STR Rx, dirección [RAM (dirección) < = Rx]
- BZ Rx, Ry, Address [Branch to Address If Rx == Ry]
- Dirección de salto [Salta a dirección]
La dirección es una constante de 4 bits almacenada en la instrucción. Rx o Ry son 1 bit. OPCODE es de 4 bits, con la excepción de LD y STR, donde el cuarto bit de OPCode se refiere a la selección de registros.