
- •Знайти кількість елементів двовимірного масиву цілих чисел, які потрапляють в інтервал [-5, 10].
- •Кількість цілих чисел з діапазону [40, 280], які діляться на 3 та на 5.
- •Кількість непарних елементів одновимірного масиву цілих чисел:
- •Inc di ;збільшую di
- •Знайти кількість від’ємних елементів двовимірного масиву цілих чисел.
- •Виконати шифрування/дешифрування рядка символів, використовуючи операції циклічного зсування байтів рядка на задану кількість позицій.
- •Ввести рядок і слово. Перевірити, чи слово входить у рядок. Знайти позицію входження. (трошки не працює).
- •Використовуючи логічні операції знайти контрольну суму рядка символів. Контрольна сума – це кількість одиниць у двійковому записі кодів символів.
- •Ввести речення. Відредагувати його так, щоб між словами було не більше одного пропуску.
- •Ввести рядок з клавіатури і посортувати символи в алфавітному порядку.
- •Int 21h ; ввести рядок
- •Написати програму на мові Assembler, яка підраховує кількість одиничних бітів у введеному з клавіатури слові.
- •Ввести рядок з клавіатури і порахувати кількість символів у слові.
Ввести рядок і слово. Перевірити, чи слово входить у рядок. Знайти позицію входження. (трошки не працює).
.8086
.model small
.stack 100h
.data
MaxLen equ 200
String db MaxLen dup(?)
Slovo db 'in '
lenS = $-Slovo
msg1 db 'There is no word "in" in the string!','$'
msg2 db 'There is word "in" in the string.','$'
msg3 db "It's position is: ",'$'
msg4 db 'Input string: ','$'
Position dw ?
.code
.startup
mov ax,@data
mov ds,ax
mov ah,9h ;номер функції виведення даних
lea dx,msg4 ;адреса повідомлення, яке буде виводитись
int 21h ;виведення на екран повідомлення msg1
mov ah,3fh ;номер функції DOS введення даних
mov bx,0 ;дескриптор клавіатури
mov cx,MaxLen ;максимальна кількість символів
lea dx,String ;адреса рядка для виведення
int 21h ;ввести рядок
and ax,ax ;чи введено будь-які символи?
jz Done ;ні, перехід на кінець програми
mov cx,lenS ;записати кількість введених символів в регістр СХ
push cx ;запам'ятати регістр СХ у стеку
push ds ;занесення ds у стек
pop es ;вилучення зі стеку es
cld ;опрацювання ряка зліва направо
lea si,String ;занесення в si адресу введеного рядка
lea di,Slovo ;занесення в di адресу слова "in"
m1: ;перевірка слів у стрічці
repne cmpsw ;повторювати перевірку слова
je m2 ;якщо це слово "in", то перехід на m2
jne m3 ;інакше на m3
m2: ;якщо слово у рядку співпало з шуканим словом
inc si ;збільшити si
mov Position,si ;занести значення si у змінну Position
mov ah,9h ;номер функції виведення даних
lea dx,msg2 ;адреса повідомлення, яке буде виводитись
int 21h ;виведення на екран повідомлення msg1
jmp Done ;перехід на кінець програми
m3: ;якщо пеше слово стрічки не збіглось із шуканим
pop cx ;вилучення зі стеку значення сх
cmp si,ax ;порівняння поточної позиції у стрічці із її загальгою довжиною
lea di,Slovo ;занести в di адресу слова, яке шукається
lea si,String+3 ;занесення в si наступного слова стрічки
jl m1 ;якщо поточна позиція в стрічці менша за її довжину
mov Position,0 ;якщо не знайдено заданого слова у стрічці,
;то заносимо у значення позиції нуль
mov ah,9h ;номер функції виведення даних
lea dx,msg1 ;адреса повідомлення, яке буде виводитись
int 21h ;виведення на екран повідомлення msg1push ds
jmp Done ;перехід на кінець програми
Done: ;кінець програми
mov ah,4ch ;номер функції DOS для завершення програми
int 21h ;завершити програму та вийти у DOS
END ;кінець програми
Використовуючи логічні операції виконати швидке ділення цілого числа X на 10.
.model small
.stack 100h
.data
a dw 65
res db ?
zal db ?
.code
.startup
mov al,2
mov bl,2
shl al,2 ;зміщення розрядів числа вліво на 2
add ax,bx ;формування числа 10
mov bx,ax ;перенесення 10 в регістр BX
mov ax,a ;занесення в АХ діленого
div bl ;ділення на 10
mov res,al ;результати
mov zal,ah
.exit 0
End
Ввести речення і два слова. У реченні виконати заміну одного слова на інше.
.model small
.stack 100h
.data
str1 db "abcdabegabd",'$' ;рядок
len1 = $-str1 ;довжина рядка
str2 db "ab",0 ;перше слово
str3 db "mn",0 ;друге слово
.code
.startup
push ds
pop es
cld ;очищення прапорця DF
lea dx,str1 ;зміщення стрічки заноситься в регістр DX
mov di,offset str1
mov ax,word ptr str2 ;заношу в АХ перше слово
mov cx,len1 ;цикл буде повторюватись на всю довжину речення
m1:scasw ;порівняння слова в AX, зі словом за адресою ES:DI
ja m2 ;якщо більше – на мітку м2
jb m2 ;якщо менше – на мітку м2
sub di,2 ;повертаємось на два символи назад
mov word ptr [di], 'mn' ;заміна одного слова на інше
add di,2 ;на два символи вперед
m2: ;мітка м2
loop m1 ;закінчення циклу
mov ah,9h
lea dx,str1
int 21h ;виведення на екран рядка
.exit 0
end
Переводить задане число з неупакованого BCD формату в ASCII формат
.8086
.model small
.stack 100h
.data
n=3
a db 1, 4, 7 ;number in unpacked BCD format = 147
res db n dup(0) ;massif (place) where will be recorded number in ASCII formar
.code
.startup
xor si,si ;clear registers that will be used
xor cx,cx
xor ax,ax
mov cx,3
m1: mov ah,a[si];a[si]->ah
OR ah,30h ;to get ASCII code we will use logical OR with 30h
mov res[si],ah ;ah->a[si] In a[si] we have ASCII code of [si] digit
inc si ;go to next digit
loop m1
.exit 0
end @startup ;end of program
Визначає чи заданий рядок символів є буквеним чи цифровим.
.8086
.model small
.stack 100h
Print Macro msg ;function of outputting messages
mov ah,9h ;ah<-number of function
lea dx,msg
int 21h ;number of interruption
Endm
.data
line db "red1223" ;incoming line of symbols
long=$-line ;define it's length
cdigits db 0 ;amount of digits
cletters db 0 ;amount of letters
msg1 db "It is English word",'$';messages that can be printed
msg2 db "It is digital word",'$'
msg3 db "It is neither English nor digital word",'$'
.code
.startup
xor si,si ;clear registers
xor cx,cx
mov cx,long ;cycle will repeat for <lenth of word> times
m1:xor ax,ax
mov al,line[si];al<-current symbol
cmp al,48
jl m2 ;if al<(ASCII '0')
cmp al,58
jl m3 ;if al<(ASCII '9'+1)
cmp al,65
jl m2 ;if al<(ASCII 'A')
cmp al, 91
jl m4 ;if al<(ASCII 'Z'+1)
cmp al,97
jl m2 ;if al<(ASCII 'a')
cmp al, 123
jl m4 ;if al<(ASCII 'z'+1)
jmp m2 ;else
m4:add cletters,1 ;amount of English letters +1
add si,1 ;go to next element of line
loop m1
xor bl,bl ;if it was last element
mov bl,cletters
cmp bl,long ;compare amount of letters with length of line
jne m2 ;if it is not equal
Print msg1
jmp m5
m3:add cdigits,1 ;amount of digits +1
add si,1
loop m1
xor bl,bl ;if it was last element
mov bl,cdigits
cmp bl,long ;compare amount of digits with length of line
jne m2 ;if it is not equal
Print msg2
jmp m5
m2:Print msg3
m5:
.exit 0
end @startup ;end of program