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>
0 comments: