Answer the question
In order to leave comments, you need to log in
assembler. Can you help me fix the bugs?
Task: On the interval from -128 to 127. Count the number of pairs of numbers X and Y such that (| X | - | Y |) mod 4 = 0. Display the answer on the screen.
__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: //конец цикла
};
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);
Answer the question
In order to leave comments, you need to log in
Didn't find what you were looking for?
Ask your questionAsk a Question
731 491 924 answers to any question