Download as txt, pdf, or txt
Download as txt, pdf, or txt
You are on page 1of 2

;8086 program to Count the number of 1’s in a register

Algorithm :
Step I : Initialize the data memory.
Step II : Load the number in AX register.
Step III : Initialize count in BL = 00
Initialize counter 1 = 16.
Step IV : Rotate contents of register so that LSB will go in carry.
Step V : Check if carry = 1. If not goto step VII.
Step VI : Increment count in BL.
Step VII : Decrement counter 1.
Step VIII : Check if counter 1 = 0. If not go to step IV.
Step IX : Display result in BL.
Step X : Stop.

CODE:

.model small
.stack 100h
.data
a dw 5267H
.code
main proc
mov ax, @data ; Initialize data section
mov ds, ax
mov ax, a ; Load number1 in ax
mov cx, 16 ; load count in cx register
back: rcr ax, 1 ; rotate by 1 bit to the right
jnc l1 ; if bit is 0 goto next bit
inc bl ; if bit=1 increment count
l1: dec cx ; decrement counter
jnz back ;
mov ch, 04h ; Count of digits to be displayed
mov cl, 04h ; Count to roll by 4 bits
l2: rol bx, cl ; roll bl so that msb comes to lsb
mov dl, bl ; load dl with data to be displayed
and dl, 0fH ; get only lsb
cmp dl, 09 ; check if digit is 0-9 or letter A-F
jbe l4
add dl, 07 ; if letter add 37H
; else only add 30H
l4: add dl, 30H
mov ah, 02 ; Function 2 under
; INT 21H

; (Display character)
int 21H
dec ch ; Decrement Count
jnz l2
mov ah, 4cH ; Terminate Program
int 21H
main endp
end main
Output :
C:\programs>count1
0008

You might also like