Учебные материалы по математике | Методичка по ассемблеру | Matematiku5
Вузы по математике Готовые работы по математике Как писать работы по математике Примеры решения задач по математике Решить задачу по математике online

Методичка по ассемблеру


Теория

Задача№1

Условие

Калькулятор с меню

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

include macro. lib ;Подключение библиотеки

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

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

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

data segment ‘data’ ;Начало сегмента стека

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

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

a1 db ‘Введите первое число: $’ ;Сообщение

b1 db ‘Введите второе число: $’ ;Сообщение

h1 db ‘продол.-1,выход-2$’;Сообщение

o1 db ‘Ответ: $’ ;Сообщение

z1 db ‘1)Сложение $’ ;Сообщение

z2 db ‘2)Вычитание $’ ;Сообщение

z3 db ‘3)Умножение $’ ;Сообщение

z4 db ‘4)Деление $’ ;Сообщение

z5 db ‘Выбор пункта: $’ ;Сообщение

z6 db ‘Такого пункта нет! $’ ;Сообщение

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

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

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

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

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

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

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

z: ;Метка z

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

m1: ;Метка m1

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

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

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

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

sub al, b ;Вычитание ячейки

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

m2: ;Метка m2

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

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

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

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

imul b ;Умножение рабочей ячейки

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

m3: ;Метка m3

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

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

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

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

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

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

m4: ;Метка m4

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

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

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

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

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

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

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

jmp m5 ;Переход наМеткУ m5

con: ;Конец

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

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

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

jmp m5 ;Метка m5

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

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

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

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

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

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

cmpal,1 ;Сравнение рабочей ячейки

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

jmpz ;Переход наМетку z

con1: ;Меткаcon1

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

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

ret ;Возврат

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

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

end begin ;Конец

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

Отчёт №2

Условные безусловные операторы

Теория

Задача №1

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

include macro. lib ;Подключение библиотеки

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

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

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

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

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

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

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

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

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

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

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

const2 db -1 ;Объявление переменной

z1 db ‘ x | y$’ ;Сообщение

z2 db ‘ $ |’ ;Сообщение

z3 db ‘ | $’ ;Сообщение

a1 db’vveditea= $’ ;Сообщение

b1 db’vvediteb= $’ ;Сообщение

s1 db’vveditec= $’ ;Сообщение

a2 db’vvedite x= $’ ;Сообщение

d1 db’vvedite DLX= $’ ;Сообщение

d2 db’vvediteXKON= $’ ;Сообщение

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

movc, al ;Пересылка в ячейку

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

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

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

movx, al ;Пересылка в ячейку

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

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

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

movDLX, al ;Пересылка в ячейку

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

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

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

movXKON, al ;Пересылка в ячейку

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

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

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

m: ;Метка m

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

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

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

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

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

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

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

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

subal, c ;Вычитание ячейки

imula ;Умножение рабочей ячейки

imulconst2 ;Умножение рабочей ячейки

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

m1: ;Метка m1

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

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

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

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

subal, a ;Вычитание ячейки

imulc ;Умножение рабочей ячейки

imulconst2 ;Умножение рабочей ячейки

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

m3: ;Метка m3

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

subal, a ;Вычитание ячейки

imulb ;Умножение рабочей ячейки

imulx ;Умножение рабочей ячейки

con: ;Метка con

movy, al ;Пересылка в ячейку

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

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

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

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

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

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

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

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

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

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

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

movx, al ;Пересылка в ячейку

cmpal, XKON ;Сравнение рабочей ячейки

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

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

con1: ;Меткаcon1

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

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

ret ;Возврат

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

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

end begin ;Конец

Скриншот Программы №1

Скриншот Программы №2

Скриншот Программы №3

Отчёт №3

Циклы

Теория

Задача №1

Условие

С клавиатуры вводится последовательность из Nцелых чисел. Определить количество одинаковых соседних элементов.

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

includemacro. lib ;Подключение библиотеки

stecsegment ‘stack’ ;Начало сегмента стека

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

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

datasegment ‘data’ ;Начало сегмента данных

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

x1 db ‘Vvediteelementi $’ ;Сообщение

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

n1 db ‘Vvediten=$’;Сообщение

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

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

o1 db ‘Posledovatelras =$’ ;Сообщение

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

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

codesegment ‘code’ ;Начало сегмента код

beginprocfar ;Начало программы

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

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

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

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

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

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

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

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

subax,1 ;Вычитание ячейки

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

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

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

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

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

movy, al ;Пересылка в ячейку

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

m: ;Метка m

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

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

movx, al ;Пересылка в ячейку

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

cmpal, y ;Сравнение рабочей ячейки

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

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

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

m1: ;Метка m1

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

movy, al ;Пересылка в ячейку

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

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

m4: ;Метка m4

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

m5: ;Метка m5

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

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

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

cmpax, n ;Сравнение рабочей ячейки

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

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

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

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

ret ;Возврат

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

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

endbegin ;Конец

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

Задача №2

Условие

С клавиатуры вводится последовательность из Nцелых чисел, 0-конец последовательности. Определить max элементпоследовательности.

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

includemacro. lib ;Подключение библиотеки

stecsegment ‘stack’ ;Начало сегмента стека

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

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

datasegment ‘data’ ;Начало сегмента данных

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

x1 db ‘Vvediteelementi $’ ;Сообщение

maxdw -32767 ;Объявление переменной

o1 db ‘max=$’ ;Сообщение

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

codesegment ‘code’ ;Начало сегмента код

beginprocfar ;Начало программы

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

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

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

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

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

m: ;Метка m

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

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

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

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

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

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

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

cmpax, max ;Сравнение рабочей ячейки

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

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

m1: ;Метка m1

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

con1: ;Меткаcon1

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

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

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

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

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

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

ret ;Возврат

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

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

endbegin ;Конец

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

Отчёт №4

Одномерные массивы

Теория

Задача №1

В одномерном массиве найти сумму элементов массива с нечетными номерами.

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

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

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

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

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

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

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

INCLUDE MACRO. LIB ;Подключение библиотеки

Steck SEGMENTPARA ‘STECK’ ;Начало сегмента стека

DW 256 DUP (?) ;Выделение в памяти 128 двойных

STECKE NDS ;Конец сегмента

DATASEGMENTPARA ‘DATA’ ;Началосегментакодa

stroca label bytemaxlen db 130 ;Объявление переменнойactlen db? ;Объявление переменной

str1 db 80 dup (‘$’) ;Объявление переменной

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

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

odb ‘vvedite stroky=$’ ;Сообщение

o1 db ‘OTBET=$’ ;Сообщение

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

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

CODESEGMENTPARA ‘CODE’ ;Началосегментакод

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

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

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

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

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

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

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

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

lea dx, stroka ;смещения

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

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

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

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

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

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

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

m: ;Метка m

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

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

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

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

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

m1: ;Метка m

mov al,’ ‘ ;Пересылка в ячейку

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

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

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

;регистре cx

con: ;Метка con

mov al,’ ‘ ;Пересылка в ячейку

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

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

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

m2: ;Метка m2

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

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

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

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

m3: ;Метка m3

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

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

;регистре cx

Lea di, str1 ;смещения

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

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

m4: ;Метка m4

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

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

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

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

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

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

con1: ;Меткаcon1

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

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

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

key_$2bin ;ввод количества строк

movax,4c00h ;Задание прерывание на выход из int 21h ;Прерывание

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

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

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

end begin ;Конец

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

Отчёт №7

Теория

Файлы

Задача №1

Найти длину самого длинного слова

(из файла 1.txt)

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

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

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

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

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

data segment ;Начало сегмента стека

filename db ‘1.txt’ ;Имяфайла

handle dw ? ;Ячейкадескриптора

file nam2 db ‘2.txt’ ;Имяфайла

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

str1 db 1024 dup (‘$’) ;Сообщение

buflenequ $-str1 ;Буферобмена

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

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

max db -127 ;Объявление переменной

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

odb ‘vveditestroky$’ ;Сообщение

o1 db ‘maxdlinaslova=$’ ;Сообщение

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

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

code segment ;Начало сегмента код assume cs:code, ds:data, ss:stek ;Задает адрес каждого сегмента

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

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

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

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

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

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

mov ah,3dh ;Пересылка в ячейку

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

lea dx, filename;Адресаименифайла

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

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

mov ah,3fh ;Пересылка в ячейку

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

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

lea dx, str1 ;смещения

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

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

mov ah,3eh ;Пересылка в ячейку

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

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

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

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

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

message str1 ;считалистроку

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

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

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

m: ;Метка m

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

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

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

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

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

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

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

movmax, al ;Пересылка в ячейку

m2: ;Метка m2

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

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

m1: ;Метка m1

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

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

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

;регистре cx

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

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

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

decal ;Уменьшает на 1

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

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

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

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

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

ret ;Возврат

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

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

end begin ;Конец

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

Наташа

Автор

Наташа — контент-маркетолог и блогер, но все это не мешает ей оставаться адекватным человеком. Верит во все цвета радуги и не верит в теорию всемирного заговора. Увлекается «нефрохиромантией» и тайно мечтает воссоздать дома Александрийскую библиотеку.

Распродажа дипломных

 Скидка 30% по промокоду Diplom2020