Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методическое пособие Ассемблер.docx
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
9 Мб
Скачать
☆

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

Выдавать на экран все символы,которые между первой и последней точкой.

Тестпрограммы