Advertisement
mamamaria

ASSembler

Feb 10th, 2021
142
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.61 KB | None | 0 0
  1. __asm {
  2.         MOV ESI, mas
  3.         MOV ECX, 0 //cx это j
  4.             A: //тело цикла по j
  5.             MOV EBX, 0 //bx это i
  6.                 B: //тело цикла по i
  7.                 CMP EBX, 0 //if i!=0
  8.                 JE IFEND //то выходит из if
  9.                 MOV EDX, EBX //СОХРАНЯЕМ i
  10.                 DEC EBX // (i - 1)*W+j это prev, знакомьтесь
  11.                 MOV EAX, W
  12.                 MUL EBX
  13.                 ADD EBX, ECX
  14.                 MOV prev, EBX // ebx освободился
  15.                
  16.                 MOV EAX, EBX //5 ПРИКОЛЬНЫХ ИНСТРУКЦИЙ
  17.                 and EAX, 31
  18.                 SAR EBX, 5
  19.                 BT[ESI + EBX * 4], EAX          
  20.                 JC IFEND
  21.  
  22.                 //пошел while
  23.                 //сгачада вычисляем i*W+j
  24.                 MOV EBX, EDX //СОХРАНЯЕМ i
  25.                 MOV EAX, W //ВЫЧИСЛЯЕМ ORDINARY
  26.                 MUL EDX
  27.                 ADD EDX, ECX
  28.                 MOV ordinary, EDX //edx освободился
  29.  
  30.                 MOV EAX, EDX //5 ПРИКОЛЬНЫХ ИНСТРУКЦИЙ
  31.                 and EAX, 31
  32.                 SAR EDX, 5
  33.                 BT[ESI + EDX * 4], EAX
  34.                 JNC ENDWHILE
  35.  
  36.                 //пошел новый if te
  37.                //пошел while
  38.                 //сгачада вычисляем i * W + (j + 1) т.е. rightv
  39.                 MOV EDX, EBX //СОХРАНЯЕМ i
  40.                 MOV EAX, W //ВЫЧИСЛЯЕМ rightv
  41.                 MUL EBX
  42.                 MOV tempj, ECX //сохрнаяем текущее значение j
  43.                 INC ECX
  44.                 ADD EBX,ECX
  45.                 MOV righv, EBX //ebx освободился
  46.                 MOV ECX, tempj //вернули j на место
  47.  
  48.                 MOV EAX, EBX //5 ПРИКОЛЬНЫХ ИНСТРУКЦИЙ
  49.                 and EAX, 31
  50.                 SAR EBX, 5
  51.                 BT[ESI + EBX * 4], EAX
  52.                 JC ENDLONGIF
  53.  
  54.                 MOV EBX, EDX //СОХРАНЯЕМ i
  55.                 MOV EAX, W //ВЫЧИСЛЯЕМ rightv
  56.                 MUL EDX
  57.                 MOV tempj, ECX //сохрнаяем текущее значение j
  58.                 DEC ECX
  59.                 ADD EDX, ECX
  60.                 MOV leftv, EDX //ebx освободился
  61.                 MOV ECX, tempj //вернули j на место
  62.  
  63.                 MOV EAX, EDX //5 ПРИКОЛЬНЫХ ИНСТРУКЦИЙ
  64.                 and EAX, 31
  65.                 SAR EDX, 5
  66.                 BT[ESI + EDX * 4], EAX
  67.                 JC ENDLONGIF
  68.  
  69.                
  70.                 INC countr
  71.                 MOV EDX, h
  72.                 CMP countr, EDX
  73.                 JGE ELSE
  74.                  
  75.                 MOV EDX, 0
  76.                 MOV countr, 0
  77.                 JMP ENDWHILE
  78.  
  79.                 ELSE : MOV EDX, 1
  80.                
  81.                 ENDLONGIF: INC EBX
  82.                 ENDWHILE : MOV tempflag, EDX
  83.                 CMP EDX,1
  84.                 JNE ENDENDIF
  85.                 MOV EAX, EBX //флаг checkl сохраним в eax
  86.                 DEC EBX //для проверки
  87.                 CMP EBX, tempH
  88.                 JNE NEWELSE
  89.                 MOV EAX,0
  90.                 MOV countr, 0
  91.                 JMP END2FOR
  92.                 NEWELSE: INC gcountr
  93.                 MOV countr, 0
  94.                 MOV EAX,0
  95.            
  96.                 ENDENDIF:
  97.                 IFEND : INC EBX
  98.                 END2FOR:
  99.             JNE B
  100.        
  101.         INC ECX
  102.         CMP ECX, W
  103.         JNE A
  104.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement