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

Int 21h ;выводим на экран

mov ax,M ;размер матрицы

mul N ;количество элементов в матрице

mov cx,ax ;количество элементов в матрице

lea bx,A ;начало матрицы

mo6: mov ax,[bx] ;берем элемент матрицы

call printdec ;выводим

mov ah,2 ;функция вывода символа на экран

mov dl,9 ;символ табуляции

int 21h ;выводим пробел

add bx,2 ;переходим к следующему элементу матрицы

dec cx ;уменьшаем количество оставшихся элементов

jz ex1 ;если 0 - закончить

mov ax,cx ;количество оставшихся элементов

mov dx,N ;длина строки матрицы

div dl ;делим текущий элемент на длину строки матрицы

test ah,ah ;если не 0

jnz mo6 ;то продолжить

mov ah,2 ;функция вывода символа на экран

mov dl,13 ;возврат каретки

int 21h ;выводим возврат каретки

mov dl,10 ;перевод строки

int 21h ;выводим перевод строки

jmp mo6 ;продолжаем вывод

ex1:

mov ah,9 ;функция вывода сообщения на экран

lea dx,str2 ;выводимое сообщение

Int 21h ;выводим на экран

mov ah,0ah ;функция ввода строки с клавиатуры

mov dx,offset buf ;буфер куда вводить

Int 21h ;пользователь вводит в текстовом виде в buf значение числа

lea si,buf[2] ;начало введенного текста

call str2dw ;преобразовываем строку в значение

cmp ax,M

jae ex1

mov bx,ax ;сохраняем

mov ah,9 ;функция вывода сообщения на экран

lea dx,str3 ;выводимое сообщение

Int 21h ;выводим на экран

call sum

call printdec

mov ah,1 ;Ожидаем нажатия любой клавиши

int 21h

mov ax,4c00h ;закончить программу

int 21h

;функция подсчета сумыы сроки матрицы

;на входе bx - индекс строки 0,1,...

;На выхое ax - сумма

sum proc

mov ax,bx ;индекс строки

mul N ;получить номер элемента в матрице с началом строки

shl ax,1 ;умножить на 2

mov bx,ax ;индекс элемента матрицы с которого начинается строка

xor ax,ax ;сумма

mov cx,N ;кол-во элементов в строке

s1: add ax,A[bx] ;прибавить очередной элемент

add bx,2 ;следующий элемент

loop s1 ;просуммировать всю строку

ret

sum endp

str2dw proc

;Преобразование строки в число

;на входе ds:si ссылается на ASCII строку, которую нужно преобразовать

; на выходе в ax - число.

push bx ;сохраняем регистры

push dx

push si

xor bx,bx

xor dx,dx ;сумма

@lp1: xor ax,ax

lodsb ;берем чимвол

cmp al,13 ;если это конец строки,

jz @ex ;то заканчиваем

cmp al,'-' ;если минус,

jnz @m1

mov bx,1 ;то устанавливаем признак минуса

jmp @lp1 ;продолжаем обработку

@m1: cmp al,'9' ;если это не цифра,

jnbe @lp1 ;то пропускаем

cmp al,'0' ;если это не цифра,

jb @lp1 ;то пропускаем

sub ax,'0' ;получаем цифровое значение

shl dx,1 ;умножаем сумму на 10

add ax, dx

shl dx, 2

add dx, ax ;прибавляем текущее значение

jmp @lp1 ;продолжаем обработку

@ex: test bx,bx ;если установлен признак отрицательного числа

jz @ex1

neg dx ;то меняем знак

@ex1: mov ax,dx ;помещаем результат в ах

pop si

pop dx

pop bx

ret ;выход из подпрограммы

str2dw endp

;преобразование числа из ах в десятичную строку и вывод на экран

;ax - число

printdec proc

push cx ;сохраняем регистры

push dx

push bx

push si

mov si,ax ;запоминаем число

mov bx,10 ;основание системы

xor cx,cx ;в сх будет количество цифр в десятичном числе

test ax,ax ;если число положительное

jns @@m1a ;то пропускаем

neg ax ;если отрицательное, то меняем знак

@@m1a: xor dx,dx

div bx ;делим число на степени 10

push dx ;и сохраняем остаток от деления(коэффициенты при степенях) в стек

inc cx ;увеличиваем количество десятичных цифр числа

test ax,ax ;после деления остался 0?

jnz @@m1a ;если нет, продолжаем

test si,si ;число отрицательное?

jns @@m3a ;если нет, пропустить

push -3 ;иначе дописать перех числом минус

inc cx ;увеличить количество цифр числа

@@m3a: mov ah,2 ;ф-я вывода символа

@@m2a: pop dx ;взять из стека цифру цисла

add dl,'0' ;преобразовываем цифру в ASCII символ

int 21h ;вывести на экран

loop @@m2a ;все цифры

pop si ;восстанавливаем регистры

pop bx

pop dx

pop cx

ret ;выход из подпрограммы

printdec endp

end start

8.Написать программу на языке Ассемблер с функцией, которая по заданному натуральному числу определяет количество цифр в нём и их сумму. Исходные данные необходимо вводить с клавиатуры, результат выводить на консоль.

.586

.model flat,stdcall

option casemap:none

include msvcrt.inc

includelib msvcrt.lib

.data

n dd 0

s1 db 'N: ',0

str1 db 'numdigits = %d',13,10,0

str2 db 'sumdigits = %d',0

fmt0 db '%d',0

fmt1 db '%s',0

.code

_start:

invoke crt_printf,offset s1

invoke crt_scanf,offset fmt0,offset n

mov eax,n

call digits ;определить сумму и кол-во цифр

invoke crt_printf,offset str1,esi

invoke crt_printf,offset str2,edi

ex: invoke crt_scanf,offset fmt1,offset str1 ;Пауза перед закрытием программы

ret

;определение кол-ва и суммы цифр числа

;eax - число

;результат - esi - количество цифр в десятичном числе

;edi - сумма цифр числа

digits proc

mov ebx,10 ;основание системы

xor esi,esi ;в esi будет количество цифр в десятичном числе

xor edi,edi ;сумма цифр числа

@@m1a: xor edx,edx ;очистить старшую часть делимого

div ebx ;делим число на степени 10

add edi,edx ;прибавляем остаток от деления к сумме цифр

inc esi ;увеличиваем количество десятичных цифр числа

test eax,eax ;после деления остался 0?

jnz @@m1a ;если нет, продолжаем

ret

digits endp

end _start

end

9.Написать программу на языке Ассемблер с функцией, которая по заданной строке формирует новую строку, состоящую только из цифр, входящих в исходную строку. Исходные данные необходимо вводить с клавиатуры, результат выводить на консоль.

.model tiny

.code

org 100h

NUpoehali:

mov dx,offset mes1

mov ah,9

int 21h

mov dx,offset buf

mov ah,0Ah

int 21h

mov dx,offset mes2

mov ah,9

int 21h

xor cx,cx

xor di,di

xor bx,bx

mov cl,len

mov si,offset newstr

FOR1:

mov bl,byte ptr bcontent[di]

cmp bl,'0'

jb NPR

cmp bl,'9'

ja NPR

mov [si],bx

inc si

NPR:

;mov [si],bx

;inc si

inc di

loop FOR1

mov bl,'$'

mov [si],bx

mov dx,offset newstr

mov ah,9

int 21h

ret

mes1 db 'Vvedite stroku $'

mes2 db 0Dh, 0Ah, '$'

newstr db 255 DUP(?)

buf db 16

len db ?

bcontent:

end NUpoehali

10.Написать программу на языке Ассемблер с функцией, подсчитывающей количество положительных элементов в массиве. Исходные данные необходимо вводить с клавиатуры, результат выводить на консоль.

.586

.model flat,stdcall

option casemap:none

include msvcrt.inc

includelib msvcrt.lib

.data

mas dd 100 dup (0)

n dd 0

s1 db 'N: ',0

str1 db 'MAS(%d) = ',0

str2 db 'Result: ',0

fmt0 db '%d',0

fmt2 db 'Count of positives = %d ',0

fmt1 db '%s',0

.code

_start:

invoke crt_printf,offset s1

invoke crt_scanf,offset fmt0,offset n

;ввод массива

mov edi,0 ;Текущий индекс вводимого элемента

inp:

invoke crt_printf,offset str1,edi

lea eax,mas[edi*4] ;вычислить адрес вводимого элемента

invoke crt_scanf,offset fmt0,eax

inc edi ;следующий номер элемента

cmp edi,n ;пока не ввели весь массив

jb inp ;продолжаем

lea esi,mas

mov ecx,n

call countpos ;подсчет кол-ва положительных

invoke crt_printf,offset fmt2,eax

ex: invoke crt_scanf,offset fmt1,offset mas ;Пауза перед закрытием программы

ret

;подсчет кол-ва положительных элементов

;esi - адрес массива

;ecx - кол-ко элементов массива

;возвращает в eax - кол-во положительных элементов массива

countpos proc

xor eax,eax ;кол-во положительных элементов

lp: cmp [esi],dword ptr 0 ;ставнить очередной элемент массива с 0

js m1 ;если отрицательный, то пропустить

jz m1 ;ноль так же не является положительным числом

inc eax ;увеличить кол-во положительных чисел

m1: add esi,4 ;следующий элемент массива

loop lp ;подсчитать кол-во положительных элементов

ret

countpos endp

end _start

end

11.Написать программу на языке Ассемблер с функцией для замены символов ‘:’ на ‘.’ в переданной ей строке, начиная с указанной позиции. Исходные данные необходимо вводить с клавиатуры, результат выводить на консоль.

.586

.model flat,stdcall

option casemap:none

include msvcrt.inc

includelib msvcrt.lib

.data

s db 256 dup (0)

pos dd 0

s1 db 'Input string: ',0

s11 db 'Input pos(zero based): ',0

s2 db 'Result: %s',0

fmt1 db '%s',0

fmt2 db '%d',0

char dd 0

.code

_start:

invoke crt_printf,offset s1

invoke crt_gets,offset s

invoke crt_printf,offset s11

invoke crt_scanf,offset fmt2,offset pos

mov eax, pos

lea esi,s

call replace

invoke crt_printf,offset s2,offset s

ex: invoke crt_scanf,offset fmt1,offset s

ret

;на входе:

;esi - строка

;eax - позиция с которой начинать замену

replace proc

xor edx,edx ;текущая позиция

lp: mov cl,[esi+edx] ;взять очередной символ

cmp cl,0 ;если конец строки

jz fin ;то закончить

cmp edx,eax ;если текущая позиция меньше заданной

jb sk ;то пропустить

cmp cl,':' ;если это не двоеточие

jnz sk ;то пропустить

mov [esi+edx],byte ptr '.' ;заменить двоеточие на точку

sk: inc edx ;следующая позиция

jmp lp ;продолжить замену

fin:

ret

replace endp

end _start

end

12.Написать программу на языке Ассемблер с функцией, которая по переданному ей целому числу М подсчитывает все трёхзначные десятичные числа, сумма цифр которых равна М или сообщает о том, что их нет. Исходные данные необходимо вводить с клавиатуры, результат выводить на консоль.(Дархан)

.model tiny

.code

org 100h

start:

xor ax,ax

mov cx, 100

for1:

push cx

call summa ; vizov funkcii dlya podscheta summi trexznachnogo chisla

pop cx

cmp si, M ; chislo M sravniem s summoi cifr trexznachnogo chisla

jz yes ; esli ravno to na metku yes

jnz net ; esli ne ravni to na metku net

yes:

mov ah,09h

mov dx,offset rslt ; pechataem text 'summa cifr'

int 21h

mov ax, cx

push cx

call printFromAX

pop cx

net:

inc cx ; uvelichivaem i+1

cmp cx, 1000

jnz for1

ret

reverse1:

not ax

add ax,1

ret

printFromAX:

push ax

mov si,ax

and si,8000h

cmp si,0

jz dalee4

call reverse2

dalee4:

mov si,10

mov di,0

cloop2:

xor dx,dx

div si

push dx

inc di

cmp ax,0

ja cloop2

mov cx,di

cloop3:

pop dx

add dl,'0'

mov ah,2

int 21h

loop cloop3

pop ax

ret

reverse2: push ax

push dx

mov dl,'-'

mov ah,2

int 21h

pop dx

pop ax

call reverse1

ret

summa: mov ax, cx

xor si, si

xor dx,dx

mov bx,10 ; esli ono desyatichnoe to delim na 100, esli 16richnoe to delim na 100h

div bx

add si, dx

xor dx, dx

mov bx,10 ; 10 ili 10h

div bx

add si, dx

add si, ax

ret

M dw ?

rslt db 13,10, 'summa cifr ravnaya M: $'

end start

13.Написать программу на языке Ассемблер с функцией для вычисления площади треугольника, заданногокоординатами вершин .586

.model flat,stdcall

option casemap:none

include msvcrt.inc

includelib msvcrt.lib

.data

s db 256 dup (0)

pos dd 0

s1 db 'Input string: ',0

s11 db 'Input pos(zero based): ',0

s2 db 'Result: %s',0

fmt1 db '%s',0

fmt2 db '%d',0

char dd 0

.code

_start:

invoke crt_printf,offset s1

invoke crt_gets,offset s

invoke crt_printf,offset s11

invoke crt_scanf,offset fmt2,offset pos

mov eax, pos

lea esi,s

call replace

invoke crt_printf,offset s2,offset s

ex: invoke crt_scanf,offset fmt1,offset s

ret

;на входе:

;esi - строка

;eax - позиция с которой начинать замену

replace proc

xor edx,edx ;текущая позиция

lp: mov cl,[esi+edx] ;взять очередной символ

cmp cl,0 ;если конец строки

jz fin ;то закончить

cmp edx,eax ;если текущая позиция меньше заданной

jb sk ;то пропустить

cmp cl,':' ;если это не двоеточие

jnz sk ;то пропустить

mov [esi+edx],byte ptr '.' ;заменить двоеточие на точку

sk: inc edx ;следующая позиция

jmp lp ;продолжить замену

fin: ret

replace endp

end _start

end

14.Написать программу на языке Ассемблер с функцией, которая определяет, есть ли в переданной ей строке слова, оканчивающиеся на ‘f’, и сколько таких слов. (Слова разделяются пробелами.) Исходные данные необходимо вводить с клавиатуры, результат выводить на консоль.

org 100h

.MODEL Tiny

.CODE

ORG 100h

begin:

mov ax,@data

mov ds,ax

mov dx,offset MyStr

mov ah,09h

int 21h

mov di, -2

M3: mov si, 0

add di, 2

xor al,al

M1: mov al, MyStr[si]

cmp al, Sim1[0]

jne M2

mov al,MyStr[si-1]

cmp al,Sim2[0]

jne M2

mov al,Sim2[0]

mov Sim3[di],al

inc found

inc di

;mov al, Sim2[0]

;mov MyStr[si], al

M2: inc si

cmp MyStr[si], '$'

jne M1

mov ah,02h

mov dl,found

add dl,30h

int 21h

ret

MyStr db 'bbsdasdf bbf assf dsadsdsdf www ','$ '

Sim1 db ' ','$'

Sim2 db 'f','$'

Sim3 db ' ','$'

found db ?

ret

end begin

15.Написать программу на языке Ассемблер с функцией для нахождения в прямоугольной матрице номера строки, имеющей максимальную сумму элементов.

.586

.model flat,stdcall

option casemap:none

include msvcrt.inc

includelib msvcrt.lib

.data

mas dd 100 dup (0)

n dd 0

m dd 0

s1 db 'M: ',0

s2 db 'N: ',0

str1 db 'MAS(%d)(%d) = ',0

str2 db 'Row with max sum = %d',0

fmt0 db '%d',0

fmt1 db '%s',0

.code

_start: invoke crt_printf,offset s1

invoke crt_scanf,offset fmt0,offset m

invoke crt_printf,offset s2

invoke crt_scanf,offset fmt0,offset n

;ввод матрицы

lea ebx,mas ;начало матрицы

mov edi,0 ;строка

inp1:mov esi,0 ;столбец

inp:invoke crt_printf,offset str1,edi,esi

invoke crt_scanf,offset fmt0,ebx

add ebx,4 ;следующий элемент матрицы

inc esi ;следующий номер элемента строки

cmp esi,n ;пока не ввели всю строку

jb inp ;продолжаем

inc edi ;следующий номер сторки

cmp edi,m ;пока не ввели всю матрицу

jb inp1 ;продолжаем

call find ;поиск максимальной суммы строки

invoke crt_printf,offset str2,eax

ex: invoke crt_scanf,offset fmt1,offset mas ;Пауза перед закрытием программы

ret

;поиск минимального по модулю элемента

;возвращает в eax - индекс строки с максимальной суммой

find proc

xor ebp,ebp ;признак того, расчитали начальную макс сумму 0-нет, 1-да

lea ebx,mas ;начало матрицы

mov edi,0 ;строка

lp1:mov esi,0 ;столбец

xor edx,edx ;сумма строки

lp: add edx,[ebx] ;прибавить к сумме очередной элемент строки

add ebx,4 ;следующий элемент строки

inc esi ;следующий номер элемента

cmp esi,n ;пока не просуммировали всяю строку

jb lp ;продолжаем

test ebp,ebp ;если начальный максимум инициализирован

jnz m2 ;то пропустить

mov ecx,edx ;иначе запомнит начальный максимум

mov eax,esi ;номер строки с макс суммой

mov ebp,1 ;больше не возвращаться на эту ветку

m2: cmp edx,ecx ;если сумма текущей строки меньше или равна максимальной

jle m1 ;то пропустить

mov ecx,edx ;запомнить максимальную сумму

mov eax,edi ;и номер строки

m1: inc edi ;следующий номер строки

cmp edi,m ;пока не прошли всю матрицу

jb lp1 ;продолжить

ret

find endp

end _start

end

16.Написать программу на языке Ассемблер с функцией, которая преобразует строку двоичных цифр в эквивалентное ей целое десятичное число. Исходные данные необходимо вводить с клавиатуры, результат выводить на консоль.

.586

.model flat,stdcall

option casemap:none

include msvcrt.inc

includelib msvcrt.lib

.data

s db 256 dup (0)

s1 db 'Input binary string: ',0

s2 db 'Not binary number.',0

fmt1 db '%s',0

fmt2 db '%s(BIN)=%d(DEC)',0

.code

_start:

invoke crt_printf,offset s1

invoke crt_scanf,offset fmt1,offset s

lea esi,s

call str2dw

jb err

invoke crt_printf,offset fmt2,offset s,eax

ex: invoke crt_scanf,offset fmt1,offset s ;пауза перед закрытием

ret

err:

invoke crt_printf,offset s2

jmp ex

str2dw proc

;Преобразование строки в число

;на входе ds:esi ссылается на ASCII строку, которую нужно преобразовать

;на выходе в eax - число.

;сf=1 если строка содержит недопустимый символ

push edx ;сохраняем регистры

push esi

xor edx,edx ;сумма

@lp1: xor eax,eax

lodsb ;берем символ

cmp al,0 ;если это конец строки,

jz @ex ;то заканчиваем

cmp al,'1' ;если это не цифра,

ja @errex ;то пропускаем

cmp al,'0' ;если это не цифра,

jb @errex ;то пропускаем

sub al,'0' ;получаем цифровое значение

shl edx,1 ;умножаем сумму на 2

add edx, eax ;прибавляем текущее значение

jmp @lp1 ;продолжаем обработку

@ex: mov eax,edx ;помещаем результат в ах

clc ;сбросить признак ошибки

pop esi ;восстанавливаем регистры

pop edx

ret ;выход их подпрограммы

@errex: stc ;установить признак ошибки

pop esi ;восстанавливаем регистры

pop edx

ret ;выход их подпрограммы

str2dw endp

end _start

end

17.Написать программу на языке Ассемблер с функцией, которая в строке, передаваемой ей в качестве параметра, заменяет каждый второй элемент на заданный символ. Исходные данные необходимо вводить с клавиатуры, результат выводить на консоль.

.586

.model flat,stdcall

option casemap:none

include msvcrt.inc

includelib msvcrt.lib

.data

s db 256 dup (0)

s1 db 'Input string: ',0

s11 db 'Input char: ',0

s2 db 'Result: %s',0

fmt1 db '%s',0

fmt2 db '%c',0

char dd 0

.code

_start:

invoke crt_printf,offset s1

invoke crt_gets,offset s

invoke crt_printf,offset s11

invoke crt_scanf,offset fmt2,offset char

mov al, byte ptr char

lea esi,s

call replace ;подсчет

invoke crt_printf,offset s2,offset s

ex: invoke crt_scanf,offset fmt1,offset s ;пауза перед закрытием

ret

;на входе:

;esi - строка

;al - заменяемый символ

replace proc

xor edx,edx ;номер символа в строке

lp: cmp [esi+edx],byte ptr 0 ;если конец строки

jz fin ;то закончить

test edx,1 ;проверить четность номера символа

jz sk ;если четный, пропустить

mov [esi+edx],al ;заменить на заданный символ

sk: inc edx ;следующий номер символа

jmp lp ;продолжить подсчет

fin:

ret

replace endp

end _start

end

18.Написать программу на языке Ассемблер с функцией для сложения и вычитания квадратных матриц. Одним из параметров должен быть признак вида операции. Исходные данные необходимо вводить с клавиатуры, результат выводить на консоль.

.586

.model flat,stdcall

option casemap:none

input_matrix proto matr:dword, inmsg:dword

include msvcrt.inc

includelib msvcrt.lib

.data

A dd 100 dup (0)

B dd 100 dup (0)

R dd 100 dup (0)

n dd 0

m dd 0

s1 db 'M: ',0

s2 db 'N: ',0

str1 db 'A(%d)(%d) = ',0

str11 db 'B(%d)(%d) = ',0

s3 db 'A: ',13,10,0

s4 db 'B: ',13,10,0

fmt0 db '%d',0

fmt2 db '%d',9,0

fmt1 db '%s',0

crlf db 13,10,0

msg1 db 'Input matrix A',13,10,0

msg2 db 'Input matrix B',13,10,0

msg3 db 'A+B = ',13,10,0

msg4 db 'A-B = ',13,10,0

.code

_start:

invoke crt_printf,offset s1

invoke crt_scanf,offset fmt0,offset m

invoke crt_printf,offset s2

invoke crt_scanf,offset fmt0,offset n

invoke crt_printf,offset msg1

invoke input_matrix,offset A,offset str1

invoke crt_printf,offset msg2

invoke input_matrix,offset B,offset str11

invoke crt_printf,offset s3

mov ebx,offset A

call out_matrix

invoke crt_printf,offset s4

mov ebx,offset B

call out_matrix

invoke crt_printf,offset msg3

lea esi,A

lea edi,B

lea ebx,R

mov cl,0

call addsubmatr

lea ebx,R

call out_matrix

invoke crt_printf,offset msg4

lea esi,A

lea edi,B

lea ebx,R

mov cl,1

call addsubmatr

lea ebx,R

call out_matrix

ex: invoke crt_scanf,offset fmt1,offset str1 ;Пауза перед закрытием программы

ret

out_matrix proc matr:dword

;ввод матрицы

mov edi,0 ;строка

inp1: mov esi,0 ;столбец

inp: mov eax,[ebx]

invoke crt_printf,offset fmt2,eax

add ebx,4 ;следующий элемент матрицы

inc esi ;следующий номер элемента строки

cmp esi,n ;пока не ввели всю строку

jb inp ;продолжаем

invoke crt_printf,offset crlf

inc edi ;следующий номер сторки

cmp edi,m ;пока не ввели всю матрицу

jb inp1 ;продолжаем

ret

out_matrix endp

input_matrix proc matr:dword, inmsg:dword

;ввод матрицы

mov ebx,matr ;начало матрицы

mov edi,0 ;строка

inp1:

mov esi,0 ;столбец

inp:invoke crt_printf,inmsg,edi,esi

invoke crt_scanf,offset fmt0,ebx

add ebx,4 ;следующий элемент матрицы

inc esi ;следующий номер элемента строки

cmp esi,n ;пока не ввели всю строку

jb inp ;продолжаем

inc edi ;следующий номер сторки

cmp edi,m ;пока не ввели всю матрицу

jb inp1 ;продолжаем

ret

input_matrix endp

;esi - матрица A

;edi - матрица B

;ebx - результат

;cl =0 - сложение

;cl =1 - вычитание

addsubmatr proc

mov eax,m ;кол-во строк

mul n ;умножить на кол-во столбцов

mov edx,eax ;кол-во элементов в матрице

lp: mov eax,[esi] ;взять элеметн из первой матрицы

cmp cl,0 ;если сложение,

jz m1 ;то переход

sub eax,[edi] ;вычесть из элемента первой матрицы элемент второй матрицы

jmp m2

m1: add eax,[edi] ;сложить элементы первой и второй матрицы

m2: mov [ebx],eax ;сохранить результат

add esi,4 ;перейти к следующим элементам матриц

add edi,4

add ebx,4

dec edx ;уменьшить кол-во оставшихся элементов

jnz lp ;продолжать пока не 0

ret

addsubmatr endp

end _start

end

19.Написать программу на языке Ассемблер с функцией, которая определяет, располагаются ли буквы в заданной символьной строке в алфавитном порядке. Исходные данные необходимо вводить с клавиатуры, результат выводить на консоль.

.model small

.data

msg1 db 13,10,'Input string: $'

msg2 db 13,10,'String in alphabetic order.$'

msg3 db 13,10,'String not in 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 ;выводимое сообщение

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