Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторна 1 ОТМП ТСД.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
344.19 Кб
Скачать

ДЕРЖАВНИЙ УНІВЕРСИТЕТ ТЕЛЕКОМУНІКАЦІЙ

Кафедра системного аналізу

Для викладачів

ЗАТВЕРДЖУЮ

В.о. завідувача кафедри системного аналізу

______________________В.П. ЯРЦЕВ

“ _____ ” _______________ 2016 року

МЕТОДИЧНА РОЗРОБКА

для проведення лабораторної роботи

зі студентами ННІ Телекомунікацій та інформатизації

(назва факультету)

з навчальної дисципліни: Обчислювальна техніка та мікропроцесори

(назва навчальної дисципліни)

Тема: 6. Програмування мікропроцесорів

(номер і назва теми в програмі навчальної дисципліни)

Заняття: 1. Система команд мікропроцесора

(номер і назва заняття в робочій програмі)

Час: 90 хв.

Навчальна та виховна мета

1. Ознайомитись з синтаксисом команд МП, які найчастіше частіше всього використовуються при створенні програм для задач обчислювального характеру.

2. Навчитись записувати операнди у регістри та у пам’ять, записувати вміст регістрів у пам’ять і навпаки.

Навчально-матеріальне забезпечення

1. Комп’ютер з ОС Windows.

2. Інтегроване середовище SASM для розробки на асемблері.

3. Методичний посібник кафедри СА.

Обговорено та схвалено на засіданні кафедри СА

“___” __________ 2016 року Протокол №____

План проведення заняття:

Вступ.................................................................................................................5 хв.

1. Ключові питання..........................................................................................25 хв.

2. Лабораторне завдання..................................................................................55 хв.

Завершальна частина........................................................................................5 хв.

Вступ

– контроль присутності студентів;

– оголошення теми та мети заняття;

– оголошення плану заняття.

Ключові положення

Вступ

Алгоритм — однозначна чітко визначена послідовність дій, виконання якої забезпечує отримання конкретного результату.

Властивості алгоритму:

- скінченність;

- дискретність;

- детермінованість (визначеність);

- зрозумілість;

- масовість (застосовність до різних наборів вихідних даних);

- результативність (завершення алгоритму супроводжується конкретними результатами).

Програма — запис алгоритму в зрозумілому для сприйняття комп'ютером вигляді.

Знайомство із SASM та NASM

Для роботи із мовою Assembler ми будемо використовувати діалект NASM у інтегрованому середовищі IDE SASM.

SASM — просте кросплатформене (Windows, Linux) середовище розробки для мов асемблера NASM, MASM, GAS, FASM із підсвіченням синтаксису та відлагоджувачем. Поширюється за вільною ліцензією GNU GPL v3.0.

NASM (Netwide Assembler) – вільний (LGPL та ліцензія BSD) асемблер архітектури Intel x86, який підтримує написання 8-, 16-, 32- та 64-розрядних програм.

Відлагоджувач дозволяє продивлятися регістри, пам’ять, покроково виконувати програму тощо.

Бібліотека макросів для уведення/виведення io.inc дозволяє виводити дані не замислюючись над домовленостями та правилами виклику функцій і є дує корисною на початковому етапі вивчення мови Assembler. Наприклад, для виведення вмісту регістру EAX достатньо написати:

Print_dec 4, eax ; 4 – кількість байт

замість:

section .data

format db "%d", 0

section .text

push eax

push format

call printf

add esp, 8

Бібліотека макросів для NASM:

Имя макроса

Описание макроса

PRINT_UDEC size, data

PRINT_DEC size, data

Вывод числовых данных заданных параметром data в 10-чном представлении. Параметр size – число, указывающее размерность данных в байтах; допускаются значения 1, 2, 4, 8 (x64). В качестве параметра data может выступать числовая константа, символьная константа, имя переменной, имя регистра или адресное выражение (без спецификатора размера данных в памяти). Если задается регистр большего размера, то берется заданное параметром size количество младших разрядов. PRINT_UDEC интерпретирует число как беззнаковое, PRINT_DEC — как знаковое.

PRINT_HEX size, data

Аналогично предыдущему, но данные выводятся в 16-чном представлении.

PRINT_CHAR ch

Печатается символ, заданный параметром ch. В качестве параметра может выступать численная константа, символьная константа, имя переменной, имя регистра или адресное выражение (без спецификатора размера данных в памяти). Печатается всегда содержимое 8 младших разрядов.

PRINT_STRING data

Печать строки текста, оканчивающейся символом с кодом 0. В качестве параметра можно передавать строковую константу, имя переменной или адресное выражение (без спецификатора размера данных в памяти). В случае печати строковой константы, наличие символа с кодом 0 в конце строки необязательно.

NEWLINE

Макрос переводит печать на новую строку.

GET_UDEC size, data

GET_DEC size, data

Ввод числовых данных в 10-чном представлении с клавиатуры. Размер вводимых данных ограничен параметром size, который задается числом (1, 2, 4, 8 (x64)). Введенные данные обрезаются соответствующим образом. Параметр data – либо имя переменной, либо имя регистра, либо адресное выражение (без спецификатора размера данных в памяти). Если задается регистр большего размера, то старшие разряды заполняются знаковым битом в случае GET_DEC и нулями в случае GET_UDEC. GET_UDEC считывает беззнаковое число, GET_DEC — знаковое. Запрещается использовать в качестве параметра регистр esp.

GET_HEX size, data

Аналогично предыдущему, но данные задаются в 16-чном представлении с префиксом 0x.

GET_CHAR data

Аналогично предыдущему, но происходит считывание одного символа, нажатие Enter не требуется. Более того, нажатие Enter будет расцениваться как ввод управляющих символов перевода строки: 0xD 0xA в ОС Windows, 0xA в ОС *nix. Если параметр – регистр, размер которого больше 1 байта, значение считанного символа будет дополнено нулями.

GET_STRING data, maxsz

Ввод последовательности символов длиной не более чем (maxsz-1). Чтение последовательности останавливается на EOF или переводе строки, причем перевод строки сохраняется в буфере. В конец считанной строки добавляется символ с кодом 0. Параметр data – либо имя переменной, либо адресное выражение (без спецификатора размера данных в памяти). Параметр maxsz – регистр или числовая константа.

Деякі відмінності NASM від інших асемблерів:

– регістрочутливість для таких міток, як foo, Foo та FOO;

– NASM вимагає квадратні дужки для посилань на пам’ять;

– NASM не зберігає типи змінних, а отже, не підтримує інструкції LODS, MOVS, STOS, SCAS, CMPS, INS та OUTS (підтримуються тільки їхні форми LODSB, MOVSW та SCASD, де явно заданий розмір компонентів рядка, який обробляється);

– NASM не підтримує директиву ASSUME;

– NASM не підтримує моделі пам’яті (програміст повинен самостійно слідкувати, які функції передбачається викликати ближнім RETN або RET, а які дальнім викликом RETF);

– особливості обробки чисел із плаваючою крапкою (NASM посилається на регістри співпроцесора за іменами st0, st1, ...);

– за історичними причинами NASM використовує ключове слово TWORD там, де MASM та сумісні з ним асемблери використовують TBYTE;

– NASM не підтримує синтаксис резервування неініціалізованого простору типу «DW ?», як у TASM/MASM.

Синтаксис NASM. Кожний рядок NASM (якщо це не макрос, препроцесорна чи асемблерна директива), може містити комбінацію чотирьох полів:

мітка : інструкція операнди ; коментар

Як правило, більшість цих полів необов’язкові.

Директиви визначення цілочисельних даних

db (define byte) – 1 байт;

dw (define word) – 2 байти (слово);

dd (define double word) – 4 байти (подвійне слово);

dq (define quad word) – 8 байт (почетверене слово);

Сегменти (секції, області)

Директива section вказує, в яку секцію вихідного файлу буде асембльований написаний код. Об’єктні формати Unix та bin підтримують стандартизовані імена секцій: .text, .data, .bss. Область коду доступна тільки для читання, секції .data та .bss доступні також і для запису. Області ініціалізованих даних (section .data), неініціалізованих даних (section .bss) та коду (section .text) можна розташовувати у довільному порядку одна відносно одної.

Система команд мікропроцесора

Системою команд мікропроцесора називають сукупність команд, яку він здатний виконувати.

Створення операндів у пам’яті. Ініціалізовані операнди створюються в області даних (section .data), неініціалізовані – в області .bss. Створимо ініціалізовані операнди (змінні var1, var2, var3, var4, message та сталу cnst), а також неініціалізовані змінні:

Якщо створити неініціалізовані змінні в області ініціалізованих даних (section .data), то буде видано помилку на кшталт такої:

Це означає, що ці змінні автоматично ініціалізуються шляхом запису в них нулів.

Команди передавання даних. Загальний синтаксис пересилання даних: