Форум программистов, компьютерный форум, киберфорум
Наши страницы
Assembler, MASM, TASM
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.58/12: Рейтинг темы: голосов - 12, средняя оценка - 4.58
katusha17
2 / 2 / 3
Регистрация: 04.03.2014
Сообщений: 62
1

Проверка числа на четность/нечетность

29.12.2014, 09:28. Просмотров 2283. Ответов 5
Метки нет (Все метки)

Здравствуйте.
У меня возникла небольшая проблема с кодом.
Задача следующая: Перемножить три числа, введенных с клавиатуры. Если произведение четно, разделить на два; если нечетно - прибавить к произведению единицу и разделить на два.
Ошибка у меня явно в проверке числа на четность, но не могу понять, какая именно. Помогите, пожалуйста.

Assembler
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
program primer;
 
var x, y, z:byte;
    A:word;
 
begin
writeln('vvedite x, y, z');
readln(x, y, z);
 
asm
mov cx, 2
mov al, x
imul y
test cx, 1
jz @k
mov bx, 2
inc ax
idiv bx
@k:nop
mov A, ax
end;
 
writeln('A=', A);
readln;
end.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.12.2014, 09:28
Ответы с готовыми решениями:

Проверка на четность числа
Здраствуйте. Только начал изучать асм и возник вопрос: как проверить число находящееся в регисте на...

проверка на четность и знак
если ли в асм стандартно как проверить на четность и знак ?

Проверка Деления на два (Четность Чисел)
Задача: "Найти в массиве чисел суммы элементов, индексы которых четны и нечетны и вывести эти суммы...

Проверка на четность первых 15-ти однобайтовых чисел
Добрый вечер форумчане. Я студент заочник блаблабла... задали задание по ассемблеру, познакомился с...

Условные операторы: определить четность/нечетность цифр в записи произвольного двузначного числа
Помогите, пожалуйста. Определить четные или нечетные цифры в записи произвольного двузначного...

5
Argogo
640 / 241 / 40
Регистрация: 29.03.2013
Сообщений: 533
29.12.2014, 10:12 2
katusha17, по заданию, надо перемножить 3 числа, я в твоём коде вижу умножение только двух. Не понятно, зачем сначала помещать в регистр CX двойку
Цитата Сообщение от katusha17 Посмотреть сообщение
mov cx, 2
, а затем проверять его на чётность, ведь результат первого умножения будет находиться в АХ.

Добавлено через 3 минуты
Да, и ещё, если перемножать три байта, то результат может не поместиться в слово. Двойное слово тут будет более уместным.
0
katusha17
2 / 2 / 3
Регистрация: 04.03.2014
Сообщений: 62
29.12.2014, 13:44  [ТС] 3
Блин, недоглядела; эта строчка немного другого кода...

Assembler
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
program primer;
 
var x, y, z:byte;
    A:word;
 
begin
writeln('vvedite x, y, z');
readln(x, y, z);
 
asm
mov al, x
imul y
mul z
test cx, 1
jz @k
mov bx, 2
inc ax
idiv bx
@k:nop
mov A, ax
end;
 
writeln('A=', A);
readln;
end
Как-то так, подправила чуток.
Не сталкивалась как-то с тем, чтоб присваивать переменной тип двойного слова.
Насколько я помню, деление двойного слова на слово примерно так происходит (по примеру из одного источника):
Assembler
1
2
3
mov DX, Y
mov AX, X
IDIV W
0
katusha17
2 / 2 / 3
Регистрация: 04.03.2014
Сообщений: 62
29.12.2014, 14:01  [ТС] 4
Вроде пашет вот так вот
Assembler
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
program primer;
 
var x, y, z:byte;
    A:word;
 
begin
writeln('vvedite x, y, z');
readln(x, y, z);
 
asm
mov al, x
imul y
mul z
test cx, 0
jnz @k
mov bx, 2
inc ax
div bx
@k:nop
mov A, ax
end;
 
writeln('A=', A);
readln;
end.
Команду перехода изменила.
0
Миниатюры
Проверка числа на четность/нечетность  
katusha17
2 / 2 / 3
Регистрация: 04.03.2014
Сообщений: 62
29.12.2014, 14:16  [ТС] 5
Можно ли таким образом выполнить нужную мне задачу, не засылая результат умножения трёх чисел в двойное слово?
И, найдутся ли такие числа, для которых решение задачи по данному коду будет неверным?

Добавлено через 6 минут
Или нужно вот так 14 строчку выполнить?
Assembler
1
test cx, 1
Дело в том, что я не совсем понимаю принцип работы этой команды; но знаю, что работает, как логическое "И".
0
Argogo
640 / 241 / 40
Регистрация: 29.03.2013
Сообщений: 533
29.12.2014, 18:58 6
katusha17, перечитай как работают команды, иначе не сможешь нормально решить задачу:
MUL, команда IMUL тебе не нужна, т.к. тип BYTE в паскале беззнаковый
TEST
ADD
ADC
вместо деления на два лучше использовать сдвиг вправо, для этого понадобятся команды SHR и RCR
0
29.12.2014, 18:58
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.12.2014, 18:58

Ввести четырехзначное число и проверить четность/нечетность
Ребят, помогите как можно скорее, умоляю! 3 лекции по этому чУдному языку провели нам, никто и...

Проверка числа на четность
почему у меня не переходит по метке четности тоесть Evenn?у меня он идет линейно. В чем может быть...

Проверка на четность числа
Доброго времени суток. Нужно написать проверку числа на четность Что делаю не так? Всегда пишет,...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru