Проверка числа на чётность. Ошибка с дампом памяти - Assembler

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

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

Добрый вечер! В результате проверки числа на чётность при помощи ассемблерной вставки выдает: "Исключение в операции с плавающей точкой (сделан дамп памяти)". Ничего внятного по этой ситуации не нагуглил. В чём моя ошибка?
#include <stdio.h>
#include <stdlib.h>
 
int ch;
int h;
 
int main() {
    scanf("%i",&h);   /*вводим проверяемое число */ 
    
    asm(    
        "xor %eax,%eax\n"
        "movl h,%edx\n" 
        "movl $2,%ecx\n"
        "divl %ecx\n"       /* делим число на 2 (div же edx как делимое использует, и туда же после деления кладет остаток?) */
 
        "cmpl $0,%edx\n"  /* смотрим в edx, проверяя, нет ли там остатка */
        "je chetn\n"
        "jne nechetn\n"
 
    "chetn:\n" 
        "movl $2,ch\n"    /* остатка нет - четное */
        "jmp end\n"
 
    "nechetn:\n"
        "movl $3,ch\n"  /* остаток есть - нечетное*/
    "end:"
);
 
    if (ch == 2)
        printf("Chetnoe");
    if (ch == 3)
        printf("Nechetnoe");
 
return 0;
}

Решение задачи: «Проверка числа на чётность. Ошибка с дампом памяти»

textual
Листинг программы
        "xor %eax,%eax\n"
        "movl h,%edx\n"

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

  1. xor %eax,%eax - здесь происходит инициализация регистра %eax значением 0. Это необходимо для корректной работы последующих операций сравнения.
  2. movl h,%edx - в данном случае, переменной h присваивается значение из стека. Стек - это область памяти, используемая для временного хранения данных при вызове функций и возврате из них. При этом, значение переменной h будет нечетным числом.

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


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

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

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