Advertisement
ELENA09

CH

Jun 25th, 2020
1,185
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. public _Khar
  2. .586
  3. .model flat
  4. .code
  5. _Khar   proc
  6.         push    ebp
  7.         mov     ebp,esp
  8.         push    ecx
  9.         push    esi
  10.         push    edi
  11.         push    ebx
  12.  
  13.         mov edi, [ebp+8];занесли смещение матрицы
  14.         mov ebx, 1
  15.         mov ecx, [ebp+12]
  16.         cmp ecx, ebx ; если матрица из одной строчки - считаем её убывающей, всё хорошо
  17.         je ok
  18.         mov edx, 0
  19.         mov ebx, 0
  20.         c1:
  21.        
  22.        
  23.         push ecx
  24.         mov esi, [edi] ; переходим к строчке
  25.         mov ecx, [ebp+16] ; заносим длину строчки
  26.         dec ecx ; первый элемент мы заносим сразу, его обрабатывать не надо
  27.         mov edx, 0
  28.         mov ebx, [esi] ; считаем первый элемент строки наибольшим, с ним пойдёт сравнение
  29.         cmp ecx, edx ; если в строке нет больше символов кроме первого - переходим к сравнениям
  30.         je ou
  31.        
  32.         mov edx,4
  33.         c2:
  34.         cmp ebx, [esi+edx] ; сравниваем со следующим элементом строки
  35.         jge p1
  36.         mov ebx, [esi+edx] ; если тот элемент больше - заносим в ebx
  37.         p1:
  38.         add edx, 4 ;переходим к следующему элементу
  39.         loop c2
  40.  
  41.         ou:
  42.         pop ecx
  43.         cmp ecx, [ebp+12] ; если это первая строчка, то условие выполнится
  44.         je p3 ; прыгаем на занесение в eax, там будет храниться максимальный элемент предыдущей строки
  45.  
  46.         cmp ebx, eax ;сравниваем, меньше ли максимальный текущей максимального предыдущей
  47.         jge err ;если не меньше, то уходим на ошибку, выводим false (считаем, что должна быть строго убывающая последовательность)
  48.         p3:
  49.         mov eax, ebx ;максимальный текущей становится максимальным предыдущей для следующей строки
  50.  
  51.         add edi, 4 ; переходим на новую строку
  52.         loop c1
  53.         ; если цикл сам собой дошёл до сюда - всё хорошо
  54.         ok:
  55.         mov eax, 1
  56.         jmp fin
  57.         err:
  58.         mov eax, 0
  59.         fin:
  60.         pop     ebx
  61.         pop     edi
  62.         pop     esi
  63.         pop     ecx
  64.         pop     ebp
  65.         ret  
  66. _Khar   endp
  67. end
Advertisement
RAW Paste Data Copied
Advertisement