Задача: На промежутке от -128 до 127. Подсчитать количество таких пар чисел X и Y, что(| Х | - | У |) mod 4 = 0. Ответ вывести на экран.
__asm
{
mov CX, X;
M1: // НАЧАЛО ЦИКЛА
mov DX, CX; //x
cmp DX, 127; //если X>127, то выходим из цикла
jg M2; //больше
mov BX, Y;
cmp DX, 0 //Если X отрицательное, то
jge M3; //больше или равно
neg DX; // берём модуль
M3:
cmp BX, 127; //если Y>127, то выходим из вложенного цикла
jg M6;
push BX; //кладем BX в стек, чтобы было сохранено значение, кот. было при входе в цикл
cmp BX, 0
jge M5;
neg BX;
M5:
mov AX, DX;
sub AX, BX; //разность x и y, результат в AX
cwd;// расширяет слово в AX до двойного слова ( DX,AX)
idiv Q; //делим AX:DX на Q с отстатком рез. в DX
cmp DX, 0 //если (| Х | - | У |) mod 4 != 0, то пропускаем
jne M4; //не равно
inc S; // счётчик, в который мы запоминаем удовлетворяющие условию пары чисел
cmp S, 200; // если S != 200, то пропускаем
jne M4;
mov X200, CX;
pop Y200;
push Y200;
inc f;
M4:
pop BX; //вытаскиваем из стека и увеличиваем на 1
inc BX;
jmp M3; // на начало вложенного цикла //безусловный
M6:
inc CX;
jmp M1;// на начало цикла
M2: //конец цикла
};
Количество пар считает правильно, 200-ю пару не правильно. Должно быть -125 и -97
Так же преподаватель говорит, что есть ошибка в коде.
так выглядит это на с++
for (int i = -128; i <= 127; i++)
for (int j = -128; j <= 127; j++)
{
if ((abs(i) - abs(j)) % 4 == 0)
k++;
} printf("\n%d", k);
так преподаватель говорит, что выглядит на с++
int j = -128
for (int i = -128; i <= 127; i++)
for (; j <= 127; j++)
{
if ((abs(i) - abs(j)) % 4 == 0)
k++;
} printf("\n%d", k);
помогите исправить ошибки