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