Как взять значение определенного бита из байта? и как организовать такое в цикля для каждого бита? - Assembler
Формулировка задачи:
FASM
моя первая задача - вычислить n-e число фибоначчи
бинарное возведение в степень
допустим у меня T= 10101010 b
мне надо
взять значение
последнегобита
(0), и выполнить инструкцию для него (инструкция 0 и инструкция 1, для 0 и 1 соответственно). после проделать то же самое с предпоследним битом, и тд.. КАК это сделать? (что ставить на места ???)cmp (???,0) je instruction_0 cmp (???,1) je instruction_1 ..... .instruction_1 .... .instruction_2
Решение задачи: «Как взять значение определенного бита из байта? и как организовать такое в цикля для каждого бита?»
textual
Листинг программы
mov cx,8; количество бит в байте mov al,T a0: shr al,1; сдвигаем Т на 1 разряд jc instruction_1; если в последнем разряде была единица, то следующей инструкцией будет instruction_1 instruction_2: ....;если в последнем разряде был ноль jmp a1 instruction_1: .... a1: loop a0
Объяснение кода листинга программы
- Сохраняем количество бит в переменной cx
- Сохраняем значение байта в переменной al, на которую будем влиять
- Сдвигаем значение al на 1 разряд вправо, получая старший бит
- Если флаг переноса jc равен 1, то выполняем следующую инструкцию instruction_1, иначе выполняем instruction_2
- Выполняем необходимые действия в блоке instruction_2
- Выполняем необходимые действия в блоке instruction_1
- **Возвращаемся к началу цикла a0 и повторяем все действия заново до тех пор, пока не будет выполнено условие цикла loop a0.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д