Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.12.2013, 07:15   #1
TikTak93
 
Регистрация: 29.11.2013
Сообщений: 9
По умолчанию Битовые операции

Программы реализуются как ассемблерные вставки в языке высшего уровня (Паскаль, С++ и т.д.).

Реализуйте логическую арифметику, при которой в одном байте хранилось бы 8 логических переменных.
TikTak93 вне форума Ответить с цитированием
Старый 12.12.2013, 17:50   #2
Nuklon
Форумчанин
 
Аватар для Nuklon
 
Регистрация: 05.04.2012
Сообщений: 134
По умолчанию

Код:
#include <stdio.h>

#ifndef _X86_
#error [ТОЛЬКО ДЛЯ X86]
#endif

typedef unsigned char byte;


// включить или выключить бит по индексу
__declspec(naked) byte __cdecl set_at(byte val, byte index, bool bit){
    __asm {
         push ebp
         mov  ebp, esp

         mov  al, byte ptr [ebp + 8] // val
         mov  cl, byte ptr [ebp + 12] // index

         mov  dl, 1
         shl   dl, cl
         not  dl
         and  al, dl

         mov bl, byte ptr [ebp + 16]// bit
         shl  bl, cl
         or   al, bl

         pop ebp
         ret
    };
}



// получение состояние по индексу
__declspec(naked) bool __cdecl get_at(byte val, byte index){
    __asm {
          push ebp
          mov ebp, esp

          mov al, byte ptr [ebp + 8] // val
          mov cl, byte ptr [ebp + 12] // index
          shr al, cl
          and al, 1

          pop ebp
          ret
    };
}



int main(void){
    byte b = 0xFF;

    for(byte i = 0; i < 8; i++)
         b = set_at(b, i, (i % 2 == 0));

    for(i = 0; i < 8; i++) {
         if(get_at(b, i))
               puts("state: True");
         else
               puts("state: False");
    }
    return 0;
}
Nuklon вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Битовые операции С++ GXDoblin Помощь студентам 5 13.06.2011 12:44
Битовые операции C++ MarchZM Помощь студентам 0 30.05.2011 18:18
Битовые операции _-Re@l-_ Свободное общение 12 11.07.2010 15:31
Битовые операции ("")(Э_Є)("") Общие вопросы C/C++ 4 03.07.2009 19:15
Битовые операции DrAlexx2121 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 4 14.06.2008 22:26