Процедура подсчета количества бит установленных в единицу - 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. Список действий:

  1. POPCNT eax - вычисление количества бит, установленных в единицу в регистре eax
  2. ret - возврат управления в вызывающую программу

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


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

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

12   голосов , оценка 4.167 из 5
Похожие ответы