Лекція — 44 . . Написання програм

Скачать презентацию Лекція — 44 . .  Написання програм Скачать презентацию Лекція — 44 . . Написання програм

2_00_lec_ukr_01.ppt

  • Размер: 132.0 Кб
  • Автор:
  • Количество слайдов: 31

Описание презентации Лекція — 44 . . Написання програм по слайдам

  Лекція -- 44. .  Написання програм Після введення на диск Лекція — 44. . Написання програм Після введення на диск початкової програми під ім’ям ІмІм ’’ я. ASM необхідно виконати два основні кроки, перш ніж програму можна буде виконати. 1. Спочатку необхідно асемблювати програму, 2. Потім виконати компоновку.

  Підготовка програми до виконання Крок асемблювання включає трансляцію  початкового коду в Підготовка програми до виконання Крок асемблювання включає трансляцію початкового коду в машинний об’єктний код і генерацію OBJ-модуля. Крок компановки включає перетворення OBJ-модуля в EXE (СОМ) модуль, що містить машинний код. Програма LINK, що знаходиться на диску DOS, виконує наступне: 1. Завершує формування в OBJ-модулі адрес, які залишилися невизначеними після асемблювання. 2. Компонує, якщо необхідно, більш одного окремо асемблюючого модуля в одну завантажувальну програму; 3. Ініціалізує EXE(СОМ)-модуль командами завантаження для виконання.

  Трансляція програми до виконання В процесі трансляції початкової програми  асемблер робить Трансляція програми до виконання В процесі трансляції початкової програми асемблер робить два перегляди (проходи) початкового тексту. Однією з основних причин цього є посилання вперед, що відбувається у тому випадку, коли в деякій команді кодується мітка, значення якої ще не визначене асемблером. У першому проході асемблер проглядає всю початкову програму і будує таблицю ідентифікаторів, використовуваних в програмі, тобто імен полів даних і міток програми і їх відносних адрес в програмі. У першому проході обраховується об’єм об’єктного коду, але сам об’єктний код не генерується.

  Трансляція програми до виконання У другому проході асемблер використовує  таблицю ідентифікаторів, Трансляція програми до виконання У другому проході асемблер використовує таблицю ідентифікаторів, побудовану в першому проході. Оскільки тепер уже відомі довжини і відносні адреси всіх полів даних і команд, то асемблер може згенерувати об’єктний код для кожної команди. Асемблер створює, якщо потрібен, файли: OBJ, LST і CRF.

  ВІДМІННОСТІ МІЖ ПРОГРАМАМИ В EXE і COM-файлах Розмір програми. EXE-програма може мати ВІДМІННОСТІ МІЖ ПРОГРАМАМИ В EXE і COM-файлах Розмір програми. EXE-програма може мати будь-який розмір, тоді як COM-файл обмежений розміром одного сегменту і не перевищує 64 К. COM-файл завжди менше, ніж відповідний EXE-файл; одна з причин цього — відсутність в COM-файлі 512 -байтового початкового блоку EXE-файлу. Сегмент стеку. У EXE-програмі визначається сегмент стека, тоді як COM-програма генерує стек автоматично. Таким чином при створенні асемблерної програми, яка буде перетворена в COM-файл, стек повинен бути опущений. Сегмент даних. У EXE програмі звичайно визначається сегмент даних, а регістр DS ініціалізується адресою цього сегменту. У COM-програмі всі дані повинні бути визначені в сегменті коду.

  ВІДМІННОСТІ МІЖ ПРОГРАМАМИ В EXE і COM-файлах  І н і ц ВІДМІННОСТІ МІЖ ПРОГРАМАМИ В EXE і COM-файлах І н і ц і а л і з а ц і я. EXE-програма записує нульове слово в стек і ініціалізує регістр DS. Оскільки COM-програма не має ні стека, ні сегменту даних, то ці кроки відсутні. Коли COM-програма починає працювати, всі сегментні регістри містять адресу префікса програмного сегменту (PSP), — 256 -байтового блоку, який резервується операційною системою DOS безпосередньо перед COM або EXE програмою в пам’яті. Оскільки адресація починається з шістнадцятирічного зсуву 100 від початку PSP, то в програмі після оператора SEGMENT кодується директива ORG 100 H. Якщо ж програма створюється для виконання як COM-файл, то компановщиком буде видане повідомлення: Warning: No STACK Segment (Попередження: сегмент стека не визначений) Це повідомлення можна ігнорувати, оскільки визначення стека в програмі не передбачалося.

  СТЕК ДЛЯ COM-ПРОГРАМИ Для COM-файлу DOS автоматично визначає стек і встановлює однакову СТЕК ДЛЯ COM-ПРОГРАМИ Для COM-файлу DOS автоматично визначає стек і встановлює однакову загальну сегментну адресу у всіх чотирьох сегментних регістрах. Якщо для програми розмір сегменту в 64 К є достатнім, то DOS встановлює в регістрі SP адресу кінця сегменту -FFFE. Це буде вершина стеку. Якщо 64 К байтовий сегмент не має досить місця для стека, то DOS встановлює стек в кінці пам’яті. У обох випадках DOS записує потім в стек нульове слово. Можливість використовування стека залежить від розміру програми і обмеженості пам’яті. За допомогою команди DIR можна визначити розмір файлу і обчислити необхідний простір для стека. Всі невеликі програми в цій книзі в основному расчитани на на COM-формат.

  Написання програм Почнемо з написання СОМ програми.  Для написання програми можна Написання програм Почнемо з написання СОМ програми. Для написання програми можна використовувати будь-який текстовий редактор (наприклад, Блокнот), при цьому при написанні програми пригадаємо основні елементи структури програми: 1. 1. Задамо модель пам ’’ яті (хоча можна і без неї) 2. 2. В кодовому сегменті запишемо ряд команд 3. 3. В кінці програми опишемо змінні

  Написання програм Введемо в файлі код: model tiny. code. startup mov dx, Написання програм Введемо в файлі код: model tiny. code. startup mov dx, offset testm mov ah, 09 h int 21 h retret testm db «Hello, world!!! $» endend Збережемо файл Lab 1. asm

  Написання програм В командному рядку виконаємо такі команди (для Turbo Assembler (TASM) Написання програм В командному рядку виконаємо такі команди (для Turbo Assembler (TASM) )) > tasm Lab 1. asm > tlink Lab 1. obj -t > lab 1. com

  Написання програм Для Macro Assembler версии 5. 00 – 5. 10 (MASM Написання програм Для Macro Assembler версии 5. 00 – 5. 10 (MASM 5. 00 – 5. 10) )) > masm Lab 1. asm > link Lab 1. obj // tt > lab 1. com В результаті виконання на екрані з ’’ явиться рядок: Hello, world!!!

  Приклад командного файлу tasm. exe 1 tlink. exe 1 2 11 Де Приклад командного файлу tasm. exe %1 tlink. exe %1 %2 %1%1 Де %1 – перший параметр (набір символів без пробілів) з рядку запуску %2 – другий параметр з рядку запуску

  Приклад запуску Приклад запуску

  Розбирання програми Введемо в файлі код: model tiny. code. startup mov dx, Розбирання програми Введемо в файлі код: model tiny. code. startup mov dx, offset testm mov ah, 09 h int 21 h retret testm db «Hello, world!!! $» endend Директива , яка забезпечує код ініціалізації, поточній моделі і операційної системи. Вона відзначає також початок програми. Ця директива має наступний синтаксис: STARTUPCODE або . STARTUP. дозволяє одержати значення зсуву виразу у байтах відносно початку того сегмента, у якому вираження визначене.

  Розбирання програми int 21 h - Це переривання служить головним входом більшості Розбирання програми int 21 h — Це переривання служить головним входом більшості функцій DOS. Програма, що запрошує сервіс DOS, повинна підготувати всю необхідну інформацію в регістрах і управляючих блоках, вказати в регістрі AH номер бажаної функції DOS і потім викликати переривання INT 21 H. Роздивимось основні функції і вимоги до їх використання

  Ряд основних функцій переривання 21 hh Функція DOS 00 H: завершити програму Ряд основних функцій переривання 21 hh Функція DOS 00 H: завершити програму Функція DOS 01 H: введення з клавіатури Функція DOS 02 H: виведення на дисплей Функція DOS 05 H: виведення на принтер Функція DOS 06 H: Обмін з консоллю Функція DOS 07 H: Нефільтруюче консольне введення без луни Функція DOS 08 H: Консольне введення без луни Функція DOS 09 H: Видати рядок Функція DOS 0 a. H: буферизуюче введення рядка Функція DOS 0 b. H: перевірити статус введення Функція DOS 0 c. H: введення з очищенням Функція DOS 0 d. H: Скинути диск Функція DOS 1 b. H: дати інформацію FAT (поточний диск) Функція DOS 1 c. H: дати інформацію FAT (будь-який диск)

  Ряд основних функцій переривання 21 hh Функція DOS 21 H: читати запис Ряд основних функцій переривання 21 hh Функція DOS 21 H: читати запис довільного файлу Функція DOS 22 H: писати запис довільного файлу Функція DOS 23 H: дати розмір файлу через FCB Функція DOS 27 H: читати блок довільного файлу Функція DOS 28 H: писати блок довільного файлу Функція DOS 29 H: Розібрати ім’я файлу Функція DOS 2 a. H: дати дату DOS Функція DOS 2 b. H: встановити дату DOS Функція DOS 2 c. H: дати час DOS Функція DOS 2 d. H: встановити час DOS Функція DOS 2 e. H: встановити/скинути перемикач верифікації Функція DOS 30 H: дати номер версії DOS Функція DOS 31 H: завершитися і залишитися резидентним — KEEP Функція DOS 36 H: дати вільну пам’ять диска Функція DOS 39 H: створити новий зміст — MKDIR Функція DOS 3 a. H: Видалити зміст — RMDIR Функція DOS 3 b. H: встановити замовчуваний зміст DOS — CHDIR Функція DOS 3 c. H: створити описувач файлу Функція DOS 3 d. H: відкрити описувач файлу Функція DOS 3 e. H: Закрити описувач файлу Функція DOS 3 f. H: читати файл через описувач Функція DOS 40 H: писати у файл через описувач Функція DOS 41 H: Видалити файл Функція DOS 42 H: встановити покажчик файлу — LSEEK Функція DOS 43 H: встановити/опитати атрибут файлу — CHMOD Функція DOS 44 H: управління введенням-висновком пристрою — IOCTL Функція DOS 45 H: Дублювати описувач файлу — DUP Функція DOS 46 H: перепризначувати описувач — FORCDUP Функція DOS 47 H: дати замовчуваний зміст DOS Функція DOS 48 H: розподілити пам’ять (дати розмір пам’яті) Функція DOS 49 H: Звільнити блок розподіленої пам’яті Функція DOS 4 a. H: Стиснути або розширити блок пам’яті Функція DOS 4 b. H: виконати або завантажити програму — EXEC Функція DOS 4 c. H: завершити програму — EXIT Функція DOS 4 d. H: дати код виходу програми — WAIT Функція DOS 4 e. H: Знайти 1 -й співпадаючий файл Функція DOS 4 f. H: Знайти наступний співпадаючий файл Функція DOS 54 H: дати перемикач верифікації DOS Функція DOS 56 H: Перейменувати/перемістити файл Функція DOS 57 H: встановити/опитати час/дату файлу Функція DOS 59 H: дати розширену інформацію про помилку Функція DOS 5 a. H: створити унікальний тимчасовий файл Функція DOS 5 b. H: створити новий файл Функція DOS 5 c. H: блокувати/розблоковувати доступ до файлу Функція DOS 5 e. H: різні мережеві функції Функція DOS 5 f. H: перепризначення пристроїв в мережі Функція DOS 62 H: дати адресу префікса програмного сегменту

  Ряд основних функцій переривання 21 hh Функція DOS 36 H: дати вільну Ряд основних функцій переривання 21 hh Функція DOS 36 H: дати вільну пам’ять диска Функція DOS 39 H: створити новий зміст — MKDIR Функція DOS 3 a. H: Видалити зміст — RMDIR Функція DOS 3 b. H: встановити замовчуваний зміст DOS — CHDIR Функція DOS 3 c. H: створити описувач файлу Функція DOS 3 d. H: відкрити описувач файлу Функція DOS 3 e. H: Закрити описувач файлу Функція DOS 3 f. H: читати файл через описувач Функція DOS 40 H: писати у файл через описувач Функція DOS 41 H: Видалити файл Функція DOS 42 H: встановити покажчик файлу — LSEEK Функція DOS 43 H: встановити/опитати атрибут файлу — CHMO

  Ряд основних функцій переривання 21 hh Функція DOS 44 H: управління введенням-висновком Ряд основних функцій переривання 21 hh Функція DOS 44 H: управління введенням-висновком пристрою — IOCTL Функція DOS 45 H: Дублювати описувач файлу — DUP Функція DOS 46 H: перепризначувати описувач — FORCDUP Функція DOS 47 H: дати замовчуваний зміст DOS Функція DOS 48 H: розподілити пам’ять (дати розмір пам’яті) Функція DOS 49 H: Звільнити блок розподіленої пам’яті Функція DOS 4 a. H: Стиснути або розширити блок пам’яті Функція DOS 4 b. H: виконати або завантажити програму — EXEC Функція DOS 4 c. H: завершити програму — EXIT Функція DOS 4 d. H: дати код виходу програми — WAIT Функція DOS 4 e. H: Знайти 1 -й співпадаючий файл Функція DOS 4 f. H: Знайти наступний співпадаючий файл Функція DOS 54 H: дати перемикач верифікації DOS Функція DOS 56 H: Перейменувати/перемістити файл Функція DOS 57 H: встановити/опитати час/дату файлу Функція DOS 59 H: дати розширену інформацію про помилку Функція DOS 5 a. H: створити унікальний тимчасовий файл Функція DOS 5 b. H: створити новий файл Функція DOS 5 c. H: блокувати/розблоковувати доступ до файлу Функція DOS 5 e. H: різні мережеві функції Функція DOS 5 f. H: перепризначення пристроїв в мережі Функція DOS 62 H: дати адресу префікса програмного сегменту

  Ряд функцій переривання 21 hh Функція DOS 56 H: Перейменувати/перемістити файл Ряд функцій переривання 21 hh Функція DOS 56 H: Перейменувати/перемістити файл Функція DOS 57 H: встановити/опитати час/дату файлу Функція DOS 59 H: дати розширену інформацію про помилку Функція DOS 5 a. H: створити унікальний тимчасовий файл Функція DOS 5 b. H: створити новий файл Функція DOS 5 c. H: блокувати/розблоковувати доступ до файлу Функція DOS 5 e. H: різні мережеві функції Функція DOS 5 f. H: перепризначення пристроїв в мережі Функція DOS 62 H: дати адресу префікса програмного сегменту

  Описання дії і вимог основних функцій переривання 21 hh DOS Fn 00 Описання дії і вимог основних функцій переривання 21 hh DOS Fn 00 H: завершити програму Вхід AH = 00 H CS = сегмент PSP процесу, що завершується Вихід = (непридатний) Опис: передає управління на вектор завершення в PSP (виходить в батьківський процес). Ідентична функції INT 20 H Terminate. регістр CS повинен указувати на PSP. відновлює вектори переривань DOS 22 H-24 H (завершення, Ctrl-Break і Критична помилка), встановлюючи значення, збережені в батьківському PSP. виконує скидання файлових буферів. файли повинні бути заздалегідь закриті, якщо їх довжина змінилася. Зауваження: Простіше і більш акуратно — використовувати функцію DOS Fn 4 c. H Exit.

  Описання дії і вимог основних функцій переривання 21 hh DOS Fn 01 Описання дії і вимог основних функцій переривання 21 hh DOS Fn 01 H: ввод з клавіатури Вхід AH = 0 11 H H Вихід AL = символ, одержаний із стандартного введення Опис: Прочитує (чекає) символ із стандартного вхідного пристрою. Відображає цей символ на стандартний вихідний пристрій (луна). при розпізнаванні Ctrl-Break виконується INT 23 H. Зауваження: введення розширених клавіш ASCII (F 1 -F 12, Pg. Up, курсор і т. п. ) вимагає двох звернень до цієї функції. перший виклик повертає AL=0. Другий виклик повертає в AL розширений код ASCII.

  Описання дії і вимог основних функцій переривання 21 hh DOS Fn 02 Описання дії і вимог основних функцій переривання 21 hh DOS Fn 02 H: виведення на дисплей Вхід AH = 02 H DL = символ, що виводиться на стандартний виведення Вихід Опис: Посилає символ з DL на стандартний виведення. обробляє символ Backspace (ASCII 8), переміщаючи курсор вліво на одну позицію і залишаючи його в новій позиції. при виявленні Ctrl-Break виконується INT 23 H.

  Описання дії і вимог основних функцій переривання 21 hh DOS Fn 05 Описання дії і вимог основних функцій переривання 21 hh DOS Fn 05 H: виведення на принтер Вхід AH = 05 H DL = символ, записуваний на стандартний принтер Вихід Опис: Посилає символ в DL на стандартний пристрій принтера, звичне LPT 1. Зауваження: команда DOS MODE може перенаправити цей виведення в послідовний порт.

  Описання дії і вимог основних функцій переривання 21 hh DOS Fn 09 Описання дії і вимог основних функцій переривання 21 hh DOS Fn 09 H: Видати рядок на дисплей Вхід AH = 09 H DS: DX = адреса рядка, що закінчується символом ‘$’ (ASCII 24 H) Вихід Опис: рядок, виключаючи завершальний її символ ‘$’, посилається на стандартний виведення. символи Backspace обробляються як у функції 02 H Display Char. звичайно, щоб перейти на новий рядок, включають в текст пару CR/LF (ASCII 13 H і ASCII 0 a. H). рядки, що містять ‘$’, можна видати через 40 H Write Handle (BX=0).

  Описання дії і вимог основних функцій переривання 21 hh DOS Fn 0 Описання дії і вимог основних функцій переривання 21 hh DOS Fn 0 a. H: введення рядка в буфер Вхід AH = 0 a. H DS: DX = адреса вхідного буфера (дивися нижче) Вихід = буфер містить введення, що закінчується символом CR (ASCII 0 d. H) Опис: при вході буфер за адресою DS: DX повинен бути оформлений так: +—+—+—+—+—+—+- — — |max| ? | ? ? ? MAX — максимально допустима +—+—+—+—+—+—+ — — довжина введення (від 1 до 254) при виході буфер заповнений даними таким чином:

  Описання дії і вимог основних функцій переривання 21 hh +---+---+---+---+---+---+- - - Описання дії і вимог основних функцій переривання 21 hh +—+—+—+—+—+—+- — — |max|len| T E X T 0 d. H LEN — дійсна довжина даних +—+—+—+—+—+—+ — — без завершального CR (тут — 04 H). символи прочитуються із стандартного введення аж до CR (ASCII 0 d. H) або до досягнення довжини MAX-1. якщо досягнутий MAX-1, включається консольний дзвінок для кожного чергового символу, поки не буде введене повернення каретки CR (натиснення Enter). Другий байт буфера заповнюється дійсного завдовжки введеного рядка, не рахуючи завершального CR. останній символ в буфері — завжди CR (який не зарахований в байті довжини). символи в буфері (включаючи LEN) у момент виклику використовуються як «шаблон».

  Описання дії і вимог основних функцій переривання 21 hh DOS Fn 0 Описання дії і вимог основних функцій переривання 21 hh DOS Fn 0 b. H: перевірити статус введення Вхід AH = 0 b. H Вихід AL = 0 ff. H, якщо символ доступний із стандартного введення Опис: перевіряє стандартного введення. при розпізнаванні Ctrl-Break виконується INT 23 H. Замеченія: використовуйте перед функціями 01 H 07 H і 08 H, щоб уникнути очікування натиснення клавіші. Ця функція дає простий неруйнуючий спосіб перевірки Ctrl-Break в процесі довгих обчислень або іншої обробки, що звичайно не вимагає введення. це дозволяє вам знімати рахунок по натисненню Ctrl-Break.

  Описання дії і вимог основних функцій переривання 21 hh DOS Fn 4 Описання дії і вимог основних функцій переривання 21 hh DOS Fn 4 c. H: завершити програму — EXIT Вхід AH = 4 c. H AL = код виходу Вихід = (непридатний) Опис: повертає управління від породженого процесу його батькові, встановлюючи код виходу, який можна опитати функцією 4 d. H WAIT. Управління передається за адресою завершення в PSP програми, що завершується. вектори Ctrl-Break і Critical Error відновлюються до старих адрес, сохраненнми в батьківському PSP. Зауваження: значення ERRORLEVEL (використовуване в пакетних файлах DOS) можна використовувати для перевірки коду виходу самої останньої програми.

  Розбирання програми Введемо в файлі код: model tiny. code. startup mov dx, Розбирання програми Введемо в файлі код: model tiny. code. startup mov dx, offset tm mov ah, 0 ah int 21 h mov dx, offset testm mov ah, 09 h int 21 h mov dx, offset tm add dx, 2 h mov ah, 09 h int 21 h retret tmtm db 255, 255 dup(«$») testm db «Hello, world!!! $» endend

  Розбирання програми model tiny . code. startup  mov dx, offset Sos Розбирання програми model tiny . code. startup mov dx, offset Sos ; ; встановлюємо покажчик на строку mov ah, 0 Ah int 21 h ; введення строки mov ah, 0 mov bx, dx mov cx, [bx + 1] ; ; встановлюємо лічильник lstlst : ; початок циклу mov di, cx cmp Sos[di+1], 60 h ; перевірка, чи літера маленька jl next ; якщо літера велика – йдемо далі sub Sos[di+1], 20 h ; якщо маленька –змінюємо її next: loop lst ; перехід на початок циклу mov dx, offset Sos + 2 ; встан. вказ івник на рядок mov ah, 9 int 21 h ; виведення строки retret Sos db 20 dup($) ; змінна-рядок endend