-
Notifications
You must be signed in to change notification settings - Fork 0
Home
BICHO es de 8 bits
-
R0, R1, R2 : De propósito general, el valor de retorno en R0, como hay pocos registros seguramente haya que guardarlo en la pila
-
SW (R11)
- Status XXXXXXVZ
- bit 0 es Z (ult. op es cero)
- bit 1 es V (overflow)
- Status XXXXXXVZ
-
PC (R12)
-
SP (R13)
- IO RN #(saca por los leds los bits de RN, incluye SW, PC y SP, para depurar)
- NOP
- HALT
- WAIT RN #(espera RN ms)
- LD (RN), RM #(incluye SW, PC y SP, no hace falta BR)
- LD imm, RM
- MOV RN, RM ---sería -> LD 0x0, RM; ADD RN, RM
- #-> BR RN sería MOV RN, R12
- ST RN, (RM) #(incluye SW, PC y SP, no hace CALL)
- #-> PUSH RN --- sería -> ST RN, (R13); LD 1, R0; ADD R0 R13
- #-> CALL RN--- sería -> ST R12, (R13); LD 1, R0; ADD R0 R13; LD 0x0, RN; ADD 0, RM;
- #--> se puede reescribir PUSH R12; MOV RN, R12; --> PUSH R12; BR RN
- #-> POP RN ---sería -> LD (R13), RN; LD 0xff, R0; ADD R0 R13
- ADD RN, RM # RN+RM -> RM (incluye PC y SP),
- pone Z si RM es 0,
- pone V si el resultado es mayor que 01111111 (127)
- o menor que 10000000 (-128)
- LESS RN, RM # RN < RM
- Z= 0 si RN >= RM, en compl a 2, así que A= XYYYYYYY, B = RBBBBBBB,
- A >= B Si X = 0 y R =0 -> Si YYYYYYY >= BBBBBBB Z = 0 Si X = 1 y R =1 -> Si YYYYYYY <= BBBBBBB Z= 0 Si X = 0 y R =1 -> Z = 0 Si X = 1 y R =0 -> Z = 1
- Z= 0 si RN >= RM, en compl a 2, así que A= XYYYYYYY, B = RBBBBBBB,
- SHL SHR y MUL son bucles de ADD (hay que programarlos para asegurarse)
- AND RN, RM # RN & RM ->RM bit a bit (incluye PC y SP), pone Z si RM es 0
- OR RN, RM # RN | RM ->RM bit a bit (incluye PC y SP), pone Z si RM es 0
- XOR RN, RM # RN ^ RM ->RM bit a bit (incluye PC y SP), pone Z si RM es 0 *-> EQ RN, RM N ---sería -> XOR RN, RM y Z dice si son iguales *-> NOT RN ---sería -> LD 0xff, R0; XOR R0, RN y Z dice si el resultado es 0
De momento la ROM que empieza en 0x10 y que es donde salta y donde está el "cargador".Quizás RAM en otro sitio más adelante
Es importante que de 0 a 0x10 no esté mapeado en memoria y que si alguien pone el PC ahí, pase algo, por ejemplo se pare la máquina y se quede el led parpadeando o algo identificable.
El ancho es fijo, pero puede contener un inmediato que es del mismo ancho que la instrucción.
- Los 4 bits menores son registros/operandos (los Y) XXXXYYYY
- Los 4 bits mayores son las descripción de la instrucción (los X) XXXXYYYY
- Las instrucciones 00XXYYYY Son de generales
- Las instrucciones 01XXYYYY Son de memoria
- Las instrucciones 10XXYYYY Son aritméticas
- Las instrucciones 11XXYYYY Son lógicas
- XXXX0YYY Registros normales
- XXXX0000 R0
- XXXX0001 R1
- XXXX0010 R2
- XXXX110Y Registros especiales
- XXXX1011 SW
- XXXX1100 PC
- XXXX1101 SP
- XXXX1110 IMM
- XXXX1111 no operand
Cuando el operador es inmediato (LD, se lee la siguiente palabra de la memoria).
-
NOP 0000YYYY
-
IO 0001YYYY
-
HALT 0010YYYY
-
WAIT 0001YYYY
-
LD 0100YYYY
-
ST 0101YYYY
-
ADD 1000YYYY
-
LESS 1001YYYY
-
AND 1100YYYY
-
OR 1101YYYY
-
XOR 1110YYYY