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

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

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

Добрый вечер! В результате проверки числа на чётность при помощи ассемблерной вставки выдает: "Исключение в операции с плавающей точкой (сделан дамп памяти)". Ничего внятного по этой ситуации не нагуглил. В чём моя ошибка?
Листинг программы
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. int ch;
  4. int h;
  5. int main() {
  6. scanf("%i",&h); /*вводим проверяемое число */
  7. asm(
  8. "xor %eax,%eax\n"
  9. "movl h,%edx\n"
  10. "movl $2,%ecx\n"
  11. "divl %ecx\n" /* делим число на 2 (div же edx как делимое использует, и туда же после деления кладет остаток?) */
  12. "cmpl $0,%edx\n" /* смотрим в edx, проверяя, нет ли там остатка */
  13. "je chetn\n"
  14. "jne nechetn\n"
  15. "chetn:\n"
  16. "movl $2,ch\n" /* остатка нет - четное */
  17. "jmp end\n"
  18. "nechetn:\n"
  19. "movl $3,ch\n" /* остаток есть - нечетное*/
  20. "end:"
  21. );
  22. if (ch == 2)
  23. printf("Chetnoe");
  24. if (ch == 3)
  25. printf("Nechetnoe");
  26. return 0;
  27. }

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

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

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

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

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


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

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

15   голосов , оценка 3.667 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы