Процедура подсчета количества бит установленных в единицу - Assembler
Формулировка задачи:
Нужно подсчитать количество бит установленных в единицу в целом значении типа dword. Используя процедуру обработать 10 чисел.
помогите пожалуйста переделать программу.
Здесь процедура определяет максимальную цифру (десятичная система) в
целочисленном значении типа word, переданном в параметре.
Понимаю, что нужно использовать команду сдвига, также походу нужно использовать флаги, но ка-кто ничего не получается.
Помогите пожалуйста.
.486 model small Data SEGMENT use16 ASSUME ds:Data x1 dw 1796 x2 dw 816 x3 dw 569 x4 dw 754 x5 dw 129 x6 dw 884 x7 dw 1245 x8 dw 6592 x9 dw 056 x10 dw 43 Data ENDS Stk SEGMENT use16 stack db 256 dup(0) Stk ENDS Code SEGMENT use16 ASSUME cs:Code, es:code MaxDig proc push bp mov bp,sp mov ax,word ptr [bp+4] mov cx,10 mov bx,0 ;max digit label1: xor dx,dx div cx cmp dx,bx ;ostatok jle LABEL0 mov bx,dx ;bx hranit maksimalnuyu cifru label0: cmp ax,0 jne label1 mov ax,bx ;ax=maxdig pop bp ret 2 maxdig endp print proc push bp mov bp, sp mov ax, word ptr [bp+6] push ax call maxdig mov di, word ptr [bp+4] add al,48 mov ah, 0fh stosw pop bp ret 4 print endp start: mov ax, Data mov ds, ax mov ax, 0b800h ;В регистр AX заносим адрес сегмента видеобуфера mov es, ax xor di,di mov cx, 25*80 mov al, ' ' mov ah, 0fh rep stosw ;mov di, offset strk xor di,di ;----------------x1 mov bx,6 push bx ;sohranyaem adres simvola iz videobufera push x1 push bx call print ;----------------x2 pop bx add bx,160 push bx push x2 push bx call print ;----------------x3 pop bx add bx,160 push bx push x3 push bx call print ;----------------x4 pop bx add bx,160 push bx push x4 push bx call print ;----------------x5 pop bx add bx,160 push bx push x5 push bx call print ;----------------x6 pop bx add bx,160 push bx push x6 push bx call print ;----------------x7 pop bx add bx,160 push bx push x7 push bx call print ;----------------x8 pop bx add bx,160 push bx push x8 push bx call print ;----------------x9 pop bx add bx,160 push bx push x9 push bx call print ;----------------x10 pop bx add bx,160 push bx push x10 push bx call print pop bx ;udalenie iz steka adresa simvola iz videobufera wait0: in al, 60h cmp al, 1 jnz wait0 mov ax, 4c00h int 21h strk db 7 dup(0),'$' Code ENDS end start
Решение задачи: «Процедура подсчета количества бит установленных в единицу»
textual
Листинг программы
POPCNT eax ret
Объяснение кода листинга программы
В данном коде выполняется процедура подсчета количества бит установленных в единицу. При этом используется инструкция POPCNT, которая вычисляет количество бит, установленных в единицу в регистре eax. После выполнения данной инструкции результат сохраняется в самом регистре eax. Затем происходит возврат управления в вызывающую программу с помощью инструкции ret. Список действий:
- POPCNT eax - вычисление количества бит, установленных в единицу в регистре eax
- ret - возврат управления в вызывающую программу
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д