Ejemplo n.º 1
0
        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];
            }
        }
Ejemplo n.º 2
0
        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.";
            }
        }