Міністерство освіти і науки України
Національний технічний університет України
«Київський політехнічний інститут імені Ігоря Сікорського»
Теплоенергетичний факультет
Кафедра автоматизації проектування енергетичних процесів і систем
Звіт
до лабораторної роботи №5
з дисципліни «Операційні системи»
Тема «Система команд. Команди пересилання даних .
Робота з Турбоналагоджувачем»
Варіант 12
КИЇВ-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=Адреса рядка символів, що виводиться.
За замовчанням в Dosbox командний інтерпретатор cmd.exe використовує кодову сторінку 866 (DOS кодування). Для відображення кириличних символів компанія Microsoft для ОС Windows розробила русифікатор Windows в кодуванні win 1251.
Для зміни кодової сторінки в командному інтерпретаторі cmd.exe використовується команда chcp: Chcp <код>, наприклад, Chcp 1251.
Також потрібно вибрати шрифт Lucida Console. Для цього необхідно правою кнопкою в заголовку вікна DOSBox Status Window вибрати команду Свойства вкладка Шрифт вибрати шрифт Lusida Console.
Завдання :Розмістити в порядку спадання цифри в символьному рядку виду " 97154823$".
Код програми
;Лабораторна робота №5
;Виконала: Ткаченко Майя Вадимівна, ТР-15, 02.06.22
;Команди пересилання
;Варіант-12.Завдання:Розмістити в порядку спадання
;цифри в символьному рядку виду " 97154823$"
.model small
.stack 100h
data segment
range db "97154823 $"
CR_LF db 0dh,0ah, "$"
data ends
commands segment
assume cs:commands,ds:data
pochatok:
;<~~ Виведення початкового рядка ~~>
mov ax,data ;запис адреси сегменту даних в регістр ах
mov ds,ax ;запис вмісту ах (адреси сегменту даних) в регістр сегменту даних
mov ah, 40h ;підготовка і виведення початкового масиву засобами DOS
mov bx, 0
mov cx, 8 ;кількість елементів, які виводяться
lea dx, range
int 21h
mov ah, 9h ;виведення на екран
mov dx, offset CR_LF ; перехід на новий рядок
int 21h
;<<<== Перестановка елементів рядка ==>>>
mov ah, range+5 ;записуємо в регістр аh 5-те значення рядка
xchg range+1, ah
xchg range+2, ah
xchg range+7, ah
xchg range+5, ah
;<<<== Кінець перестановки ==>>>
;<~~ Виведення рядка після перестановки ~~>
mov ah, 40h
mov bx, 0
mov cx, 8
lea dx,range
int 21h
mov ah, 4ch ;повернення у середовище DOS
int 21h
commands ends
end pochatok
Створення файлу з розширенням EXE
/
Робота з TD
Вигляд TD після запуску.
/
Натискаємо F8 -покрокове виконання програми.
/
Регістр АХ зазнає змін оскільки туди ми завантажуємо адресу початку сегменту даних. Також зазнав змін регістр вказівник-команд (IP), з минулих робіт пам’ятаємо, що він змінюватиметься постійно, оскільки вказує на поточну команду.
/
Бачимо, що зазнав змін регістр DS оскільки туди ми завантажили вміст регістру АХ.
/
Регістр АХ зазнав змін, оскільки його старші біти були задіяні в виклику функції 40Н.
/
Ми записали в регістр СХ кількість елементів, що виводятьтся,тому можна побачити, як він змінив своє значення.
/
Також під час перестановки елементів, активними є лише регістри АХ і ІР.
Результати покрокового виконання програми.
/
Результати роботи з TD після переходу в консольний режим.
/
Висновок
Під час виконання даної лабораторної роботи освоєно команди пересилання та отримано навички налагодження асемблерних програм під керуванням Турбоналагоджувача TD.
Написано програму, яка переставляє елементи рядка в порядку спадання, проаналізовано вмістр регістрів під час покрокового виконання програми в TD.