Вы находитесь на странице: 1из 38

1. Организация ассемблерной программы.

2. Директивы определения данных и константы


3. Устройство процессора IA-32.

Пользовательская (прикладная) программа, написанная для платформ IA-


32/Linux или IA-32/Windows, рассчитана на выполнение в машине,
реализующей принципы фон Неймана
Принцип фон Неймана Команды и данные хранятся в одной и той же памяти и внешне в
памяти неразличимы. Распознать их можно только по способу использования; то есть
одно и то же значение в ячейке памяти может использоваться и как данные, и как
команда, и как адрес в зависимости лишь от способа обращения к нему.

Машинные команды и данные хранятся совместно в оперативной памяти, а


процессор в автоматическом режиме последовательно читает из памяти
команды и исполняет их. Оперативная память разбита на ячейки размером
по 8 двоичных разрядов (1 байт), ячейки пронумерованы числами от 0 до
2^32 -1 (номер ячейки называют ее адресом).

В структуре IA-32 можно выделить шесть основных блоков,


работающих параллельно: блок интерфейса с магистралью, блок
предварительной выборки команд, блок декодирования команд,
исполнительный блок, блок управления сегментами и блок страничной
трансляции.
Блок интерфейса с магистралью содержит драйвер адреса, схемы
управления размером адреса и конвейером, мультиплексор,
приемопередатчики и др. Этот блок обеспечивает интерфейс между
процессором и его окружением. Он принимает внутренние запросы для
выборки команд от блока предварительной выборки команд и для обмена
данными с исполнительным блоком и устанавливает приоритет этих
запросов. Одновременно он генерирует или обрабатывает сигналы для
исполнения текущего цикла магистрали. К ним относятся сигналы адреса,
данных и управления для обращения к внешней памяти и устройствам ввода-
вывода. При помощи схемы арбитра запросов блок управляет интерфейсом с
внешними задатчиками магистрали и сопроцессорами.
4. Регистры общего назначения
5. Пересылка данных. Арифметические операции.
6. Средства вводы/вывода
7. Арифметика и целочисленные типы данных.
8. Интерпретация арифметических инструкций
9. Указатели и адресная арифметика.
10. Взятие адреса и разыменование
11. Поразрядные операции
Набор команд IA-32 поддерживает поразрядные команды, работающие с
векторами битов: NOT, AND, XOR, OR. Помимо получения результата,
команды формируют флаги, наибольший интерес среди которых обычно
представляет флаг ZF. Приведенные команды естественным образом
реализуют побитовые логические операции языка Си над целыми числами,
тогда как работу с логическими величинами необходимо реализовывать
другими способами.
Задача №4. Даны четыре статические переменные целого типа a, b, c, d. Написать фрагмент кода
на языке ассемблера, вычисляющий значение переменной a. static int *p[10]; static int a, b, c, d;

a = ~(a & b) | ((~c & d) | (c & ~d));

12. Безусловная и условная передача управления


13. Операции над булевыми переменными
14. Реализация ветвления и цикла
15. Короткая логика

16. Компактное кодирование циклов


17. Многомерный массив
18. Массив указателей. Связь с двухмерным массивом

Указатели на многомерные массивы в языке СИ — это массивы массивов, т.е. такие


массивы, элементами которых являются массивы. При объявлении таких массивов в
памяти компьютера создается несколько различных объектов. Например при выполнении
объявления двумерного массива int arr2[4][3] в памяти выделяется участок для хранения
значения переменной arr, которая является указателем на массив из четырех указателей.
Для этого массива из четырех указателей тоже выделяется память. Каждый из этих
четырех указателей содержит адрес массива из трех элементов типа int, и,
следовательно, в памяти компьютера выделяется четыре участка для хранения четырех
массивов чисел типа int, каждый из которых состоит из трех элементов.
19. Выравнивание данных в памяти
При размещении в памяти массивов все элементы расположены друг за
другом, без промежутков. Структуры объединяют в себе поля произвольных
типов, размещаемых в памяти в том же порядке, в каком они были
объявлены в исходном Си-коде. Размещение неоднородных (различной
длины) полей структуры возможно аналогичным образом, без промежутков,
но особенности работы аппаратуры будут проявляться в задержках чтения и
записи невыровненных в памяти данных. Современные компиляторы
используют байты-заполнители, чтобы поля структур всегда размещались в
памяти на адресах, кратных некоторым числам, в зависимости от типов
полей.

Правила выравнивания полей являются частью ABI – двоичного (бинарного)


интерфейса приложений. В ABI входят соглашения между программами,
библиотеками и операционной системой, обеспечивающих взаимодействие
этих компонентов на низком уровне на данной платформе. В частности, это
дает возможность объединять в единую работающую программу модули,
независимо друг от друга скомпилированные, в том числе различными
компиляторами, и даже изначально написанные на различных языках
программирования.
20. Размещение полей структур и объединений в памяти
21. Работа с полями
При работе с массивом доступ к элементу требовал вычисления адреса в
виде база + смещение, где смещение = масштаб * индекс. В случае со
структурой смещение определятся при построении карты, так, как это было
показано в примерах ранее. Для всех полей объединения смещение
нулевое.
22. Битовые поля
Если для целочисленного поля задан битовый размер, способ его
размещения стандартом языка Си не специфицирован и зависит от
реализации компилятора. Однако в большинстве случаев компиляторы
стараются «запаковать» битовые поля, уменьшив общий размер структуры.
23.Организация вызова функций. Аппаратный стек
24.Соглашение вызова cdecl

Вам также может понравиться