Проверка числа на чётность. Ошибка с дампом памяти - 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будет нечетным числом.