*.EXE - файли та програмування мовою assembler для ІBM PC.

Інформація про навчальний заклад

ВУЗ:
Національний університет Львівська політехніка
Інститут:
Не вказано
Факультет:
Не вказано
Кафедра:
Електронні обчислювальні машини

Інформація про роботу

Рік:
2004
Тип роботи:
Лабораторна робота
Предмет:
Системне програмування
Група:
КІ-З

Частина тексту файла (без зображень, графіків і формул):

Міністерство освіти і науки України Національний університет „Львівська політехніка” Кафедра електронних обчислювальних машин Звіт про виконання лабораторної роботи № 4 з курсу „ Системне програмування ” Тема: *.EXE - файли та програмування мовою assembler для ІBM PC. Виконав: студент групи КІ-3 Львів – 2004 Мета роботи: оволодіння навичками створення *.EXE-файлів та визначення конфігурації ПЕОМ та її модулів. Короткі теоретичні відомості 1.Структура стандартної програми типу .EXE TІTLE Програма типу .EXE STACK SEGMENT PARA STACK 'STACK' db 200h DUP (?) STACK ENDS DATA SEGMENT WORD 'DATA' HelloMessage db 'Hello, world',13,10,'$' DATA ENDS CODE SEGMENT WORD 'CODE' ASSUME cs:CODE, ds:DATA ProgramStart: push ds ;initialize stack segment sub ax,ax ;initialize stack segment push ax ;initialize stack segment mov ax,Data ;initialize data segment mov ds,ax ;initialize data segment mov dx,OFFSET HelloMessage ;DS:DX poіnts to the HelloMessage mov ah,09 ;DOS strіng prіnt functіon іnt 21h ;prіnt the HelloMessage mov ah,4Ch ;DOS termіnate program functіon іnt 21h ;end of the program CODE ENDS END ProgramStart Порядок запису сегментів у програмі на мові Turbo-Assembler може бути довільним. Образ програми у пам'яті починається з префікса програмного сегмента (Program Segment Prefіx, PSP), що утворюється та заповнюється системою. PSP завжди має розмір 256 байтів та вміщує таблиці та поля даних, що використовуються системою під час виконання програми. Після PSP розташовуються сегменти програми. Сегментні регістри автоматично ініціалізуються наступним чином: ES та DS вказують на початок PSP, CS - на початок програмного сегменту, SS - на початок сегменту стеку. До IP завантажується відносна адреса точки входу до програми (з операнда директиви END). Додаткова ініціалізація та завершення: Оскільки системний завантажувач використовує DS для встановлення початкової точки PSP, програма користувача повинна зберегти цю адресу, записавши значення DS до стеку. Система вимагає, щоби наступне значення в стеку було нульовою адресою (точніше, зміщенням). Необхідно також ініціалізувати DS так, щоб він вказував на власні дані програми користувача (оскільки не існує способу пересилання безпосередніх значень до сегментних регістрів, в якості проміжного пункту пересилання використовується один із регістрів даних, наприклад, AX). Образ пам'яті програми типу .EXE наведено на рисунку: DS,ES -> |------------------| | PSP (256 байтів) | менші адреси CS -> | ---------------- | <-- ІP | Програмний | | сегмент | |------------------| | Сегмент даних | SS -> |------------------| | Сегмент стека | |------------------| <-- SP Розмір кожного сегменту не може перевищувати 64KB. Команда RET використовує значення DS, що було збережено в стеку на початку програми, для повернення в DOS. Приклад оформлення асемблерної програми у стилi .EXE  файла iз спрощеними сегментними директивами: DOSSEG .MODEL SMALL .STACK 100h .DATA HelloMessage db 'Hello, world', 13, 10, '$' .CODE push ds ;initialize stack segment sub ax,ax push ax mov ax,@data mov ds,ax ;set DS to poіnt to the data segment mov ah,9 ;DOS prіnt strіng functіon mov dx,OFFSET HelloMessage ;poіnt to "Hello, world" іnt 21h ;dіsplay "Hello, world" mov ah,4ch ;DOS termіnate program functіon іnt 21h ;termіnate the program END 2. Конфігурація ПЕОМ Для вирішення деяких задач необхідно знати тип ЕОМ, тип мікропроцесора, склад зовнішніх пристроїв та їхні технічні характеристики (наприклад, спроба звертання програми до неіснуючого пристрою може призвести до "зависання" операційної системи). Ця інформація зберігається у певних комірках ОЗП, ПЗП і КМОП-пам'яті і наводиться нижче. 2.1. Визначення типу ПЕОМ. 2.2. Визначення типу мікропроцесора. 2.3. Визначення дати створення BIOS. 2.4. Визначення конфігурації IBM PC XT. 2.5. Визначення конфігурації IBM PC AT. Завдання на лабораторну роботу Використовуючи довідкову інформацію про технічні характеристики ПЕОМ, визначити адресу або область ПЗП, ОЗУ або КМОП-пам'яті, що містять дані, необхідні для виконання вказаного викладачем варіанту завдання. Створити програму типу .EXE, що реалізує вказане завдання. Вміст .asm-файлу DOSSEG .MODEL SMALL .STACK 100h .DATA ProcMsg db 10,13,'Type of microprocessor: $' P1Msg db '8086.$' P2Msg db '80286.$' P3Msg db '80386 or later.$' PCMsg db 10,13,'Type of computer: $' ATMsg db 'AT.',10,13, '$' nonATMsg db 'non - AT.',10,13, '$' AcumOKMsg db 'Acumulator is charged and working properly.',10,13,10,13,'$' AcumBadMsg db 'Acumulator is not working properly!',10,13,10,13,'$' .CODE start: push ds sub ax,ax push ax ;initialize stack segment mov ax,@data mov ds,ax ;initialize data segment ;-----Detection of microprocessor type mov dx,OFFSET ProcMsg ;DS:DX points to the ProcMsg mov ah,09 ;DOS string print function int 21h ;print the ProcMsg mov ax,0000 push ax popf pushf mov ax,0000 pop ax CMP ax,0F000h JZ i8086 JMP else1 i8086: mov dx,OFFSET P1Msg else1: mov ax,0F000h push ax popf pushf mov ax,0000 pop ax CMP ax,0000 JZ i80286 mov dx,OFFSET P3Msg JMP print1 i80286: mov dx,OFFSET P2Msg print1: mov ah,09 int 21h ;-----Detection of PC type mov dx,OFFSET PCMsg mov ah,09 int 21h MOV ax,0F000h MOV ds,ax ;set DS to point to F000h MOV bx,0FFFEh MOV dl,[bx] mov ax,@data mov ds,ax CMP dl,0FCh ;Checking if PC is AT ( [F000:FFFE]=FCh ? ) JZ isAT mov dx,OFFSET nonATMsg JMP print2 isAT: mov dx,OFFSET ATMsg print2: mov ah,09 int 21h ;-----Acumulator check mov al,0Eh OUT 70h,al nop IN al,71h nop AND al,80h CMP al,80h JZ Bad mov dx,OFFSET AcumOKMsg JMP print3 Bad: mov dx,OFFSET AcumBadMsg print3: mov ah,09 int 21h ;-----EXIT mov ah,4Ch ;DOS terminate program function int 21h ;terminate the program END start Результат виконання програми Type of microprocessor: 80386 or later. Type of computer: AT. Acumulator is charged and working properly. Висновок: Виконуючи дану лабораторну роботу, я оволодів навичками створення *.EXE-файлів та визначення конфігурації ПЕОМ та її модулів.
Антиботан аватар за замовчуванням

01.01.1970 03:01-

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Ділись своїми роботами та отримуй миттєві бонуси!

Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!
Нічого не вибрано
0%

Оголошення від адміністратора

Антиботан аватар за замовчуванням

Подякувати Студентському архіву довільною сумою

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!