Форум программистов, компьютерный форум, киберфорум
Assembler для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.54/13: Рейтинг темы: голосов - 13, средняя оценка - 4.54
0 / 0 / 0
Регистрация: 06.11.2015
Сообщений: 9
1

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

04.05.2016, 21:12. Показов 2493. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый вечер!
В результате проверки числа на чётность при помощи ассемблерной вставки выдает: "Исключение в операции с плавающей точкой (сделан дамп памяти)". Ничего внятного по этой ситуации не нагуглил. В чём моя ошибка?

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#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;
}
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.05.2016, 21:12
Ответы с готовыми решениями:

Проверка числа на чётность
Помогите пожалуйста разработать программу ввода числовых данных с клавиатуры, которая запрашивает...

Проверка числа на чётность
Какой из этих способов работает быстрее if (!(a%2)) или if (!(a&amp;1))

Проверка числа на чётность
Чётность числа. Напишите программу которая определяет является ли число чётным. Заранее...

Проверка числа на чётность/нечётность
Подскажите пожалуйста молодому-неопытному как проверить в С++ чётное число или нечётное? Есть...

2
3406 / 1825 / 489
Регистрация: 28.02.2015
Сообщений: 3,696
06.05.2016, 13:47 2
Лучший ответ Сообщение было отмечено Apollo_11 как решение

Решение

Цитата Сообщение от Apollo_11 Посмотреть сообщение
В чём моя ошибка?
DIV делит EDX:EAX на (число/регистр). Причем EDX - старшая(!) часть делимого числа, а тут с точностью наоборот:
Assembler
1
2
        "xor %eax,%eax\n"
        "movl h,%edx\n"



А зачем Вам для проверки одного младшего бита использовать деленние?
Сдвиги делают всё без переходов:
Assembler
1
2
3
4
mov ch,2
mov eax,h
shr eax,1
adc ch,0
1
Модератор
Эксперт функциональных языков программированияЭксперт Python
36606 / 20334 / 4221
Регистрация: 12.02.2012
Сообщений: 33,651
Записей в блоге: 13
07.05.2016, 11:32 3
И сдвиги здесь не нужны. Достаточно логического умножения.
0
07.05.2016, 11:32
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.05.2016, 11:32
Помогаю со студенческими работами здесь

Проверка введенного числа на чётность
Написать программу, которая проверяет, является ли введенное пользователем целое число четным. ...

Проверка числа типа double на чётность/нечётность
В программе необходимо проверить число типа double на то, является оно четным или нет. Это возможно...

Проверка на чётность в mulisp'e
Добрый вечер. Если кого-то нибудь не затруднит, помогите пожалуйста написать программу на...

Итератор и проверка на чётность/нечётность
Добрый день. Не получается организовать проверку на нечётное количество. При вводе нечётного...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru