DevioLab CRYPTO TRADING AUTOMATION
LIVE
AUTOMATED CRYPTO TRADING • BINANCE
Автоматизуйте свій криптопортфель
Торгові боти DevioLab аналізують крипторинок, автоматично відкривають і закривають позиції та керують вашим портфелем на Binance 24/7.
CRYPTO 80 Bots
BINANCE Spot Trading
TRADING 24 / 7
Спробувати DevioLab
deviolab.com

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

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

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

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

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

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

Міністерство освіти і науки України Національний університет „Львівська політехніка” Кафедра електронних обчислювальних машин Звіт про виконання лабораторної роботи № 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:09

Коментарі

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

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

Нічого не вибрано
0%

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

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

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

Admin

26.02.2023 12:38

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