Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка_СистПрогр_ЛР.DOC
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
2.16 Mб
Скачать

12.3 Завдання на роботу

Обчислити значення виразу:

  1. A*B+C*D

  2. A/B+C/D

Операції множення та ділення операндів виконати за допомогою підпрограми.

Таблиця 12.1 - Варіанти завдань

№ варіанту

A

B

C

D

Варіант рівняння

1

12

10

15

10

a

2

12

10

15

10

a

3

12

10

15

10

a

4

20

13

26

15

b

5

20

13

26

15

b

6

20

12

16

12

a

7

20

12

16

12

a

8

20

12

16

12

a

9

18

18

20

18

b

10

18

18

20

18

b

11

24

10

16

10

a

12

24

10

16

10

a

13

24

10

16

10

a

14

24

24

18

18

b

15

24

24

18

18

b

12.4 Приклад оформлення звіту

Завдання: Обчислити значення виразу: A*B+C*D, множення виконати зсувом вліво суми часткових добутків аналізом другого множника старшими бітами вперед. A,C – 22-розрядні, В,D – 10 – розрядні операнди.

Виконання:

model small

stack 100h

dataseg

RES_H dw 0

RES_L dw 0

ends

codeseg

main:

mov ax,@data

mov ds,ax

mov si,0ABCFh ;A_L

mov dl,023h ;A_H

mov bx,0266H ;B

call mul_p

mov RES_H,cx ;зберігання результату А*В

mov RES_L,di

mov si,057AFh ;C_L

mov dl,013h ;C_H

mov bx,0347H ;D

call mul_p

add RES_L,di

adc RES_H,cx

jmp end_main

mul_p proc

xor di,di

xor bp,bp

mov cx,10h

xor dh,dh

mul_1: shl di,1

rcl bp,1

shl bx,1

jnc mul_2

add di,si

adc bp,dx

mul_2: loop mul_1

mov cx,bp

ret

mul_p endp

end_main:

end main

Нижче наведено приклад програми, що виконує те ж завдання тільки параметри та результат підпрограми передаються через стек.

model small

stack 100h

dataseg

RES_H dw 0

RES_L dw 0

ends

codeseg

main:

mov ax,@data

mov ds,ax

push 0 ;резерв для результату

push 0 ;резерв для результату

push 0ABCFh ;A_L

push 0023h ;A_H

push 0266H ;B

mov bp,sp

call mul_p

pop cx ;зберігання результату А*В

pop dx

push 0

push 0

push 057AFh ;C_L

push 013h ;C_H

push 0347H ;D

call mul_p

pop RES_H

pop RES_L

add RES_L,dx

adc RES_H,cx

jmp end_main

mul_p proc

push cx ;зберігання СХ в стеку

mov di,word ptr [bp+4]

mov si,word ptr [bp+2]

mov cx,10h

mul_1: shl word ptr [bp+8],1

rcl word ptr [bp+6],1

shl [bp+1],1

jnc mul_2

add word ptr [bp+8],di

adc word ptr [bp+6],si

mul_2: loop mul_1

pop cx ;відновлення СХ

ret 6

mul_p endp

end_main:

end main

ЛАБОРАТОРНА РОБОТА №13

ВИВІД НА ЕКРАН

13.1 Мета роботи

Навчитися визначати та змінювати положення курсору, міняти його розмір, а також виводити інформацію в задані координати екрану.

13.2 Теоретичні відомості

Для роботи з відеоадаптерами переважно використовують функції BIOS переривання 10h, замість програмування регістрів. Такий підхід є безпечнішим і надійнішим з погляду надійності функціонування системи, оскільки існує спеціальний відео-BIOS, встановлений на платі відеоадаптера. Такий відео-BIOS гарантує коректну роботу з регістрами і виключає можливі неправильних режимів роботи. Деякі функції переривання 10h подано в наступній таблиці:

Таблиця 13.1 – Функції переривання 10h

Функція

Опис

00h

Вибір режиму роботи відеоадаптера

01h

Зміна форми курсору в текстовому режимі

02h

Зміна положення курсору

03h

Визначення поточного положення курсору

08h

Зчитування символу та його атрибутів

09h

Запис символу з атрибутами в поточне положення курсору

0Аh

Запис символу в поточну позицію курсору

0Fh

Визначення поточного режиму роботи відеоадаптера

Доцільно зазначити, що координати курсору визначають не тільки місце на екрані, де він розміщується, але і позицію, починаючи з якої відповідні функції BIOS чи DOS будуть виводити на екран рядки або окремі символи.