Проверка числа на чётность. Ошибка с дампом памяти - 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"
Объяснение кода листинга программы
xor %eax,%eax
- здесь происходит инициализация регистра %eax значением 0. Это необходимо для корректной работы последующих операций сравнения.movl h,%edx
- в данном случае, переменнойh
присваивается значение из стека. Стек - это область памяти, используемая для временного хранения данных при вызове функций и возврате из них. При этом, значение переменнойh
будет нечетным числом.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д