Число нулевых бит - Assembler
Формулировка задачи:
Дана программа типа .com, с параметром. Посчитать число нулевых бит первого символа нашего параметра.
Набросок таков, но где-то закралась ошибка.
text segment 'code' assume CS:text,SS:text,DS:text,ES:text org 100h main proc XOR CH,CH ;CH = 0 MOV CL,DS:[80h] ;СX = длина MOV al,ds:[82h] ;1 символ параметра xor bx,bx mov cx,8 sub al,30h ;делаем число jmp not_zero not_zero: jcxz loop1 ;если cx=0 ,т.е. сдвинули 8 раз shr ax,1 jnc zero ; если вытолкнули 0 в CF loop not_zero zero: inc bx ; запомнили dec cx jmp not_zero loop1: ;начинаем выводить кол-во нулевых бит xor ax,ax mov ax,bx mov bl,10 div bl add al,'0' add ah,'0' mov str1,ax MOV AH, 09h LEA DX, STR1 INT 21h JMP exit exit: mov AX,4C00h ; завершение INT 21h ; main endp str1 dw 0Dh,0Ah, 0, '$'; text ends end main
Вопрос ведь даже скорее в том, как считать только значащие нули.
Решение задачи: «Число нулевых бит»
textual
Листинг программы
mov al, ds:[82h] cmp al, 0 je zero ; это какой-то особый случай. а может и нет mov cl, 0 ; счётчик значащих нулей в двоичном представлении числа в al @@Cycle: inc cl ; увеличиваем счётчик нулей на 1 shr al, 1 ;проверяем правый разряд sbb сl, 0 ; если в правом разряде 1, то уменьшаем счётчик на 1 cmp al, 0 ; рассмотрены все значащие разряды? jnz @@Cycle ; нет - рассмотреть следующий
Объяснение кода листинга программы
- mov al, ds:[82h] — Загрузка в AL регистра значения из сегмента данных по адресу 82h.
- cmp al, 0 — Сравнение значения в AL с 0.
- je zero — Если значение в AL равно 0, то переход на метку zero.
- mov cl, 0 - Инициализация счётчика нулей в двоичном представлении числа в AL.
- inc cl — Увеличение счётчика на 1.
- shr al, 1 - Сдвиг двоичного числа в AL вправо на один разряд и проверка правого разряда.
- sbb сl, 0 - Если в правом разряде 1, то уменьшение счётчика на 1.
- cmp al, 0 - Проверка, рассмотрены ли все значащие разряды.
- jnz @@Cycle — Если не все разряды были рассмотрены, то переход на цикл.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д