@meowmere

Assembler. Поможете исправить ошибки?

Задача: На промежутке от -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);

помогите исправить ошибки
5fe052d51f7e8949589146.png
  • Вопрос задан
  • 203 просмотра
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы