Форум программистов, компьютерный форум, киберфорум
Наши страницы
Assembler, MASM, TASM
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.75/102: Рейтинг темы: голосов - 102, средняя оценка - 4.75
xEtr1k
9 / 9 / 5
Регистрация: 09.08.2012
Сообщений: 58
1

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

12.09.2012, 11:05. Просмотров 20251. Ответов 33
Метки нет (Все метки)

Здраствуйте. Только начал изучать асм и возник вопрос: как проверить число находящееся в регисте на четность? существует ли в асм усл.оператор "if" ?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.09.2012, 11:05
Ответы с готовыми решениями:

Проверка числа на четность/нечетность
Здравствуйте. У меня возникла небольшая проблема с кодом. Задача следующая: Перемножить три...

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

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

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

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

33
Ballast
3 / 0 / 0
Регистрация: 17.05.2012
Сообщений: 10
12.09.2012, 11:15 2
xEtr1k, есть регистр флагов, в котором 2-й (считая с 0) младший бит - флаг четности PF. После многих команд процессор его меняет. Проверяй, например, загрузкой в ah flags командой lahf сразу после команды, где результат - твое число.

Насчет ифа есть .if .endif и другие условные операторы в виде директив, заимствованные из Си (в MASM). А в TASM jmp тебе помогут.
0
Dmitrinik
536 / 395 / 99
Регистрация: 18.08.2012
Сообщений: 1,024
12.09.2012, 11:25 3
Изучать-то начал только сегодня с утра? Смотри команды CMP, TEST, CMPSB и т.д. А если надо проверить на четность число, находящееся, например, в регистре EAX, то
Assembler
1
2
3
4
5
6
7
test  eax,1
jnz   Odd    ;нечетное, переход на метку Odd
jz    Even   ;четное, переход на метку Even
........
Odd:.....
........
Even:....
1
Mikl___
Автор FAQ
13486 / 6417 / 635
Регистрация: 11.11.2010
Сообщений: 11,588
13.09.2012, 04:13 4
Ballast, флаг PF=1 если число в регистре AL содержит четное количество единиц не стоит запутывать xEtr1k!
0
13.09.2012, 04:13
Varlock2011
3 / 3 / 0
Регистрация: 19.12.2011
Сообщений: 5
14.09.2012, 07:43 5
можно проверять остаток от деления на 2
если 0 то четный нет значит не четный
Assembler
1
2
3
4
5
6
7
8
9
10
mov ax,a
mov bl,2
idiv bl
cmp ah,0  ;сравним остаток от деления с нулем
je m1:
;значит не четный
jmp exit
m1: 
;значит четный
exit:
1
Dmitrinik
536 / 395 / 99
Регистрация: 18.08.2012
Сообщений: 1,024
14.09.2012, 08:29 6
Цитата Сообщение от Varlock2011 Посмотреть сообщение
можно проверять остаток от деления на 2
если 0 то четный нет значит не четный
Можно. А вот сколько команд для этого нужно выполнить и сколько тактов процессора это займет? И для чего тогда ассемблер? Операция DIV - самая ресурсоемкая из всех операций.
0
Mikl___
Автор FAQ
13486 / 6417 / 635
Регистрация: 11.11.2010
Сообщений: 11,588
14.09.2012, 11:01 7
Dmitrinik, в данном конкретном случае можно задействовать IDIV, DIV, SAR, SHR, RCR, ROR, AAM 2, TEST, AND если проверка однократная, то количеством тактов на одну единственную операцию можно и не заморачиваться
0
Charles Kludge
Клюг
7647 / 3162 / 383
Регистрация: 03.05.2011
Сообщений: 8,381
14.09.2012, 11:02 8
Дык, а
Assembler
1
2
    bt  ax, 0   ; r/m16,imm8 или r/m32,imm8 - Store selected bit in CF flag
    jc  @f  ; нечётное
1
Dmitrinik
536 / 395 / 99
Регистрация: 18.08.2012
Сообщений: 1,024
14.09.2012, 11:45 9
Цитата Сообщение от Mikl___ Посмотреть сообщение
Dmitrinik, в данном конкретном случае можно задействовать IDIV, DIV, SAR, SHR, RCR, ROR, AAM 2, TEST, AND если проверка однократная, то количеством тактов на одну единственную операцию можно и не заморачиваться
Можно вообще не заморачиваться, а писать первое же, пришедшее на ум
0
Mikl___
Автор FAQ
13486 / 6417 / 635
Регистрация: 11.11.2010
Сообщений: 11,588
14.09.2012, 11:53 10
Цитата Сообщение от Dmitrinik Посмотреть сообщение
Можно вообще не заморачиваться, а писать первое же, пришедшее на ум
Dmitrinik, а так примерно и пишутся программы, сперва получить работающую программу, а уже потом сделать из неё конфетку
1
Charles Kludge
Клюг
7647 / 3162 / 383
Регистрация: 03.05.2011
Сообщений: 8,381
14.09.2012, 12:03 11
Цитата Сообщение от Dmitrinik Посмотреть сообщение
а писать первое же, пришедшее на ум
Сторонник индусского кода?
0
Dmitrinik
536 / 395 / 99
Регистрация: 18.08.2012
Сообщений: 1,024
14.09.2012, 12:20 12
Цитата Сообщение от Mikl___ Посмотреть сообщение
Dmitrinik, а так примерно и пишутся программы, сперва получить работающую программу, а уже потом сделать из неё конфетку
Каждому - свое. За мою почти 40-летнюю практику я встречал и такие подходы. Правда, с такими "подходящими" нам приходилось расставаться.
0
Mikl___
Автор FAQ
13486 / 6417 / 635
Регистрация: 11.11.2010
Сообщений: 11,588
14.09.2012, 12:30 13
Charles Kludge, Dmitrinik,
спасибо, былые сахибы...
0
Kastaneda
Jesus loves me
Эксперт С++
5037 / 3056 / 349
Регистрация: 12.12.2009
Сообщений: 7,718
Записей в блоге: 2
Завершенные тесты: 1
14.09.2012, 14:57 14
Цитата Сообщение от Dmitrinik Посмотреть сообщение
Операция DIV - самая ресурсоемкая из всех операций.
На современных архитектурах DIV давно уже выполняется за один такт. Если только программа состоит из одной единственной инструкции DIV, то тогда да, (возможно) будет не один такт.
Другое дело, что четность числа div'ом проверять
1
xEtr1k
9 / 9 / 5
Регистрация: 09.08.2012
Сообщений: 58
16.09.2012, 15:04  [ТС] 15
спасибо...но можно ещё вопрос, такие случаи подойдут для 1-ого числа? а допустим у меня их 5 ,как сделать что бы все они проходили по одному алгоритму..цикл?
0
Mikl___
Автор FAQ
13486 / 6417 / 635
Регистрация: 11.11.2010
Сообщений: 11,588
17.09.2012, 04:27 16
Цитата Сообщение от Kastaneda Посмотреть сообщение
На современных архитектурах DIV давно уже выполняется за один такт.
Пруф!
0
murderer
4293 / 1557 / 156
Регистрация: 06.10.2010
Сообщений: 3,449
17.09.2012, 06:28 17
Латентность может достигать 71 такта на современных AMD
Проверка на четность числа

источник
1
Kastaneda
Jesus loves me
Эксперт С++
5037 / 3056 / 349
Регистрация: 12.12.2009
Сообщений: 7,718
Записей в блоге: 2
Завершенные тесты: 1
17.09.2012, 09:17 18
Я же уточнил
Цитата Сообщение от Kastaneda Посмотреть сообщение
Если только программа состоит из одной единственной инструкции DIV
один такт достигается за счет конвейеров.
0
Mikl___
Автор FAQ
13486 / 6417 / 635
Регистрация: 11.11.2010
Сообщений: 11,588
17.09.2012, 09:38 19
Цитата Сообщение от Kastaneda Посмотреть сообщение
один такт достигается за счет конвейеров.
Это как? Дайте, пожалуйста, развернутый ответ и хорошо бы это ответ подтвердить ссылками...
0
murderer
4293 / 1557 / 156
Регистрация: 06.10.2010
Сообщений: 3,449
17.09.2012, 09:40 20
Если инструкции, идущие после div не зависят от неё - программа будет выполняться дальше (процессор не будет ждать пока выполнится div). Наверное это имелось ввиду.
0
17.09.2012, 09:40
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.09.2012, 09:40

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

Четность числа и ненормальное программирование
Мог бы кто-нибудь написать программу на ассемблере, которая выясняет, четное-ли число. Условие:...

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


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

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

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