Count the Number of 1s in a Register
Write a program in Assembly Language to Count the Number of 1’s in a Register . Program should load number in register and then should implement some logic for counting Number of 1’s in a Register .
How our Logic Works for this Problem
- 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 along with 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 to Count the Number of 1s in a Register
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.
Stp IV : Rotate contents of register so that LSB will go in carry.
Step V : Check if carry = 1. If not go to 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.
Program to Count the Number of 1s in a Register
.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 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 end
How to Run this Program
For Running this program you should have installed Tasm on you computer . If you have not installed Tasm yet please install from Here .
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
Leave a Reply