Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <stdio.h>
- using namespace std;
- class Processor
- {
- public:
- // 32 битные регистры
- unsigned long int eax;
- unsigned long int ebx;
- // 16 битные регистры
- unsigned short int ax;
- unsigned short int bx;
- unsigned short int cx;
- unsigned short int dx;
- unsigned short int ex;
- unsigned short int fx;
- // 8 битные регистры
- unsigned char ah;
- unsigned char al;
- unsigned char bh;
- unsigned char bl;
- unsigned char ch;
- unsigned char cl;
- unsigned char dh;
- unsigned char dl;
- Processor()
- {
- //32
- eax = 0;
- ebx = 0;
- //16
- ax = 0;
- bx = 0;
- cx = 0;
- dx = 0;
- ex = 0;
- fx = 0;
- //8
- ah = 0;
- al = 0;
- bh = 0;
- bl = 0;
- ch = 0;
- cl = 0;
- dh = 0;
- dl = 0;
- };
- //непосредственная адресация
- void mov(unsigned char *reg, unsigned char num)
- {
- *reg = num;
- };
- //регистровая адрессация
- void mov(unsigned char *op1, unsigned char *op2)
- {
- *op1 = *op2;
- };
- //сложение
- void add(unsigned char *op1, unsigned char *op2)
- {
- *op1 = *op1 + *op2;
- };
- void add(unsigned char *op1, unsigned char num)
- {
- *op1 = *op1 + num;
- };
- /* ВЫЧИТАНИЕ ЧИСЛА ИЗ РЕГИСТРА */
- void sub(unsigned char *op1, unsigned char num)
- {
- neg(&num); // инвертируем
- add(&num, 1); // переводим в дополнительный код
- add(op1, num);
- };
- /* ВЫЧИТАНИЕ РЕГИСТРА ИЗ РЕГИСТРА */
- void sub(unsigned char *op1, unsigned char *op2)
- {
- neg(op2); // инвертируем
- add(op2, 1); // переводим в дополнительный код
- add(op1, op2);
- };
- //сдвиг влево,передаваемое число - количество разрядов сдвига
- void ls(unsigned char *op1, unsigned char num)
- {
- *op1 = *op1 << num;
- };
- //сдвиг вправо,передаваемое число - количество разрядов сдвига
- void rs(unsigned char *op1, unsigned char num)
- {
- *op1 = *op1 >> num;
- };
- //операция инверсии
- void neg(unsigned char *op1)
- {
- *op1 = ~*op1;
- };
- // операция умножения регистра на число
- void mul(unsigned char *op1, unsigned char num)
- {
- *op1 = *op1 * num;
- }
- // операция умножения регистра на регистр
- void mul(unsigned char *op1, unsigned char *op2)
- {
- unsigned char buff = *op1;
- for (unsigned char i = 1; i < *op2; i++)
- {
- *op1 = *op1 + buff;
- };
- }
- };
- int main()
- {
- Processor proc;
- unsigned char *rega = &proc.ah;
- unsigned char *regb = &proc.bh;
- proc.mov(rega, 2);
- proc.mov(regb, 5);
- proc.mul(rega, regb);
- proc.ls(regb, 1);
- proc.mul(rega, 2);
- printf("%d \n", *rega);
- printf("%d \n", *regb);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement