- •Типы данных ассемблера
- •2. Обозначение чисел и директивы определения данных
- •Системы счисления. Правила перевода
- •8. Принципы работы со стеком
- •9. Виды операндов
- •17. Команды передачи управления
- •18. Организация безусловного перехода
- •19. Процедуры. Диапазон действия процедур
- •21. Команды сравнения
- •20. Условные переходы
Системы счисления. Правила перевода
Перевод чисел из одной системы в другую.
В десятичную систему счисления:
В двоичную и остальные системы счисления.
Перевод целой части:
Разделить А/2. Получим q + остаток α
Если
,
то принять его за новое делимое и обвести
αВернуться к шагу 1
Если q=0, то алгоритм прекращается, выписать остатки в порядке обратном их получения.
Перевод из двоичной системы: 0001 0101 1011 = 337
Перевод дробных чисел:
Алгоритм перевода десятичной дроби в другую систему счисления:
Выделить целую часть и выполнить ее перевод по требуемой системе счисления по известному алгоритму
Выделить дробную часть и умножить ее на основание выбранной новой системы счисления
Полученные после умножения дробной части числа, выделить целую часть и принять ее в качестве значения первого после запятой разряда в новой системе счисления
Если дробная часть получается после умножения равной нулю, процесс перевода прекращается.
Процесс также можно прекратить, если достигнута необходимая точность вычисления.
Перевод чисел со знаком.
Отличительным признаком числа со знаком является особая приставка старшего бита представляющего числа.
Для отрицательных чисел:
Старший бит 0 – число положительное
Старший бит 1 – число отрицательное, а это предполагает, что оно записано в дополнительном коде.
Пример:
А= -185 = 11111111|01000111; |185| = 10111001
Алгоритм:
Выделяется модуль числа
Инвертируется каждый бит двоичного числа и прибавляется 1
Обратный перевод из дополнительного кода в основной:
Выполнить инвертирование битов двоичного дополнения
К полученному двоичному числу прибавить 1.
8. Принципы работы со стеком
Стек – область памяти, специально выделяемая для временного хранения данных программы. Для работы со стеком предназначены три регистра:
SS – регистр сегмента стека;
SP – регистр указателя стека;
BP – регистр указателя базы кадра стека
Стеков может быть несколько. В постоянный момент времени доступен только один стек, адрес сегмента которого содержится в регистре SS. Для обращения к другому стеку в регистр SS можно загрузить его адрес.
Особенности работы со стеком.
Запись и чтение данных в стеке осуществляется по принципу LIFO
-
0000.0000
Сегмент кода
Сегмент данных
Сегмент стека
Вершина стека
SS:SP
Дно стека
SS:ffff
По мере записи в стек области данных, он растет в сторону младших адресов. При использовании регистров SP и BP для адресации памяти, Assembler автоматически считает, что содержащиеся в нем значения представляют собой смещение относительно сегментного регистра SS. Регистр SP указывает на вершину стека, т.е. содержит смещение, по которому в стек был записан последний элемент. При записи элементов в стек, процессор сначала уменьшает значение SP, а затем записывает элемент по адресу новой вершины. При извлечении данных из стека процессор копирует элемент, расположенный по адресу вершины, затем увеличивает значение регистра указателя стека SP.
Для доступа к элементам внутри стека используют регистр BP.
Для организации работы со стеком существуют специальные команды записи и чтения:
push <источник> (ax)
Алгоритм работы:
Уменьшает SP на 2
Значение источника записывается по адресу, указываемого парой SS:SP
2. pop <приемник>
Выполняет запись из вершин стека по адресу, указанного приемником.
Алгоритм работы:
Запись содержимого в вершину стека по месту указываемого приемником
Увеличение SP на 2
Основные виды операций, использующие стек: вызов подпрограмм, временное сохранение значений регистров, определение локальных переменных в процедуре
