// comptech.cpp 17.6.96
//
// Программа преобразует код 16-ти разрядного слова
// таким образом, что число единиц во входном слове
// заменяется на последовательностью нулей в выходном
// 16-ти разрядном слове. Нули справа.
//
// Останов происходит, когда во входном слове не остается единиц
#include <conio.h>
#include <stdio.h>
void main(void)
{
union WORD16
{
int sw;
char sb[2];
};
WORD16 x; // input code [BC]
WORD16 y; // output code[DE]
WORD16 t; // accumulator[AF]
//clrscr();
printf("\n\n\n\n*******************");
printf("\n h");
printf("\r input word x=");
scanf("%x",&x.sw);
y.sw=-1;
while(x.sw != 0)
{
//
t.sw=0;
// (b)->(a)
t.sb[1]=x.sb[1];
// RAR a
t.sw/=2;
x.sb[1]=0x00;
x.sb[1]=t.sb[1]&0x07f;
if(t.sb[0]&0x80)
{
// CY=1
t.sb[1]=0x01;
}
else
{
// CY=0
t.sb[1]=0x00;
}
// (c)->(a)
t.sb[0]=x.sb[0];
// RAR a
t.sw/=2;
if(x.sb[0]&0x01)
{
// CY=1
x.sb[0]=t.sb[0];
// (e)->(a)
t.sw=y.sw;
// RAL a
t.sw*=2;
y.sw=t.sw;
}
else
{
// CY=0
x.sb[0]=t.sb[0];
}
}
printf("output word y=%xh",y.sw);
getch();
return;
} // end main
|
|