
- •Знайти кількість елементів двовимірного масиву цілих чисел, які потрапляють в інтервал [-5, 10].
- •Кількість цілих чисел з діапазону [40, 280], які діляться на 3 та на 5.
- •Кількість непарних елементів одновимірного масиву цілих чисел:
- •Inc di ;збільшую di
- •Знайти кількість від’ємних елементів двовимірного масиву цілих чисел.
- •Виконати шифрування/дешифрування рядка символів, використовуючи операції циклічного зсування байтів рядка на задану кількість позицій.
- •Ввести рядок і слово. Перевірити, чи слово входить у рядок. Знайти позицію входження. (трошки не працює).
- •Використовуючи логічні операції знайти контрольну суму рядка символів. Контрольна сума – це кількість одиниць у двійковому записі кодів символів.
- •Ввести речення. Відредагувати його так, щоб між словами було не більше одного пропуску.
- •Ввести рядок з клавіатури і посортувати символи в алфавітному порядку.
- •Int 21h ; ввести рядок
- •Написати програму на мові Assembler, яка підраховує кількість одиничних бітів у введеному з клавіатури слові.
- •Ввести рядок з клавіатури і порахувати кількість символів у слові.
Вираз: ((44/3+24)*3-56)/2.
(6*3-4)/3+(4*7-2)/5
.8086
.model small
.stack 200h
.data
a db 6
b db 3
c db 4
d db 7
e db 2
f db 5
result dw ?
.code
.startup
mov al,a
mul b ;ax=a*b
mov bl,c
cbw
sub ax,bx ;ax=a*b-c
div b ;al=(a*b-c)/b
cbw
mov result,ax
mov al,c
mov ah,0
mul d
mov bl,e
cbw
sub ax,bx
div f
cbw
add result,ax
.exit 0
end @startup
((85/6-24)*2)+48)/(24-11)
.8086
.model small
.stack 200h
.data
a dw 85
b db 6
c db 24
d db 2
e dw 48
f db 11
result dw ?
.code
.startup
mov ax,a
div b ; al=a/b
mov bl,c
sub al,bl ; al=a/b-c
imul d
mov bx,e
add ax,bx ; ax=(a/b-c)*d+e
cwd
mov al,c
sub al,f ; al=c-f
div al
mov result,ax
.exit 0
end @startup
(45/3-12)*12+56/4
.8086
.model small
;ogoloshennia steku
.stack 100h
.data
;ogoloshennia zminnyh
a dw 45
b db 3
c db 12
d dw 56
e db 4
result1 dw ?; zminna dlia perevirky promizhnyh obchyslen'
result dw ?; zminna dlia resultatu vyrazu
.code
.startup
mov ax,a; zanosymo zminnu a v registr ax
div b; a/b
mov bl, al; tsila chastyna u registri al->bl
xor al,al; ochystka al
mov al,c ; c->al
sub bl,al ; bl-al->bl
xor al,al
mov al,c ; c->al
mul bl; al*bl->ax
mov result1, ax;result1=(a/b-c)*c
xor ax,ax
mov ax,d; d->ax
div e; ax/e->al(tsila chastyna)
add al,0; dostup do al
cbw; dodpovnennia al do ax
add ax,result1;result1+ax->ax
mov result,ax; ax->result(result=(a/b+c)*c+d/e)
.exit 0
end @startup; end of program
(8-10)*(5/2+4)/(9-3*2)
.8086
.model small
.stack 200h
.data
a db 8
b db 10
c db 5
d db 2
e db 4
f db 9
g db 3
result dw ?
.code
.startup
mov al,b
cbw
sub al,a ; ax=b-a
mov bx,ax ; bx=b-a
xor ax,0
mov al,c
cbw
div d ; ax=c/d
xor ah,ah
add al,e; ax=c/d+e
mul bx ; ax=(b-a)*(c/d+e)
mov bx,ax ;bx=(a-b)*(c/d+e)
xor ax,0
mov al,d
cbw
mul g ; ax=d*g
mov cx,ax ; cx=d*g
xor ax,ax
mov al,f
cbw
sub ax,cx ; ax=f-d*g
xchg bx,ax
div bl
xor ah,0
;(8-10)*(5/2+4)/(9-3*2)
mov result,ax
.exit 0
end @startup
;((9-21)*(3+43)/(4-15))*2
.8086
.model small
.stack 200h
.data
a db 9
b db 21
c db 3
d db 43
e db 4
f db 15
g db 2
result dw ?
.code
.startup ;((9-21)*(3+43)/(4-15))*2
mov al,a
mov bl,b
sub ax,bx ; ax=a-b -12
mov bx,0
mov bl,c
mov cl,d
add bx,cx; bx= c+d 46
imul bx ; ax*bx 552
mov bl,e
mov cl,f
sub bx,cx; bx=e-f -11
idiv bx; ax/bx 50,18
mov bx,0
mov bl,g
imul bx; ax*2 100
mov result, ax
.exit 0
end @startup
(34-24/7)/6-8*5+48
.model small
.stack 100h
.data
a db 34
b db 24
c db 7
d db 6
e db 8
f db 5
g db 48
z db ?
result dw ?
.code
.startup
mov al ,b ;Заношу у регістр al число b
div c ;Виконую операцію ділення числа с у регістрі al
mov ah,0 ;Обнуляю залишок
mov z,al ;Переміщую значення регістру al у змінну z
mov al,a ;Заношу у регістр al число a
sub al,z ;Виконую операцію віднімання
mov bl,d ;Заношу у регістр bl число d
div bl ;Ділю число яке за знаходиться у ax на bl
mov result,ax ;Заношу у змінну result значення регістру ax
xor ax,ax ;Очищаю регістр
mov al,e ;Поміщаю у очищений регістр число e
mul f ;Виконую операцію множення числа f у регістрі al
add al, g ;Виконую операцію додавання числа g регістрі al
sub result,ax
mov ax,result ;Віднімаю значеня яке знаходиться у регістрі
xor ah,ah ;обнуляю залишок
.exit 0
end @startup
(6-4)*(10+5)/(34-48/3)
.8086
.model small
.stack 200h
.data
a db 6
b db 4
c db 10
d db 5
e db 34
f db 48
g db 3
result dw ?
.code
.startup
mov al,a
sub al,b
mov bx,ax ;bx=a-b=6-4=2
mov ax,0
mov al,c
add al,d
cbw
mul bx ;___ax=2*15=30
mov bx,0 ;bx=0
mov bl,f ;bl=48
div g ;bl=48/3=16
cbw ;bx=16
mov cx,bx ;cx=16
mov bx,0 ;bx=0
mov bl,e
cbw
sub bx,cx ;___bx=34-16=18
mov cx,0
mov cx,ax
div bl
mov result,cx
.exit 0
end @startup
(6*3-24/5)/(2*4-5)
Обчислити суму непарних чисел з діапазону [23, 125].
.8086
.model small
.stack 200h
.data
S dw ?
.code
.startup
mov cx, 51 ; кількість повторень циклу
mov ax, 23 ; ах=значення першого елемента проміжку [23,125]
mov bx, ax ; bx=23
m1: mov S, bx ; S=bx
add ax, 2 ; ax=ax+2
add S, ax ; S=S+ax
mov bx, S ; bx=S
loop m1
.exit 0
end @startup
Знайти кількість простих чисел з дiапазону [2, n], n>2
.model small
.stack 100h
.data
a dw 2 ;ліва межа
b dw 10 ;права межа
n dw ? ;кількість простих чисел
dil db 1 ;дільник
k dw 100 ;число повторень
.code
.startup
mov ax,b
sub ax,a
inc ax
mov n,ax ;знаходимо кількість всіх чисел в заданих межах
xor ax,ax ;обнулюємо ах
mov cx,k ;встановлюємо кількість повторень циклу
m1: ;перша мітка - підготовка діленого і дільника
mov ax,a ;заносимо в регістр ах число, яке будемо перевіряти на простоту
mov bl,dil ;заносимо дільник в bl
cmp ax,b ;порівнюємо число з правою межею
jg m5 ;якщо більше - вихід з циклу
m2: ;друга мітка - ділення числа
cmp bl,1 ;порівнюємо дільник з 1
je m4 ;якщо рівні - пригаємо на мітку 3
div bl ;ділимо число на дільник
cmp ah,0 ;порівнюємо залишок з 0
je m3 ;якщо залишок рівний 0, то стрибаємо на m3
dec bl ;зменшуємо дільник на 1
mov ax,a ;знову заносимо число в ах
loop m2 ;переходимо на m2
m3: dec n ;третя мітка, зменшення кількості чисел на 1
m4: inc a ;четверта мітка, збільшення числа на 1
inc dil ;збільшення дільника на 1
loop m1 ;переходимо на m1
m5: xor ax,ax
.exit 0
end @startup
Знайти кількість елементів двовимірного масиву цілих чисел, які потрапляють в інтервал [-5, 10].
.model small
.stack 200h
.data
n=3 ;розмірність двовимірного масиву
m=4
a dw 1, -2, -7, -9 ;елементи масиву
dw 5, 7, 11, 12
dw 2, 4, 6, 15
k db 0 ;лічильник
.code
.startup
xor bx,bx
mov cx,n ;заносимо в сх кількість рядків
xor ax,ax
m1: push cx ;заносимо сх в стек
xor si,si
mov cx,m ;заносимо в сх кількість стовпців
m2: mov ax,a[bx][si] ;засносимо в ах перший елемент
cmp ax,-5 ;порівнюємо з -5
jl m3 ;якщо менший - пригаємо на мітку 3
cmp ax,10 ;порівнюємо з 10
jg m3 ;якщо більший - на мітку 3
inc k ;збільшення лічильника
m3: add si,2 ;наступний елемент масиву
loop m2
pop cx ;дістаємо зі стеку сх
add bx,si ;наступний рядок масиву
loop m1
.exit 0
End
Кількість цілих чисел з діапазону [40, 280], які діляться на 3 та на 5.
;program that calculate amount of numbers from 40 to 280 that divide on 3 and 5
.8086
.model small
;define stack
.stack 100h
.data
;define valuables
n dw 40 ;lower limit
m dw 280 ;higher limit
div1 db 3 ;first divisor
div2 db 5 ;second divisor
count dw 0 ;counter of numbers (number/3 and number/5 without remainder)
result dw ? ;valuable of final result
.code
.startup
mov cx,241 ;241->cx (number of repetitions of cycle)
m2: xor ax,ax ;clear ax
mov ax,n; ;n->ax
div div1; ;n/3
cmp ah,0
jne m1 ;if remainder is 0 go to M1
xor ax,ax;
mov ax,n ;n->ax
div div2 ;n/5
cmp ah,0
jne m1 ;
inc count ;increase amount of numbers that divides on 3 and 5
m1: inc n ;n=n+1
loop m2 ;cycle begin from2 M2
xor ax,ax
mov ax,count ;count->ax
mov result,ax ;ax->result
.exit 0
end @startup; end of program
Кількість непарних елементів одновимірного масиву цілих чисел:
.8086
.model small
;define stack
.stack 100h
;define variables
.data
N=10
el dw 7,4,-2,19,-17,24,52,17,22,-36;massif of incoming numbers
tw db 2
count dw ? ;current counter of odd numbers
res dw ? ;final result of counting
.code
.startup
xor bx,bx ;clear bx and ax
xor ax,ax
mov cx,N ;10 repetitions of cycle
lea bx,el ;put address of 1 element of massif in bx
m1: mov ax, [bx] ;put value from address bx IN AX
idiv tw ;el/2
cmp ah,0
je m2 ;if remainder is 0 go to M2
inc count ;count=count+1
m2: add bx,2 ;go to next element of massif
loop m1 ;if cx is not 0 then begin cecle from M1
xor ax,ax
mov ax, count ;count->ax
mov res,ax ;ax->res
.exit 0
end @startup; end of program
Знайти добуток цифр у десятковому записі натурального числа n.
Знайти максимальний від’ємний елемент одновимірного масиву цілих чисел.
знайти суму десяткових цифр натурального числа n=369.
Eлементи одновимірного масиву цілих чисел зсунути циклічно вліво на k позицій.
model small
.stack 100h
.data
A db '1','2','3','4','5'
.code
.startup
mov cx,4 ;задаю лічильник
lea di,a ;заношу в di масив А
mov bx,0 ;занульовую bx
mov bl,[di] ;заношу в bl перший елемент
m1:
add di,1 ;переходжу на другий елемент масиву
mov ah,[di] ;заношу другий елемент в ah
dec di ;зменшую di на одиницю
mov [di],ah ;заношу ah в наступний елемент масиву