Сдвиг на несколько байтов. Подсчет битов - Assembler
Формулировка задачи:
Здравствуйте. Есть заданеобходиорой необходимо сосчитать количество 0 бит в младшем и старшим байтов.
Есть код:
Дальше не знаю как совершить сдвиг до последнего байта. Думал Shr dl,64 поможет, но не работает. Наверное я делаю что то не так.
char x[11]="hellodolly"; _asm{ mov edl,x mov ecx,8 start: test edl,1 jz blink inc count blink: shr edl,1 loop start ; Вообщем получается я считаю количество едениц в первом байте.( по—моему Он считается как младший байт) }
Решение задачи: «Сдвиг на несколько байтов. Подсчет битов»
textual
Листинг программы
mov count,16; переменная count в которой ;будет количество 0 бит в младшем и старшем байтах строки mov dl,"h";первый байт mov cx,8 a0: shl dl,1 sbb count,0; если найден 1 бит, тогда из count вычитается 1 loop a0 mov dl,"y";последний байт mov cx,8 a1: shl dl,1 sbb count,0 loop a1
Объяснение кода листинга программы
- mov count,16 — в начале программы переменной count присваивается значение 16, которая будет использоваться для подсчета количества 0 бит в младшем и старшем байтах строки.
- mov dl,
h
— первый байт строки, который будет использоваться в операции сдвига и подсчете битов. - mov cx,8 — переменная cx используется как счетчик в цикле.
- a0: shl dl,1 — операция сдвига влево на 1 бит, результат сохраняется в переменной dl.
- sbb count,0 — если при сдвиге был найден 1 бит, то из переменной count вычитается 1. Это будет повторяться до тех пор, пока не будет выполнено условие окончания цикла.
- loop a0 — начало цикла, который будет повторяться до тех пор, пока не будет выполнено условие окончания цикла.
- mov dl,
y
— последний байт строки, который будет использоваться в операции сдвига и подсчете битов. - mov cx,8 — снова используется переменная cx как счетчик в цикле.
- a1: shl dl,1 — операция сдвига влево на 1 бит, результат сохраняется в переменной dl.
- sbb count,0 — если при сдвиге был найден 1 бит, то из переменной count вычитается 1. Это будет повторяться до тех пор, пока не будет выполнено условие окончания цикла.
- loop a1 — начало цикла, который будет повторяться до тех пор, пока не будет выполнено условие окончания цикла.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д