Информатика. Занятие 5

Содержание

Слайд 2

Логические операции

Логические операции в языке C:
&& – логическое «И»
|| – логическое «ИЛИ»
!

Логические операции Логические операции в языке C: && – логическое «И» ||
– логическое «НЕ»

Слайд 3

Поразрядные (побитовые) операции

Поразрядные операции в языке C:
& – побитовое «И»
| – побитовое

Поразрядные (побитовые) операции Поразрядные операции в языке C: & – побитовое «И»
«ИЛИ»
~ – побитовое «НЕ»
^ – исключающее «Или»
<< – побитовый сдвиг влево
>> – побитовый сдвиг вправо
Другие поразрядные операции:
Стрелка Пирса (НЕ-ИЛИ)
Штрих Шеффера (НЕ-И)

Слайд 4

Поразрядные (побитовые) операции
Стрелка Пирса и штрих Шеффера:

Поразрядные (побитовые) операции Стрелка Пирса и штрих Шеффера:

Слайд 5

Поразрядные (побитовые) операции
Арифметические сдвиги:
A <<= B == A * 2B
A >>= B

Поразрядные (побитовые) операции Арифметические сдвиги: A A >>= B == A /
== A / 2B
Примеры арифметического сдвига:
(3 <<= 7) == (3 * 27) == 384
(3072 >>= 10) == (3072 / 210) == 3
(365 >>= 6) == (365/26) == 5

Слайд 6

Различия между логическими и поразрядными операциями в языке C

Логические операции:
15 && 10

Различия между логическими и поразрядными операциями в языке C Логические операции: 15
== 1
31 || 128 == 1
63 || 0 == 1
!209 == 0
Поразрядные операции:
15 & 10 == 10
31 | 128 == 159
63 | 0 == 63
~209 == 46 (для беззнаковых однобайтных чисел!)
202 ^ 75 == 129

Слайд 7

Работа с отдельными битами числа

Задание: Инвертировать пятый и шестой биты младшего байта

Работа с отдельными битами числа Задание: Инвертировать пятый и шестой биты младшего
числа X.
1 способ
srand(time(NULL)); int X = rand(); int X_56 = X << 26 >> 30; // А сдвиги можно было бы заменить на умножения в цикле X -= (X_56 << 5); // И эти сдвиги тоже switch (X_56) { case 0: X_56 = 3; break; case 1: X_56 = 2; break; case 2: X_56 = 1; break; default: X_56 = 0; break;
}
X += X_56;

Слайд 8

Работа с отдельными битами числа

Задание: Инвертировать пятый и шестой биты младшего байта

Работа с отдельными битами числа Задание: Инвертировать пятый и шестой биты младшего
числа X.
2 способ
srand(time(NULL)); int X = rand(); int X_56 = ~X << 26 >> 30; X -= (X & 96); // 9610 = 011000002 X_56 <<= 5; X += X_56;

Слайд 9

Работа с отдельными битами числа

Задание: Инвертировать пятый и шестой биты младшего байта

Работа с отдельными битами числа Задание: Инвертировать пятый и шестой биты младшего
числа X.
3 способ
srand(time(NULL)); int X = rand(); X ^= 96; //9610 = 011000002

Слайд 10

Работа с отдельными битами числа

Задание: выполнить циклический сдвиг числа x вправо на

Работа с отдельными битами числа Задание: выполнить циклический сдвиг числа x вправо
2.
1 способ
srand(time(NULL)); int x = rand(), y = 0; for (int i = 0; i < 2; ++i) { y = x % 2; x = (x / 2) + (y * 2* 1024 * 1024 * 1024); }

Слайд 11

Работа с отдельными битами числа

Задание: выполнить циклический сдвиг числа x вправо на

Работа с отдельными битами числа Задание: выполнить циклический сдвиг числа x вправо
2.
2 способ
srand(time(NULL)); int x = rand(), y = 0; for (int i = 0; i < 2; ++i) { y = x & 1; //110 = 000000012 x = (x >> 1) + (y << 31); }

Слайд 12

Работа с отдельными битами числа

Задание: выполнить циклический сдвиг числа x вправо на

Работа с отдельными битами числа Задание: выполнить циклический сдвиг числа x вправо
2.
3 способ
srand(time(NULL)); int x = rand(); int y = x % 4; // А лучше так: y = x & 3; y <<= 30; x >>= 2; x += y;

Слайд 13

Задание 1

Задача:
Напишите программу на языке C, которая инвертирует второй по старшинству байт

Задание 1 Задача: Напишите программу на языке C, которая инвертирует второй по
случайного числа X типа int.

Слайд 14

Задание 2

Задача:
Напишите программу на языке C, которая меняет местами нулевой и третий,

Задание 2 Задача: Напишите программу на языке C, которая меняет местами нулевой
а также первый и второй байты случайного числа X типа int.

Слайд 15

Задание 3

Задача:
Напишите программу на языке C, которая обнуляет биты случайного числа X

Задание 3 Задача: Напишите программу на языке C, которая обнуляет биты случайного
типа int с номерами 0, 5, 12 и 14.

Слайд 16

Задание 4

Задача:
Напишите программу на языке C, которая заносит в биты случайного числа

Задание 4 Задача: Напишите программу на языке C, которая заносит в биты
X типа int с номерами 3, 8 и 10 значение 1.

Слайд 17

Задание 5

Задача:
Напишите программу на языке C, которая выполняет циклический сдвиг влево на

Задание 5 Задача: Напишите программу на языке C, которая выполняет циклический сдвиг
3 первого байта случайного числа X типа int (нумерация байтов начинается с нуля!).

Слайд 18

Задание 6

Задача:
Напишите программу на языке C, которая выполняет проверку значения седьмого бита

Задание 6 Задача: Напишите программу на языке C, которая выполняет проверку значения
случайного числа X типа int (нумерация битов начинается с нуля!). Если этот бит равен 0, инвертировать значение 12-го бита.

Слайд 19

Задание 7

Задача:
Напишите программу на языке C, которая получает случайное число X типа

Задание 7 Задача: Напишите программу на языке C, которая получает случайное число
int. В этом числе седьмой бит переместить в одиннадцатый, а третий и шестой поменять местами. Нумерация битов начинается с нуля.

Слайд 20

Ассемблер. NASM

Ассемблер. NASM

Слайд 21

Установка NASM

Установка NASM:
Проверка наличия NASM в ОС: nasm –h (или просто nasm)
1

Установка NASM Установка NASM: Проверка наличия NASM в ОС: nasm –h (или
способ установки NASM:
Терминал -> apt install nasm
Ввод пароля!

Слайд 22

Установка NASM

Установка NASM:
2 способ установки NASM:
Загрузка архива, содержащего NASM
Разархивировать (например, в

Установка NASM Установка NASM: 2 способ установки NASM: Загрузка архива, содержащего NASM
папку nasm_cat), открыть файл INSTALL

Слайд 23

Установка NASM

Установка NASM:
.
.
Терминал -> cd ./nasm_cat
sh autogen.sh (может не понадобиться)
sh configure
make
Или: make

Установка NASM Установка NASM: . . Терминал -> cd ./nasm_cat sh autogen.sh
everything (более полное построение)
Или: make strip (игнорирование необязательных данных)
Переход в root (команда su или sudo)
Переход обратно в папку с nasm
make install
NASM установлен!

Слайд 24

Установка NASM

Установка NASM

Слайд 25

Написание программ NASM
Написание программ:
Любой текстовый редактор (стандартный или любой другой)
Расширение (суффикс) файла

Написание программ NASM Написание программ: Любой текстовый редактор (стандартный или любой другой)
- *.asm

Слайд 26

Компиляция NASM

Компиляция:
Проходит в 2 этапа:
Ассемблирование На выходе – объектный файл file.o
Сборка (компановка) Компановка выполняется

Компиляция NASM Компиляция: Проходит в 2 этапа: Ассемблирование На выходе – объектный
из одного или нескольких объектных модулей. На выходе – исполняемый файл программы (например, prog). В Linux часто используется стандартный компановщик ld.

Слайд 27

Ассемблирование

Ассемблирование:
nasm -f <имя_файла.asm> [-o <объектный_файл>]
Формат выходных файлов:
elf
bin
obj
coff
… (их много)
Часто используется формат

Ассемблирование Ассемблирование: nasm -f [-o ] Формат выходных файлов: elf bin obj
elf

Слайд 28

Ассемблирование

Пример: nasm -f elf prog_nasm.asm Результат: prog_nasm.o
Или: nasm -f elf prog_nasm.asm -o abc.o Результат:

Ассемблирование Пример: nasm -f elf prog_nasm.asm Результат: prog_nasm.o Или: nasm -f elf
abc.o

Слайд 29

Ассемблирование
nasm -f elf prog_nasm2.asm

Ассемблирование nasm -f elf prog_nasm2.asm

Слайд 30

Компановка
Компановщик – ld ([эль-дэ]).
ld prog_nasm2.o –o prog_nasm2

Компановка Компановщик – ld ([эль-дэ]). ld prog_nasm2.o –o prog_nasm2

Слайд 31

Компановка
Используемая ОС – Linux Ubuntu x64, поэтому выведено сообщение об ошибке

Компановка Используемая ОС – Linux Ubuntu x64, поэтому выведено сообщение об ошибке

Слайд 32

Компановка

Для 64-битных ОС:
ld –m elf_i386 prog_nasm2.o –o prog_nasm2

Компановка Для 64-битных ОС: ld –m elf_i386 prog_nasm2.o –o prog_nasm2

Слайд 33

Запуск программ NASM

Запуск:
./prog_nasm2

Запуск программ NASM Запуск: ./prog_nasm2

Слайд 34

Рекомендуемая литература

1. Расширенный ассемблер: NASM https://www.opennet.ru/docs/RUS/nasm/

Рекомендуемая литература 1. Расширенный ассемблер: NASM https://www.opennet.ru/docs/RUS/nasm/

Слайд 35

Рекомендуемая литература

2. А.В. Столяров. Программирование на языке ассемблера NASM для OS UNIX.

Рекомендуемая литература 2. А.В. Столяров. Программирование на языке ассемблера NASM для OS UNIX. 2011
2011
Имя файла: Информатика.-Занятие-5.pptx
Количество просмотров: 32
Количество скачиваний: 0