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

Include macro.Lib ;Подключение библиотеки

Stec segment 'stack' ;Начало сегмента стека

dw 256 dup(?) ;Выделение в памяти 256 двойных байт

stec ends ;Конец сегмента стека

data segment 'data' ;Начало сегмента данных

const1 db 2 ;Объявление переменной

k dw 0 ;Объявление переменной

pr db 0 ;Объявление переменной

mas db 10 dup(?) ;Объявление переменной

mas1 db 'vvedite massiv $' ;Сообщение

ndw ? ;Объявление переменной

n1 db 'vvediterazmermassiva $' ;Сообщение

o1 db 'otvet $' ;Сообщение

data ends ;Конец сегмента данных

code segment 'code' ;Начало сегмента код

begin proc far ;Начало программы

Assume s:stec,ds:data,cs:code ;Задает адрес каждого сегмента

Mov ax,data ;Команда начальной инициализации

Mov ds,ax ;Команда начальной инициализации

cls ;Очистка экран

move_cursor 0,0 ;Курсор на (0,0)

messagen1 ;Вывод сообщения

key_$2BIN ;Ввод переменной

movn,ax ;Пересылка в ячейку

crlf ;Переход на след. строку

movcx,n ;Пересылка в ячейку

leadi,mas ;смещения

messagemas1 ;Вывод сообщения

m: ;Метка m

key_$2bin ;Ввод переменной

mov [di],al ;Пересылка в ячейку

crlf ;Переход на след. строку

inck ;Увеличивает на 1

movax,k ;Пересылка в ячейку

idivconst1 ;Деление рабочей ячейки

cmpah,0 ;Сравнение рабочей ячейки

jem1 ;Если равно, то на метку m1

movbl,[di] ;Пересылка в ячейку

addpr,bl ;Прибавление к рабочей ячейке

m1: ;Метка m1

incdi ;Увеличивает на 1

loopm2 ;организация цикла со счетчиком в

;регистре cx

jmpm3 ;Переход на метку

m2: ;Метка m2

jmp m ;Переход на метку

m3: ;Метка m3

messageo1 ;Вывод сообщения

moval,pr ;Пересылка в ячейку

CBW ;Расширить до 2 байт

print_number ;Вывод значения

crlf ;Переход на след. строку

movax,4c00h ;Задание прерывание на выход из DOS

int 21h ;Прерывание

ret ;Возврат

beginendp ;Конец программы

codeends ;Конец сегмента кода

endbegin ;Конец

Скриншот программы

Задача №2

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

Листинг Программы

Include macro.Lib ;Подключение библиотеки

stec segment 'stack' ;Начало сегмента стека

dw 256 dup(?) ;Выделение в памяти 256 двойных байт

stec ends ;Конец сегмента стека

data segment 'data' ;Начало сегмента данных

const1 db 2 ;Объявление переменной

kdw 0 ;Объявление переменной

k1 dw 0 ;Объявление переменной

k2 dw 0 ;Объявление переменной

masdb 10 dup(?) ;Объявление переменной

mas1 db 'vveditemassiv $' ;Сообщение

ndw ? ;Объявление переменной

n1 db 'vvediterazmermassiva $' ;Сообщение

o1 db 'otvet $' ;Сообщение

sum db 0 ;Объявление переменной

data ends ;Конец сегмента данных

code segment 'code' ;Начало сегмента код

begin procfar ;Начало программы

Assumess:stec,ds:data,cs:code ;Задает адрес каждого сегмента

Mov ax,data ;Команда начальной инициализации

mov ds,ax ;Команда начальной инициализации

cls ;Очистка экран

move_cursor 0,0 ;Курсор на (0,0)

message n1 ;Вывод сообщения

key_$2BIN ;Ввод переменной

mov n,ax ;Пересылка в ячейку

crlf ;Переход на след. строку

mov cx,n ;Пересылка в ячейку

lea di,mas ; смещения

message mas1 ;Вывод сообщения

m: ;Метка m

key_$2bin ;Ввод переменной

mov [di],al ;Пересылка в ячейку

crlf ;Переход на след. Строку

inc di ;Увеличивает на 1

loop m2 ;организация цикла со счетчиком в

;регистре cx

Jmp m3 ;Переход на метку

m2: ;Метка m2

jmp m ;Переход на метку

m3: ;Метка m2

lea di,mas ;смещения

mov cx,n ;Пересылка в ячейку

m4: ;Метка m4

mov al,[di] ;Пересылка в ячейку

cmp al,0 ;Сравнение рабочей ячейки

JLkon ;Если меньше, то на метку kon

Inc di ;Увеличивает на 1

loop m4 ;организация цикла со счетчиком в

;регистре cx

kon: ;Метка kon

mov k1,di ;Пересылка в ячейку

lea di,mas ;смещения

mov cx,n ;Пересылка в ячейку

m5: ;Метка m5

mov al,[di] ;Пересылка в ячейку

cmp al,0 ;Сравнение рабочей ячейки

JG m6 ;Если больше, то на метку m6

Mov k2,di ;Пересылка в ячейку

m6: ;Метка m6

inc di ;Увеличивает на 1

loop m5 ;организация цикла со счетчиком в

;регистре cx

Mov di,k1 ;Пересылка в ячейку

mov si,k2 ;Пересылка в ячейку

cmp di,si ;Сравнение рабочей ячейки

je kon1 ;Если равно, то на метку kon1

inc di ;Увеличивает на 1

m7: ;Метка m7

cmp di,si ;Сравнение рабочей ячейки

JE kon1 ;Если равно, то на метку kon1

Mov al,[di] ;Пересылка в ячейку

add sum,al ;Прибавление к рабочей ячейке

inc di ;Увеличивает на 1

loop m7 ;организация цикла со счетчиком в

;регистре cx

kon1: ;Метка kon1

messag eo1 ;Вывод сообщения

moval,sum ;Пересылка в ячейку

CBW ;Расширить до 2 байт

Print_number ;Вывод значения

crlf ;Переход на след. Строку

key_$2BIN ;Ввод переменной

mov ax,4c00h ;Задание прерывание на выход из DOS

int 21h ;Прерывание

ret ;Возврат

begin endp ;Конец программы

code ends ;Конец сегмента кода

end begin ;Конец

Скриншот программы

Отчёт №5

Двухмерные массивы

Теория

Задача №1

Найти максимальный элемент в каждом столбце.

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