private int OdczytajWartosc(rejestrIJegoCzesc argument) { int zmienna = 0; if (argument.Liczba == true) { zmienna = argument.x; } else { switch (argument.nazwaRejestru) { case Rejestry.AX: zmienna = AX; break; case Rejestry.BX: zmienna = BX; break; case Rejestry.CX: zmienna = CX; break; case Rejestry.DX: zmienna = DX; break; } switch (argument.czescRejestru) { case Czesc.Calosc: break; case Czesc.Dolna: zmienna = zmienna & 0xFF; break; case Czesc.Gorna: zmienna = (zmienna & 0xFF) << 8; break; } } return(zmienna); }
private static rejestrIJegoCzesc CzytajRejestr(string split) { rejestrIJegoCzesc nowyRejestr = new rejestrIJegoCzesc(); if (split[0] == '[' && split[split.Length - 1] == ']') { split = split.Substring(1, split.Length - 2); nowyRejestr.Adres = true; } else { nowyRejestr.Adres = false; } switch (split) { case "AX": nowyRejestr.nazwaRejestru = Rejestry.AX; nowyRejestr.czescRejestru = Czesc.Calosc; break; case "AH": nowyRejestr.nazwaRejestru = Rejestry.AX; nowyRejestr.czescRejestru = Czesc.Gorna; break; case "AL": nowyRejestr.nazwaRejestru = Rejestry.AX; nowyRejestr.czescRejestru = Czesc.Dolna; break; case "BX": nowyRejestr.nazwaRejestru = Rejestry.BX; nowyRejestr.czescRejestru = Czesc.Calosc; break; case "BH": nowyRejestr.nazwaRejestru = Rejestry.BX; nowyRejestr.czescRejestru = Czesc.Gorna; break; case "BL": nowyRejestr.nazwaRejestru = Rejestry.BX; nowyRejestr.czescRejestru = Czesc.Dolna; break; case "CX": nowyRejestr.nazwaRejestru = Rejestry.CX; nowyRejestr.czescRejestru = Czesc.Calosc; break; case "CH": nowyRejestr.nazwaRejestru = Rejestry.CX; nowyRejestr.czescRejestru = Czesc.Gorna; break; case "CL": nowyRejestr.nazwaRejestru = Rejestry.CX; nowyRejestr.czescRejestru = Czesc.Dolna; break; case "DX": nowyRejestr.nazwaRejestru = Rejestry.DX; nowyRejestr.czescRejestru = Czesc.Calosc; break; case "DH": nowyRejestr.nazwaRejestru = Rejestry.DX; nowyRejestr.czescRejestru = Czesc.Gorna; break; case "DL": nowyRejestr.nazwaRejestru = Rejestry.DX; nowyRejestr.czescRejestru = Czesc.Dolna; break; default: nowyRejestr.x = Int32.Parse(split); nowyRejestr.Liczba = true; break; } return(nowyRejestr); }
private void Metoda(int a) { string[] textBox = richTextBox1.Lines; if (textBox.Length != 0 && a < textBox.Length) { string theText = textBox[a].ToUpper(); string[] split = theText.Split(new Char[] { ' ', ',' }, StringSplitOptions.RemoveEmptyEntries); rejestrIJegoCzesc czescLewa = new rejestrIJegoCzesc(); if (split.Length > 1) { czescLewa = CzytajRejestr(split[1]); } rejestrIJegoCzesc czescPrawa = new rejestrIJegoCzesc(); if (split.Length > 2) { czescPrawa = CzytajRejestr(split[2]); } int zmienna = 0; int zmienna2 = 0; switch (split[0]) { case "INT": if (!czescLewa.Liczba) { return; } switch (czescLewa.x) { case 1: HDD(); break; case 2: PrintScreen(); break; case 3: PodajCzasZegaraRTC(); break; case 4: OdczytPozycjiKursora(); break; case 5: ZmienRozmairKursora(); break; case 6: StworzNowyFolder(); break; case 7: UtworzPlik(); break; case 8: ZmienNazwePliku(); break; case 9: UsunPlik(); break; } break; case "ADD": if (split.Length < 3) { return; } zmienna = OdczytajWartosc(czescPrawa); if (czescPrawa.Adres == true) { zmienna = pamiec[zmienna]; } zmienna2 = 0; if (czescLewa.Adres == true) { zmienna2 = OdczytajWartosc(czescLewa); pamiec[zmienna2] = (ushort)zmienna; } else { if (czescLewa.Liczba == true) { MessageBox.Show("blad"); } else { switch (czescLewa.nazwaRejestru) { case Rejestry.AX: switch (czescLewa.czescRejestru) { case Czesc.Calosc: AX = (ushort)(AX + ((ushort)zmienna)); break; case Czesc.Dolna: ushort dol = (ushort)((AX & 0xFF) + ((ushort)zmienna & 0xFF)); AX = (ushort)(AX & 0xFF00); AX |= dol; break; case Czesc.Gorna: ushort gora = (ushort)(((AX & 0xFF00) >> 8) + ((ushort)zmienna & 0xFF)); AX = (ushort)(AX & 0xFF); AX |= (ushort)((gora) << 8); break; } break; case Rejestry.BX: switch (czescLewa.czescRejestru) { case Czesc.Calosc: BX = (ushort)(BX + ((ushort)zmienna)); break; case Czesc.Dolna: ushort dol = (ushort)((BX & 0xFF) + ((ushort)zmienna & 0xFF)); BX = (ushort)(BX & 0xFF00); BX |= dol; break; case Czesc.Gorna: ushort gora = (ushort)(((BX & 0xFF00) >> 8) + ((ushort)zmienna & 0xFF)); BX = (ushort)(BX & 0xFF); BX |= (ushort)((gora) << 8); break; } break; case Rejestry.CX: switch (czescLewa.czescRejestru) { case Czesc.Calosc: CX = (ushort)(CX + ((ushort)zmienna)); break; case Czesc.Dolna: ushort dol = (ushort)((CX & 0xFF) + ((ushort)zmienna & 0xFF)); CX = (ushort)(CX & 0xFF00); CX |= dol; break; case Czesc.Gorna: ushort gora = (ushort)(((CX & 0xFF00) >> 8) + ((ushort)zmienna & 0xFF)); CX = (ushort)(CX & 0xFF); CX |= (ushort)((gora) << 8); break; } break; case Rejestry.DX: switch (czescLewa.czescRejestru) { case Czesc.Calosc: DX = (ushort)(DX + ((ushort)zmienna)); break; case Czesc.Dolna: ushort dol = (ushort)((DX & 0xFF) + ((ushort)zmienna & 0xFF)); DX = (ushort)(DX & 0xFF00); DX |= dol; break; case Czesc.Gorna: ushort gora = (ushort)(((DX & 0xFF00) >> 8) + ((ushort)zmienna & 0xFF)); DX = (ushort)(DX & 0xFF); DX |= (ushort)((gora) << 8); break; } break; } } } break; case "SUB": if (split.Length < 3) { return; } zmienna = OdczytajWartosc(czescPrawa); if (czescPrawa.Adres == true) { zmienna = pamiec[zmienna]; } zmienna2 = 0; if (czescLewa.Adres == true) { zmienna2 = OdczytajWartosc(czescLewa); pamiec[zmienna2] = (ushort)zmienna; } else { if (czescLewa.Liczba == true) { MessageBox.Show("blad"); } else { switch (czescLewa.nazwaRejestru) { case Rejestry.AX: switch (czescLewa.czescRejestru) { case Czesc.Calosc: AX = (ushort)(AX - ((ushort)zmienna)); break; case Czesc.Dolna: ushort dol = (ushort)((AX & 0xFF) - ((ushort)zmienna & 0xFF)); AX = (ushort)(AX & 0xFF00); AX |= dol; break; case Czesc.Gorna: ushort gora = (ushort)(((AX & 0xFF00) >> 8) - ((ushort)zmienna & 0xFF)); AX = (ushort)(AX & 0xFF); AX |= (ushort)((gora) << 8); break; } break; case Rejestry.BX: switch (czescLewa.czescRejestru) { case Czesc.Calosc: BX = (ushort)(BX - ((ushort)zmienna)); break; case Czesc.Dolna: ushort dol = (ushort)((BX & 0xFF) - ((ushort)zmienna & 0xFF)); BX = (ushort)(BX & 0xFF00); BX |= dol; break; case Czesc.Gorna: ushort gora = (ushort)(((BX & 0xFF00) >> 8) - ((ushort)zmienna & 0xFF)); BX = (ushort)(BX & 0xFF); BX |= (ushort)((gora) << 8); break; } break; case Rejestry.CX: switch (czescLewa.czescRejestru) { case Czesc.Calosc: CX = (ushort)(CX - ((ushort)zmienna)); break; case Czesc.Dolna: ushort dol = (ushort)((CX & 0xFF) - ((ushort)zmienna & 0xFF)); CX = (ushort)(CX & 0xFF00); CX |= dol; break; case Czesc.Gorna: ushort gora = (ushort)(((CX & 0xFF00) >> 8) - ((ushort)zmienna & 0xFF)); CX = (ushort)(CX & 0xFF); CX |= (ushort)((gora) << 8); break; } break; case Rejestry.DX: switch (czescLewa.czescRejestru) { case Czesc.Calosc: DX = (ushort)(DX - ((ushort)zmienna)); break; case Czesc.Dolna: ushort dol = (ushort)((DX & 0xFF) - ((ushort)zmienna & 0xFF)); DX = (ushort)(DX & 0xFF00); DX |= dol; break; case Czesc.Gorna: ushort gora = (ushort)(((DX & 0xFF00) >> 8) - ((ushort)zmienna & 0xFF)); DX = (ushort)(DX & 0xFF); DX |= (ushort)((gora) << 8); break; } break; } } } break; case "MOV": if (split.Length < 3) { return; } zmienna = OdczytajWartosc(czescPrawa); if (czescPrawa.Adres == true) { zmienna = pamiec[zmienna]; } zmienna2 = 0; if (czescLewa.Adres == true) { zmienna2 = OdczytajWartosc(czescLewa); pamiec[zmienna2] = (ushort)zmienna; } else { if (czescLewa.Liczba == true) { MessageBox.Show("blad"); } else { switch (czescLewa.nazwaRejestru) { case Rejestry.AX: switch (czescLewa.czescRejestru) { case Czesc.Calosc: AX = (ushort)(((ushort)zmienna)); break; case Czesc.Dolna: ushort dol = (ushort)(((ushort)zmienna & 0xFF)); AX = (ushort)(AX & 0xFF00); AX |= dol; break; case Czesc.Gorna: ushort gora = (ushort)(((ushort)zmienna & 0xFF)); AX = (ushort)(AX & 0xFF); AX |= (ushort)((gora) << 8); break; } break; case Rejestry.BX: switch (czescLewa.czescRejestru) { case Czesc.Calosc: BX = (ushort)(((ushort)zmienna)); break; case Czesc.Dolna: ushort dol = (ushort)(((ushort)zmienna & 0xFF)); BX = (ushort)(BX & 0xFF00); BX |= dol; break; case Czesc.Gorna: ushort gora = (ushort)(((ushort)zmienna & 0xFF)); BX = (ushort)(BX & 0xFF); BX |= (ushort)((gora) << 8); break; } break; case Rejestry.CX: switch (czescLewa.czescRejestru) { case Czesc.Calosc: CX = (ushort)(((ushort)zmienna)); break; case Czesc.Dolna: ushort dol = (ushort)(((ushort)zmienna & 0xFF)); CX = (ushort)(CX & 0xFF00); CX |= dol; break; case Czesc.Gorna: ushort gora = (ushort)(((ushort)zmienna & 0xFF)); CX = (ushort)(CX & 0xFF); CX |= (ushort)((gora) << 8); break; } break; case Rejestry.DX: switch (czescLewa.czescRejestru) { case Czesc.Calosc: DX = (ushort)((ushort)zmienna); break; case Czesc.Dolna: ushort dol = (ushort)((ushort)zmienna & 0xFF); DX = (ushort)(DX & 0xFF00); DX |= dol; break; case Czesc.Gorna: ushort gora = (ushort)((ushort)zmienna & 0xFF); DX = (ushort)(DX & 0xFF); DX |= (ushort)((gora) << 8); break; } break; } } } break; } label1.Text = "Rejestr AX: " + AX.ToString(); label2.Text = "Rejestr BX: " + BX.ToString(); label3.Text = "Rejestr CX: " + CX.ToString(); label4.Text = "Rejestr DX: " + DX.ToString(); string binarneAX = Convert.ToString(Convert.ToInt32(AX), 2); label5.Text = "binarnie " + binarneAX; string binarneBX = Convert.ToString(Convert.ToInt32(BX), 2); label6.Text = "binarnie " + binarneBX; string binarneCX = Convert.ToString(Convert.ToInt32(CX), 2); label7.Text = "binarnie " + binarneCX; string binarneDX = Convert.ToString(Convert.ToInt32(DX), 2); label8.Text = "binarnie " + binarneDX; } else { MessageBox.Show("Koniec"); counter = -1; }; }