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

Розв’язування задач за тематикою заняття

Задача 1. Написати програму обчислення виразу :

f=a*b-c-d%a+c/b+(a*d)/c

де a = 21, b = -30, c = 478, d =1347.

Розв’язання.

Data Segment para 'Data'

a db 21

b db -30

c dw 478

d dw 1347

f dw 0

Data Ends

Code Segment para 'Code'

Assume cs:Code,ds:Data

Main Proc far

push DS

sub AX,AX

push AX

mov AX,Data

mov DS,AX

mov ES,AX

mov AL,A ; Завантажити А в регістр AL.

imul b ;(AL)*B -> (AX) .

sub AX,C ; AX-C -> AX.

mov word ptr f,AX ; Зберегти AX в F. F=A*B-C.

mov AL,a ; Завантажити А в регістр AL. F=F-D % A .

cmp AL,0 ; Чи в AL не 0, щоб не ділити на 0.

je ErorrExit ; Якщо AL=0, то вхід з програми.

cbw ; Розширити вміст AL до слова AX.

mov BX,AX ; AX -> BX.

mov AX,word ptr d ; AX <- D.

cwd ; Розширити вміст AX до подвійного слова.

idiv BX ; (DX,AX)/BX -> результат у AX, остачу в DX.

sub word ptr f,DX ; F=F-остача від ділення D/A

jo ErorrExit ; Якщо переповнення, то вхід з програми.

mov AL,b ; F=F+C/B.

cmp AL,0 ; Чи в AL не 0, щоб не ділити на 0.

je ErorrExit ; Якщо AL=0 вихід з програми.

cbw ; Розширити вміст AL до слова AX.

mov BX,AX ; AX -> BX.

mov AX,c ; AX= C

cwd ; Розширити вміст AX до подвійного слова.

idiv BX ;(DX,AX)/BX -> результат у AX.

add word ptr f,AX

jo ErorrExit ; Якщо переповнення, то вхід з програми.

mov AL,a ; F=F+(A*D)/C.

cbw ; AL <- A, AL -> AX.

imul word ptr d ; (AX)*D -> (DX,AX).

cmp DX,c ; C ? ( DX).

jg ErorrExit ; Якщо C<(DX),то переповнення і вхід з програми.

idiv c ; (DX,AX)/BX -> результат у AX.

add word ptr f,AX ; F=F+(A*D)/C.

ErorrExit: nop

ret

Endp

Задача 2. Задана послідовність цілих чисел . Обчислити :

.

Розв’язання.

Data Segment para 'Data'

n dw 10

a db 13,6,5,4,7 ,5,7,4,10,8

min db ?

summa dw ?

р dw ?

Data Ends

Code Segment para 'Code'

Assume cs:Code,ds:Data

Main Proc far

push DS

sub AX,AX

push AX

mov AX,Data

mov DS,AX

mov CX,n ; Кількість елементів масиву А завантажити у CX.

lea SI,a ; Завантаження відносної адреси масиву А.

mov AL,[SI] ; Завантаження першого елементу масиву А в AL.

inc SI ; Збільшити на 1 вміст регістра SI.

xor AH,AH ; Очистити старшу частину регістра AX.

mov DI,AX ; Регістр для накопичення суми членів послідовності.

mov BX,AX ; Регістр для мінімального члена послідовності.

dec CX ; Зменшити на 1 вміст регістра CX.

je to_end ; Перехід, якщо СХ = 0.

s11: mov [SI],AL ; Завантаження елемента масиву А в AL.

inc SI ; Збільшити на 1 вміст регістра SI.

add DI,AX ; Сумування елемента масиву А.

cmp BL,AL ; Пошук найменшого елементу масиву А.

jb s111

mov BX,AX

s111: loop s11 ; Цикл.

mov AX,DI ; Суму елементів записати в регістр AX.

cwd ; Розширити вміст AX до (DX,AX).

div BX ; Суму елементів масиву на мінімальний елемент.

mov р,AX ; Результат присвоїти змінній Р.

ret

to_end: mov AX,1 ; Якщо масив складається з одного елементу то

mov р,AX ; змінній Р присвоїти 1.

ret

Endp

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