Ошибки в ассемблерной вставке - C (СИ)

Узнай цену своей работы

Формулировка задачи:

в 24 и 25 строке ругается, что недопустимое число операторов
#include "iostream"
#include "windows.h"
#include "stdlib.h"
#include <stdio.h>
 
/*На промежутке от 1 до 100 000
Подсчитать количество таких чисел X, что (Х+X-2) - делится на 3 без остатка*/
 
int main()
{
    short int x=0,ko=0;
    int k = 0, l = 0;
 
    _asm
    {
        mov di,3
        mov si,2
        mov cx, 100000
        t1:
        mov bx, cx
            mov cx, 100000
            t2:
            mov ax,cx
            add bx
            sub si
            div di
            cmp dx, 1
            jne m1
            inc ko
            cmp ko, 200
            je m2
 
            m1 :
        loop t2
            mov cx, bx
            loop t1
            jmp e
            m2 :
        mov x, bx
            je m1
            e :
    }

    for (int i=0; i<=100000;i++)
    {
        if ((i+i-2)%3==0)
        {
            k++;
            if (k == 200)
            {
                l = i;
            }
        };
    }
    printf("Proverka na C++:\n");
    printf("k=%d\n",k);
    if (k < 200) printf("Chisel menshe dvuhsot");
    else printf("Dvuhsotoe chislo=%d\n", l);
    system("pause");
    return 0;
}

Решение задачи: «Ошибки в ассемблерной вставке»

textual
Листинг программы
mov ax,cx
add ax,bx
sub ax,si
div di
cmp ax, 1

Объяснение кода листинга программы

  1. mov ax,cx - Перемещение значения регистра cx в регистр ax
  2. add ax,bx - Добавление значения регистра bx к значению регистра ax
  3. sub ax,si - Вычитание значения регистра si из значения регистра ax
  4. div di - Деление значения регистра ax на значение регистра di
  5. cmp ax, 1 - Сравнение значения регистра ax с 1 Данный код выполняет последовательность операций над регистрами процессора, где ax используется как промежуточный регистр для выполнения операций сложения, вычитания и деления, а cx, bx и di используются как исходные и конечные значения для этих операций. Регистр si, по-видимому, используется как временная переменная в операции вычитания, а регистра dx в коде нет. Также в коде отсутствует какая-либо обработка ошибок или контроль за состоянием флагов регистра flags, что может привести к неопределенному поведению при делении на ноль или при выполнении операции вычитания с отрицательным значением.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 4 из 5
Похожие ответы