Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Assm - Нужна помощь с ассемблером

Ответить
Настройки темы
Assm - Нужна помощь с ассемблером

Новый участник


Сообщения: 3
Благодарности: 0

Профиль | Отправить PM | Цитировать


Нужно написать на ассемблере i8086 подпрограмму,которая принимает на вход целое число и проверяет,делится ли оно на 16.Если делится,подпрограмма возвращает-1,иначе-0.Подпрограмма должна реализоваться прототипом extern short fun(short val).

Заранее спасибо!)

Отправлено: 17:29, 18-12-2013

 

Старожил


Сообщения: 283
Благодарности: 53

Профиль | Отправить 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



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для CyberDaemon

DOOMer


Сообщения: 3254
Благодарности: 438

Профиль | Отправить PM | Цитировать


Цитата Efir:
число, у которого первая тетрада, тобишь первые 4 бита равны нулю »
Т.е. если число AND 0x0Fh равно нулю - то первые четыре бита числа были равны нулю

-------
"640 K ought to be enough for anybody" Bill Gates, 1981


Отправлено: 19:26, 18-12-2013 | #3


Новый участник


Сообщения: 3
Благодарности: 0

Профиль | Отправить PM | Цитировать


EFIR,благодарю)

Отправлено: 19:38, 18-12-2013 | #4


Старожил


Сообщения: 283
Благодарности: 53

Профиль | Отправить PM | Цитировать


CyberDaemon, всмысле можно сразу проверить на 4 бита и негородить огород со сдвигом?

Moustap, процедура задачу выполняет, только однозначно не оптимальным способом, но думаю вам сойдет)

Отправлено: 19:41, 18-12-2013 | #5


Старожил


Сообщения: 283
Благодарности: 53

Профиль | Отправить 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



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Assm - Нужна помощь с ассемблером

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Разное - Нужна помощь 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




 
Переход