8086 program to Count the number of 1’s in a register
13:02
ØØ Explanation :
· We have a word that is stored in AX register.
· Initialize the counter 1 = 16.
· Initialize counter 2 = 0 to count the number of 1’s.
· We will rotate the number in AX alongwith carry by 1 bit to the right. If there is a carry we will increment counter 2. Decrement counter 1. This process with continue till all the bits are checked. The counter 2 will indicate the number of 1’s present in the word. The result of counter 2 is stored in BL. Display the result.
eg. : AX = 5267
|
0101
|
0010
|
0110
|
0111
|
no of 1’s = 8
ØØ 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.
ØØ Flowchart : Refer flowchart 7.
ØØ Program :
.model small
.data
a dw 5267H
.code
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
; else only add 30H
l4: add dl, 30H
mov ah, 02 ; Function 2 under
; INT 21H
; INT 21H
; (Display character)
int 21H
dec ch ; Decrement Count
jnz l2
mov ah, 4cH ; Terminate Program
int 21H
end
ØØ Result :
C:\programs>tasm count1.asm
Turbo Assembler Version 3.0 Copyright (c) 1988, 1991 Borland International
Assembling file: count1.asm
Error messages: None
Warning messages: None
Passes: 1
Remaining memory: 438k
C:\programs>tlink count1
Turbo Link Version 3.0 Copyright (c) 1987, 1990 Borland International
Warning: No stack
C:\programs>count1
0008
C:\programs>
WHAT IF I WANT TO COUNT NUMBER OF ZERO INSTAD
ReplyDeleteI can't understand easily
ReplyDeleteSorry
That is so mess up kindly make small and simple programs
ReplyDeleteok
ReplyDelete