Страницы

Поиск по вопросам

вторник, 2 октября 2018 г.

Цикл на ассемблере

Пусть A и B – два 8-разрядных регистра в обыкновенном 16-разрядном процессоре. Следующая процедура выполняет сдвиг регистра A на число разрядов, заданное в регистре B. Loop: SHR A ;shift right A DEC B ;decrement B JNZ Loop ;loop again Задача - Написать программу, которая выполняет сдвиг быстрее. Пользоваться многократным сдвигом запрещено. ЗЫ Эту задачу когда-то мне предложили на собеседовании. Я ее решил не верно. У кого какие мысли? Гугл не поможет :) Надо думать самому! UPD: Нашел свое неверное решение MOV AH,A MOV AL,B Label: SHR AH DEC AL JNE Label


Ответ

И третий вариант:) Предложен моим коллегой. Развернуть цикл. jmp $+sizeof(shr a)*(8-b) // $ - это адрес следующей за jmp инструкции shr a shr a shr a shr a shr a shr a shr a shr a

Комментариев нет:

Отправить комментарий