M
M
meowmere2020-12-21 10:47:10
assembler
meowmere, 2020-12-21 10:47:10

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: //конец цикла
    };

The number of pairs counts correctly, the 200th pair is not correct. Should be -125 and -97

Also, the teacher says that there is an error in the code.
this is what it looks like in c++
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);

so the teacher says that it looks like in c++
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);

help fix bugs
5fe052d51f7e8949589146.png

Answer the question

In order to leave comments, you need to log in

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question