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

Використання макрокоманд та процедур. Ввід даних з клавіатури та вивід результату на екран.

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

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

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

Рік:
2015
Тип роботи:
Лабораторна робота
Предмет:
Засоби системного програмування

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

Міністерство освіти і науки України Національний університет “Львівська політехніка” Кафедра «Електронні обчислювальні машини» Лабораторна робота №6 “Використання макрокоманд та процедур. Ввід даних з клавіатури та вивід результату на екран.” з дисципліни: “ Засоби системного програмування” Львів - 2013 Мета роботи: Мета: набути навиків написання макрокоманд та процедур на Асемблері, освоїти способи передачі параметрів. Реалізувати ввід та вивід даних в десятковій системі числення. ЗАВДАННЯ: 1. Створити *.exe програму, яка реалізовує обчислення, заданого варіантом виразу над даними, введеними в десятковій системі і результат виводить на екран в десятковій формі. Програма повинна складатися з трьох основних підпрограм: процедура вводу - забезпечує ввід даних з клавіатури в десятковій формі і їх перевід у двійкове значення ; процедура безпосередніх обчислень – здійснює всі необхідні арифметичні дії у двійковій системі; процедура виводу – забезпечує перевід війкового результату у десятковий формат та вивід на екран. Передача параметрів може здійснюватися довільним чином. Кожна з перерахованих процедур може містити довільну кількість додаткових підпрограм. Вхідні операнди А, В, С, D, E, F вважати беззнаковими і довжиною в байтах, згідно з індексу. К – константа, довжина якої визначається значенням(згідно варіанту). 2. Переконатися у правильності роботи кожної процедури зокрема та програми загалом. 3. Скласти звіт про виконану роботу з приведенням тексту програми та коментарів до неї. 4. Дати відповідь на контрольні запитання. Мій Варіант 11 11 X=(A4-B3-K)*D1+E4/F2 311   Код програми: 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 0311h A dd 0000h B dd 0000h D db 0000h E dd 0000h F dw 00h Temp1 dw 00h,00h Temp2 dw 00h, 00h Temp3 dw 00h Temp4 dw 00h temp5 dw 00h X dw 00h,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-B3-K)*D1+E4/F2 K=311h,785d','$' 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,' D =0 --> divide by zero ',13,10,'$' erStr3 db 13,10,'Data is too long ',13,10,'$' Mult10 dw 1,0 my_z dw 0,0 .CODE start: 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,11 mov cx,MaxLen call input_variable LEA DX,MESSG_B MOV AH,09 INT 21H mov di,offset B mov MaxLen,11 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 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 di,offset E mov MaxLen,11 mov cx,MaxLen call input_variable LEA DX,MESSG_F MOV AH,09 INT 21H mov di,offset F mov MaxLen,5 mov cx,MaxLen call input_variable ret input endp calculation proc xor ax,ax xor bx,bx xor cx,cx xor dx,dx mov bx, offset A mov ax, [bx+2] mov bx, offset B mov cx, [bx+2] mov temp1+2, cx ;A-B=Temp1 sub ax, cx mov dx, ax mov bx, offset A mov ax, [bx] mov bx, offset B mov cx, [bx] sub ax, cx sbb dx,0 clc mov temp1, ax ;temp1 - K = temp2 mov ax, Temp1 mov bx, temp1+2 mov cx, K sub ax, cx sbb bx,0 clc mov Temp2,ax mov temp2+2,bx ;Temp2*D=Temp3 mov ax, temp2 xor bx, bx mov bl, D mul bx mov temp3, ax mov temp4, dx mov X, ax xor cx, cx mov ax, temp2+2 mul bx add ax,temp4 adc dx, 0 mov ax, temp4 mov dx, temp5 mov ax, temp3 mov ax, temp4 mov ax, temp5 ; E/F=Temp4 mov bx, offset E mov ax, [bx] mov dx, [bx+2] div F mov Temp1, ax mov ax,0 ;Temp3+Temp4= X xor ax,ax xor bx,bx xor cx,cx mov ax, Temp3 add ax, Temp1 mov bx, temp3 mov X, ax mov ax, temp4 mov X+2, ax mov ax, temp5 mov X+4, ax ret calculation endp input_variable PROC mov si,0 In_00: mov ah,01 int 21h cmp al,0Dh je In_1 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 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 [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 di,0 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 O_2: mov dl,X_Str[di] mov ah,02h int 21h dec di jge O_2 ret output ENDP end start Результати виконання програми: / Висновок: У цій лабораторній роботі я освоїв використання макрокоманд та процедур на Асемблері, освоїти способи передачі параметрів. Реалізувати ввід та вивід даних в десятковій системі числення. Набув вміння використовувати арифметичні команди над знаковими даними та команди логічних операцій.
Антиботан аватар за замовчуванням

18.03.2015 01:16

Коментарі

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

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

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

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

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

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

Admin

26.02.2023 12:38

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