Сдвиг на несколько байтов. Подсчет битов - Assembler

Узнай цену своей работы

Формулировка задачи:

Здравствуйте. Есть заданеобходиорой необходимо сосчитать количество 0 бит в младшем и старшим байтов. Есть код:
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
; Вообщем получается я считаю количество едениц в первом байте.( по—моему Он считается как младший байт)
 
}
Дальше не знаю как совершить сдвиг до последнего байта. Думал Shr dl,64 поможет, но не работает. Наверное я делаю что то не так.

Решение задачи: «Сдвиг на несколько байтов. Подсчет битов»

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

Объяснение кода листинга программы

  1. mov count,16 — в начале программы переменной count присваивается значение 16, которая будет использоваться для подсчета количества 0 бит в младшем и старшем байтах строки.
  2. mov dl,h — первый байт строки, который будет использоваться в операции сдвига и подсчете битов.
  3. mov cx,8 — переменная cx используется как счетчик в цикле.
  4. a0: shl dl,1 — операция сдвига влево на 1 бит, результат сохраняется в переменной dl.
  5. sbb count,0 — если при сдвиге был найден 1 бит, то из переменной count вычитается 1. Это будет повторяться до тех пор, пока не будет выполнено условие окончания цикла.
  6. loop a0 — начало цикла, который будет повторяться до тех пор, пока не будет выполнено условие окончания цикла.
  7. mov dl,y — последний байт строки, который будет использоваться в операции сдвига и подсчете битов.
  8. mov cx,8 — снова используется переменная cx как счетчик в цикле.
  9. a1: shl dl,1 — операция сдвига влево на 1 бит, результат сохраняется в переменной dl.
  10. sbb count,0 — если при сдвиге был найден 1 бит, то из переменной count вычитается 1. Это будет повторяться до тех пор, пока не будет выполнено условие окончания цикла.
  11. loop a1 — начало цикла, который будет повторяться до тех пор, пока не будет выполнено условие окончания цикла.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 4.091 из 5