Implement Booth Algorithm


#include<stdlib.h>
#include<conio.h>

static void add(int a[],int b[],int ad)
{
int i,j,c=0;
for(j=0;j<=ad-1;j++)
{
a[j]=a[j]+b[j]+c;
c=0;
if (a[j]==2)
{
a[j]=0;
c=1;
}
else if (a[j]==3)
{
a[j]=1;
c=1;
}
}
}
static void sub(int a[],int b[],int n)
{
int cb,borrow=0,bit,result;
//int c=n;
//int res[10];
//res[n];
printf("\n");
for(bit=0;bit<=n-1;bit++)
{
result=a[bit]-b[bit]-borrow;
if (result<0)
{
result=result*(-1);
borrow=1;
}
else
{
borrow=0;
}
a[bit]=result%2;
}
}
static void display(int a[],int b[],int q[],int q1,int n)
{
int i;
for(i=n-1;i>=0;i--)
{
printf("%d",a[i]);
}
printf("\t");
for(i=n-1;i>=0;i--)
{
printf("%d",q[i]);
}
printf("\t");
printf("%d",q1);
printf("\t");
for(i=n-1;i>=0;i--)
{
printf("%d",b[i]);
}
printf("\n");
}
void main()
{
char* nt,mt,qt;
int sm,q1,mul,sq,n,i,j,m,qm,mod,count,c1,ad;
int a[10],b[10],q[10],z[10];
clrscr();
printf("Enter no of bits::");
scanf("%d",&n);
c1=n;
ad=n;
q1=0;
z[0]=1;
a[0]=0;
for(i=1;i<=n-1;i++)
{
a[i]=0;
z[i]=0;
}
printf("\nEnter the Multiplicand::");
scanf("%d",&m);
sm=m;
printf("\nEnter the Multiplier::");
scanf("%d",&qm);
mul=m*qm;
sq=qm;
printf("\nA\tQ\tQ1\tM\n");
for(i=0;i<=n-1;i++)
{
mod=m%2;
m=m/2;
b[i]=mod;
}
if (sm<0)
{
for(i=0;i<=n-1;i++)
{
b[i]=b[i]*(-1);
}
for(i=0;i<=n-1;i++)
{
if (b[i]==0)
b[i]=1;
else if(b[i]==1)
b[i]=0;
}
for(i=0;i<=n-1;i++)
{
b[i]=b[i]+z[i];
if (b[i]==2)
{
b[i]=0;
b[i+1]=b[i+1]+1;
}
else if (b[i]==3)
{
b[i]=1;
b[i+1]=b[i+1]+1;
}
}
}
for(i=0;i<=n-1;i++)
{
mod=qm%2;
qm=qm/2;
q[i]=mod;
}
if (sq<0)
{
for(i=0;i<=n-1;i++)
{
q[i]=q[i]*(-1);
}
for(i=0;i<=n-1;i++)
{
if (q[i]==0)
q[i]=1;
else if(q[i]==1)
q[i]=0;
}
for(i=0;i<=n-1;i++)
{
q[i]=q[i]+z[i];
if (q[i]==2)
{
q[i]=0;
q[i+1]=q[i+1]+1;
}
else if (q[i]==3)
{
q[i]=1;
q[i+1]=q[i+1]+1;
}
}
}
display(a,b,q,q1,n);
while (c1!=0)
{
if (q[0]==0&&q1==1)
{
add(a,b,n);
display(a,b,q,q1,n);
}
else
if (q[0]==1&&q1==0)
{
sub(a,b,n);
display(a,b,q,q1,n);
//printf("A=A-M");
}
q1=q[0];
for(i=0;i<n-1;i++)
{
q[i]=q[i+1];
}
q[n-1]=a[0];
for(i=0;i<n-1;i++)
{
a[i]=a[i+1];
}
c1=c1-1;
display(a,b,q,q1,n);
printf("\n");
}
printf("\nMultiplication is = ");
for(i=n-1;i>=0;i--)
{
printf("%d",a[i]);
}
for(i=n-1;i>=0;i--)
{
printf("%d",q[i]);
}
printf(" ==> %d",mul);
}


Output:

Enter no of bits 4
Enter the Multiplicand 7
Enter the Multiplier 3
A Q Q1 M
0000 0011 0 0111

1001 0011 0 0111
1100 1001 1 0111

1110 0100 1 0111
0101 0100 1 0111

0010 1010 0 0111 

0001 0101 0 0111

Multiplication is = 00010101
Previous Post Next Post