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

Показать сообщение отдельно

Старожил


Сообщения: 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