Шпаргалка: Ответы на вопросы по курсу “Системное программирование”
antiten EQU –10
bitmask EQU 10001001b
video EQU 0A000h
и литералы – символьные
sEQU ‘stringdata'
Метки – служат для присваивания имени команде языка ассемблера. Предназначены для организации переходов в программе. Представляют собой символьные имена, заканчивающиеся на :. Глобальные метки действуют во всей программе. Локальные – только внутри подпрограммы.
Директивы условной трансляции предназначены для обозначения блока программного кода, который включается в объектный файл только тогда, когда выполняется заданное условие. Cинтаксис:
Ifxxx
;операторы, помещаемые в файл при выполнении условия
ELSE
;операторы, помещаемые в файл, если условие не выполнено
ENDIF
Существуют также дрективы ELSEIF, которые позволяют создавать множественные конструкции IF.
Компилятор ассемблер-программ, редактор связей (загрузчик).
Компилятор с ассемблера обрабатывает исходный код, преобразуя его в код команд на машинном языке. Результат его работы называется объектным кодом. В объектном коде необязательно находится весь код программы – в нем могут быть т.н. внешние ссылки на библиотечные процедуры или процедуры в других модулях, а также на данные.
Следующий шаг – создание исполняемой программы. Сборкой всех частей программы занимается редактор связей. Он размещает все модули в памяти и настраивает адресные константы внутри них так, чтобы они соответствовали фактическому местоположению в памяти.
Редакторы бывают 3 разновидностей.
Загрузчик – загружает объектный модуль и передает управление на точку входа программы.
Компоновщик – формирует исполняемый файл, точно соответствующий образу программы в памяти, привязывая его к абсолютным адресам.
Компоновщик, генерирующий псевдоперемещаемый код – записывает в исполняемый файл таблицу перемещений (relocationtable), где содержатся данные о ячейке внутри кода, которая зависит от местоположения в памяти. Такой исполняемый файл перед запуском программы требует настройки. Этим занимается операционная система, в формате которой создается исполняемый модуль.
Основная память ЭВМ. Адресация, адресное пространство.
Число микросхем памяти, физически присутствующих в компьютере, определяет объем памяти, которую можно использовать для программ и данных. Это число может меняться от машины к машине. Объем памяти обычно можно наращивать с помощью плат расширения, вставляемых в специальные разъемы. Для процессора память - это не более чем несколько тысяч 8-разрядных ячеек, каждая из которых имеет уникальный адрес.
Говорят обычно не о физическом объеме памяти, а об адресуемой памяти. 8086 может адресоваться к 1024 К, то есть к 1048576 байтам памяти. Другими словами, это - максимальное количество различных адресов и, следовательно, максимальное количество байт данных, к которым может обратиться процессор.
Обращение к байту памяти производится с помощью 20-разрядного адреса. В схеме использования памяти процессором 8086 адреса имеют "ширину" 20 бит, поскольку они передаются по 20- разрядной шине адреса. Обычно адреса представляются в шестнадцатеричной системе исчисления. Таким образом, допустимый диапазон адресов памяти - от ООООО до FFFFF в шестнадцатеричной системе исчисления. При рассмотрении 1024 Кбайтного адресного пространства PC его делят на 16 блоков по 64 Кбайт и обозначают каждый из этих блоков шестнадцатеричной цифрой, совпадающей со старшей цифрой адреса. Например, первые 64 Кбайт памяти - блок О, адреса байтов этого блока от ООООО до OFFFF, последние 64 Кбайт - блок F, адреса байтов этого блока от FOOOO до FFFFF.
Структура основной памяти, адресуемой 8086
F000 | ПЗУ: BIOS, ROM-BASIC, диагностика |
E000 | Расширения ПЗУ |
D000 | Расширения BIOS |
C000 | Расширения BIOS |
B000 | Видеопамять |
A000 | Видеопамять |
9000 | ОЗУ |
8000 | ОЗУ |
7000 | ОЗУ |
6000 | ОЗУ |
5000 | ОЗУ |
4000 | ОЗУ |
3000 | ОЗУ |
2000 | ОЗУ |
1000 | ОЗУ |
0000 | ОЗУ; обычно здесь ПО ОС. |
Теоретически, любая область памяти может представлять собой либо неизменяемое ПЗУ, либо ОЗУ. Однако принято первые десять блоков (блоки с нулевого по девятый общим объемом 640 Кбайт) заполнять оперативной памятью. Оперативная память в PC устанавливается начиная с блока О и последовательно, без пропусков, наращивается до блока 9 включительно. Если не все десять блоков заполнены, то программы не должны использовать адреса несуществующей памяти. Обращение по этим адресам может вызывать различные последствия в зависимости от модели машины, однако обычно эта ошибка никак не обнаруживается и программа продолжает работу.
Общая структура машинных команд, адресность. Способы адресации операндов. Расслоение памяти, выравнивание, кэш-память.
Общая структура машинных команд.
Операнды, которые используются в операторах ассемблера, могут быть регистром (г), адресом памяти (mem), непосредственным значением, задаваемым прямо в операторе (imm), сегментным регистром (sr). В связи с этим существуют различные форматы одних и тех же команд:
· первый и второй операнды - регистры. Результат помещается по адресу первого операнда. Могут использоваться все регистры общего назначения.
· первый операнд - регистр, второй - адрес памяти. Результат помещается в регистр, указанный в операторе, например: