![]() |
|
|
![]()
|
|
| bncom |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 170 Регистрация: 2.11.2005 Репутация: нет Всего: 1 |
Задание: Если число состоит менее, чем из 3 десятичных цифр, сохранить их сумму, иначе сохранить 0.
Тут как я понимаю надо использовать УСЛОЛОВИЯ, как в Си: if, else, т.е. ход действий такой: 1) считаем кол-во разрядов (пример: 123) 2) if >3 ? ->1+2+3=6 3) else <3 -> 0 Можно и так: 1) DI = 0; 2) Разделить число на 10, остаток прибавить к DI; 3) Повторять 1 до получения нулевого частного и увеличивать счётчик; 4) Если счётчик < 3, отправить в приёмник 0, иначе - значение DI. А вот как это на ассемблере написать... ? P.S. Знаю, что надо воспользоваться командами cmp, jmp, je, ja, jbe и т.д. но я в них не силен (( --------------------
"Мы никогда не живем, мы лишь надеемся, что будем жить." Вольтер |
|||
|
||||
| 10110111 |
|
||||
![]() Новичок Профиль Группа: Участник Сообщений: 18 Регистрация: 28.8.2006 Где: Санкт-Петербург Репутация: нет Всего: 1 |
вот...может, можно как-нибудь красивее...:
PS:
В смысле, менее или равно? Это сообщение отредактировал(а) 10110111 - 17.3.2007, 15:57 |
||||
|
|||||
| bncom |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 170 Регистрация: 2.11.2005 Репутация: нет Всего: 1 |
....... 2) if <3 ? ->1+2+3=6 3) else >3 -> 0 --------------------
"Мы никогда не живем, мы лишь надеемся, что будем жить." Вольтер |
|||
|
||||
| MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 1 Всего: 207 |
bncom,
если меньше 3-х, как у тебя 123 получилось?
-------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
| bncom |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 170 Регистрация: 2.11.2005 Репутация: нет Всего: 1 |
Да я вообще что-то торможу, извени меня...
Конечно, менее трех разрядов, т.е. например число 23, и тогда сохранить его сумму чисел, т.е. 2+3 = 5 --------------------
"Мы никогда не живем, мы лишь надеемся, что будем жить." Вольтер |
|||
|
||||
| MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 1 Всего: 207 |
см выше
-------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
| bncom |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 170 Регистрация: 2.11.2005 Репутация: нет Всего: 1 |
Вот написал:
Но: транслятор не понимает регистр EAX и т.п. Читал где-то, что нужно сделать, но забыл как... Подскажите пожалуйста. Если прост озаменить регистры на AX, то транслятор выдает какую-то ошибку... --------------------
"Мы никогда не живем, мы лишь надеемся, что будем жить." Вольтер |
|||
|
||||
| MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 1 Всего: 207 |
bncom,
странно, почему он автоматом префикс 66h не ставит -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
| bncom |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 170 Регистрация: 2.11.2005 Репутация: нет Всего: 1 |
Ну а что мне делать тогда?
Вообще программа правильно сделана? --------------------
"Мы никогда не живем, мы лишь надеемся, что будем жить." Вольтер |
|||
|
||||
| Kuvaldis |
|
|||
![]() механик-вредитель ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1189 Регистрация: 16.6.2006 Где: Минск Репутация: нет Всего: 61 |
bncom,
поставь в начале программы .386 -------------------- Помни - когда ты спишь, враг не дремлет Спи чаще и дольше, изматывай врага бессоницей |
|||
|
||||
| bncom |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 170 Регистрация: 2.11.2005 Репутация: нет Всего: 1 |
А что вообще за команда CMOVAE ? Я ее нигде найти не могу (в справочниках).
Вот сделал как вы сказали - все равн оне работает (ошибки при трансляции):
--------------------
"Мы никогда не живем, мы лишь надеемся, что будем жить." Вольтер |
|||
|
||||
| JAPH |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 312 Регистрация: 8.1.2007 Где: Ленобласть Репутация: 5 Всего: 23 |
Команда CMOVAE копирует источник в приёмник, если предыдущее сравнение дало результат Above or Equal (>=). Команда появилась в Pentium Pro, поэтому директивой .386 тут не обойтись. (Нужно что-то вроде .686, поправьте, если что)
Да, кстати: если программа пишется под DOS, то .model small должна стоять перед .386, иначе транслятор сгенерирует инструкции 32-битного режима, которые DOS не переваривает. CMOVAE можно заменить:
Мой взгляд на решение (единственное достоинство - без div):
Это сообщение отредактировал(а) JAPH - 23.3.2007, 19:29 -------------------- Что непонятно - спрашиваем |
||||
|
|||||
| MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 1 Всего: 207 |
bncom,
извини, сам ошибся возможные операнды CMOVxx - память, регистр, но не непосредственный операнд так что делай как сказал JAPH, -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
![]()
|
| Правила форума "Asm для начинающих" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Asm для начинающих | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |