Лекция 5. Язык программирования - ассемблер. Логические основы компьютера
Булева алгебра Виды логических операций Для логических величин обычно используются три операции: Конъюнкция – логическое умножение (И) – and, &,. Дизъюнкция – логическое сложение (ИЛИ) – or, |, V. Унарная операция – логическое отрицание (НЕ) – not, ¬. V
Основные аксиомы Булевой алгеброй называется непустое множество A с двумя бинарными операциями - конъюнкцией и дизъюнкцией, а также унарной операцией и двумя выделенными элементами: 0 (или Ложь) и 1 (или Истина) такими, что для всех a, b и c из множества A верны следующие аксиомы:
Основные свойства Для всех a и b из множества A верны следующие равенства:
Основные свойства Самая простая нетривиальная булева алгебра содержит всего два элемента, 0 и 1, а действия в ней определяются следующей таблицей: Конъюнкция ДизъюнкцияУнарная операция Таблицы истинности:
Логические элементы Вентиль - это устройство, которое выдает результат булевой операции от введенных в него данных (сигналов). Простейший вентиль представляет собой транзисторный инвертор, который преобразует низкое напряжение в высокое или наоборот. Это можно представить как преобразование логического нуля в логическую единицу или наоборот. Т.е. получаем вентиль НЕ. Соединив пару транзисторов различным способом, получают вентили ИЛИ- НЕ и И-НЕ. Эти вентили принимают уже не один, а два и более входных сигнала. Выходной сигнал всегда один и зависит (выдает высокое или низкое напряжение) от входных сигналов. В случае вентиля ИЛИ-НЕ получить высокое напряжение (логическую единицу) можно только при условии низкого напряжении на всех входах. В случае вентиля И-НЕ логическая единица получается, если все входные сигналы или хотя бы один из них будут нулевыми. Транзистору требуется очень мало времени для переключения из одного состояния в другое (время переключения оценивается в наносекундах). И в этом одно из существенных преимуществ схем, построенных на их основе.
Логические элементы Другие логические элементы: Сумматор Полусумматор Триггер Триггеры и сумматоры – это относительно сложные устройства, состоящие из более простых элементов – вентилей. Триггер способен хранить один двоичный разряд, за счет того, что может находиться в двух устойчивых состояниях. В основном триггеры используется в регистрах процессора. Сумматоры широко используются в арифметико-логических устройствах (АЛУ) процессора и выполняют суммирование двоичных разрядов.
Битовые операции 1. Переведем пару произвольных целых чисел до 256 (один байт) в двоичное представление. 2. Расположим биты второго числа под соответствующими битами первого и выполним обычные логические операции к цифрам, стоящим в одинаковых разрядах первого и второго числа. 3. Переведем результат в десятичную систему счисления. 4. В результате побитовых логических операций получилось следующее:
Назначение побитовых логических операций Проверка битов Другими словами, x and 255 = x. Обнуление битов Чтобы обнулить какой-либо бит числа, нужно его логически умножить на 0. Установка битов в единицу Т.е. чтобы обнулить четвертый с конца бит числа x, надо его логически умножить на 247 или на ( ). Для установки битов в единицу используется побитовая логическая операция ИЛИ. Чтобы установить второй по старшинству бит числа x в единицу, надо его логически сложить с 64 (x or 64).
Assembler язык программирования низкого уровня, представляющий собой формат записи машинных команд, удобный для восприятия человеком. Команды языка ассемблера один в один соответствуют командам процессора и, фактически, представляют собой удобную символьную форму записи (мнемокод) команд и их аргументов. Также язык ассемблера обеспечивает базовые программные абстракции: связывание частей программы и данных через метки с символьными именами и директивы. Язык программирования АССЕМБЛЕР
Представление данных в компьютере байт Машинное слово Двойное машинное слово - 32 бита (4 байта) Директивы ассемблера позволяют включать в программу блоки данных (описанные явно или считанные из файла); повторить определённый фрагмент указанное число раз; компилировать фрагмент по условию; задавать адрес исполнения фрагмента, менять значения меток в процессе компиляции; использовать макроопределения с параметрами и др. Каждая модель процессора, в принципе, имеет свой набор команд и соответствующий ему язык (или диалект) ассемблера.
Десятичная ДвоичнаяШестнадца -теричная A B C D E F Системы счисления В позиционных системах счисления, к которым относятся и широко распространенная десятичная система, числовое значение цифры зависит от ее местоположения или позиции в последовательности цифр изображающих число. Единственной, дошедшей до нашего времени, системой, не относящейся к позиционной системе счисления, является римская система счисления. Любое число в позиционной системе счисления изображается последовательностью цифр: Х = а n-1 a n-2 …a 1 a 0, где a i є{0,1,…,q-1}, q – основание системы счисления.
Перевод чисел из одной системы счисления в другую
Регистры общего назначения Аккумулятор Базовый регистр Регистр-счетчик Регистр данных Индекс источника Индекс приемника Указатель стека Указатель базы
Общепринятого стандарта для синтаксиса языков ассемблера не существует. Однако, существуют стандарты де- факто традиционные подходы, которых придерживаются большинство разработчиков языков ассемблера. Основными такими стандартами являются Intel-синтаксис и AT&T-синтаксис. Общий формат записи инструкций одинаков для обоих стандартов: `[метка:] опкод [операнды] [;комментарий]` Опкод непосредственно мнемоника инструкции процессору. К ней могут быть добавлены префиксы (повторения, изменения типа адресации и пр.). В качестве операндов могут выступать константы, названия регистров, адреса в оперативной памяти и пр.. Различия между стандартами Intel и AT&T касаются, в основном, порядка перечисления операндов и их синтаксиса при различных методах адресации. Синтаксис языка ассемблер