You are on page 1of 20

Enrique Galindo Cárdenas

Código de un programa hecho en Visual Basic para la simulación de un procesador de 8-bits.

Dim ACC As Long 'Valor ACC


Dim nuevoDato As Long 'Dato insertado al inicio del programa, y que cambia por cada operacion
Dim nuevoDatoBin As String 'Dato de nuevoDato en Binario
Dim datoInmediato As Long 'Dato inmediato al ser solicitado para su carga
Dim datoInmediatoBin As String 'Dato de datoInmediato en Binario
Dim codeOp As String 'Codigo de operacion actual
Dim cicloMaquina As Integer 'Ciclo Maquina actual
Dim edoPC As Long 'Estado del PC
Dim linActDec As Integer 'Linea Activa Decodificada
Dim numBits As Integer 'No de bits del microprocesador = 8 bits
Dim opcion As String 'Indica que operacion realizar con dato inmediato
Dim nombreArchivo As String 'Nombre y ruta por default del archivo a guardar

Private Function Existe(ByVal unFichero As String) As Boolean


On Local Error Resume Next

Existe = Len(Dir$(unFichero))
If Err Then
Existe = False
End If
Err = 0
End Function

Private Function guardaArchivo(datos As String) As Boolean

'CommonDialog guardar
'Preguntar el nombre del fichero y guardarlo
With CommonDialog1

On Local Error Resume Next


'Esto hará que VB devuelva un error al pulsar Cancelar
.CancelError = True

.DialogTitle = "Guardar el fichero"


.FileName = nombreArchivo
.ShowSave

'Si no se ha producido un error


If Err.Number = 0 Then

If Len(.FileName) Then
nombreArchivo = .FileName

'Guardar
Dim i As Long
Dim SobreEscribir As Boolean
Dim informacion As String

informacion = "------Microprocesador de 8 bits Tabla Secuencial de operaciones------" &


vbCrLf & vbCrLf &
"**********************************************************************************
**************************************************************" & vbCrLf & vbCrLf

'Se asigna el valor Verdadero, por si no existe


SobreEscribir = True
'Si ya existe, preguntar
If Existe(nombreArchivo) Then
If MsgBox("El fichero ya existe." & vbCrLf & _
"¿Quieres sobreescribirlo?", vbQuestion + vbYesNo, "Microprocesador 8 bits") =
vbNo Then
'Hemos contestado que no, así que...
SobreEscribir = False
guardaArchivo = False
guardaArchivo (nombreArchivo)

Else
'guardaArchivo = True
End If
End If

'Si no existe o se quiere sobreescribir...


If SobreEscribir Then
i = FreeFile

informacion = informacion & Tabla.Text & vbCrLf &


"**********************************************************************************
*************************************************************"

Open nombreArchivo For Output As i


Print #i, informacion
Close i
'Ya hemos guardado las modificaciones
guardaArchivo = True
Else
guardaArchivo = False
End If
End If
Else
guardaArchivo = False
End If
End With

Err = 0
End Function

Private Function llenaTabla(activa As String, contMem As String, regAct As String, instruccion As


String) As Boolean

Tabla.Text = Tabla.Text & " " & cicloMaquina & " " & " " & activa & " "&
decBin(edoPC) & " " & contMem & " " & " " & regAct & " " & linActDec & "
" & decBin(ACC) & " " & instruccion & vbCrLf ' vbCrLf es retorno de carro lo mismo que CHR(13)

llenaTabla = True

End Function

Private Function binDec(numBin As String) As Long

Dim i As Integer
Dim j As Integer
Dim k As Integer

k=0
j=0
For i = numBits To 1 Step -1
If Mid$(numBin, i, 1) = "1" Then
k = k + (2 ^ j)
End If
j=j+1
Next

binDec = k

End Function

Private Function decBin(numDec As Long) As String

Dim i As Integer
Dim sTmp As String ' Cadena temporal

sTmp = ""
For i = numBits - 1 To 0 Step -1
If numDec And 2 ^ i Then
sTmp = sTmp & "1"
Else
sTmp = sTmp & "0"
End If
Next

decBin = sTmp
End Function

Private Function operador(opcion As String) As Boolean

Dim sec As Boolean 'porque toda funcion regresa dato, asi no marca error

Select Case opcion


Case "suma"

Codigo_operacion ("Suma")

sec = llenaTabla("A", codeOp, "RI ", "Suma ACC con dato inmediato")
edoPC = edoPC + 1 'PC aumenta uno
sec = llenaTabla("E", codeOp, "PC ", "Suma ACC con dato inmediato")

nuevoDato = datoInmediato
nuevoDatoBin = datoInmediatoBin

sec = llenaTabla("B", nuevoDatoBin, "RD ", "Suma ACC con dato inmediato")
edoPC = edoPC + 1 'PC aumenta uno
sec = llenaTabla("E", nuevoDatoBin, "PC ", "Suma ACC con dato inmediato")
sec = llenaTabla("C", nuevoDatoBin, "Acct", "Suma ACC con dato inmediato")

If ACC + nuevoDato > 255 Then


MsgBox "El dato es mayor a 255"

nuevoDato = binDec(decBin(ACC + nuevoDato))


nuevoDatoBin = decBin(nuevoDato)
ACC = nuevoDato 'Suma ACC con dato inmediato
Else
nuevoDato = ACC + nuevoDato
nuevoDatoBin = decBin(nuevoDato)
ACC = nuevoDato 'Suma ACC con dato inmediato
End If

sec = llenaTabla("D", nuevoDatoBin, "Acc ", "Suma ACC con dato inmediato")
cicloMaquina = cicloMaquina + 1

DatoACC.Text = ACC 'Se despliega al usuario resultado final


Tabla.Text = Tabla.Text & "--------------------------------------------------" & vbCrLf

Tabla.Text = Tabla.Text & "---- F I N Suma ----" & vbCrLf

Case "resta"

Codigo_operacion ("Resta")

sec = llenaTabla("A", codeOp, "RI ", "Resta ACC con dato inmediato")
edoPC = edoPC + 1 'PC aumenta uno
sec = llenaTabla("E", codeOp, "PC ", "Resta ACC con dato inmediato")

nuevoDato = datoInmediato
nuevoDatoBin = datoInmediatoBin

sec = llenaTabla("B", nuevoDatoBin, "RD ", "Resta ACC con dato inmediato")
edoPC = edoPC + 1 'PC aumenta uno
sec = llenaTabla("E", nuevoDatoBin, "PC ", "Resta ACC con dato inmediato")
sec = llenaTabla("C", nuevoDatoBin, "Acct", "Resta ACC con dato inmediato")

If ACC - nuevoDato < -256 Then


MsgBox "El dato es menor a -256"

nuevoDato = binDec(decBin(ACC - nuevoDato))


nuevoDatoBin = decBin(nuevoDato)
ACC = nuevoDato 'Resta ACC con dato inmediato
Else
nuevoDato = ACC - nuevoDato
nuevoDatoBin = decBin(nuevoDato)
ACC = nuevoDato 'Resta ACC con dato inmediato
End If

sec = llenaTabla("D", nuevoDatoBin, "Acc ", "Resta ACC con dato inmediato")
cicloMaquina = cicloMaquina + 1

DatoACC.Text = ACC 'Se despliega al usuario resultado final


Tabla.Text = Tabla.Text & "--------------------------------------------------" & vbCrLf

Tabla.Text = Tabla.Text & "---- F I N Resta ----" & vbCrLf

Case "multiplica"

Codigo_operacion ("Multiplica")

sec = llenaTabla("A", codeOp, "RI ", "Multiplica ACC con dato inmediato")
edoPC = edoPC + 1 'PC aumenta uno
sec = llenaTabla("E", codeOp, "PC ", "Multiplica ACC con dato inmediato")

nuevoDato = datoInmediato
nuevoDatoBin = datoInmediatoBin

sec = llenaTabla("B", nuevoDatoBin, "RD ", "Multiplica ACC con dato inmediato")
edoPC = edoPC + 1 'PC aumenta uno
sec = llenaTabla("E", nuevoDatoBin, "PC ", "Multiplica ACC con dato inmediato")
sec = llenaTabla("C", nuevoDatoBin, "Acct", "Multiplica ACC con dato inmediato")

If ACC * nuevoDato > 255 Or ACC * nuevoDato < -256 Then


MsgBox "El dato es menor a -256 o mayor a 255"
nuevoDato = binDec(decBin(ACC * nuevoDato))
nuevoDatoBin = decBin(nuevoDato)
ACC = nuevoDato 'Multiplica ACC con dato inmediato
Else
nuevoDato = ACC * nuevoDato
nuevoDatoBin = decBin(nuevoDato)
ACC = nuevoDato 'Multiplica ACC con dato inmediato
End If

sec = llenaTabla("D", nuevoDatoBin, "Acc ", "Multiplica ACC con dato inmediato")
cicloMaquina = cicloMaquina + 1

DatoACC.Text = ACC 'Se despliega al usuario resultado final


Tabla.Text = Tabla.Text & "--------------------------------------------------" & vbCrLf

Tabla.Text = Tabla.Text & "---- F I N Multiplica ----" & vbCrLf

Case "divide"

Codigo_operacion ("Divide")

sec = llenaTabla("A", codeOp, "RI ", "Divide ACC con dato inmediato")
edoPC = edoPC + 1 'PC aumenta uno
sec = llenaTabla("E", codeOp, "PC ", "Divide ACC con dato inmediato")

nuevoDato = datoInmediato
nuevoDatoBin = datoInmediatoBin

sec = llenaTabla("B", nuevoDatoBin, "RD ", "Divide ACC con dato inmediato")
edoPC = edoPC + 1 'PC aumenta uno
sec = llenaTabla("E", nuevoDatoBin, "PC ", "Divide ACC con dato inmediato")
sec = llenaTabla("C", nuevoDatoBin, "Acct", "Divide ACC con dato inmediato")

nuevoDato = ACC / nuevoDato


nuevoDatoBin = decBin(nuevoDato)
ACC = nuevoDato 'Divide ACC con dato inmediato

sec = llenaTabla("D", nuevoDatoBin, "Acc ", "Divide ACC con dato inmediato")
cicloMaquina = cicloMaquina + 1

DatoACC.Text = ACC 'Se despliega al usuario resultado final


Tabla.Text = Tabla.Text & "--------------------------------------------------" & vbCrLf

Tabla.Text = Tabla.Text & "---- F I N Divide ----" & vbCrLf

Case "xor"

Codigo_operacion ("Xor")
sec = llenaTabla("A", codeOp, "RI ", "Xor ACC con dato inmediato")
edoPC = edoPC + 1 'PC aumenta uno
sec = llenaTabla("E", codeOp, "PC ", "Xor ACC con dato inmediato")

nuevoDato = datoInmediato
nuevoDatoBin = datoInmediatoBin

sec = llenaTabla("B", nuevoDatoBin, "RD ", "Xor ACC con dato inmediato")
edoPC = edoPC + 1 'PC aumenta uno
sec = llenaTabla("E", nuevoDatoBin, "PC ", "Xor ACC con dato inmediato")
sec = llenaTabla("C", nuevoDatoBin, "Acct", "Xor ACC con dato inmediato")

nuevoDato = ACC Xor nuevoDato


nuevoDatoBin = decBin(nuevoDato)
ACC = nuevoDato 'Xor ACC con dato inmediato

sec = llenaTabla("D", nuevoDatoBin, "Acc ", "Xor ACC con dato inmediato")
cicloMaquina = cicloMaquina + 1

DatoACC.Text = ACC 'Se despliega al usuario resultado final


Tabla.Text = Tabla.Text & "--------------------------------------------------" & vbCrLf

Tabla.Text = Tabla.Text & "---- F I N Xor ----" & vbCrLf

Case "and"

Codigo_operacion ("And")

sec = llenaTabla("A", codeOp, "RI ", "And ACC con dato inmediato")
edoPC = edoPC + 1 'PC aumenta uno
sec = llenaTabla("E", codeOp, "PC ", "And ACC con dato inmediato")

nuevoDato = datoInmediato
nuevoDatoBin = datoInmediatoBin

sec = llenaTabla("B", nuevoDatoBin, "RD ", "And ACC con dato inmediato")
edoPC = edoPC + 1 'PC aumenta uno
sec = llenaTabla("E", nuevoDatoBin, "PC ", "And ACC con dato inmediato")
sec = llenaTabla("C", nuevoDatoBin, "Acct", "And ACC con dato inmediato")

nuevoDato = ACC And nuevoDato


nuevoDatoBin = decBin(nuevoDato)
ACC = nuevoDato 'And ACC con dato inmediato

sec = llenaTabla("D", nuevoDatoBin, "Acc ", "And ACC con dato inmediato")
cicloMaquina = cicloMaquina + 1

DatoACC.Text = ACC 'Se despliega al usuario resultado final


Tabla.Text = Tabla.Text & "--------------------------------------------------" & vbCrLf

Tabla.Text = Tabla.Text & "---- F I N And ----" & vbCrLf

Case "or"

Codigo_operacion ("Or")

sec = llenaTabla("A", codeOp, "RI ", "Or ACC con dato inmediato")
edoPC = edoPC + 1 'PC aumenta uno
sec = llenaTabla("E", codeOp, "PC ", "Or ACC con dato inmediato")

nuevoDato = datoInmediato
nuevoDatoBin = datoInmediatoBin

sec = llenaTabla("B", nuevoDatoBin, "RD ", "Or ACC con dato inmediato")
edoPC = edoPC + 1 'PC aumenta uno
sec = llenaTabla("E", nuevoDatoBin, "PC ", "Or ACC con dato inmediato")
sec = llenaTabla("C", nuevoDatoBin, "Acct", "Or ACC con dato inmediato")

nuevoDato = ACC Xor nuevoDato


nuevoDatoBin = decBin(nuevoDato)
ACC = nuevoDato 'Or ACC con dato inmediato

sec = llenaTabla("D", nuevoDatoBin, "Acc ", "Or ACC con dato inmediato")
cicloMaquina = cicloMaquina + 1

DatoACC.Text = ACC 'Se despliega al usuario resultado final


Tabla.Text = Tabla.Text & "--------------------------------------------------" & vbCrLf

Tabla.Text = Tabla.Text & "---- F I N Or ----" & vbCrLf

End Select

operador = True

End Function

Private Function Codigo_operacion(seleccion As String)


Select Case seleccion
Case "Carga"
codeOp = "00000000"
linActDec = 1
Case "Noop"
codeOp = "00000001"
linActDec = 2
Case "Not"
codeOp = "00000010"
linActDec = 3
Case "Suma"
codeOp = "00000011"
linActDec = 4
Case "Resta"
codeOp = "00000100"
linActDec = 5
Case "<<"
codeOp = "00000101"
linActDec = 6
Case ">>"
codeOp = "00000110"
linActDec = 7
Case "Or"
codeOp = "00000111"
linActDec = 8
Case "And"
codeOp = "00001000"
linActDec = 9
Case "Borra"
codeOp = "00001001"
linActDec = 10
Case "Incrementa"
codeOp = "00001010"
linActDec = 11
Case "Decrementa"
codeOp = "00001011"
linActDec = 12
Case "Xor"
codeOp = "00001100"
linActDec = 13
Case "Divide"
codeOp = "00001101"
linActDec = 14
Case "Multiplica"
codeOp = "00001110"
linActDec = 15
End Select

Codigo_operacion = codeOp

End Function

Private Sub Andop_Click()


Label5.Visible = True
Label6.Visible = True
Dato2.Visible = True
Binario2.Visible = True
Operacion.Visible = True
Operaciones.Enabled = False

opcion = "and"

End Sub

Private Sub Borra_Click()

Dim sec As Boolean 'porque toda funcion regresa dato, asi no marca error

Codigo_operacion ("Borra")

sec = llenaTabla("A", codeOp, "RI ", "Borra ACC")


edoPC = edoPC + 1 'PC aumenta uno
sec = llenaTabla("E", codeOp, "PC ", "Borra ACC")
sec = llenaTabla("B", nuevoDatoBin, "RD ", "Borra ACC")
edoPC = edoPC + 1 'PC aumenta uno
sec = llenaTabla("E", nuevoDatoBin, "PC ", "Borra ACC")
sec = llenaTabla("C", nuevoDatoBin, "Acct", "Borra ACC")

nuevoDato = 0
nuevoDatoBin = decBin(nuevoDato)
ACC = nuevoDato 'Se borra ACC

sec = llenaTabla("D", nuevoDatoBin, "Acc ", "Borra ACC")


cicloMaquina = cicloMaquina + 1

DatoACC.Text = ACC 'Se despliega al usuario resultado final


Tabla.Text = Tabla.Text & "--------------------------------------------------" & vbCrLf

Tabla.Text = Tabla.Text & "----F I N Borra ----" & vbCrLf

End Sub

Private Sub Carga_Click()

Dim sec As Boolean 'porque toda funcion regresa dato, asi no marca error

Codigo_operacion ("Carga")

sec = llenaTabla("A", codeOp, "RI ", "Carga ACC con dato inmediato")
edoPC = edoPC + 1 'PC aumenta uno
sec = llenaTabla("E", codeOp, "PC ", "Carga ACC con dato inmediato")
sec = llenaTabla("B", nuevoDatoBin, "RD ", "Carga ACC con dato inmediato")
edoPC = edoPC + 1 'PC aumenta uno
sec = llenaTabla("E", nuevoDatoBin, "PC ", "Carga ACC con dato inmediato")
sec = llenaTabla("C", nuevoDatoBin, "Acct", "Carga ACC con dato inmediato")
ACC = nuevoDato 'Se carga finalmente ACC

sec = llenaTabla("D", nuevoDatoBin, "Acc ", "Carga ACC con dato inmediato")
cicloMaquina = cicloMaquina + 1

DatoACC.Text = ACC 'Se despliega al usuario resultado final


Tabla.Text = Tabla.Text & "--------------------------------------------------" & vbCrLf

Tabla.Text = Tabla.Text & "----F I N Carga ----" & vbCrLf

End Sub

Private Sub Dato_Change()


Inicio.Enabled = True
Dim lngNum As Integer

lngNum = Val(Dato.Text)

If lngNum < -256 Or lngNum > 255 Then


MsgBox "El dato debe de ser un numero entre -256 a 255.", , "Microprocesador 8 bits"
Dato.Text = ""
Else
Binario.Text = decBin(Val(Dato.Text))
End If

End Sub

Private Sub Dato2_Change()

Operacion.Enabled = True
Dim lngNum As Integer

lngNum = Val(Dato2.Text)

If lngNum < -256 Or lngNum > 255 Then


MsgBox "El dato debe de ser un numero entre -256 a 255.", , "Microprocesador 8 bits"
Dato2.Text = ""
Else
Binario2.Text = decBin(Val(Dato.Text))
End If

Binario2.Text = decBin(Val(Dato2.Text))
End Sub
Private Sub DatoACC_Change()

BinarioACC.Text = decBin(Val(DatoACC.Text))

End Sub

Private Sub Decrementa_Click()

Dim sec As Boolean 'porque toda funcion regresa dato, asi no marca error

Codigo_operacion ("Decrementa")

sec = llenaTabla("A", codeOp, "RI ", "Decrementa ACC")


edoPC = edoPC + 1 'PC aumenta uno
sec = llenaTabla("E", codeOp, "PC ", "Decrementa ACC")
sec = llenaTabla("B", nuevoDatoBin, "RD ", "Decrementa ACC")
edoPC = edoPC + 1 'PC aumenta uno
sec = llenaTabla("E", nuevoDatoBin, "PC ", "Decrementa ACC")
sec = llenaTabla("C", nuevoDatoBin, "Acct", "Decrementa ACC")

nuevoDato = ACC - 1
nuevoDatoBin = decBin(nuevoDato)
ACC = nuevoDato 'Decrementa ACC

sec = llenaTabla("D", nuevoDatoBin, "Acc ", "Decrementa ACC")


cicloMaquina = cicloMaquina + 1

DatoACC.Text = ACC 'Se despliega al usuario resultado final


Tabla.Text = Tabla.Text & "--------------------------------------------------" & vbCrLf

Tabla.Text = Tabla.Text & "----F I N Decrementa ----" & vbCrLf

End Sub

Private Sub Division_Click()


Label5.Visible = True
Label6.Visible = True
Dato2.Visible = True
Binario2.Visible = True
Operacion.Visible = True

Operaciones.Enabled = False

opcion = "divide"

End Sub
Private Sub Finalizar_Click()

Dato.Enabled = True
Operaciones.Enabled = False

ACC = 0
DatoACC.Text = ACC
nuevoDato = 0
nuevoDatoBin = ""

datoInmediato = 0
datoInmediatoBin = ""

edoPC = 0

Dato.Text = ""

'Proceso para guardar


If guardaArchivo(nombreArchivo) Then
MsgBox "Archivo guardado en: " & nombreArchivo & ".", , "Microprocesador 8 bits"
Else
MsgBox "No se guardo el Archivo.", , "Microprocesador 8 bits"
End If

Tabla.Text = ""

End Sub

Private Sub Form_Load()

' Asignar el filtro para el diálogo común


CommonDialog1.Filter = "Textos (*.txt)|*.txt|Todos (*.*)|*.*"

numBits = 8
nombreArchivo = "./Mic8bits_result.txt"

ACC = 0 'No tiene dato al inicio


DatoACC.Text = ACC
edoPC = 0
opcion = ""
End Sub

Private Sub Incrementa_Click()

Dim sec As Boolean 'porque toda funcion regresa dato, asi no marca error

Codigo_operacion ("Incrementa")

sec = llenaTabla("A", codeOp, "RI ", "Incrementa ACC")


edoPC = edoPC + 1 'PC aumenta uno
sec = llenaTabla("E", codeOp, "PC ", "Incrementa ACC")
sec = llenaTabla("B", nuevoDatoBin, "RD ", "Incrementa ACC")
edoPC = edoPC + 1 'PC aumenta uno
sec = llenaTabla("E", nuevoDatoBin, "PC ", "Incrementa ACC")
sec = llenaTabla("C", nuevoDatoBin, "Acct", "Incrementa ACC")

nuevoDato = ACC + 1
nuevoDatoBin = decBin(nuevoDato)
ACC = nuevoDato 'Incrementa ACC

sec = llenaTabla("D", nuevoDatoBin, "Acc ", "Incrementa ACC")


cicloMaquina = cicloMaquina + 1

DatoACC.Text = ACC 'Se despliega al usuario resultado final


Tabla.Text = Tabla.Text & "--------------------------------------------------" & vbCrLf

Tabla.Text = Tabla.Text & "----F I N Incrementa ----" & vbCrLf

End Sub

Private Sub Inicio_Click()


Operaciones.Enabled = True
Dato.Enabled = False

nuevoDato = Val(Dato.Text)
nuevoDatoBin = decBin(nuevoDato)
'ACC = nuevoDato

Tabla.Text = "CIC INST " & " GCM "&" PC " & " CONT MEM " & " REG ACT
" & " GCM DEC " & " ACC " & "INSTRUCCION " & vbCrLf

Dim sec As Boolean 'porque toda funcion regresa dato, asi no marca error

Codigo_operacion ("Carga")

sec = llenaTabla("A", codeOp, "RI ", "Carga ACC con dato inmediato")
edoPC = edoPC + 1 'PC aumenta uno
sec = llenaTabla("E", codeOp, "PC ", "Carga ACC con dato inmediato")
sec = llenaTabla("B", nuevoDatoBin, "RD ", "Carga ACC con dato inmediato")
edoPC = edoPC + 1 'PC aumenta uno
sec = llenaTabla("E", nuevoDatoBin, "PC ", "Carga ACC con dato inmediato")
sec = llenaTabla("C", nuevoDatoBin, "Acct", "Carga ACC con dato inmediato")

ACC = nuevoDato 'Se carga finalmente ACC

sec = llenaTabla("D", nuevoDatoBin, "Acc ", "Carga ACC con dato inmediato")
cicloMaquina = cicloMaquina + 1

DatoACC.Text = ACC 'Se despliega al usuario resultado final


Tabla.Text = Tabla.Text & "--------------------------------------------------" & vbCrLf

Tabla.Text = Tabla.Text & "----F I N Carga ----" & vbCrLf

'cicloMaquina = 1

Inicio.Enabled = False

End Sub

Private Sub Multiplica_Click()


Label5.Visible = True
Label6.Visible = True
Dato2.Visible = True
Binario2.Visible = True
Operacion.Visible = True

Operaciones.Enabled = False

opcion = "multiplica"

End Sub

Private Sub Noop_Click()

Dim sec As Boolean 'porque toda funcion regresa dato, asi no marca error

Codigo_operacion ("Noop")

sec = llenaTabla("A", codeOp, "RI ", "No op ACC con dato inmediato")
edoPC = edoPC + 1 'PC aumenta uno
sec = llenaTabla("E", codeOp, "PC ", "No op ACC con dato inmediato")
sec = llenaTabla("B", nuevoDatoBin, "RD ", "No op ACC con dato inmediato")
edoPC = edoPC + 1 'PC aumenta uno
sec = llenaTabla("E", nuevoDatoBin, "PC ", "No op ACC con dato inmediato")
sec = llenaTabla("C", nuevoDatoBin, "Acct", "No op ACC con dato inmediato")
ACC = ACC 'ACC no cambia No op

sec = llenaTabla("D", nuevoDatoBin, "Acc ", "No op ACC con dato inmediato")
cicloMaquina = cicloMaquina + 1

DatoACC.Text = ACC 'Se despliega al usuario resultado final


Tabla.Text = Tabla.Text & "--------------------------------------------------" & vbCrLf

Tabla.Text = Tabla.Text & "----F I N No op ----" & vbCrLf

End Sub

Private Sub Notop_Click()

Dim sec As Boolean 'porque toda funcion regresa dato, asi no marca error

Codigo_operacion ("Not")

sec = llenaTabla("A", codeOp, "RI ", "Niega ACC")


edoPC = edoPC + 1 'PC aumenta uno
sec = llenaTabla("E", codeOp, "PC ", "Niega ACC")
sec = llenaTabla("B", nuevoDatoBin, "RD ", "Niega ACC")
edoPC = edoPC + 1 'PC aumenta uno
sec = llenaTabla("E", nuevoDatoBin, "PC ", "Niega ACC")
sec = llenaTabla("C", nuevoDatoBin, "Acct", "Niega ACC")

nuevoDato = Not ACC


nuevoDatoBin = decBin(nuevoDato)
ACC = nuevoDato 'Niega ACC

sec = llenaTabla("D", nuevoDatoBin, "Acc ", "Niega ACC")


cicloMaquina = cicloMaquina + 1

DatoACC.Text = ACC 'Se despliega al usuario resultado final


Tabla.Text = Tabla.Text & "--------------------------------------------------" & vbCrLf

Tabla.Text = Tabla.Text & "----F I N Not ----" & vbCrLf


End Sub

Private Sub Operacion_Click()


Label5.Visible = False
Label6.Visible = False
Dato2.Visible = False
Binario2.Visible = False
Operacion.Visible = False

Operaciones.Enabled = True
datoInmediato = Val(Dato2.Text)
datoInmediatoBin = decBin(datoInmediato)

Dim sec As Boolean

sec = operador(opcion)

Dato2.Text = ""

'opcion = ""

End Sub

Private Sub Orop_Click()


Label5.Visible = True
Label6.Visible = True
Dato2.Visible = True
Binario2.Visible = True
Operacion.Visible = True

Operaciones.Enabled = False

opcion = "or"

End Sub

Private Sub Rderecha_Click()

Dim sec As Boolean 'porque toda funcion regresa dato, asi no marca error

Codigo_operacion (">>")

sec = llenaTabla("A", codeOp, "RI ", "Corrimiento a la derecha ACC")


edoPC = edoPC + 1 'PC aumenta uno
sec = llenaTabla("E", codeOp, "PC ", "Corrimiento a la derecha ACC")
sec = llenaTabla("B", nuevoDatoBin, "RD ", "Corrimiento a la derecha ACC")
edoPC = edoPC + 1 'PC aumenta uno
sec = llenaTabla("E", nuevoDatoBin, "PC ", "Corrimiento a la derecha ACC")
sec = llenaTabla("C", nuevoDatoBin, "Acct", "Corrimiento a la derecha ACC")

Dim concatena As String

concatena = ""

concatena = concatena & Mid$(nuevoDatoBin, 8, 1)


concatena = concatena & Mid$(nuevoDatoBin, 1, 1)
concatena = concatena & Mid$(nuevoDatoBin, 2, 1)
concatena = concatena & Mid$(nuevoDatoBin, 3, 1)
concatena = concatena & Mid$(nuevoDatoBin, 4, 1)
concatena = concatena & Mid$(nuevoDatoBin, 5, 1)
concatena = concatena & Mid$(nuevoDatoBin, 6, 1)
concatena = concatena & Mid$(nuevoDatoBin, 7, 1)

nuevoDato = binDec(concatena)
nuevoDatoBin = concatena
ACC = nuevoDato 'Corrimiento a la derecha ACC

sec = llenaTabla("D", nuevoDatoBin, "Acc ", "Corrimiento a la derecha ACC")


cicloMaquina = cicloMaquina + 1

DatoACC.Text = ACC 'Se despliega al usuario resultado final


Tabla.Text = Tabla.Text & "--------------------------------------------------" & vbCrLf

Tabla.Text = Tabla.Text & "----F I N Corrimiento a la derecha ----" & vbCrLf

End Sub

Private Sub Resta_Click()


Label5.Visible = True
Label6.Visible = True
Dato2.Visible = True
Binario2.Visible = True
Operacion.Visible = True

Operaciones.Enabled = False

opcion = "resta"

End Sub

Private Sub Rizquierda_Click()

Dim sec As Boolean 'porque toda funcion regresa dato, asi no marca error

Codigo_operacion ("<<")

sec = llenaTabla("A", codeOp, "RI ", "Corrimiento a la izquierda ACC")


edoPC = edoPC + 1 'PC aumenta uno
sec = llenaTabla("E", codeOp, "PC ", "Corrimiento a la izquierda ACC")
sec = llenaTabla("B", nuevoDatoBin, "RD ", "Corrimiento a la izquierda ACC")
edoPC = edoPC + 1 'PC aumenta uno
sec = llenaTabla("E", nuevoDatoBin, "PC ", "Corrimiento a la izquierda ACC")
sec = llenaTabla("C", nuevoDatoBin, "Acct", "Corrimiento a la izquierda ACC")

Dim concatena As String


concatena = ""

concatena = concatena & Mid$(nuevoDatoBin, 2, 1)


concatena = concatena & Mid$(nuevoDatoBin, 3, 1)
concatena = concatena & Mid$(nuevoDatoBin, 4, 1)
concatena = concatena & Mid$(nuevoDatoBin, 5, 1)
concatena = concatena & Mid$(nuevoDatoBin, 6, 1)
concatena = concatena & Mid$(nuevoDatoBin, 7, 1)
concatena = concatena & Mid$(nuevoDatoBin, 8, 1)
concatena = concatena & Mid$(nuevoDatoBin, 1, 1)

nuevoDato = binDec(concatena)
nuevoDatoBin = concatena
ACC = nuevoDato 'Corrimiento a la izquierda ACC

sec = llenaTabla("D", nuevoDatoBin, "Acc ", "Corrimiento a la izquierda ACC")


cicloMaquina = cicloMaquina + 1

DatoACC.Text = ACC 'Se despliega al usuario resultado final


Tabla.Text = Tabla.Text & "--------------------------------------------------" & vbCrLf

Tabla.Text = Tabla.Text & "----F I N Corrimiento a la izquierda ----" & vbCrLf


End Sub

Private Sub Suma_Click()


Label5.Visible = True
Label6.Visible = True
Dato2.Visible = True
Binario2.Visible = True
Operacion.Visible = True

Operaciones.Enabled = False

opcion = "suma"

End Sub

Private Sub xorop_Click()


Label5.Visible = True
Label6.Visible = True
Dato2.Visible = True
Binario2.Visible = True
Operacion.Visible = True

Operaciones.Enabled = False

opcion = "xor"
End Sub

You might also like