Skip to content

Jogo e processador para a disciplina de Prática em Organisação de Computadores

Notifications You must be signed in to change notification settings

VictorLutes/BreakoutPraticaOrgComp

Repository files navigation

BreakoutPraticaOrgComp

Jogo e processador para a disciplina de Prática em Organisação de Computadores

Link explicativo do jogo: https://youtu.be/yIJ2XbERLA4

Instrução CMPI/CMPIMED:

-cmpi r0, #0

Format: < inst(6) | Rx(3) | xxxxxxx > + 16bit Numero

Faz o compare entre o registrador passado e o número passado, setando as flags

case CMPIMED: 
		selM3 = sDATA_OUT; //VOU CRIAR UMA NOVA CONEXAO COM M3 PARA SELECIONAR O DATA OUT
		selM1 = sPC;
		RW=0;
		selM4 = rx;
		IncPC = 1;
		OP = CMPIMED;
		LoadFR = 1;
		// -----------------------------
		state=STATE_FETCH;
		break;

para essa instrução é necessário adicionar uma conexão a mais no M3 com o data out para receber a linha com os bits do número passado, como exemplificado na linha 734 do simuladorTemplate.c:

if(selM3 == 8) M3 = temp;  // Seleciona com 8 o FR
else if(selM3 == sDATA_OUT) M3=DATA_OUT; //VOU CRIAR UMA NOVA CONEXAO COM M3 PARA SELECIONAR O DATA OUT
else M3 = reg[selM3]; 

com isso, estou passando o valor imediato no M3 e o registrador no M4 entao preciso considerar essa inversão no x e y passados para a ULA usando um novo OPCODE: CMPIMED, que faz o mesmo que o CMP, mas com o x e y invertidos:

else if(OP==CMPIMED)
		{
			result = y;
			if(y>x){
				auxFRbits[GREATER] = 1;
				auxFRbits[LESSER] = 0;
				auxFRbits[EQUAL] = 0;
			}else if(y<x){
				auxFRbits[GREATER] = 0;
				auxFRbits[LESSER] = 1;
				auxFRbits[EQUAL] = 0;
			}else if(x==y){
				auxFRbits[GREATER] = 0;
				auxFRbits[LESSER] = 0;
				auxFRbits[EQUAL] = 1;
			}
		}

link de um vídeo explicando e testando a instrução: https://youtu.be/I5FnA9apkms

About

Jogo e processador para a disciplina de Prática em Organisação de Computadores

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published