Advertisement
mamamaria

Ass4

Feb 20th, 2021
128
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.63 KB | None | 0 0
  1. #include <iostream>
  2. using namespace std;
  3. int main()
  4. {
  5.     const int N = 3;
  6.  
  7.     int mas[] = { 0,1,1,0,1,0,0,1 };
  8.     int pow = 1;  bool check = true; int i; int halfpow = 0; int checkss = 0;
  9.     /*pow <<= N;
  10.     for (i = 0; i < pow / 2; i++) {
  11.         if (mas[i] != mas[(pow - 1) - i]) check = true;
  12.         else check = false;
  13.         if (check == false) {
  14.             cout << "no";
  15.             break;
  16.         }
  17.  
  18.     }
  19.     if (check == true) cout << "yas";*/
  20.  
  21.     __asm {
  22.         lea esi, mas //закидываем массив
  23.         mov pow, 1 //создаем pow
  24.         mov ebx, pow //закидываем pow в регистр
  25.         mov ecx, N //в Cl кладем N
  26.         sal  ebx, cl //Побитово сдвигаем влево (эквивалент возвездения в степень)
  27.         mov pow, ebx //обновляем pow
  28.  
  29.         mov i, 0 //i=0
  30.         //for (i = 0; i < pow / 2; i++) {
  31.         FOR_I: //пошло тело цикла
  32.  
  33.             mov eax, i //5 ПРИКОЛЬНЫХ ИНСТРУКЦИЙ
  34.             mov ebx, i //mas[i]
  35.             and eax, 31
  36.             sar ebx, 5
  37.             bt[esi + ebx * 4], eax
  38.             setc ch
  39.  
  40.             mov eax, pow //(pow - 1) - i]
  41.             dec eax
  42.             sub eax, i
  43.             mov ebx, eax
  44.  
  45.             and eax, 31 // mas[(pow - 1) - i])
  46.             sar ebx, 5
  47.             bt[esi + ebx * 4], eax
  48.             setc cl
  49.  
  50.             cmp ch, cl //полученные значения регистров сравниваем
  51.             je ELSE //если не равно, то идем в else
  52.             mov checkss,1
  53.  
  54.             ELSE: //else check = false;
  55.             mov checkss, 0
  56.        
  57.         inc i //i++
  58.         mov ebx, pow
  59.         sar ebx, 1 //pow/2
  60.  
  61.         cmp i, ebx //сравниваем i и pow/2
  62.         jge FOR_I //если больше либо равно, то заканчиваем
  63.  
  64.     }
  65.     cout << checkss;
  66. }
  67.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement