|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Assm - Нужна помощь с ассемблером |
|
Assm - Нужна помощь с ассемблером
|
Новый участник Сообщения: 3 |
Нужно написать на ассемблере i8086 подпрограмму,которая принимает на вход целое число и проверяет,делится ли оно на 16.Если делится,подпрограмма возвращает-1,иначе-0.Подпрограмма должна реализоваться прототипом extern short fun(short val).
Заранее спасибо!) |
|
Отправлено: 17:29, 18-12-2013 |
Старожил Сообщения: 283
|
Профиль | Отправить PM | Цитировать число, у которого первая тетрада, тобишь первые 4 бита, равны нулю, кратно 16. Алгоритм основан на циклической проверке первых 4 бит. Я не программист, посему кто шарит пусть поправляет, если что-то не так.
fun proc val:WORD ; процедура fun и входящий параметр val размером в слово. mov ax, val ; пишем входящее число в регистр ax mov cx, 4 ; в cx пишем кол-во прогонов цикла mov bx, 1 ; в bx записываем маску с которой будем сравнивать cxloop: test ax, bx ; проверяем бит числа на текущее значение маски jnz false ; если не 0, выходим т.к. число не делится на 16 shl bx, 1 ; если 0, готовим маску для проверки следующего бита, то есть сдвигаем на 1 разряд влево loop cxloop ; уменьшаем кол-во проходов на один, если CX=0, то выходим, если нет выполняем цикл снова true: mov ax, 1 jmp return false: mov ax, 0 return: ret fun endp end |
Последний раз редактировалось Efir, 21-12-2013 в 15:39. Отправлено: 19:06, 18-12-2013 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
DOOMer Сообщения: 3254
|
Профиль | Отправить PM | Цитировать Цитата Efir:
|
|
------- Отправлено: 19:26, 18-12-2013 | #3 |
Новый участник Сообщения: 3
|
Профиль | Отправить PM | Цитировать EFIR,благодарю)
|
Отправлено: 19:38, 18-12-2013 | #4 |
Старожил Сообщения: 283
|
Профиль | Отправить PM | Цитировать CyberDaemon, всмысле можно сразу проверить на 4 бита и негородить огород со сдвигом?
Moustap, процедура задачу выполняет, только однозначно не оптимальным способом, но думаю вам сойдет) |
|
Отправлено: 19:41, 18-12-2013 | #5 |
Старожил Сообщения: 283
|
Профиль | Отправить PM | Цитировать поправил первый код, и вот еще один, куда проще
fun proc val:WORD ; процедура fun и входящий параметр val размером в слово. mov ax, val ; пишем входящее число в регистр ax test al, 00001111B ; любой из младших 4 бит равен единице? jnz false ; если да, то число не кратно 16, false true: mov ax, 1 jmp return false: mov ax, 0 return: ret fun endp |
Последний раз редактировалось Efir, 21-12-2013 в 15:38. Отправлено: 15:26, 21-12-2013 | #6 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Разное - Нужна помощь | Atwork | Тест-форум | 1 | 04-04-2012 01:37 | |
Firewall - Нужна помощь | lsj | Сетевые технологии | 4 | 21-07-2010 01:11 | |
Нужна помощь | Vovan27 | Лечение систем от вредоносных программ | 1 | 10-01-2009 22:03 | |
Delphi - [решено] Нужна помощь с ассемблером в Delphi (найти точку в строке). | Jhakal | Программирование и базы данных | 2 | 29-12-2006 17:44 | |
нужна помощь | NiceSindy | Хочу все знать | 11 | 01-05-2004 10:16 |
|