private void montar_Click(object sender, EventArgs e) { nInst = -1; Instrucoes.salvarMem(ref mem, memoria.Text); do { nInst++; op[nInst] = Instrucoes.instrucoes(inst.Text, ref infosInstrucao, ref nInst, ref nomeJump, ref listaJumps); if (op[nInst] != -1) { if (op[nInst] < 8 || op[nInst] > 12 && op[nInst] != 17) { if (op[nInst] == 16) { mem[nInst] = op[nInst].ToString("X2").PadRight(5, '0') + Convert.ToInt32(infosInstrucao[nInst]).ToString("X2").PadLeft(3, '0'); } else { mem[nInst] = op[nInst].ToString("X2") + Convert.ToInt32(infosInstrucao[nInst]).ToString("X2"); } } else { mem[nInst] = op[nInst].ToString("X2"); } mem[nInst] = mem[nInst].PadRight(8, '0') + "-"; } } while (op[nInst] != -1); memoria.Text = ""; for (int i = 0; i <= mem.Length - 1; i++) { memoria.Text += mem[i]; } }
private void proxinst_Click(object sender, EventArgs e) { String reg1 = null; try { //Flags if (memoria.Text.Split('-')[enderecoAtual].Substring(0, 2).Equals("00")) { msgDebug.Text = "Não há instrução para ser executada."; msgDebug.ForeColor = System.Drawing.Color.White; return; } //Cor instrucao memoria.Select(enderecoAnterior * 9, 8); memoria.SelectionColor = System.Drawing.Color.Orange; memoria.Select(enderecoAtual * 9, 8); memoria.SelectionColor = Color.OrangeRed; Instrucoes.pegarInst(ref op, ref infosInstrucao, ref mem, memoria.Text, enderecoAtual); for (int i = 0; i < labelReg.Count; i++) { if (i == infosInstrucao[enderecoAtual]) { labelReg[i].ForeColor = System.Drawing.Color.Chartreuse; } else { labelReg[i].ForeColor = System.Drawing.Color.Cornsilk; } } if (op[enderecoAtual] == 16) { ULA.SalvarCarregarDados(op[enderecoAtual], ref infoRegImediato, infosInstrucao[enderecoAtual].ToString()); msgDebug.ForeColor = System.Drawing.Color.Chartreuse; // verde msgDebug.Text = "Endereço atual: " + enderecoAtual.ToString() + ", Operação: " + op[enderecoAtual].ToString(); enderecoAnterior = enderecoAtual++; infoRegInstrucoes.Text = enderecoAtual.ToString(); return; } reg1 = listaReg[infosInstrucao[enderecoAtual]].Text; if (op[enderecoAtual] == 13 || op[enderecoAtual] == 14 || op[enderecoAtual] == 17) { while (progressBar1.Value < 100) { System.Threading.Thread.Sleep(350); progressBar1.Value += 10; } ULA.executarTransferencia(op[enderecoAtual], ref memoria, infosInstrucao[enderecoAtual], ref listaReg, ref infoRegImediato, infoRegACHex.Text); enderecoAnterior = enderecoAtual++; infoRegInstrucoes.Text = enderecoAtual.ToString(); if (op[enderecoAtual] == 13) { msgDebug.Text = "Dado inserido no registrador."; } else { msgDebug.Text = "Dado inserido na memoria."; } return; } if (op[enderecoAtual] == 15) { enderecoAnterior = enderecoAtual++; infoRegInstrucoes.Text = enderecoAtual.ToString(); return; } else if (op[enderecoAtual] > 7 && op[enderecoAtual] < 14) { enderecoAnterior = enderecoAtual; msgDebug.ForeColor = System.Drawing.Color.Chartreuse; // verde msgDebug.Text = "Endereço atual: " + enderecoAtual.ToString() + ", Operação: " + op[enderecoAtual].ToString(); ULA.executarPulos(op[enderecoAtual].ToString("X"), Convert.ToInt32(reg1), Convert.ToInt32(infoRegACHex.Text, 16), ref enderecoAtual, ref listaJumps, ref nomeJump, listaFlags); } else { listaReg[infosInstrucao[enderecoAtual]].Text = listaReg[infosInstrucao[enderecoAtual]].Text.PadLeft(8, '0').ToUpper(); int resultado = Convert.ToInt32(ULA.executarOperacao(op[enderecoAtual].ToString("X"), reg1, Convert.ToInt32(infoRegACHex.Text, 16), listaFlags), 10); infoRegACBin.Text = Convert.ToString(resultado, 2).PadLeft(8, '0'); infoRegACHex.Text = Convert.ToString(resultado, 16).ToUpper(); infoRegACDec.Text = resultado.ToString(); msgDebug.ForeColor = System.Drawing.Color.Chartreuse; // verde msgDebug.Text = "Endereço atual: " + enderecoAtual.ToString() + ", Operação: " + op[enderecoAtual].ToString(); enderecoAnterior = enderecoAtual++; } infoRegInstrucoes.Text = enderecoAtual.ToString(); } catch (Exception) { msgDebug.ForeColor = System.Drawing.Color.Red; msgDebug.Text = "[ERRO] Valores invalidos."; } }