МОДУЛЮ ДВА; формулы вычислений – индивидуальны; вариант (номер формулы) взять у преподавателя, а при самостоятельном изучении – в
прил. 2.1).
|
|
|
|
|
|
|
Таблица 3.1 |
|||
Варианты используемых логических операций |
||||||||||
|
|
|
|
|
|
|
d0&d00 |
|
||
Логическое И |
b0&b00 |
w0&w00 |
|
|||||||
|
b0&w0 |
b0&d0 |
w0&d0 |
|
||||||
Логическое |
b0 v b00 |
w0 v w00 |
d0 v d00 |
|
||||||
ИЛИ |
b0 v w0 |
w0 v b0 |
b0 v d0 |
|
||||||
|
d0 v b0 |
w0 v d0 |
d0 v w0 |
|
||||||
Исключающее |
b0 ^ b00 |
w0 ^ w00 |
d0 ^ d00 |
|
||||||
ИЛИ |
b0 ^ w0 |
w0 ^ b0 |
b0 ^ d0 |
|
||||||
|
d0 ^ b0 |
w0 ^ d0 |
d0 ^ w0 |
|
||||||
|
|
|
|
|
|
|
|
|
|
|
НЕ |
b0 |
w0 |
d0 |
|
||||||
3.2. Требования к программному средству, в т.ч. указание, для каких процессора и операционной системы оно разрабатывается, какие директивы и команды применяются и т.п., приведены в табл.3.2.
Таблица 3.2
Полный текст задания к лабораторной работе №2
•Ассемблер для микропроцессора – Intel 8086
•Операционная система – MS-DOS [1, с.127–128]
•Режим работы процессора – реальный [1, с.20–60]
•Тип программы – EXE [2,с.37–39; 1, с.130–131]
•Назначение программы – вычисление по формуле (арифметические и логические операции)
•Модель памяти – средняя [1, с.112; 4, с.45–46], т.е. один сегмент стека, один сегмент данных и два сегмента кода, что соответствует директиве определения модели памяти .medium [1, с.112]
•Модули – l_2_1fio.asm (один сегмент стека, один сегмент данных и один сегмента кода) и l_2_2fio.asm (один сегмент кода). Файл l_2_1fio.asm получается из файла lab1_fio.asm (в нем предусматривается ввод байта и слова с клавиатуры, процедуры перевода из символьного вида в двоичное представление для байта, слова и двойного слова, процедура перевода из двоичного представления в символьный вид и вывод на экран)
•Директивы:
(те же, что и в первой лабораторной работе)
определения сегментов стандартные (полные): segment, ends и assume [1,
с.110–112; 4, с.43, 47–51];
-- позже: упрощенные директивы определения сегментов; – в уч. пос., ч. 4;
определения процедур: proc и endp [2, с.43; 1, с.115];
Продолжение табл. 3.2
завершения программы end [1, с.115];
11
определение данных: байта (db), слова (dw), двойного слова (dd);
префиксы переопределения типов byte ptr, word ptr [1, с.121]
+и, кроме того, следующие:
определения учетверенного слова (dq) и десяти байт(dt) [2, с.23–24]
объявления внешних ссылок
extrn имя1:proc,имя2:proc,b1:byte,w1:word,d1:dword,rezult:qword (и, если надо, то еще одну или несколько строк extrn)
объявления меток, доступных для других модулей
|
public имя1, имя2, b1, w1, d1, rezult |
|
(и, если надо, то еще одну или несколько строк public) |
глобальных объявлений меток |
|
|
global [2, с.46–47; 1, с.117–118; 4, с.88–92] |
-- |
позже: директиву comm [1, с.117–118] |
•Команды – непривилегированные:
(те же, что и в первой лабораторной работе)
передачи данных: mov, lea [2, с.15–17]
-- позже: команды lahf, lds, les, sahf, xchg, xlat – в уч. пос., ч. 7;
арифметические (команды двоичной арифметики): сложения (add и adc), вычитания (sub и sbb), увеличения на единицу (inc), уменьшения на единицу (dec), умножения (mul и imul), деления (div и idiv), преобразования байта в слово (cbw) и слова в двойное слово – cwd [1, с.225; 4, с.63–67];
--позже: команды cwde и cdq [1, с.32], в уч. пос., ч. 7;
сравнения cmp [1, с.37; 2, с.19];
безусловного (jmp) и условного (jz, jnz, js, jns) перехода [2, с.27–28];
|
-- |
позже самостоятельно: jc, jnc, jcxz – в уч. пос., ч. 4; jp, jnp, ja, jna, |
|
|
jg, jge, jl, jle, jcxz [2, с.27–28], в уч. пос., ч. 7; |
|
организации цикла loop [1, с.47–51; 2, с.28; 4, с.74]; |
|
|
-- |
позже самостоятельно: loopz, loopnz, loope [2, с.28], в уч. пос., ч. 7; |
передачи управления (вызова процедур пользователя (call) и функций операционной системы DOS (int) и возврата из процедур – ret [2, с.27–31];
--позже самостоятельно: iret – выход из обработчика прерываний [2, с.29; 1, с.120–121], в уч. пос., ч. 8;
--позже: операторы short (8), small (16), large (32) [1, с.120], в уч.пос.,ч.7;
работы со стеком: push, pop [2, с.27–31];
--позже самостоятельно: pushf, popf [2, с.26], в уч. пос., ч. 6. Предусмотреть сохранение регистра флагов и порчу флага cf, sf, df, zf в процедуре
+и, кроме того, следующие:
логические: and, or, xor, not, test [2, с.23–24]
•Адресация
регистр–регистр:
mov ax,bx ; занести (скопировать) в ax содержимое bx [4, с.34]
12
Продолжение табл. 3.2
--позже: 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];
–логика и организация программ;
–условные и безусловные переходы [6, с. 156, 162];
–дисковая память: функции базовой версии DOS [3, гл.16];
Продолжение табл. 3.2
13
+и, кроме того:
–логика и организация программ – циклы [1, с.215];
–использование стека;
–дисковая память I: организация [3, гл.15, с.45–51];
–дисковая память II: функции базовой версии DOS [3, гл.16, с.52–70];
–переопределение данных: префикс ptr [1, с.121];
–компоновка ехе-программы из нескольких объектных модулей (tlink lab2_1fi.obj lab2_2fi.obj)
•Примеры программ: zag2_1.asm, zag2_2.asm; l_1a#.asm, l_1b#.asm; l_3a#.asm, l_3b#.asm, l_3c#.asm, lab2_and.asm, lab2_or.asm, lab2_xor.asm, lab2_not.asm lab2_test.asm, lab2pr1.asm в папке l#02#
•Используемое ПО: tasm.exe, tlink.exe, td.exe
•Формируемые файлы: l_2_1fio.obj, l_2_2fio.obj, l_2_1fio.lst, l_2_2fio.lst,
l_2_1fio.exe
•Литература: 1. Зубков С.В. Assembler для DOS, Windows и UNIX. – 3-е изд.,
стер. – М.: ДМК Пресс; СПб.: Питер, 2005. – 608 с.
2.Бурдаев О.В., Иванов М.А., Тетерин И.И. Ассемблер в задачах защиты информации/ Под ред. И.Ю.Жукова. – М.: КУДИЦ-ОБРАЗ, 2002. – 320 с.
3.Абель Питер. Язык ассемблера для IBM PC и программирования: Пер. с англ. – М.: Высшая школа. – 1992. – 447 с.
4.Олейник Л.Е. Язык ассемблера для микропроцессора 8086: Курс лекций. – Омск: Сибирская региональная школа бизнеса, 2000.
5.Дао Л. Программирование микропроцессора 8088. – М.: Мир, 1988. – 356 с.
6.Абель Питер. Ассемблер. Язык и программирование для IBM PC: Пер. с англ., изд.5-е, стереот. – Киев.: Век; М.: Энтроп; Киев: НТИ, 2003. – 736 с.
•Задание (З_ЛР_2): Составить EXE–программу для МП Intel 8086 для вычисления по двум формулам:
1)содержащей арифметические операции сложения, вычитания, умножения и деления (формулу взять у преподавателя, а при самостоятельном изучении – в
уч.пос., ч. 1, если X1=1;
2)содержащей логические операции (формулу 2 взять у преподавателя, а при самостоятельном изучении – из прил. 2.1, если X1=2 или 2,3,4 и т.д.
Использовать в качестве аргументов b1,b2,...,w1,w2,...,d1,d2,...– байты, слова и двойные слова
Вари- |
А. Все данные (b1,b2,b3,...,w1, w2,w3,...d1,d2,d3,....) вводятся c |
анты: |
клавиатуры после запроса (в диалоге и прокрутка снизу вверх) |
|
Б. Данные (b2, b4,...,w1, w3,...,d2, d4,....) вводятся c клавиатуры после |
|
запроса (в диалоге и прокрутка снизу вверх), все остальные – из сегмента |
|
данных. Результат выводится на экран (после очистки – в строку №10) |
|
для 1<X1<20. Если X1=0 или X1>21, выдавать сообщение об ошибке |
Применяется перевод из ASCII-формата в двоичный код (для данных, введенных с клавиатуры) и перевод из двоичного кода в ASCII-формат (для данных, выдаваемых на экран)
14
Окончание табл. 3.2
В данной программе может быть использована в качестве процедуры программа, реализующая задание на лабораторную работу №1 ( lab1)
Х1 вводится с клавиатуры по запросу
Результат вывести на экран по формату:
Вари- А. "Вычисление по формуле:______(приводится соответствующая cтрока
анты: формулы), Y=____ для b1=__;b2=__;b3=__; b4=__;w1=___и т.д."
Б. "Вычисление по формуле:____, Y=__ (после очистки – в строку №10)
•Лабораторная считается сданной, если:
–полностью выдержаны требования к программе, т.е. создана программа заданного типа для заданного микропроцессора, состоящая из заданного числа модулей и использующая перечисленные директивы, команды (в свою очередь, применяющие соответствующую адресацию), заданные процедуры (функции) заданной операционной системы MS-DOS и сформированы файлы, предусмотренные заданием;
–в комментариях к вычислениям указана максимальная длина промежуточных результатов;
–при ассемблировании и компоновке не обнаружено ошибок;
–результат совпадает с результатом ручного просчета для контрольных примеров и для произвольно заданных преподавателем значений. При этом раз-
решается подбирать исходные данные таким образом, чтобы результат получался не отрицательным;
– текст программы прокомментирован (комментарии поясняют последовательность вычисления по формуле, назначение используемых процедур, способ передачи параметров и получение результатов)
•Типичные ошибки: (см. подраздел 5)
•Задание повышенной сложности (ЗПС_ЛР_2): составить EXE–программу для МП Intel 8086 для вычисления по двум формулам:
1)содержащей арифметические операции сложения, вычитания, умножения и деления (формулу взять у преподавателя, а при самостоятельном изучении – в
уч.пос., ч. 1), если X1=1;
2)содержащей логические операции (формулу 2 взять у преподавателя, а при самостоятельном изучении – из прил. 2.1, если X1=2 или 2,3,4 и т.д. Использовать в качестве аргументов b1,b2,...,w1,w2,...,d1,d2,...– байты, слова и двойные слова
Пользователь запрашивается о наличии в составе ПК принтера. Если принтер есть, то выдать на печать сообщение:
"Файл _________.___ сфоpмиpован"
Обязательно выводить и отрицательные и положительные значения результата
3.3. Сегмент данных сформировать аналогично примеру из прил. 2.1 (файл lab2_sa_.asm).
15