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

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 ;выводимое сообщение

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