Міжмодульна взаємодія

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

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

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

Рік:
2004
Тип роботи:
Звіт про виконання лабораторної роботи
Предмет:
Системне програмування

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

Міністерство освіти і науки України Національний університет „Львівська політехніка” Кафедра електронних обчислювальних машин Звіт про виконання лабораторної роботи № 10 з курсу „ Системне програмування ” Тема: Міжмодульна взаємодія. Львів – 2004 Мета роботи: Ознайомитись з принципами спільного використання коду та даних між програмами під управлінням MS-DOS. Короткі теоретичні відомості Створюючи програмне забезпечення на мові Асемблера проектувальник потенційно може зіткнутись з такими ситуаціями: необхідність компонування декількох програм написаних на різних мовах програмування (наприклад, для об‘єднання потужності мов високого рівня та ефективності асемблера); програма, написана у вигляді одного модуля, може виявитись завеликою для асемблювання; окремі модулі можуть бути написані різними проектувальниками з метою подальшої інтеграції; з причини великого розміру виконавчого модуля може виникнути необхідність перекриття окремих частин програми в процесі виконання. Кожна програма асемблюється окремо і генерує власний унікальний об‘єктний (OBJ) модуль. Програма  компонувальник (LІNK) к правило виконання починається з основної програми, яка викликає одну або декілька підпрограм. Підпрограми, в свою чергу, можуть задіювати інші підпрограми. Виклик іншої програми зумовлює необхідність міжсегментного (довгого) виклику (CALL). Дана операція спочатку записує до стеку вміст регістру CS і заносить до цього регістру адресу іншого сегменту, потім записує до стеку значення регістру ІP і заносить до цього регістру нову відносну адресу. Таким чином, в стеку запам‘ятовуються і адреса кодового сегменту, і зміщення для наступного повернення з підпрограми. Завдання на лабораторну роботу Створити програму, що складається з трьох частин (головна програма та дві сервісні підпрограми), причому головна програма повинна виконувати функції координації та контролю роботи сервісних підпрограм. В якості алгоритму роботи сервісних програм необхідно використати алгоритм програми створеної в процесі виконання лабораторної роботи № 6. Означений алгоритм необхідно розділити на дві взаємозв‘язані частини (окремі для кожної з сервісних програм) так, щоб результат виконання першої частини передавався в другу частину для подальшої обробки шляхом використання спільних для обох програм даних. Взаємодію між основною та сервісними програмами необхідно організувати шляхом передачі параметрів через стек. Вміст .asm-файлів Основний модуль: EXTRN GETCH:FAR EXTRN PUTCH:FAR STACKSG SEGMENT PARA STACK 'Stack' DW 64 DUP(?) STACKSG ENDS DATASG SEGMENT PARA 'Data' ControlCMsg db 10,13,' * Press any key to view its ASCII/EXT code *' db 10,13,' * press CTRL+C to exit *$' KeyMsg db 10,13,'Keypressed echo: $' DATASG ENDS ;--------------------------------------------- CODESG SEGMENT PARA PUBLIC 'Code' BEGIN PROC FAR ASSUME CS:CODESG,DS:DATASG,SS:STACKSG PUSH DS SUB AX,AX PUSH AX MOV AX,DATASG MOV DS,AX mov dx,OFFSET ControlCMsg; mov ah,09 int 21h cycle: mov dx,OFFSET KeyMsg mov ah,09 int 21h CALL GETCH CALL PUTCH jmp cycle BEGIN ENDP CODESG ENDS END BEGIN Перший модуль: CODESG SEGMENT PARA PUBLIC 'Code' GETCH PROC FAR ASSUME CS:CODESG PUBLIC GETCH PUSH BP MOV BP,SP mov ah,01h int 21h ; char in cmp al,0 jz ext mov bh,0 ;ascii jmp print ext: mov bh,1 ;ext mov ah,01h int 21h ; repeat for extended scan-code print: push AX push BX ;SAVE DATA TO STACK POP BP RET GETCH ENDP CODESG ENDS END Другий модуль: CODESG SEGMENT PARA PUBLIC 'Code' PUTCH PROC FAR ASSUME CS:CODESG,DS:CODESG PUBLIC PUTCH jmp strt CodeMsg db 10,13,'ASCII-code: $' ExtMsg db 10,13,'Extended-code: $' KeyCode db 0,0,'$' strt: PUSH BP MOV BP,SP pop BX pop AX ; GET DATA FROM STACK mov bl,al ; put symbol to out register mov ax,seg CodeMsg mov ds,ax ;************ ?# digit *********************** and al,0f0h shr al,4 cmp al,09h jg az01 add al,30h mov KeyCode,al jmp next01 az01: add al,37h mov KeyCode,al next01: ;************ #? digit *********************** mov al,bl and al,00fh cmp al,9h jg az02 add al,30h mov KeyCode+1,al jmp next02 az02: add al,37h mov KeyCode+1,al next02: mov dx,OFFSET CodeMsg cmp bh,1 jz extprn jmp asciiprn extprn: mov dx,OFFSET ExtMsg asciiprn: mov ah,09 int 21h mov dx,OFFSET KeyCode mov ah,09 int 21h POP BP ret PUTCH ENDP CODESG ENDS END Висновок: Виконуючи дану лабораторну роботу, я ознайомився з принципами спільного використання коду та даних між програмами під управлінням MS-DOS.
Антиботан аватар за замовчуванням

31.03.2013 15:03-

Коментарі

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

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

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

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

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

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

Admin

26.02.2023 12:38

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