epd629
.pdfМинистерство образования и науки Российской Федерации Федеральное государственное бюджетное образовательное учреждение высшего профессионального образования «Сибирская государственная автомобильно-дорожная академия (СибАДИ)»
Л. Е. Олейник
ЯЗЫКИ
ПРОГРАММИРОВАНИЯ
Учебное пособие
Часть 3
СДВИГОВЫЕ ОПЕРАЦИИ. ДАННЫЕ СО ЗНАКОМ И БЕЗ ЗНАКА. ВВОД-ВЫВОД НА ДИСК
Омск
СибАДИ
2012
ББК 32.973.2 УДК 681.3.06 О 53
Рецензенты:
д-р физ.-мат. наук, проф. А.К. Гуц (ОмГУ) канд. техн. наук Д.Н. Лавров (ОмГУ)
д-р техн. наук, доц. В.Н.Задорожный (ОмГТУ)
Работа одобрена редакционно-издательским советом академии в качестве учебного пособия.
Олейник, Л.Е.
О 53 Языки программирования : учебное пособие: в 15-ти ч. Часть 3 : Сдвиговые операции. Данные со знаком и без знака. Ввод-вывод на диск /
Л. Е. Олейник. Омск : СибАДИ, 2012.– 120 с.
Учебное пособие является третьей частью комплекта пособий из 15-ти частей по курсу «Языки программирования», изучаемому в ФГБОУ ВПО «СибАДИ» по направлению подготовки 230100.62 «Информатика и вычислительная техника», профиль «Автоматизированные системы обработки информации и управления».
Предназначается для студентов очной формы обучения (специалист, бакалавр) при выполнении работ по дисциплинам «Электронные вычислительные машины и периферийные устройства», «Системное программное обеспечение», «Системы реального времени», «Языки программирования» в компьютерных классах и при выполнении индивидуальных заданий на самостоятельную работу; преподавателем при подготовке и проведении работ в компьютерных классе.
Может использоваться желающими самостоятельно изучить программирование на ассемблере.
Табл. 19. Ил.1. Библиогр.: 3 назв.
2
© ФГБОУ ВПО «СибАДИ», 2012
3
|
ОГЛАВЛЕНИЕ |
|
ВВЕДЕНИЕ........................................................................................................................ |
4 |
|
1. |
ЗАДАНИЕ НА ПРОГРАММИРОВАНИЕ (ОБЩАЯ ЧАСТЬ) ....................................... |
7 |
2. |
РАЗЛИЧИЯ МЕЖДУ ПРОГРАММАМИ В EXE- И COM-ФАЙЛАХ......................... |
13 |
3. |
СДВИГИ И ЦИКЛИЧЕСКИЕ СДВИГИ....................................................................... |
20 |
4. |
ПРОГРАММИРОВАНИЕ ОБРАБОТКИ ДИСКОВЫХ ФАЙЛОВ.............................. |
24 |
5. |
АРИФМЕТИЧЕСКИЕ ОПЕРАЦИИ НАД ЦЕЛЫМИ ДВОИЧНЫМИ ЧИСЛАМИ |
|
СО ЗНАКОМ...................................................................................................................... |
40 |
|
6. |
ДОПОЛНИТЕЛЬНЫЕ СВЕДЕНИЯ.............................................................................. |
46 |
7. |
ТИПИЧНЫЕ ОШИБКИ ПРИ ВЫПОЛНЕНИИ РАБОТЫ........................................... |
49 |
ЗАКЛЮЧЕНИЕ………………………………………………………………………………. |
||
Приложение 1. ПРИМЕРЫ (ТЕКСТЫ) ПРОГРАММ...................................................... |
59 |
|
Приложение 2. Пример работы №3................................................................................... |
69 |
|
Приложение 3. Формулы (3-я работа)............................................................................. |
890 |
|
Приложение 4. Редактирование, ассемблирование и компоновка программы. |
..90 |
|
Приложение 5. Арифметические и логические операции в микропроцессорах |
|
|
МП8086 и МП80386…………………………….....………………………………..……..93 |
||
Приложение 6. Арифметические и логические операции в микропроцессорах |
|
|
МП8086 и МП80386 над числами со знаком…………………………………………..111 |
4
ВВЕДЕНИЕ
Учебное пособие включает описания лабораторных работ, выполняемых на языке низкого уровня (язык ассемблера для микропроцессоров 8086 и 80386) под управлением операционных систем MS-DOS, Windows 95 (или выше: Windows 98 или Windows 2000) и Linux.
Состоит из 15-ти частей, каждая из которых содержит:
-демонстрационные примеры, используемые преподавателем при проведении работы в компьютерном классе (могут также использоваться при самостоятельном изучении);
-сведения, необходимые для выполнения работы;
-задание на программирование (общая часть);
-формулы вычислений или тексты индивидуальных заданий;
-требования к программному средству, в т.ч. указания, для каких процессора и операционной системы (ОС) оно разрабатывается, какие директивы и команды применяются, для какого режима работы процессора (реального или защищенного), какого типа (EXEили COM-) они должны быть, сколько модулей и сегментов должны содержать и т.п.;
-описание наиболее часто встречающихся при выполнении работы ошибок программирования;
-детальные ссылки на литературу для более подробного изучения;
-примеры (тексты) программ, разработанные в соответствии с требованиями и содержащие поясняющие комментарии.
Программное обеспечение, используемое при выполнении работы в классе и индивидуального задания, приведено в прил.4
|
|
Таблица 1 |
|
|
|
Перечень частей |
|
|
|
|
|
№ |
Название части |
Рассматриваемые вопросы, тип программы, |
|
п/ |
|
количество модулей и операционная система |
|
п |
|
|
|
1 |
2 |
3 |
|
1 |
Определение данных. |
Арифметические операции сложения, |
|
|
Операции двоичной |
вычитания, умножения и деления (операции |
|
|
арифметики. Экранные |
двоичной арифметики; вычисление по формуле; |
|
|
операции |
определение данных; логика и организация |
|
|
|
программ - условные и безусловные переходы и |
|
|
|
циклы; ввод с клавиатуры и вывод на экран). |
|
|
|
EXE-программа (один модуль). ОС- MS-DOS |
|
|
|
5 |
|
|
|
Продолжение табл.1 |
|
1 |
2 |
3 |
|
2 |
Логические операции. |
Арифметические и логические операции (И, |
|
|
Условные и безусловные |
ИЛИ, НЕ, ИСКЛЮЧАЮЩЕЕ ИЛИ; вычисление |
|
|
переходы, организация |
по формуле; логика и организация программ – |
|
|
циклов, вызов процедур, |
вызов процедур near и far; использование стека; |
|
|
использование стека |
директивы extrn, public, global). EXE-программа |
|
|
|
(два модуля). ОС- MS-DOS |
|
3 |
Сдвиговые операции, |
Арифметические и логические операции и |
|
|
данные со знаком и без |
сдвиги; логика и организация программ – циклы |
|
|
знака. Ввод-вывод на |
и переходы; вызов процедур; использование |
|
|
диск |
стека; включаемые файлы; ввод-вывод на диск). |
|
|
|
СОМ-программа. ОС- MS-DOS |
|
4 |
Использование макросов |
Вычисление по формулам и сдвиги. EXE- |
|
|
и макрокоманд. |
программа (один модуль, использование |
|
|
Строковые команды и |
макросов и макрокоманд; строковые команды, |
|
|
команды манипуляции |
команды манипуляции флагами). ОС- MS-DOS |
|
|
флагами |
|
|
5 |
Использование условных |
Вычисление по формулам и сдвиги. EXE- |
|
|
операторов ассемблирова |
программа (один модуль, использование |
|
|
ния Директива equ |
макросов, макрокоманд и условных операторов |
|
|
|
ассемблирования; директива equ). ОС- MS-DOS |
|
6 |
Демонстрация и |
Демонстрация и опробование способов передачи |
|
|
опробование способов |
процедурам в модуле и между модулями: |
|
|
передачи параметров |
параметра(ов) и указателя – через регистр(ы), |
|
|
процедурам в модуле и |
общую ячейку, стек, в потоке кода. Передача |
|
|
между модулями |
фактических параметров макросам. Сохранение |
|
|
|
регистров в вызывающей и вызываемой |
|
|
|
процедурах. EXE-программа (два модуля; модели |
|
|
|
памяти – средняя и большая). ОС- MS-DOS |
|
7 |
Оптимизация программы |
Минимизация объема программы (объем |
|
|
|
оперативной памяти, занимаемой машинными |
|
|
|
командами, данными и стеком) либо времени |
|
|
|
выполнения программы. Использование таблицы |
|
|
|
переходов, команд и возможностей МП Intel |
|
|
|
80386. СОМили ЕХЕ-программа. ОС- MS-DOS |
|
8 |
Определение интервала |
Определение паузы (интервала времени) между |
|
|
между событиями. |
событиями. Обработка прерываний, команды in и |
|
|
Обработка прерываний, |
out. EXE-программа. ОС- MS-DOS |
|
|
команды in и out |
|
|
9 |
Вычисление по формуле |
Вычисление по формуле (определение данных; |
|
|
(операции двоичной |
логика и организация программ – условные и |
|
|
арифметики и логические |
безусловные переходы и циклы; вызов процедур; |
|
|
операции, сдвиги; ввод с |
ввод с клавиатуры и вывод на экран; |
|
|
клавиатуры и вывод |
использование стека). |
|
|
на экран). Графическое |
EXE-программа для МП Intel 80386. ОС - |
|
|
приложение для Windows |
Windows 95/98 и Windows NT. (Модель памяти – |
|
|
95/98 и Windows NT |
.flat). Режим работы - процессора защищенный |
|
|
|
6 |
|
|
|
Окончание табл.1 |
|
1 |
2 |
3 |
|
10 |
Смешанное |
Смешанное программирование (встроенный |
|
|
программирование |
ассемблер; вычисление по формуле: операции |
|
|
(связь с программами на |
двоичной арифметики и логические операции, |
|
|
языке Pascal; |
сдвиги; определение данных; логика и |
|
|
ассемблерные врезки в |
организация программ – условные и безусловные |
|
|
программу на Pascal’e) |
переходы и циклы; вызов процедур; ввод с |
|
|
|
клавиатуры и вывод на экран; использование |
|
|
|
стека). EXE-программа для МП Intel 8086 на |
|
|
|
языке Pascal с вставками на ассемблере. ОС - |
|
|
|
MS-DOS |
|
11 |
Смешанное програм- |
Смешанное программирование (ассемблер, |
|
|
мирование (связь с |
встроенный в С++; операции двоичной |
|
|
программами на языке |
арифметики и логические операции, определение |
|
|
C++; ассемблерные |
данных, переходы и циклы, вызов процедур; ввод |
|
|
врезки в программу на |
с клавиатуры и вывод на экран - средствами |
|
|
языке C++) |
языка С++; сдвиги – средствами ассемблера). |
|
|
|
Режим работы процессора реальный. EXE- |
|
|
|
программа для МП Intel 80386. ОС - MS-DOS |
|
12 |
Вычисление по формуле |
Вычисление по формулам. EXE-программа для |
|
|
(операции двоичной |
МП Intel 80386, ОС – Linux |
|
|
арифметики и |
|
|
|
логические операции, |
|
|
|
сдвиги; ввод с |
|
|
|
клавиатуры и вывод |
|
|
|
на экран) в Linux |
|
|
13 |
Резидентная программа |
Разработать резидентную программу или |
|
|
или драйвер для MS-DOS |
драйвер. ОС - MS-DOS |
|
14 |
Работа с дисковыми |
Одновременная работа снесколькимифайлами и |
|
|
файлами (прямой и |
несколькими областями DTA. (Назначение |
|
|
последовательный |
программы: 1) работа с файлами в базовой версии |
|
|
доступ) и несколькими |
MS-DOS – ввод данных, запись в файл (прямой и |
|
|
областями DTA |
последовательный доступ), чтение изфайла |
|
|
|
(прямой и последовательный доступ), |
|
|
|
одновременная работа с несколькими файлами; |
|
|
|
2) одновременная работа с несколькими областями |
|
|
|
DTA; 3)шифрование; 4) дешифрация). ЕХЕ- |
|
|
|
программа (модель памяти– компактная или |
|
|
|
большая). ОС- MS-DOS |
|
15 |
Дизассемблирование |
Восстановление текста программы по ее |
|
|
программ |
загрузочному модулю – COM или EXE. ОС - |
|
|
|
MS-DOS. Дизассемблер IDA Pro |
|
7
1.ЗАДАНИЕ НА ПРОГРАММИРОВАНИЕ (ОБЩАЯ ЧАСТЬ)
1.1.Составить СОМ-программу для МП Intel 8086 для вычисления по формулам, содержащим арифметические операции сложения, вычитания, умножения и деления и логические операции И, ИЛИ, ИСКЛЮЧАЮЩЕЕ ИЛИ, НЕ. Формулы вычислений – те, что реализовывались в работах № 1 и 2 (см. уч.пос., ч.1 и 2), и дополнительно – четыре типа операций сдвига.
Варианты используемых операций (сдвигов) |
Таблица 1.1 |
||||||
|
|
||||||
|
|
|
|
|
|
|
|
Тип сдвига |
|
Влево |
|
|
Вправо |
|
|
Логический |
байта |
слова |
двойного |
байта |
слова |
двойного |
|
|
(b) |
(w) |
слова (d) |
(b) |
(w) |
слова (d) |
|
Арифметический |
байта |
слова |
двойного |
байта |
слова |
двойного |
|
|
(b) |
(w) |
слова (d) |
(b) |
(w) |
слова (d) |
|
Циклический |
байта |
слова |
двойного |
байта |
слова |
двойного |
|
|
(b) |
(w) |
слова (d) |
(b) |
(w) |
слова (d) |
|
Циклический через |
байта |
слова |
двойного |
байта |
слова |
двойного |
|
флаг переноса |
(b) |
(w) |
слова (d) |
(b) |
(w) |
слова (d) |
|
1.2. Требования к программному средству, в т.ч. указания – для каких процессора и операционной системы оно разрабатывается, какие директивы и команды применяются и т.п., приведены в табл. 1.2.
Таблица 1.2
Полный текст задания
Ассемблер для микропроцессора Intel 8086
Операционная система MS-DOS [1, с.127 128]
Режим работы процессора реальный [1, с.20 60]
Тип программы COM [2, с.39 40; 3, с.123]
Назначение программы вычисление по формуле (арифметические и логические операции и операции сдвига); преобразование ЕХЕ-программы в COM-программу
Модель памяти сверхмалая [1, с.112; 4, с. 45 46], т.е. один сегмент кода,
что соответствует директиве определения модели памяти .tiny [1, с.112]
Модуль lab3_ol.asm (один сегмент кода, содержит и данные – вверху или внизу). Файл lab3_ol.asm получается из файлов lab2_1ol.asm (один сегмент стека, один сегмент данных и один сегмента кода) и lab2_1ol.asm (один сегмент кода) за счет слияния двух сегментов кода и одного сегмента данных в сегмент кода
8
Продолжение табл.1.2
Директивы:
определения сегментов стандартные (полные): segment, ends и assume [1, с.110 112, 4, с..43, 47 51];
-- позже: упрощенные директивы определения сегментов;
определения процедур: proc и endp [2, с.43; 1, с.115];
завершения программы end [1, с.115];
определение данных: байта (db), слова (dw), двойного слова (dd);
определение данных: байта (db), слова (dw), двойного слова (dd), четверного слова (dq) и десяти байтов (dt) [2, с.23 24];
префиксы переопределения типов byte ptr, word ptr, dword ptr [1, с.121]
+и, кроме того, следующие:
директива переопределения equ [1, с.116]
директива org [1, с.116]
директива include [1, с.125]
Команды непривилегированные:
(те же, что и во второй лабораторной работе)
передачи данных: mov, lea [2, с.15 17];
--позже: команды lahf, lds, les, sahf, xchg, xlat
арифметические (двоичная арифметика): add, adc, sub, sbb, inc, dec, mul, imul, div, idiv, cbw, cwd [1, с.225; 4, с.63 67];
сравнения cmp [1, с.37; 2, с.19];
безусловного (jmp) и условного (jz, jnz, js, jns) перехода [2, с.27 28];
--позже и самостоятельно: jp, jnp, ja, jna, jg, jge, jl, jle, jcxz, [2, с.27 28]; организации цикла loop [1, с.47 51, 2, с.28; 4, с.74];
--позже и самостоятельно: loopz, loopnz, loope, loopne [2, с.28];
передачи управления (вызова процедур и возврата из процедур) call, ret, int [2, с.27-31];
--позже : iret выход из обработчика прерываний [2, с.29, 1, с.120 121];
--позже: операторы short (8), small (16), large (32) - в лаб. №7 [1, с.120 121];
работы со стеком: push, pop [2, с.27 31]
-- позже и самостоятельно: pushf, popf [2, с.26];
логические: and, or, xor, not, test [2, с.23 24].
+и, кроме того, следующие:
cдвига: логический влево (shl), вправо (shr); арифметический влево (sal), вправо (sar); циклический влево (rol), вправо (ror); циклический через флаг переноса (rcl), вправо (rcr) [2, с.24 - 25];
команды манипуляции флагами (установка и сброс флага): stc, clc
команды условного перехода jc и jnc
команда изменения знака (neg), [2, с.20]
9
Продолжение табл.1.2
Адресация
регистр регистр:
mov ax,bx ; занести (скопировать) в ax содержимое bx [4, с.34]
--позже: mov ax,[bx] ; занести в регистр ax содержимое памяти по адресу из регистра bx [4, с.34-40] – в уч. пос., ч.6
mov ax,[25] ; занести (скопировать) в регистр ax содержимое ячейки по смещению 25
mov al,bl ; занести (скопировать) в регистр al содержимое bl mov bx,cx ; занести (скопировать) в регистр bx содержимое cx
регистр память:
mov ax,worda ; занести в регистр ax значение переменной (слова) worda
mov al,bytea; занести в регистр al значение переменной (байта) bytea
mov dx,worda ; занести в регистр dx значение переменной (слова)
worda
память регистр:
mov worda,ax ; занести в ячейку worda содержимое регистра ax (слово)
mov bytea,al ; занести в ячейку bytea содержимое регистра al (байт)
mov worda,cx ; занести в ячейку worda содержимое регистра cx (слово)
регистр непосредственный операнд:
mov ax,25 ; занести в регистр ax значение 25
mov bx,2 ; занести в регистр bx значение 2
mov al,25 ; занести в регистр al значение 25
память непосредственный операнд:
mov worda,25 |
; занести в ячейку worda значение 25 |
mov bytea,25 |
; занести в ячейку bytea значение 25 |
Использование процедур операционной системы:
(те же, что и во второй лабораторной работе)
ввод с клавиатуры [2, с.57 62]
вывод на экран [2, с.63 67]
ввод-вывод на диск (FCB, последовательная запись и чтение; длина записи = 128 байтов при открытии и создании файла;
создание (16h), открытие (0fh), |
определение области DTA |
(1ah), последовательная запись |
(15h), последовательное |
чтение (14h), закрытие файла (10h) |
|
-- позже: ввод/вывод на диск через дескрипторы [2, с. 48-52];
Дополнительная информация (рассматривается на практических занятиях):
(те же, что и во второй лабораторной работе)
-процессоры Intel в реальном режиме [1, с.20 60];
-последовательность выполнения команд [2, с.12 13];
-структура процессора 8086 [2, с.9, рис. 1.1.2];
-сегментная адресация [2, с.9, рис.1.1.3];
-представление данных в компьютерах [1, с.14 19];
-логика и организация программ:
10