Лабораторна робота №7

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

ВУЗ:
Інші
Інститут:
Не вказано
Факультет:
Не вказано
Кафедра:
Кафедра ЕОМ

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

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

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

МІНІСТЕРСТВО ОСВІТИ І НАУКИ, МОЛОДІ ТА СПОРТУ УКРАЇНИ ЦІОНАЛЬНИЙ УНІВЕРСИТЕТ “ЛЬВІВСЬКА ПОЛІТЕХНІКА” Кафедра ЕОМ / Лабораторна робота №7 з курсу ”Засоби системного програмування” Багатомодульне програмування. Львів – 2012 Мета: Оволодіти навиками створення багатомодульних програм. Засвоїти правила взаємодії різних модулів. Завдання: 15 X=A2-K+C4/D2-E1*F1 4019  Вміст файлу 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 B,C,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' B dd 00h C dw 00h D dw 00h E db 00h F dw 00h TempStr db 10 dup (0) TempBin dw 0,0 MaxLen dw 0 Mult10 dw 1,0 my_z dw 0,0 MESSG_X DB 13,10, X=A2-K+C4/D2-E1*F1 К=4019 (7055E0AC)','$' MESSG_B DB 13,10,'B= ','$' MESSG_C DB 13,10,'C= ','$' 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,' D =0 --> divide by zero ',13,10,'$' erStr3 db 13,10,'Data is too long ',13,10,'$' 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_B MOV AH,09 INT 21H mov di,offset B mov MaxLen,3 mov cx,MaxLen call input_variable LEA DX,MESSG_C MOV AH,09 INT 21H mov di,offset C mov MaxLen,5 mov cx,MaxLen call input_variable LEA DX,MESSG_D MOV AH,09 INT 21H mov di,offset D mov MaxLen,3 mov cx,MaxLen call input_variable cmp D,0 jne dali mov erFlag,1 mov ah,09 mov dx, offset erStr2_1 int 21h mov ah,4Ch int 21h dali: LEA DX,MESSG_E MOV AH,09 INT 21H 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,0Dh je In_1 cmp al,'-' jne In_0 mov erFlag,1 jmp In_00 In_0: mov dl,al call CHECK_BYTE mov TempStr[si],dl inc si loop In_00 In_1: push si dec si cmp cx,MaxLen jne In_2 LEA DX,erSTR1 MOV AH,09 INT 21H mov erFlag,1 jmp In_5 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,0FFFFh ja In_Err jmp In_3 In_2_1:cmp MaxLen,5 jl In_2_2 cmp dx,00 ja In_Err cmp ah,0FFh 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 erFlag,1 jmp In_5 In_3:cmp erFlag,1 jne In_4 mov bx,0 sub bx,ax mov ax,bx mov bx,0 sbb bx,dx mov dx,bx In_4: mov [di],ax mov [di+2],dx mov TempBin,0 mov TempBin+2,0 mov Mult10,1 mov Mult10+2,0 mov erFlag,0 In_5: RET input_variable ENDP CHECK_BYTE PROC sub dl,30h cmp dl,00 jl ErS cmp dl,0Ah jl GO ErS: LEA DX,erSTR2 MOV AH,09 INT 21H GO: RET CHECK_BYTE ENDP CODESG ENDS END Вміст файлу calc.asm DOSSEG EXTRN B:BYTE,C:WORD,D:WORD,E:BYTE,F:BYTE PUBLIC X;,MESSG_Sign DATASG SEGMENT PARA PUBLIC 'Data' K_low EQU 0E0ACh K_high EQU 7055h Temp1 dw 00h,00h Temp2 dw 00h Temp3 dw 00h Temp4 dw 00h,00h X dw 00h,00h DATASG ENDS CODESG SEGMENT PARA PUBLIC 'CODE' ASSUME DS:DATASG, CS:CODESG MOV AX,DATASG MOV DS,AX calculation proc Far public calculation xor ax,ax xor bx,bx xor cx,cx xor dx,dx mov ax,D ;mov ds,ax mul F mov [Temp1+0], ax; mov [Temp1+2], dx; mov ax,0 mov ax,word ptr[Temp1] mov bh,00 mov bl,E sub ax,bx sbb word ptr[Temp1+2],0 mov word ptr[Temp3+0],ax mov word ptr[Temp3+2],dx mov ax,0 mov ax,word ptr[B] mov dx,word ptr[B+2] div C mov dx,K_high add ax,K_low mov [Temp2+0],ax adc dx,0 mov [Temp2+2],dx mov ax,word ptr[Temp2+0] mov dx,word ptr[Temp3+0] sub ax,dx mov [X],ax mov ax,word ptr[Temp2+2] mov dx,word ptr[Temp3+2] sbb ax,dx mov [X+2],ax sbb [X+4],0 ret calculation endp CODESG ENDS END Вміст файлу output.asm DOSSEG EXTRN X:DWORD;, MESSG_Sign :BYTE DATASG SEGMENT PARA PUBLIC 'Data' X_Str db 10 dup (0) MESSG_X1 DB 13,10,'X= ','$' X_div2 dw 0,0 Y_div2 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 di,0 mov Y_div2,10 mov cx,word ptr X mov bx,word ptr 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 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 Скріншот роботи програми: / Висновок: В даній лабораторній роботі я оволодів навиками створення багатомодульних програм. Засвоїв правила взаємодії різних модулів.
Антиботан аватар за замовчуванням

25.11.2012 18:50

Коментарі

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

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

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

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

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

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

Admin

26.02.2023 12:38

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