Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
MET_CP_2014.doc
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
421 Кб
Скачать

1.2 Підготовка до роботи

Вивчіть директиви Асемблера, директиви сегментації та арифметичні команди, складіть програму за індивідуальним завданням з використанням наведеної вище бібліотеки допоміжних процедур для виведення. Зверніть увагу на те, що робота виконується над цілими числами. Програміст сам повинен слідкувати за діапазоном використовуваних чисел. Під час підготовки до роботи розгляньте особливості роботи з великими числами (які завбільшки, ніж подвійне слово), звірніть увагу на особливості арифметичних команд і команд розширення знака.

1.3 Вказівки до виконання роботи

Наведені приклади треба оформити як асемблерні вставки в програми мовою С++. Введення, виведення та опис змінних треба виконати на С++.

Введіть текст програми за допомогою довільного текстового редактора, рекомендується як роздільник полів команд використати символ табуляції.

Налагодьте програму і виконайте її. Отримайте роздрук тексту і результатів роботи програми.

Збережіть на особистій дискеті текст програми.

Оформіть звіт до роботи відповідно до рекомендацій, наведених у розділі “ЗАГАЛЬНІ ПОЛОЖЕННЯ". Захистіть результати лабораторної роботи перед викладачем. Корисними під час написання програм такі приклади.

Приклад 1. Обчислити для 48-бітних беззнакових операндів

Y

extrn hexw :near; підключення процедури з модуля

.model Small

.stack 200h

.data

x df 124B4FA4h

c df 1h

y df ?

a df 1h

k df 124B4FA2h

.code

begin:

mov ax , @data

mov ds , ax

;додаток 48-бітних слів

mov bx ,word ptr a ;вх:=мoл. рoзряд

add bx , word ptr x ;вх:= р[мл.]+х[мл.]

mov word ptr y ,bx ;z:=bx

mov bx,word ptr a+2 ;bx:=сeр. рoзр.

adc bx , word ptr x+2

mov word ptr y+2 , bx

mov bx, word ptr a+4 ; стар. poзр. в bx

adc bx, word ptr x+4

mov word ptr y+4 , bx

; віднімання 48-бітних слів

mov bx , word ptr y

sub bx, word ptr c

mov word ptr y ,bx

mov bx, word ptr y+2

sbb bx , word ptr c+2

mov word ptr y+2, bx

mov bx , word ptr y+4

sbb bx , word ptr c+4

mov word ptr y+4,bx

mov bx , word ptr y

sub bx, word ptr k

mov word ptr y ,bx

mov bx, word ptr y+2

sbb bx , word ptr k+2

mov word ptr y+2, bx

mov bx , word ptr y+4

sbb bx , word ptr k+4

mov word ptr y+4,bx

;ділення на 2

clc;

rcr word ptr y+4,1

rcr word ptr y+2,1

rcr word ptr y,1

;виведення результата

mov dx, word ptr y+4;

call hexw;

mov dx, word ptr y+2;

call hexw;

mov dx, word ptr y;

call hexw;

mov ah ,4ch

int 21h

end begin

Приклад 2. Обчислити Y

extrn hexw:near,hex:near,displ:near,kbine:near,msg:near,crlf:near

.model small

.stack 200h

.data

x dw -5

a dw 7

b dw 8

y dw ?

tx db 'x= $'

ta db 'A= $'

tb db 'B= $'

za1 db ' /(x+A+B)*x , если x<0 $ '

za2 db 'y=< $'

za3 db ' \x*x-A , если x>=0 $ '

za db 'Треба знайти значення y, якщо: $'

text db 'Отриманий результат:','$'

.code

mov ax,@data

mov ds,ax

lea dx,za

call msg

call crlf

lea dx,tx

call msg

mov dx,x

call hexw

call crlf

lea dx,ta

call msg

mov dx,a

call hexw

call crlf

lea dx,tb

call msg

mov dx,b

call hexw

call crlf

lea dx,za1

call msg

call crlf

lea dx,za2

call msg

call crlf

lea dx, za3

call msg

call crlf

mov ax,x

cmp ax,0 ;порівняння з нулем

jge m1 ;якщо x>=0

add ax,a

add ax,b

imul x ;(x+a+b)*x

jmp rez

m1:

imul x

sub ax,a ;x*x-a

sbb dx,0

rez: mov y,ax

mov dx,offset text ;lea dx,text

call msg

mov dx,y

call hexw

call kbine

mov ah,4ch

int 21h

end

Приклад 1. У масиві з 10 чисел знайти суму додатніх елементів і кількість від'ємних.

extrn displ:near, hex:near, hexw:near

extrn msg:near

.model small

.stack 100h

.data

mas dw -5,-4,-3,-2,-1,-9,2,3,5,8

sum dw ?

nmb dw ?

inf db ' Сума==>', '$'

typ db ' Кількість==>$'

hexstr db ' Hex$'

.code

mov ax, @data

mov ds, ax

mov ax, 0

mov dx, 0

mov cx, 10

mov bx, offset mas

beg:

cmp [bx], word ptr 0

jl m1

add ax, [bx]

jmp m2

m1:

inc dx

m2:

add bx, 2

loop beg

mov sum, ax

mov nmb, dx

mov dx, offset inf

call msg

mov dx, sum

call hexw

mov dx, offset typ

call msg

mov dx, nmb

call hexw

mov dx, offset hexstr

call msg

mov ah, 4ch

int 21h

end

1.4.1 Варіанти індивідуальних завдань «арифметичні дії»

Конкретні числові значення операндів виберіть довільно.

1. Обчислити , при X>0 , інакше Y=0.

2. Обчислити

3. Обчислити Y

4. Обчислити Y

5. Обчислити для 48-бітних беззнакових операндів Y

6. Обчислити Y

7. Обчислити Y

8. Обчислити для 48-бітних беззнакових операндів Y

9. Обчислити Y

10. Обчислити Y

11. Обчислити для байтових аргументів

Y

12. Обчислити для 48-бітних беззнакових операндів Y

13. Обчислити Y

14. Обчислити для байтових аргументів

Y

15. Обчислити для 48-бітних беззнакових операндів

Y

16. Обчислити для 48-бітних знакових операндів

Y

17. Обчислити Y

18. Обчислити для байтових аргументів

Y

19. Обчислити Y

20. Обчислити для 48-бітних знакових операндів Y

21. Обчислити Y

22. Обчислити Y

23. Обчислити Y

24. Обчислити Y

25. Обчислити для байтових аргументів

Y

1.4.2 Варіанти завдань до лабораторної роботи «одновимірні масиви»

Конкретні початкові значення операндів виберіть довільно, якщо у варіанті завдання не сказано інакше.

  1. Із масиву А переписати до масиву В додатні елементи та підрахувати їх кількість.

  2. Підрахувати суму від’ємних елементів масиву С, більших за значенням числа х.

  3. У масиві знайти найбільший елемент та його номер до першого нулевого.

  4. У 5-байтовому масиві підрахувати кількість одиниць та нулів окремо.

  5. У байтовому масиві підрахувати кількість одиниць, які зустрічаються після парного числа.

  6. Перевірити, чи є парною сума непарних елементів масиву.

  7. Масив з 15 слів переписати в зворотному порядку на місці.

  8. Знайти суму від’ємних елементів масиву з 12 слів.

  9. Знайти добуток елементів 8-байтового масиву, розташованих на парних місцях.

  10. Знайти мінімальний елемент масиву цілих чисел та його номер.

  11. Знайти добуток додатних і кількість від'ємних елементів масиву.

  12. Переписати з масиву А до масиву В елементи, які діляться на 3, та знайти їх суму.

  13. У байтовому масиві знайти суму елементів, значення яких лежать в діапазоні 3..127.

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

  15. Переписати з масиву А до масиву В елементи, які менші Х, та підрахувати кількість елементів Х.

  16. Знайти мінімальне значення серед непарних елементів масиву.

  17. Знайти суму тих елементів масиву, за кожним із яких стоїть 0.

  18. Знайти суму двох масивів байт, виконавши поелементне додавання з урахуванням можливих переносів.

  19. Знайти кількість максимальних елементів з довільного масиву слів.

  20. Знайти суму додатних і кількість нулевих елементів масиву.

  21. З масиву А переписати до масиву В усі непарні елементи.

  22. .Задано масив А. Переписати до масиву В парні елементи, а до масиву С непарні. Знайти суму елементів кожного масиву.

  23. У 7-байтовому масиві підрахувати кількість нулевих елементів на парних місцях.

  24. У числовому масиві підрахувати кількість додатних, нулевих і від'ємних елементів.

  25. У масиві від’ємні елементи замінити нулями, а додатні – одиницями.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]