Как изменить только 3 первых столбца матрицы в ассемблере?
Я в макросе сделал код:
в цикле colLoop я делаю следущее: у меня есть переменная со значением 4, я ее декреметирую. Далее, пока эта переменная больше нуля, я изменяю(возвожу в квадрат) только те элементы массива, которые прощелкиваются под этой переменной. Когда она(rowsFor3) обнулится-просто без изменений дальше побежим по элементам. НО! У меня возводится в квадрат ВСЯ МАТРИЦА. Как быть?
local rowLoop, colLoop, maxLoop
JUMPS
push ax ; Сохранение регистров, используемых в макросе, в стек
push bx
push cx
push si
push di
push dx
xor dx, dx
xor bx, bx ; Обнуляем смещение по строкам
mov cx, row
rowLoop:
push cx
xor si, si ; Обнуляем смещение по столбцам
mov cx, col
colLoop:
mov di, rowsFor3
dec di
cmp di, myNull
jg mulThree
jmp next3
mulThree:
xor ax, ax
mov ax, currentMatrix[bx][si]
xor dx, dx
imul ax
mov currentMatrix[bx][si], ax
jmp next3
next3:
add si, 2
loop colLoop
xor ax, ax
mov ax, 4
mov rowsFor3, ax
add bx, col ; Увеличиваем смещение по строкам
add bx, col ; (дважды, так как размер каждого элемента - слово)
pop cx
loop rowLoop
pop dx ; Перенос сохранённых значений обратно в регистры
pop di
pop si
pop cx
pop bx
pop ax
NOJUMPS
endm mDouble ```