Код:
#include "stdafx.h"
#include "iostream"
#include "windows.h"
//Реализуйте с помощью логических операций вставку заданного значения (0 или 1) в любой бит байта со сдвигом вправо и потерей крайнего бита.
INT8 assembler(INT8 z, INT8 x)
{
INT8 rez=0;
__asm
{
MOV cl,x //проверка Х на значение не 0
CMP cl,1
JNZ bit
cicle: //берём rez и записываем в al, в rez должно быть 10000000, после чего
//сдвигаем значение на 1 бит, после чего в зависимости от z повторяем цикл
MOV al,rez
SHR al,1
MOV rez,al
INC cl
CMP cl,z
JB cicle
JMP end
bit:
MOV al,0
MOV cl,80H
ADD al,cl
MOV rez,al
end:
}
return rez;
}
void main()
{
int z, y, x;
system("title Вычисление значения выражения");
setlocale(LC_ALL,"Russian");
printf("\n");
printf("Введите значение бита (0 или 1): \n");
scanf_s("%d",&x);
printf("Введите номер бита (от 0 до 7): \n");
scanf_s("%d",&y);
if (y==7)
{
z=0;
}
if (y==6)
{
z=1;
}
if (y==5)
{
z=2;
}
if (y==4)
{
z=3;
}
if (y==3)
{
z=4;
}
if (y==2)
{
z=5;
}
if (y==1)
{
z=6;
}
if (y==0)
{
z=7;
}
printf("Ответ = %i\n",assembler(z, x));
system("pause");
}
вообщем как то так....почему то я думаю что совсем не правильно делаю
и ещё не знаю как сделать так, чтобы с 0 работало.