Дан массив из 6 байт. Рассматривая его, как массив из 48 бит, посчитать в нем количество нулей. - Assembler
Формулировка задачи:
Дан массив из 6 байт. Рассматривая его, как массив из 48 бит, посчитать в нем количество нулей
Помогите решить пожалуйста
Решение задачи: «Дан массив из 6 байт. Рассматривая его, как массив из 48 бит, посчитать в нем количество нулей.»
textual
Листинг программы
lea si,var xor dx,dx mov cx,6 count: lodsb push cx mov cx,8 bit: shl al,1 jc skip inc dx skip: loop bit pop cx loop count
Объяснение кода листинга программы
lea si,var— в качествеvarиспользуется адрес в памяти, где хранится массив.xor dx,dx— начальное значениеdxустанавливается в ноль.mov cx,6— в качествеcxиспользуется счётчик, и его начальное значение равно 6 (размер массива).count:— начало цикла, который будет выполняться 6 раз (размер массива).lodsb— в качествеalиспользуется первый элемент массива (в данном случае это 0), аdxинкрементируется на 1.push cx— значениеcxсохраняется на стеке для последующего использования.mov cx,8— счётчик устанавливается равным 8 (чтобы перебрать все 48 бит).bit:— начало внутреннего цикла, который будет выполняться 8 раз (чтобы перебрать все 48 бит).shl al,1— значениеalсдвигается на 1 вправо (чтобы получить следующий бит).jc skip— если бит был 1, то переход на следующую итерацию внутреннего цикла.inc dx— значениеdxинкрементируется на 1.skip:— начало условного блока, который выполняется, если бит был 0.loop bit— переход к следующей итерации внутреннего цикла.pop cx— значениеcxвосстанавливается из стека.loop count— переход к следующей итерации внешнего цикла.- Код выполняется 6 раз (размер массива), перебирая все 48 бит.
- Если бит был 0, то значение
dxинкрементируется на 1. - После выполнения всех итераций, в
dxбудет содержаться количество нулей в массиве.