Поменять местами элементы на главных и побочных диагоналях матрицы - Assembler

Узнай цену своей работы

Формулировка задачи:

Доброго времени суток.

Задание такое: Нужно поменять местами элементы на главных и побочных диагоналях матрицы. Размер матрицы не важен.

Буду благодарен за помощь.

Решение задачи: «Поменять местами элементы на главных и побочных диагоналях матрицы»

textual
Листинг программы
format PE GUI 4.0
include 'win32a.inc'
 
xor eax,eax
xor ecx,ecx
mov al,[size]
mul [size]       ;вычисляем размер матрицы
mov cx,ax
add eax,matrix
fill:
    dec eax
    mov [eax],cl ;заполняем массив значениями
    loop fill
mov ebx,matrix   ;указатель на элемент основной диагонали
mov edx,ebx      ;указатель на элемент побочной диагонали
mov cl,[size]    ;счётчик оставшихся операций обмена
push edi         ;сохраняем esi и edi в стек, чтоб не потерять
push esi
mov edi,ecx
mov esi,edi
inc edi          ;слагаемое для перебора элементов основной диагонали
dec esi          ;слагаемое для перебора элементов побочной диагонали
add edx,esi
loloop:
    mov al,[ebx] ;обмен
    xchg [edx],al
    mov [ebx],al
    add ebx,edi  ;к следующей паре значений
    add edx,esi
    loop loloop
pop esi          ;восстанавливаем esi, edi. Вдруг пригодятся
pop edi
 
invoke ExitProcess,0
 
size db 4        ;пусть ширина матрицы будет в пределах 16. А значения <256.
matrix db ?
 
data import
library kernel32, 'KERNEL32.DLL',user32, 'USER32.DLL'
import kernel32,ExitProcess, 'ExitProcess'
end data

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 4.385 из 5
Похожие ответы