- •Затверджено
- •Протокол №6 від 05.11.2013
- •Загальні положення
- •1 Програмування арифметичних дій та обробка одновимірних масивів
- •Мета роботи
- •1.2 Підготовка до роботи
- •1.3 Вказівки до виконання роботи
- •2 Бітові операції та обробка матриць
- •2.1 Мета роботи
- •2.2 Підготовка до роботи
- •2.3 Вказівки до виконання роботи
- •1.5 Самостійна робота
- •1.6 Контрольні запитання і завдання
- •2.4.1 Варіанти завдань до лабораторної роботи «бітові операції»
- •3 Команди обробки рядків. Макрозасоби мови асемблер
- •3.3 Вказівки до виконання роботи
- •3.4 Варіанти завдань до лабораторної роботи
- •Самостійна робота
- •Контрольні запитання і завдання
- •4 Організація міжмодульного інтерфейсу між програмами мовами високого рівня та мовою асемблер
- •4.1 Мета роботи
- •4.2 Підготовка до роботи
- •4.3 Вказівки до виконання роботи
- •4.4 Варіанти завдань до лабораторної роботи
- •4.5 Самостійна робота
- •4.6 Контрольні завдання
- •5.4. Задание на лабораторную работу
- •5.5. Контрольные вопросы и задания
- •6 Средства ввода информации
- •6.1. Цель работы
- •6.2. Указания по подготовке к выполнению лабораторной работы
- •6.3. Обзор темы работы
- •6.4. Задание на лабораторную работу
- •6.5. Контрольные вопросы и задания
- •7. Многооконный интерфейс
- •7.1. Цель работы
- •7.2. Указания по подготовке к выполнению лабораторной работы
- •7.3. Обзор темы работы
- •7.4. Задание на лабораторную работу
- •7.5. Контрольные вопросы и задания
- •Перелік посилань
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 Варіанти завдань до лабораторної роботи «одновимірні масиви»
Конкретні початкові значення операндів виберіть довільно, якщо у варіанті завдання не сказано інакше.
Із масиву А переписати до масиву В додатні елементи та підрахувати їх кількість.
Підрахувати суму від’ємних елементів масиву С, більших за значенням числа х.
У масиві знайти найбільший елемент та його номер до першого нулевого.
У 5-байтовому масиві підрахувати кількість одиниць та нулів окремо.
У байтовому масиві підрахувати кількість одиниць, які зустрічаються після парного числа.
Перевірити, чи є парною сума непарних елементів масиву.
Масив з 15 слів переписати в зворотному порядку на місці.
Знайти суму від’ємних елементів масиву з 12 слів.
Знайти добуток елементів 8-байтового масиву, розташованих на парних місцях.
Знайти мінімальний елемент масиву цілих чисел та його номер.
Знайти добуток додатних і кількість від'ємних елементів масиву.
Переписати з масиву А до масиву В елементи, які діляться на 3, та знайти їх суму.
У байтовому масиві знайти суму елементів, значення яких лежать в діапазоні 3..127.
Підрахувати кількість ненулевих елементів на непарних місцях в масиві.
Переписати з масиву А до масиву В елементи, які менші Х, та підрахувати кількість елементів Х.
Знайти мінімальне значення серед непарних елементів масиву.
Знайти суму тих елементів масиву, за кожним із яких стоїть 0.
Знайти суму двох масивів байт, виконавши поелементне додавання з урахуванням можливих переносів.
Знайти кількість максимальних елементів з довільного масиву слів.
Знайти суму додатних і кількість нулевих елементів масиву.
З масиву А переписати до масиву В усі непарні елементи.
.Задано масив А. Переписати до масиву В парні елементи, а до масиву С непарні. Знайти суму елементів кожного масиву.
У 7-байтовому масиві підрахувати кількість нулевих елементів на парних місцях.
У числовому масиві підрахувати кількість додатних, нулевих і від'ємних елементів.
У масиві від’ємні елементи замінити нулями, а додатні – одиницями.
