Advertisement
ELENA09

PREOBR

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