Міністерство освіти і науки України
Національний технічний університет України
«Київський політехнічний інститут ім. І. Сікорського»
Кафедра автоматизації проектування енергетичних процесів і систем
Лабораторна робота № 5
з дисципліни «Операційні системи»
«Система команд. Команди пересилання даних . Робота з Турбоналагоджувачем»
Робота студентки 1 курсу групи ТР-15, Чубукової Анастасії
Перевірила д.т.н., проф. Левченко Л.О.
КИЇВ 2022
Мета: Освоєння команд пересилання та отримання навичок налагодження асемблерних програм під керуванням Турбоналагоджувача TD .
Індивідуальне завдання: Побудуйте символьний рядок виду "a+b++c+abc+ba $" із символів 'а', 'b', ' с' ,' +'.
Теоретична частина
Для пересилання даних використовується команда 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.
Найпоширенішою в інтернеті кодуванням є UTF-8 - кодова сторінка 65001. Вона включає в себе більше двох мільйонів символів: всі можливі сучасні алфавіти, цифри, розділові знаки, математичні та спеціальні символи, музичні знаки і символи вимерлих форм писемності. Для зміни кодової сторінки в командному інтерпретаторі cmd.exe використовується команда chcp:
Chcp <код>, наприклад, Chcp 1251.
Також потрібно вибрати шрифт Lucida Console. Для цього необхідно правою кнопкою в заголовку вікна DOSBox Status Window вибрати команду Свойства вкладка Шрифт вибрати шрифт Lusida Console.
Виконання завдання
Код програми
;Лабораторна робота 5
;Виконала: Чубукова. А. О., гр. ТР-15, дата: 03.06.2022
;Команди пересилання
.model small ;модель пам'яті для exe файлів
.stack 100h ;виділення PSP 256 байт
Datas segment ;початок сегменту даних
String db 'a' ;змінні символів, з яких утворюється символьний рядок
Db 'b'
Db 'c'
Db '+'
CR_LF db 0dh,0ah, '$'
Datas ends
Codes segment
Assume cs:Codes,ds:Datas
First:
mov ax, Datas
mov ds, ax
mov ah, 40h ;підготовка і виведення вихідного рядка String засобами DOS
mov bx, 1 ;початковий символ
mov cx, 13 ;кількість символів, які необхідно вивести
lea dx, String
int 21h
mov ah, 9h ; Виведення на екран
mov dx, offset CR_LF ;переведення курсора на наступний рядок
int 21h
mov String+1, '+' ;записуємо в регістр другий елемент зі значенням +
mov String+2, 'b' ;записуємо в регістр наступний елемент зі значенням b
mov String+3, '+' ;записуємо в регістр наступний елемент зі значенням +
mov String+4, '+' ;записуємо в регістр наступний елемент зі значенням +
mov String+5, 'c' ;записуємо в регістр наступний елемент зі значенням c
mov String+6, '+' ;записуємо в регістр наступний елемент зі значенням +
mov String+7, 'a' ;записуємо в регістр наступний елемент зі значенням a
mov String+8, 'b' ;записуємо в регістр наступний елемент зі значенням b
mov String+9, 'c' ;записуємо в регістр наступний елемент зі значенням c
mov String+10, '+' ;записуємо в регістр наступний елемент зі значенням +
mov String+11, 'b' ;записуємо в регістр наступний елемент зі значенням b
mov String+12, 'a' ;записуємо в регістр останній елемент зі значенням a
mov ah, 40h ;підготовка і виведення результуючого рядка засобами DOS
mov bx, 1 ;початковий символ
mov cx, 13 ;кількість символів, які необхідно вивести
lea dx, String
int 21h
mov ah, 4ch ;повернення у середовище DOS
int 21h
Codes ends
end First ;кінець програми
Після цього створюємо файл *.exe в DOSBox:
/
Вигляд турбоналагоджувача після запуску виконуваного файлу lab5.exe:
/
Виконуємо програму натиснувши F9 і переходимо у DOSBox комбінацією ALT+F5, щоб подивитися отриманий результат.
/
Висновок: У ході виконання лабораторної роботи було освоєно команди пересилання та отримано навички налагодження асемблерних програм під керуванням Турбоналагоджувача TD. Під час виконання індивідуального завдання було розглянуто такі нові команди як xchg, lea, нову функцію виводу на екран 40H, а також детальніше розглянуто використовувану раніше команду mov.