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 з дисципліни " Засоби системного програмування " на тему: "Багатомодульне програмування " ЗАВДАННЯ: Створити *.exe програму, яка реалізовує обчислення, заданого варіантом виразу. Програма повинна складатися з чотирьох модулів: головний модуль – містить спільний сегмент стеку, необхідні дані та виклик основних процедур; модуль вводу - забезпечує ввід даних з клавіатури в десятковій формі; модуль безпосередніх обчислень – здійснює всі необхідні арифметичні дії. модуль виводу – забезпечує вивід на екран результату в десятковій формі. Всі модулі повинні бути в різних файлах і об’єднані на етапі лінкування. Передача параметрів може здійснюватися довільним чином. Переконатися у правильності роботи кожного модуля зокрема та програми загалом. Скласти звіт про виконану роботу з приведенням тексту програми та коментарів до неї. Дати відповідь на контрольні запитання. 8 X=A4-B2+K-D2/E1+F1*B2 88   Лістинг програми: main.asm DOSSEG EXTRN Input :FAR, Calculation :FAR, Output :FAR PUBLIC erFlag STACKSG SEGMENT PARA STACK 'Stack' DW 127 DUP(0) STACKSG ENDS DATASG SEGMENT PARA PUBLIC 'Data' erFlag DB 0 DATASG ENDS CODESG SEGMENT PARA PUBLIC 'Code' main: ASSUME CS:CODESG,DS:DATASG,SS:STACKSG MOV AX,DATASG MOV DS,AX CALL input cmp erFlag,0 jne A30 CALL calculation cmp erFlag,0 jne A30 CALL output cmp erFlag,0 jne A30 A30: mov ah,4Ch int 21h CODESG ENDS END main input.asm DOSSEG EXTRN erFlag:BYTE PUBLIC A,B,D,E,F MY_MUL MACRO X,Y,Z mov z,0 mov z+2,0 MOV AX,X MUL Y MOV Z,AX MOV Z+2,DX MOV AX,X+2 MUL Y ADD Z+2,AX mov ax,Z mov dx,Z+2 ENDM DATASG SEGMENT PARA PUBLIC 'Data' A label word dd 0 B dw 0 D dw 0 E db 0 F db 0 Temp1 dw 00h Temp2 dw 00h,00h X dw 00h,00h X_Str db 10 dup (0) TempStr db 10 dup (0) TempBin dw 0,0 MaxLen dw 0 X_div2 dw 0,0 Y_div2 dw 0 MESSG_X DB 13,10,'X=A4-B2+K-D2/E1+F1*B2 K=136 (88h)','$' MESSG_A DB 13,10,'A = ','$' MESSG_B DB 13,10,'B = ','$' MESSG_D DB 13,10,'D = ','$' MESSG_E DB 13,10,'E = ','$' MESSG_F DB 13,10,'F = ','$' MESSG_X1 DB 13,10,'X = ','$' erStr1 db 13,10,'Data not input_variable',13,10,'$' erStr2 db 13,10,'Incorrectly data ',13,10,'$' erStr2_1 db 13,10,' E = 0 --> divide by zero ',13,10,'$' erStr3 db 13,10,'Data is too long ',13,10,'$' minus db '-$' Mult10 dw 1,0 my_z dw 0,0 Bool dw,0 Carry dw,0 DATASG ENDS CODESG SEGMENT PARA PUBLIC 'CODE' ASSUME DS:DATASG, CS:CODESG input proc FAR public Input LEA DX,MESSG_X MOV AH,09 INT 21H LEA DX,MESSG_A MOV AH,09 INT 21H mov di,offset A mov MaxLen,10 mov cx,MaxLen call input_variable LEA DX,MESSG_B MOV AH,09 INT 21H mov di,offset B mov MaxLen,5 mov cx,MaxLen call input_variable LEA DX,MESSG_D MOV AH,09 INT 21H mov di,offset D mov MaxLen,5 mov cx,MaxLen call input_variable LEA DX,MESSG_E MOV AH,09 INT 21H mov di,offset E mov MaxLen,3 mov cx,MaxLen call input_variable LEA DX,MESSG_F MOV AH,09 INT 21H mov di,offset F mov MaxLen,3 mov cx,MaxLen call input_variable ret input endp input_variable PROC mov si,0 In_00: mov ah,01 int 21h cmp al,' ' je In_00 cmp al,' ' je In_00 cmp al,'-' jne In_01 mov Bool,1 In_001: mov ah,01 int 21h In_01: cmp al,0Dh je In_1 In_0: mov dl,al call CHECK_BYTE mov TempStr[si],dl inc si loop In_001 In_1: push si dec si cmp cx,MaxLen jne In_2 call Err1 In_2: mov bh,0 mov bl,TempStr[si] MY_MUL Mult10,bx,my_z add TempBin,ax adc TempBin+2,dx mov bh,0 mov bl,10 MY_MUL Mult10,bx,my_z mov Mult10,ax mov Mult10+2,dx dec si cmp si,0 jge In_2 mov ax, TempBin mov dx,TempBin+2 pop si cmp si,MaxLen jl In_3 cmp MaxLen,10 jl In_2_1 js In_Err cmp dx,07FFFh ja In_Err jmp In_3 In_2_1: cmp MaxLen,5 jl In_2_2 cmp dx,00 ja In_Err cmp ah,07fh ja In_Err jmp In_3 In_2_2: cmp ax,00FFh jbe In_3 In_Err: LEA DX,erSTR3 MOV AH,09 INT 21H mov ah,4Ch int 21h In_3: mov bp,Bool cmp bp,1 jne Set not ax add ax,1 not dx adc dx,0 mov Bool,0 Set: mov [di],ax mov [di+2],dx mov TempBin,0 mov TempBin+2,0 mov Mult10,1 mov Mult10+2,0 RET input_variable ENDP Err1 PROC PUBLIC Err1 LEA DX,erSTR1 MOV AH,09 INT 21H mov ah,4Ch int 21h RET Err1 ENDP CHECK_BYTE PROC PUBLIC CHECK_BYTE sub dl,30h cmp dl,00 jl ErS cmp dl,0Ah jl GO ErS: LEA DX,erSTR2 MOV AH,09 INT 21H mov ah,4Ch int 21h GO: RET CHECK_BYTE ENDP CODESG ENDS END calc.asm DOSSEG EXTRN A:WORD,B:WORD,D:WORD,E:BYTE,F:BYTE PUBLIC X;,MESSG_Sign DATASG SEGMENT PARA PUBLIC 'Data' K EQU 88h Temp1 dw 00h Temp2 dw 00h,00h X dw 00h,00h erStr2_1 db 13,10,' E = 0 --> divide by zero ',13,10,'$' DATASG ENDS CODESG SEGMENT PARA PUBLIC 'CODE' ASSUME DS:DATASG, CS:CODESG MOV AX,DATASG MOV DS,AX calculation proc Far public calculation mov bx,D xor dx,dx mov al,E cbw xchg ax,bx cmp bx,0 jne no_zero mov ah,09 mov dx, offset erStr2_1 int 21h mov ah,4Ch int 21h no_zero: idiv bx mov Temp1,ax mov al,F cbw mov bx,B imul bx mov Temp2,ax mov Temp2+2,dx mov ax,A mov dx,A+2 sub ax,B sbb dx,0 add ax,K adc dx,0 sub ax,Temp1 sbb dx,0 add ax,Temp2 adc dx,Temp2+2 mov X,ax mov X+2,dx ret calculation endp CODESG ENDS END output.asm DOSSEG EXTRN X:WORD;, MESSG_Sign :BYTE DATASG SEGMENT PARA PUBLIC 'Data' X_Str db 10 dup (0) TempStr db 10 dup (0) TempBin dw 0,0 MaxLen dw 0 X_div2 dw 0,0 Y_div2 dw 0 MESSG_X1 DB 13,10,'X = ','$' erStr1 db 13,10,'Data not input_variable',13,10,'$' erStr2 db 13,10,'Incorrectly data ',13,10,'$' erStr3 db 13,10,'Data is too long ',13,10,'$' minus db '-$' Mult10 dw 1,0 my_z dw 0,0 Bool dw,0 Carry dw,0 DATASG ENDS CODESG SEGMENT PARA PUBLIC 'CODE' ASSUME DS:DATASG, CS:CODESG MOV AX,DATASG MOV DS,AX output PROC FAR Public output mov Bool,0 mov di,0 test X+2,8000h jz not_invert mov ax, X mov dx, X+2 not ax not dx add ax,1 adc dx,0 mov X,ax mov X+2,dx mov Bool,1 int 21h not_invert: mov Y_div2,10 mov cx,X mov bx,X+2 O_1: mov X_div2,cx mov X_div2+2,bx call my_div2 add dl,30h mov X_Str[di],dl inc di cmp bx,0 ja O_1 cmp cx,10 jae O_1 add cl,30h mov X_Str[di],cl mov dx,offset MESSG_X1 mov ah,09 int 21h mov bx,Bool cmp bx,1 jne O_2 mov dx,offset minus mov ah,09 int 21h O_2: mov dl,X_Str[di] mov ah,02h int 21h dec di jge O_2 ret output ENDP MY_DIV2 proc sub cx,cx sub bx,bx mov dx,X_div2+2 mov ax,X_div2 M2_D1: cmp dx,Y_div2 jb M2_D3 sub ax,Y_div2 sbb dx,00 add cx,01 adc bx,0 jmp M2_D1 M2_D3: div Y_div2 add cx,ax adc bx,00 ret MY_DIV2 ENDP CODESG ENDS END Результат роботи програми:  Висновок: на даній лабораторній роботі я оволоділа навиками створення багатомодульних програм.
Антиботан аватар за замовчуванням

18.03.2013 13:05

Коментарі

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

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

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

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

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

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

Admin

26.02.2023 12:38

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