Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Показать сообщение отдельно

Аватара для Gooch

Ветеран


Сообщения: 876
Благодарности: 160

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
#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 работало.

-------
Не забываем жмакать "полезное сообщение"


Отправлено: 17:11, 25-05-2011 | #12