Ім'я файлу: Алгоритмизация_и_Программирование_3.pdf Розширення: pdf Розмір: 331кб. Дата: 25.11.2022 скачати Пов'язані файли: 1662736694856116.doc
Дисциплина. Алгоритмизация и программирование. Вид аудиторных занятий. Лабораторные работы. Тема. Программирование на С. Раздел. Битовые поля. Операции с битовыми полями единиц информации. Алгоритмы побитной обработки единиц информации. с) 2022 Лосихин ДА, кафедра ИС, УГХТУ Лабораторная работа №3 Битовые поля. Операции с битовыми полями единиц информации. Алгоритмы побитной обработки единиц информации. Программное обеспечение 1. Кроссплатформенная среда разработки Code::Blocks с поддержкой компилятора MinGW / GCC C/C++. 2. Среда разработки Visual Studio 20XX. Построение приложений для Windows. 3. Калькулятор –> Вид –> Программист. Объект изучения. Битовые поля. Единицы информации. Предмет изучения. Операции с битовыми полями единиц информации. Алгоритмы побитной обработки единиц информации. Цель. Разработать проект программы на С/С++ для эмуляции файла регистров микропроцессора, и изучения операций с битовыми полями и алгоритмов побитной обработки единиц информации. Для выполнения работы необходимо знать, с учётом накопленных знаний по предыдущим темам, операции над целыми операндами, оператор вычисления размера, а также дополнительно, структурированные типы данных массив, структура, битовые поля. В результате выполнения работы необходимо уметь. Составлять битовые поля для машинно-зависимых приложений. Составлять алгоритмы побитной обработки единиц информации применение маски для шифрования применение маски для идентификации обмен информацией битовых полей коррекция отдельных бит информации преобразование в обратный и дополнительный код. Ход работы 1. Запустить среду разработки и создать пустой проект программы. 2. Написать, для начала, программу, состоящую из одного исходного файла. int main(void) { return; } 3. Подключить к проекту внешнюю библиотеку ввода/вывода stdio и свою библиотеку функций my_fnc, где описана и определена функция представления целых чисел в двоичном формате – printb. Например, void printb(unsigned int value, short number_of_position) { number_of_position --; int bit_position; for (bit_position=number_of_position;bit_position>=0;bit_position--) printf("%d", value >> bit_position & 1); Дисциплина. Алгоритмизация и программирование. Вид аудиторных занятий. Лабораторные работы. Тема. Программирование на С. Раздел. Битовые поля. Операции с битовыми полями единиц информации. Алгоритмы побитной обработки единиц информации. с) 2022 Лосихин ДА, кафедра ИС, УГХТУ } 4. Определить в библиотеке my_fnc битовые поля для виртуального файла из трёх 8- битных регистров А, В, С микропроцессора, структурированные полубайтами. Например, struct REGISTERS6x4 { unsigned AL : 4; младший полубайт регистра А unsigned AH : 4; старший полубайт регистра А unsigned BL : 4; unsigned BH : 4; unsigned CL : 4; unsigned CH : 4; }; 5. Описать и инициализировать в программе переменную типа структурированных битовых полей, например, struct REGISTERS6x4 registers6x4; registers6x4.AL = 0x3; registers6x4.AH = 0x9; registers6x4.BL = 0x5; registers6x4.BH = 0x5; registers6x4.CL = registers6x4.AL & registers6x4.BL; registers6x4.CH = registers6x4.AH & registers6x4.BH; 6. Вывести на экран дисплея информацию, записанную в виртуальных регистрах А, В, Св шестнадцатеричном ив двоичном формате, например, для регистра А printf("AH_AL = %#X", registers6x4.AH); printf("%X\n", registers6x4.AL); printf("AH_AL = 0b"); printb(registers6x4.AH, 4); printb(registers6x4.AL, 4); 7. Вычислить и вывести на экран дисплея размер файла регистров, например, printf("size of register file = %d byte(s)\n\n", sizeof(registers6x4)); Убедитесь, что операция вычисления размера с помощью оператора sizeof неприменима к операндам типа битовых полей. 8. Описать и инициализировать нулём беззнаковую переменную целого типа, размер которой 1 байт. Вычислить и вывести на экран дисплея размер этой переменной в битах, например, Дисциплина. Алгоритмизация и программирование. Вид аудиторных занятий. Лабораторные работы. Тема. Программирование на С. Раздел. Битовые поля. Операции с битовыми полями единиц информации. Алгоритмы побитной обработки единиц информации. с) 2022 Лосихин ДА, кафедра ИС, УГХТУ unsigned char c = 0; printf("\nsizeof c = %d bit(s)\n\n", sizeof(char) * 8); 9. охранить два битовых поля побита, учитывая старший и младший полубайты, водной 8-битной переменной. Результат вывести на экран дисплея в двоичном формате. Например, c = registers6x4.CH; c <<= 4; c |= registers6x4.CL; printf("c = 0b"); printb(c, 8); 10. Извлечь из 8-битной переменной с младший полубайт и поместить в битовые поля определённой ранее структуры, например, в BL, а старший полубайт поместить в BH. Результат вывести на экран дисплея в двоичном формате. Например, registers6x4.BL = c; c >>= 4; registers6x4.BH = c; printf("BH_BL = 0b"); printb(registers6x4.BH, 4); printb(registers6x4.BL, 4); 11. Описать переменные x, y, z целого типа int. Инициализировать переменные x, y. Применить маску y для шифрования информации, находящейся в переменной x. Результат вывести на экран дисплея в двоичном формате. Например, int x = 0x52; int y = 0x23; шифр int z; шифровка printf("\nx = 0b"); printb(x, 8); printf("\ny = 0b"); printb(y, 8); z = x^y; шифрование получаем шифровку printf("\nz = 0b"); printb(z, 8); z ^= y; //дешифрование; получаем исходную информацию x printf("\nz = 0b"); printb(z, 8); 12. Описать переменную m целого типа int. Применить маску m для идентификации отдельных бит информации, например, й и й биты маски равны 1 остальные биты равны 0, чтобы узнать, чему равный и й биты информации, находящейся в переменной x. Результат вывести на экран дисплея в двоичном формате. Например, int m = 18; //0b00010010 - маска z = x & m; printf("\nx = 0b"); printb(x, 8); printf("\nm = 0b"); printb(m, 8); Дисциплина. Алгоритмизация и программирование. Вид аудиторных занятий. Лабораторные работы. Тема. Программирование на С. Раздел. Битовые поля. Операции с битовыми полями единиц информации. Алгоритмы побитной обработки единиц информации. с) 2022 Лосихин ДА, кафедра ИС, УГХТУ printf("\nz = 0b"); printb(z, 8); Анализ если z = 0, оба бита в x = 0; если z = m, оба бита в х = 1; если x = 2^1, 1-ца только во м бите ха если x = 2^4, то только в м бите х. 13. Обмен значений переменных x и y без использования промежуточной переменной. Результат выводим на экран дисплея в двоичном формате. printf("\nx = 0b"); printb(x, 8); printf("\ny = 0b"); printb(y, 8); x ^= y; y ^= x; x ^= y; printf("\nx = 0b"); printb(x, 8); printf("\ny = 0b"); printb(y, 8); 14. Установить 1-ный битв заданную битовую позицию переменной x. Результат вывести на экран дисплея в двоичном формате. Например, printf("\nx = 0b"); printb(x, 8); m = 0x10; //0b00010000 - маска printf("\nm = 0b"); printb(m, 8); x |= m; printf("\nx = 0b"); printb(x, 8); 15. Установить вой битв заданную битовую позицию переменной x. Результат вывести на экран дисплея в двоичном формате. Например, printf("\nx = 0b"); printb(x, 8); m = 0x10; //0b00010000 - маска printf("\nm = 0b"); printb(m, 8); m = m; printf("\nm = 0b"); printb(m, 8); x &= m; printf("\nx = 0b"); printb(x, 8); 16. Заменить заданную битовую позицию переменной x на противоположную. Результат вывести на экран дисплея в двоичном формате. Например, printf("\nx = 0b"); printb(x, 8); m = 0x17; //0b00010000 - маска printf("\nm = 0b"); printb(m, 8); x ^= m; printf("\nx = 0b"); printb(x, 8); Дисциплина. Алгоритмизация и программирование. Вид аудиторных занятий. Лабораторные работы. Тема. Программирование на С. Раздел. Битовые поля. Операции с битовыми полями единиц информации. Алгоритмы побитной обработки единиц информации. с) 2022 Лосихин ДА, кафедра ИС, УГХТУ 17. Преобразовать значения переменной y в дополнительный код. Сделать проверку вычитанием и сложением. Результат вывести на экран дисплея в двоичном формате. Например, printf("\nx = 0b"); printb(x, 8); printf("\ny = 0b"); printb(y, 8); z = x - y; проверка результат вычитания = 0b"); printb(z, 8); или = y + 1; дополнительный код y printf("\ny = 0b"); printb(y, 8); z = x + y; проверка результат сложения = 0b"); printb(z, 8); 18. Оформить лабораторную работу по пунктам 4, 5, 6, 8-17. 19. Ответить на контрольные вопросы: • Что представляют собой массив, структура, битовые поля в языке С? • Как обращаться к отдельным элементам битовых полей? • Как вычислить размер переменной в битах? • Объясните алгоритм шифрования и дешифрования информации с использованием побитовой операции исключающее ИЛИ». • Объясните алгоритм идентификации отдельных бит информации. • Объясните алгоритм обмена значений двух переменных без использования промежуточной переменной. • Объясните алгоритмы замены отдельных бит информации на 1; на 0; на противоположный. • Как преобразовать единицу информации в обратный код? • Как преобразовать единицу информации в дополнительный код |