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
Тип роботи:
Звіт до лабораторної роботи
Предмет:
Засоби системного програмування

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

Міністерство освіти та науки України Національний університет «Львівська політехніка»  ЗВІТ З лабораторної роботи №9 З дисципліни: «Засоби системного програмування» На тему: «Використання макрокоманд та процедур. Ввід даних з клавіатури та вивід результату на екран.» ЗАВДАННЯ: 1. Створити *.exe програму, яка реалізовує обчислення, заданого варіантом виразу над даними, введеними в десятковій системі і результат виводить на екран в десятковій формі. Програма повинна складатися з трьох основних підпрограм: процедура вводу - забезпечує ввід даних з клавіатури в десятковій формі і їх перевід у двійкове значення ; процедура безпосередніх обчислень – здійснює всі необхідні арифметичні дії у двійковій системі; процедура виводу – забезпечує перевід війкового результату у десятковий формат та вивід на екран. Передача параметрів може здійснюватися довільним чином. Кожна з перерахованих процедур може містити довільну кількість додаткових підпрограм. Вхідні операнди А, В, С, D, E, F вважати беззнаковими і довжиною в байтах, згідно з індексу. К – константа, довжина якої визначається значенням(згідно варіанту). 2. Переконатися у правильності роботи кожної процедури зокрема та програми загалом. 3. Скласти звіт про виконану роботу з приведенням тексту програми та коментарів до неї. 4. Дати відповідь на контрольні запитання. № Вираз K  7 X=A4/B2-C1*(D1+E2-K) 717   Лістинг програми: DOSSEG .MODEL SMALL 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 .STACK 100h .DATA K EQU 29h A db 0h B dw 0h C dw 0h D dw 0h E db 0h Temp1 dw 00h,00h Temp2 dw 00h,00h Temp3 dw 00h Temp4 dw 00h Temp5 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=A1*B2-A1*C2+D2/(E1+K) K=41 (29h)','$' MESSG_A DB 13,10,'A = ','$' 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_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,' 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 .CODE mov ax,@data mov ds,ax call input call calculation call output mov ah,01 int 21h mov ah,4Ch int 21h input proc LEA DX,MESSG_X MOV AH,09 INT 21H LEA DX,MESSG_A MOV AH,09 INT 21H mov di,offset A mov MaxLen,3 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_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,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 ret input endp calculation proc xor ax,ax xor bx,bx xor cx,cx xor dx,dx mov al,A cbw imul B mov Temp1+2,dx mov Temp1,ax ;temp1 <- ax (A1*B2) /* FF FF FF F4 */ mov al,A cbw imul C mov Temp2+2,dx mov Temp2,ax ;temp2 <- ax (A1*C2) /* 06 00 00 00*/ mov al,E cbw add ax,K mov Temp3,ax ;temp3 <- ax (E1+K1) /* 2A 00*/ mov ax,D cwd idiv Temp3 mov Temp4,ax ;Temp4 <- (D/Temp3) /* FF FF */ mov ax,Temp1 sub ax,Temp2 mov Temp5,ax mov ax,Temp1+2 sbb ax,Temp2+2 mov Temp5+2,ax ;Temp5 <- Temp1-Temp2 /* EE FF FF FF*/ mov ax,Temp5 add ax,Temp4 mov x,ax mov ax,Temp4 cwd adc Dx,Temp5+2 mov x+2,dx ;x <- Temp5+Temp4 /*ED FF FF FF*/ ret calculation 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,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 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 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 output PROC 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 end Висновок і результати роботи програми:  Висновок: я навчився використовувати макрокоманди і процедури в мові Асемблер. .
Антиботан аватар за замовчуванням

18.03.2013 13:05

Коментарі

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

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

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

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

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

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

Admin

26.02.2023 12:38

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