- •Лабораторная работа №1 Компилятор fasm Арифметические операции.
- •Теоретическая часть
- •1. Представление данных в компьютерах
- •1.1. Двоичная система счисления
- •1.2. Биты, байты и слова
- •1.3. Шестнадцатеричная система счисления
- •1.4. Числа со знаком
- •1.5. Логические операции
- •1.6. Коды символов
- •1.7. Организация памяти
- •2. Процессоры Intel в реальном режиме
- •2.1. Регистры процессора
- •2.1.1. Регистры общего назначения
- •2.1.2. Сегментные регистры
- •2.1.3. Стек
- •2.1.4. Регистр флагов
- •2.2.4. Косвенная адресация
- •2.2.5. Адресация по базе со сдвигом
- •2.2.6. Косвенная адресация с масштабированием
- •2.2.7. Адресация по базе с индексированием
- •2.2.8. Адресация по базе с индексированием и масштабированием
- •2.3. Основные непривилегированные команды
- •2.3.2. Двоичная арифметика
- •3. Компилятор fasm
- •Практическая часть
- •Задания для самостоятельной работы
- •Индивидуальные варианты
Практическая часть
Пример №1.
Найти значение выражения
, где a=2, b=3.
Решение:
Результат работы программы:
Разберем задачу более подробно.
-
помещаем данные, находящиеся в регистрах
eax, ebx в
стек.
-
пересылает значение 2 в регистр ebx.
- производиться
сложение и результат помещается в
регистр ebx.
- пересылает
значение 2 в регистр eax.
- производиться
умножение и результат помещается в
регистр eax.
-
конвертирует двойное слово в учетверенное
слово.
- производит
целочисленное деление «регистра» eax
на ebx.
-
считывает данные из стека.
Пример №2.
Напишем программу, вычисляющую значение
выражения
,
при a=17,b=1.
Результат работы программы:
Задания для самостоятельной работы
Ознакомьтесь с теоретическим материалом.
Разберите все примеры из практической части лабораторной работы, т.е. наберите и просмотрите их работу.
Выполните индивидуальные задания.
Индивидуальные варианты
1. Найдите значение выражения (по 2 примера)
Номер варианта |
Условие |
1. |
|
2. |
|
3. |
|
4. |
|
5. |
|
6. |
|
7. |
|
8. |
|
9. |
|
10. |
|
1. |
|
2. |
|
3. |
|
4. |
|
5. |
|
6. |
|
7. |
|
8. |
|
9. |
|
10. |
|
Приложение №1.
Директивы резервирования и инициализации данных, а также информация о возможных типах и диапазонах значений, которые можно описывать или задавать с их помощью.
DB — резервирование памяти для данных размером 1 байт. Директивой DB можно задавать следующие значения:
выражение или константу, принимающую значение из диапазона -128...+127(для чисел со знаком) или 0...255 (для чисел без знака);
8-разрядное относительное выражение, использующее операции HIGH и LOW;
символьную строку из одного или более символов, которая заключается в кавычки (в этом случае определяется столько байтов, сколько символов в строке).
DW — резервирование памяти для данных размером два байта. Директивой DW
можно задавать следующие значения:
выражение или константу, принимающую значение из диапазона 32768...32767 (для чисел со знаком) или 0...65535 (для чисел без знака);
выражение, занимающее 16 или менее битов, в качестве которого может выступать смещение в 16-битовом сегменте или адрес сегмента;
1-или 2-байтовая строка, заключенная в кавычки.
DD — резервирование памяти для данных размером четыре байта. Директивой DD можно задавать следующие значения:
выражение или константу, принимающую значение из диапазона -32768...+32 767 (для чисел со знаком и процессора i8086), 0...65 535 (для чисел без знака и процессора 18086), -2 147 483 64S...+2 147 483 647 (для чисел со знаком и процессора 1386 и выше) или 0...4 294 967 295 (для чисел без знака и процессора 1386 и выше);
относительное или адресное выражение, состоящее из 16-разрядного адреса сегмента и 16-разрядного смещения;
строку длиной до 4 символов, заключенную в кавычки.
DF и DP — резервирование памяти для данных размером 6 байтов. Директивами DF и DP можно задавать следующие значения:
выражение или константу, принимающую значение из диапазона
-32 768...+32 767 (для чисел со знаком и процессора 18086), 0...65 535 (для чисел без знака и процессора 18086), -2 147 483 64S...+2 147 483 647 (для чисел со знаком и процессора 1386 и выше) или 0...4 294 967 295 (для чисел без знака и процессора 1386 и выше);
относительное или адресное выражение, состоящее из 32 или менее битов (для i80386) или 16 или менее битов (для первых моделей процессоров Intel);
адресное выражение, состоящее из 16-разрядного сегмента и 32-разрядного
смещения;
константу со знаком из диапазона -247...247 - 1;
константу без знака из диапазона 0...248 - 1;
строку длиной до 6 байтов, заключенную в кавычки.
DQ — резервирование памяти для данных размером 8 байтов. Директивой DQ можно задавать следующие значения:
выражение или константу, принимающую значение из диапазона -32 768...+32 767 (для чисел со знаком и процессора 18086), 0...65 535 (для чисел без знака и процессора 18086), -2 147 483 64S...+2 147 483 647 (для чисел со знаком и процессора 1386 и выше) или 0...4 294 967 295 (для чисел без знака и процессора 1386 и выше);
относительное или адресное выражение, состоящее из 32 или менее битов (для i80386) или 16 или менее битов (для первых моделей процессоров Intel);
константу со знаком из диапазона -263...263~ 1;
константу без знака из диапазона 0...264 - 1;
строку длиной до 8 байтов, заключенную в кавычки.
DT — резервирование памяти для данных размером 10 байтов. Директивой DT можно задавать следующие значения:
выражение или константу, принимающую значение из диапазона -32 768...+32 767 (для чисел со знаком и процессора i8086), 0...65 535 (для чисел без знака и процессора 18086), -2 147 483 64S...+2 147 483 647 (для чисел со знаком и процессора 1386 и выше) или 0...4 294 967 295 (для чисел без знака и процессора 1386 и выше);
относительное или адресное выражение, состоящее из 32 или менее битов (для i80386) или 16 или менее битов (для первых моделей);
адресное выражение, состоящее из 16-разрядного сегмента и 32-разрядного смещения;
константу со знаком из диапазона -279...279 - 1;
константу без знака из диапазона 0...280 - 1;
строку длиной до 10 байтов, заключенную в кавычки;
упакованную десятичную константу в диапазоне 0...99 999 999 999 999 999 999.
