- •Include macro.Lib ;Подключение библиотеки
- •Скриншот Программы №1
- •Скриншот Программы №2
- •Скриншот Программы №3
- •Include macro.Lib ;Подключение библиотеки
- •Include macro.Lib ;Подключение библиотеки
- •Include macro.Lib ;Подключение библиотеки
- •Include macro.Lib ;Подключение библиотеки
- •Include macro.Lib ;Подключение библиотеки
- •Скриншот программы
Include macro.Lib ;Подключение библиотеки
textsegment 'code' ;Начало сегмента код
assume cs:text,ds:data,ss:stek ;Задает адрес каждого сегмента
start: ;Метка start
mov ax,data ;Команда начальной инициализации
mov ds,ax ;Команда начальной инициализации
cls ;Очистка экран
move_cursor 0,1 ;Курсор на (0,1)
message msg0 ;Вывод сообщения
move_cursor 0,2 ;Курсор на (0,2)
message msg1 ;Вывод сообщения
key_$2bin ;ввод количества строк
mov y,ax ;Пересылка в ячейку
crlf ;Переход на след. строку
message msg2 ;Вывод сообщения
key_$2bin ;вводит количество столбцов и запоминает в ячейке х
mov x,ax ;Пересылка в ячейку
mov ax,y ;Пересылка в ячейку
mul x ;количество строк умножается на количество столбцов
mov y,ax ;Пересылка в ячейку
crlf ;Переход на след. строку
xor di,di ;обнуление di
xor bx,bx ;обнуление bx
l2: ;Метка l2
push di ;размещение содержимого операнда источник в стеке
push bx ;размещение содержимого операнда источник в стеке
crlf ;Переход на след. строку
key_$2bin ;ввод очередного элемента матрицы
pop bx ;извлечение слова или двойного слова из стека
pop di ;извлечение слова или двойного слова из стека
mov array [di][bx],al ;Пересылка в ячейку
cm pbx,0 ;Сравнение рабочей ячейки
jne m10 ;Если не равно, то на метку m10
cmp al,max1 ;Сравнение рабочей ячейки
jlm10 ;Если меньше, то на метку m10
mov max1,al ;Пересылка в ячейку
m10: ;Метка m10
cmp bx,1 ;Сравнение рабочей ячейки
jne m11 ;Если не равно, то на метку m11
cmp al,max2 ;Сравнение рабочей ячейки
jlm11 ;Если меньше, то на метку m11
mov max2,al ;Пересылка в ячейку
m11: ;Метка m11
cmp bx,2 ;Сравнение рабочей ячейки
jne m12 ;Если не равно, то на метку m12
m12: ;Метка m12
cmp al,max3 ;Сравнение рабочей ячейки
jl m12 ;Если меньше, то на метку m12
mov max3,al ;Пересылка в ячейку
add k,al ;сложение элементов в строке
inc bx ;Увеличивает на 1
cmp bx,x ;Сравнение рабочей ячейки
je l1 ; если все столбцы закончились то переходим в метку l2
jmp l2 ;Переход на метку
l1: ;Метка l1
crlf ;Переход на след. строку
mov k,0 ;Пересылка в ячейку
add di,bx ; переход в другую строку
xor bx,bx ; обнуляем количество столбцов
cmp di,y ;Сравнение рабочей ячейки
je l3 ;Если равно, то на метку l3
jmp l2 ;Переход на метку
l3: ;Метка l3
crlf ;Переход на след. строку
messagem1 ;Вывод сообщения
mov al,max1 ;Пересылка в ячейку
cbw ;Расширить до 2 байт
print_number ;Вывод значения
crlf ;Переход на след. строку
messagem2 ;Вывод сообщения
mov al,max2 ;Пересылка в ячейку
cbw ;Расширить до 2 байт
print_number ;Вывод значения
crlf ;Переход на след. строку
message m3 ;Вывод сообщения
mov al,max3 ;Пересылка в ячейку
cbw ;Расширить до 2 байт
print_number ;Вывод значения
crlf ;Переход на след. строку
xor di,di ; обнуляем количество столбцов
xor bx,bx ; обнуляем количество столбцов
l5: ;Метка l5
push di ;размещение содержимого операнда источник в стеке
push bx ;размещение содержимого операнда источник в стеке
mov al,array[di][bx] ;Пересылка в ячейку
cbw ;Расширить до 2 байт
print_number ;Вывод значения
message c ;Вывод сообщения
pop bx ;извлечение слова или двойного слова из стека
pop di ;извлечение слова или двойного слова из стека
inc bx ;Увеличивает на 1
cmp bx,x ;Сравнение рабочей ячейки
jel4 ;Если равно, то на метку l4
jmpl5 ;Переход на метку
l4: ;Метка l4
add di,bx ;Прибавление к рабочей ячейке
crlf ;Переход на след. строку
xor bx,bx ; обнуляем количество столбцов
cmp di,y ;Сравнение рабочей ячейки
jel6 ;Если равно, то на метку l6
jmpl5 ;Переход на метку
l6: ;Метка l6
key_$2bin ;Ввод переменной
mov ax,4c00h ;Задание прерывание на выход из DOS
int 21h ;Прерывание
delay 0,2,0
textends ;Конец сегмента
data segment 'data' ;Начало сегмента данных
arraydb 10 dup(10 dup (?)) ;Объявление переменной
msg0 db'HaiTi MAKCiMALHbIi ELEMENT B KAGDOM CTOLbCE $';Сообщение
msg1 db'vvedite 4islo strok v massive (1-10) $' ;Сообщение
msg2 db'vvedite 4islo stolbc v massive (1-10) $ ' ;Сообщение
s db ' summa v stroke $' ;Сообщение
xdw ? ;Объявление переменной
cdb ' $' ;Сообщение
ydw ? ;Объявление переменной
kdb ? ;Объявление переменной
k1 dw 0 ;Объявление переменной
k2 dw 1 ;Объявление переменной
k4 dw 0 ;Объявление переменной
m1 db 'maxelementv 1-xstolbc $' ;Сообщение
m2 db 'max element v 2-x stolbc $' ;Сообщение
m3 db 'max element v 3-x stolbc $' ;Сообщение
max1 db -127 ;Объявление переменной
max2 db -127 ;Объявление переменной
max3 db -127 ;Объявление переменной
dataends ;Конец сегмента данных
stek segment 'stack' ;Начало сегмента стека
dw 128 dup(?) ;Выделение в памяти 128 двойных байт stekends ;Конец сегмента
end start ;Конец
Скриншот программы
Отчёт №6
Строки
эти команды нужны для работы со строками
stroca label byte
maxlen db 130
actlendb ?
Задача №1
Найти длину самого длинного слова
Листингпрограммы
Include macro.lib ;Подключениебиблиоте
steck segment 'stack' ;Начало сегмента стек
db 12 dup ('stack') ;Выделение в памяти 256 двойных байт
steck ends ;Конец сегмента стека
data segment 'data' ;Начало сегмента данных
strocalabelbyte
maxl endb 130 ;Объявление переменной
actl endb ? ;Объявление переменной
str1 db 130 dup ('$') ;Объявление переменной
max db -127 ;Объявление переменной
p db 'Найти длину самого длинного слова $' ;Сообщение
p3 db 'Ответ: $' ;Сообщение
p2 db 'Введите строку: $' ;Сообщение
s1 dw (0) ;Объявление переменной
k1 dw (1) ;Объявление переменной
n dw 0 ;Объявление переменной
k db 0 ;Объявление переменной
data ends ;Конец сегмента данных
code segment 'code' ;Начало сегмента код
begin proc far ;Начало программы
assume cs:code,ds:data,ss:steck ;Задает адрес каждого сегмент
mov ax,data ;Команда начальной инициализации
mov ds,ax ;Команда начальной инициализации
cls ;Очистка экра
move_cursor 0,0 ;Курсор на (0,0)
crlf ;Переход на след. строку
message p ;Вывод сообщения
crlf ;Переход на след. строку
crlf ;Переход на след. строку
message p2 ;Вывод сообщения
crlf ;Переход на след. строку
mov ah,0ah ;Пересылкавячейку
lea dx,stroca ;смещения
int 21h ;Прерывание
crlf ;Переход на след. строку
lea di,str1 ;смещения
mov al,actlen ;Пересылкавячейку
cbw ;Расширить до 2 байт
mov cx,ax ;Пересылка в ячейку
mov n,ax ;Пересылка в ячейку
m: ;Метка m
moval,[di] ;Пересылка в ячейку
cmpal,' ' ;Сравнение рабочей ячейки
jem1 ;Если равно, то на метку m1
inc k ;Увеличивает на 1
jmp m2 ;Переход на метку m2
m1: ;Метка m1
mov al,k ;Пересылка в ячейку
cmp al,max ;Сравнение рабочей ячейки
jl m3 ;Если больше, на метку m3
mov max,al ;Пересылка в ячейку
m3: ;Метка m3
mov al,0 ;Пересылка в ячейку
movk,al ;Пересылка в ячейку
m2: ;Метка m2
incdi ;Увеличивает на 1
loop m ;организация цикла со счетчиком в
;регистре cx
message p3 ;Вывод сообщения
crlf ;Переход на след. строку
mov al,max ;Пересылка в ячейку
print_number ;Выводзначения
crlf ;Переход на след. строку
mov ax,4c00h ;Задание прерывание на выход из DOS
int 21h ;Прерывание
ret ;Возврат
begin endp ;Конец программы
code ends ;Конец сегмента кода
end begin ;Конец
Скриншот программы
Задача №2
Выдавать на экран все символы,которые между первой и последней точкой.
Тестпрограммы
