Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public _Preobr
- .586
- .model flat
- .code
- _Preobr proc
- push ebp
- mov ebp,esp
- push ecx
- push esi
- push edi
- push ebx
- mov edi, [ebp+8]
- mov eax, [ebp+16] ; занесём количество столбцов
- mov ebx, 1
- cmp eax, ebx ; если их один, то менять ничего не надо, выходим из программы
- je err
- mov ebx, 4
- dec eax
- imul ebx
- mov edx, eax ; этим всем мы занесли в edx смещение последнего символа в любой строке
- push edx ;сохранили его, тк регистров не хватает
- mov ebx, 2
- mov eax, [ebp+16]
- cdq
- idiv ebx ; поделили количество столбцов матрицы на 2
- mov [ebp+16], eax ; теперь там хранится поделённое на 2 число, можем обращаться к нему из маленького цикла
- mov ecx, [ebp+12];занесли количество строк в счётчик
- pop edx ; вернули edx на место
- c1:
- mov esi, [edi] ; обращаемся к строке
- push ecx
- push edx ; сохраняем регистры перед маленьким циклом
- mov ecx, [ebp+16] ; заносим в счётчик нашу ширину поделённую на 2
- mov ebx, 0 ; в ebx храним смещение относительно начала строки
- c2:
- mov eax, [esi+ebx]
- push eax
- mov eax, [esi+edx]
- mov [esi+ebx], eax
- pop eax
- mov [esi+edx], eax ; обмениваем те элементы, на которые указывают ebx и edx местами (на первом шаге - первый и последний)
- sub edx, 4
- add ebx, 4 ; шагаем навстречу
- loop c2
- pop edx
- pop ecx
- add edi, 4 ; переходим на новую строчку
- loop c1
- err:
- pop ebx
- pop edi
- pop esi
- pop ecx
- pop ebp
- ret
- _Preobr endp
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement