
- •Int 21h ;выводим на экран
- •Int 21h ;выводим на экран
- •Int 21h ;выводим на экран
- •Int 21h ;выводим на экран
- •Int 21h ;пользователь вводит в текстовом виде в buf значение числа
- •Int 21h ;выводим на экран
- •Int 21h ;выводим на экран
- •Int 21h ;выводим на экран
- •Int 21h ;выводим на экран
- •Int 21h ;выводим на экран
- •Int 21h ;выводим на экран
- •Int 21h ;выводим на экран
- •Int 21h ;выводим на экран
Int 21h ;выводим на экран
mov ah,0ah ;функция ввода строки с клавиатуры
mov dx,offset buf ;буфер куда вводить
int 21h ;пользователь вводит в текст в buf
cmp buf[1],0 ;если строка пустая
jz fin ;то закончить
lea si,buf[2] ;начало введенной строки
lp: cmp [si+1],byte ptr 13 ;если следующий символ завершения
jz yes ;то строка в алфавитном порядке
mov al,[si] ;взять очередной символ из строки
cmp al,[si+1] ;сравнить его со следующим
ja no ;если текущий больше следующего, то строка не в алфавитном порядке
inc si ;следующий символ
jmp lp ;продолжить проверку
yes: mov ah,9 ;функция вывода сообщения на экран
lea dx,msg2 ;выводимое сообщение
Int 21h ;выводим на экран
jmp fin
no: mov ah,9 ;функция вывода сообщения на экран
lea dx,msg3 ;выводимое сообщение
Int 21h ;выводим на экран
fin: mov ah,1 ;Ожидаем нажатия любой клавиши
int 21h
mov ax,4c00h ;закончить программу
int 21h
end start
20.Написать программу на языке Ассемблер с функцией, которая для переданной ей строки определяет, располагаются ли буквы в ней в порядке, обратном алфавитному
.model small
.data
msg1 db 13,10,'Input string: $'
msg2 db 13,10,'String in back-alphabetic order.$'
msg3 db 13,10,'String not in back-alphabetic order.$'
buf db 80,81 dup(0) ;принимает строку, введенную с клавиатуры
.stack 256
.code
start:
mov ax,@data ;Настраиваем сегментные регистры
mov ds,ax
;ввод cnhjrb
mov ah,9 ;функция вывода сообщения на экран
lea dx,msg1 ;выводимое сообщение
Int 21h ;выводим на экран
mov ah,0ah ;функция ввода строки с клавиатуры
mov dx,offset buf ;буфер куда вводить
int 21h ;пользователь вводит в текст в buf
cmp buf[1],0 ;если строка пустая
jz fin ;то закончить
lea si,buf[2] ;начало введенной строки
lp: cmp [si+1],byte ptr 13 ;если следующий символ завершения
jz yes ;то строка в обратном алфавитном порядке
mov al,[si] ;взять очередной символ из строки
cmp al,[si+1] ;сравнить его со следующим
jb no ;если текущий меньше следующего, то строка не в обратном алфавитном порядке
inc si ;следующий символ
jmp lp ;продолжить проверку
yes: mov ah,9 ;функция вывода сообщения на экран
lea dx,msg2 ;выводимое сообщение
Int 21h ;выводим на экран
jmp fin
no: mov ah,9 ;функция вывода сообщения на экран
lea dx,msg3 ;выводимое сообщение
Int 21h ;выводим на экран
fin: mov ah,1 ;Ожидаем нажатия любой клавиши
int 21h
mov ax,4c00h ;закончить программу
int 21h
end start
21.Написать программу на языке Ассемблер с функцией, переставляющей в обратном порядке элементы главной диагонали квадратной матрицы. Исходные данные необходимо вводить с клавиатуры, результат выводить на консоль.
.model small
.data
N dw 0 ;столбцов
A dw 10*10 dup (0) ;Матрица
inpm db 13,10,'Input matrix:$'
msg1 db 13,10,'Razmernost N: $'
msg3 db 13,10,'Matrix: ',13,10,'$'
str0 db 0dh,0ah,'A($' ;формируемая для вывода строка
str1 db ')= $'
buf db 8,10 dup(0) ;принимает строку, введенную с клавиатуры
.stack 256
.code
start:
mov ax,@data ;Настраиваем сегментные регистры
mov ds,ax
mov ah,9 ;функция вывода сообщения на экран
lea dx,msg1 ;выводимое сообщение
int 21h ;выводим на экран
mov ah,0ah ;функция ввода строки с клавиатуры
mov dx,offset buf ;буфер куда вводить
int 21h
lea si,buf[2] ;начало введенного текста
call str2dw ;преобразовываем строку в значение
mov N,ax ;сохраняем
mov ah,9 ;функция вывода сообщения на экран
lea dx,inpm ;выводимое сообщение
int 21h ;выводим на экран
;Ввод матрицы
lea bx,A ;начало матрицы
mov cx,1 ;строка
mov di,1 ;столбец
inpmas: mov ah,9 ;функция вывода сообщения на экран
lea dx,str0 ;(
int 21h ;выводим на экран
mov ax,cx ;строка
call printdec ;преобразуем номер строки в текст и выводим на экран
mov ah,2 ;ф-я вывода символа
mov dl,',' ;запятая
int 21h ;вывести на экран
mov ax,di ;столбец
call printdec ;выводим на экран
mov ah,9 ;функция вывода сообщения на экран
lea dx,str1 ;)=
int 21h ;выводим на экран
mov ah,0ah ;функция ввода строки с клавиатуры
mov dx,offset buf ;буфер куда вводить
int 21h ;пользователь вводит в текстовом виде в buf значение элемента массива
lea si,buf[2] ;начало введенного текста
call str2dw ;преобразовываем строку в значение
mov [bx],ax ;заносим значение в массив
add bx,2 ;следующий элемент
inc di ;номер следующего столбца
cmp di,N ;сравниваем с шириной матрицы
jbe inpmas ;если меньше или рано, продолжить
mov di,1 ;первый столбец
inc cx ;следующая строка
cmp cx,N ;сравниваем с высотой матрицы
jbe inpmas ;если меньше или рано, продолжить
call outmatrix ;вывод матрицы
call perevorot ; <------ тестирование функции
call outmatrix ;вывести отсортированную матрицу
mov ah,1 ;Ожидаем нажатия любой клавиши
int 21h
mov ax,4c00h ;закончить программу
int 21h
;Функция переворота главной диагонали
perevorot proc
mov cx,N ;кол-во строк матрицы
shr cx,1 ;делим их на 2
test cx,cx ;если получился 0,
jz skip ;то не переворачивать
mov ax,N ;размерность матрицы
mul ax ;кол-во элементов в матрице
dec ax ;номер последнего элемента
shl ax,1 ;смещение последнего элемента
add ax,offset A ;адрес последнего элемента в памяти
mov di,ax ;адрес последнего элемента в памяти
lea si,A ;адрес первого элемента в памяти
olp: mov ax,[si] ;поменять местами
xchg ax,[di] ;первый с
xchg ax,[si] ;последним
add si,N ;перейти
add si,N ;к следующему
add si,2 ;с начала
sub di,N ;перейти
sub di,N ;к следующему
sub di,2 ;с конца
loop olp ;перевернуть всю диагональ
skip: ret ;выход из функции
perevorot endp
outmatrix proc
;Вывод матрицы
mov ah,9 ;функция вывода сообщения на экран
lea dx,msg3 ;выводимое сообщение