Міністерство освіти і науки УкраїниНаціональний технічний університет України
«Київський політехнічний інститут ім. І. Сікорського»
Кафедра автоматизації проектування енергетичних процесів і систем
Лабораторна робота №5
з дисципліни «Операційні системи»
«Система команд. Команди пересилання даних . Робота з Турбо налагоджувачем»
Варіант №16
КИЇВ-2022
Мета: освоєння команд пересилання та отримання навичок налагодження асемблерних програм під керуванням Турбоналагоджувача TD.
Теоретична частина:
Для пересилання даних використовується команда MOV, яка має формат:
Mov Приймач, Джерело, яка копіює дані з другого операнда (Джерело) у перший (Приймач).
Синтаксис:
MOV регістр/пам’ять, регістр/пам’ять/безпосередній_операнд
В якості приймача не можна використовувати регістр CS. Обидва операнди повинні бути одного розміра.
Команда XCHG обмінює дані операнда-джерела і операнда-приймача. Дані можуть бути обмінені між регістрами і регістрами і пам'яттю.
Формат: XCHG Приймач, Джерело
Синтаксис:
XCHG регістр/пам'ять, регістр/пам'ять
Команда LEA завантажує адресу пам’яті у регістр, має формат:
LEA Приймач, Джерело
Синтаксис:
LEA регістр, пам’ять
Операндом-приймачем може бути будь-який загальний регістр, операндом-джерелом може бути будь-який операнд в пам’яті. Виконавча адреса операнда-приймача розташовується в регістр-приймач.
Команда LEA мож використовуватися для обчислення виконавчої адреси операнда прямої адресації, хоча зазвичай це неефективно, тому що адреса операнда прямої адресації - константа, яка відома під час асемблювання.
LEA DX, STRING
MOV DX, OFFSET STRING
Обидві команди призводять до однакового результату, однак друга команда більш швидкодіюча.
Команда LEA є больш ефективною для обчислення виконавчих адресов непрямих операндів в пам’яті.
LEA DX, STRING[SI]
Окрім функції виведення рядка символів на екран 9Н, яка заноситься у старший байт регістра АХ, можна використати іншу функцію – 40Н, яка теж заноситься у старший байт регістра АХ. Для цього використовується дексриптор для роботи з екраном або файлом. Дексриптор – це число, яке вказує куди здійснюється виведення інформації: 00 – у файл, 01 – на дисплей. Функція 40Н переривання INT 21H призначена для роботи з дисплеєм. Для виклику цієї функції необхідно завантажити в регістри наступні значення: АН =40Н (код функції), ВХ=01 (дескриптор), СХ=Кількість символів, що виводиться, DX=Адреса рядка символів, що виводиться.
Завдання:
Налагодьте програми відповідно до індивідуальних завдань, продемонструйте роботу програми в середовищі налагоджувача ТD.
Індивідуальне завдання: виключіть цифрові символи із символьного рядка "1RМ4DE5Е6 $" замінивши їх на символ ' ! '.
Код для завдання 16 варіанту з коментарями:
.model small ;модель пам'яті для exe файлів
.stack 100h ;виділяємо PSP 256 байт
.data ;початок сегменту даних
Symbol db '!' ;змінна для заміни
String db "1RM4DE5E6 $" ;змінна із символьним рядком
CR_LF db 0dh, 0ah, '$'
.code ;початок сегменту коду
begin:
mov ax, @data ; записуємо адресу сегменту дахих в ax
mov ds, ax ; записуємо ax в ds
mov ah, 40h ; підготовка і виведення вхідного рядка засобами DOS
mov bx, 1
mov cx, 9 ; кількість символів, що виводиться
lea dx, String
int 21h
mov ah, 9h ; виведення на екран
mov dx, offset CR_LF ;переведення курсора на наступний рядок
int 21h
mov al, Symbol ;записуємо в регістр al значення Symbol
mov String, al ; заміняємо 1-й символ на знак оклику
mov String+3, al ; заміняємо 4-й символ на знак оклику
mov String+6, al ; заміняємо 7-й символ на знак оклику
mov String+8, al ; заміняємо 9-й символ на знак оклику
mov ah, 40h ; підготовка і виведення отриманого рядка засобами DOS
mov bx, 1
mov cx, 9 ; кількість символів, що виводиться
lea dx, String
int 21h
mov ah, 4ch ; gовернення у середовище DOS
int 21h
end begin
Створення *.EXE файлу та відкриття його у TD:
/
Вигляд TD після запуску lab5.exe :
/
Вигляд TD після проходження програми покроково за допомогою F7:
/
Виведення в консольному режимі отриманого результату:
/
Лістинг:
/
У 11-ому рядку команда mov записує адресу сегменту дахих в регістр ax. У 12-ому рядку команда mov записує ax в ds. У 13-ому рядку команда mov заносить функцію 40h у ah, що підготовляє і виводить вхідний рядок засобами DOS. У 16-ому рядку команда mov сx, 9 записує в регістр сх кількість символів, що виводяться. У 19-ому рядку команда mov ah, 9h виводить рядок симолів на екран. У 20-ому рядку команда mov dx, offset CR_LF переводить курсор на наступний рядок. У 23-ому рядку команда mov al, Symbol записує в регістр al значення Symbol. У 24-25их рядках команда mov mov String(+ номер елемента-1), al змінює елемент з значенням Symbol. У 25-ому рядку команда mov ah, 4ch повертає у середовище DOS.
Висновок: У даній лабораторній роботі було освоєно команди пересилання та отримано навички налагодження асемблерних програм під керуванням TD. Також було детальніше ознайомлено з командами mov, xchg, lea. Виконано завдання згідно до варіанту. Зроблено звіт та надіслано викладачу.