Лабораторная работа №2
Задача: вычислить сумму двух чисел на ассемблере. За числа взять дату рождения.
Реализация в ассемблере:
SEG1 SEGMENT 'сегмент с именем SEG1
OPER1 DB 3 'описание переменной OPER1, как байт с значением 3
OPER2 DB 11 'описание переменной OPER1, как байт с значением 11
SEG1 ENDS 'конец первого сегмента
SEG2 SEGMENT 'сегмент с именем SEG2
RESULT DB? 'описание переменной RESULT, как байт с неизвестным значением
SEG2 ENDS 'конец второго сегмента
CODE SEGMENT 'начало описания сегмента кода
ASSUME CS:CODE, DS:SEG1 'связь сегмента кода с первым сегментом данных
START: 'метка начала самого кода
mov AX, SEG1 'занесение значения сегмента 1 в регистр АХ
mov DS, AX 'занесение значения регистра АХ в регистр DS
mov AH, OPER1 'занесение значения переменной OPER1 в регистр AH
add AH, OPER2 'занесение значения переменной OPER2 в регистр АН и выполнение сложения
ASSUME DS: NOTHING, DS:SEG2 'связь сегмента кода со вторым сегментом данных
mov AX, SEG2 'занесение значения сегмента 1 в регистр АХ
mov DS, AX 'занесение значения регистра АХ в регистр DS
mov RESULT, AH 'занесение значения регистра АН в переменную RESULT
mov AH, 4CH 'вызов прерывания программы и корректное её окончание
INT 21H 'вызов прерывания программы и корректное её окончание
CODE ENDS 'конец кода
END START 'признак конца файла для компилятора
Лабораторная работа №3
Задача: вычислить три алгебраических действия: вычитание, произведение и деление двух чисел на ассемблере. За числа взять дату рождения.
Действие: вычитание
Реализация в ассемблере:
SEG1 SEGMENT
OPER1 DB 3
OPER2 DB 11
SEG1 ENDS
SEG2 SEGMENT
RESULT DB?
SEG2 ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:SEG1
START:
mov AX, SEG1
mov DS, AX инициализация регистра данных (DS)
mov AH, OPER1
sub AH, OPER2 'занесение значения переменной OPER2 в регистр АН и выполнение вычитания
ASSUME DS: NOTHING, DS:SEG2
mov AX, SEG2 инициализация (подготовка к работе) регистра данных (DS)
mov DS, AX
mov RESULT, AH
mov AH, 4CH
INT 21H корректное окончание программы
CODE ENDS
END START
Действие: умножение
Реализация в ассемблере:
SEG1 SEGMENT
OPER1 DB 3
OPER2 DB 11
SEG1 ENDS
SEG2 SEGMENT
RESULT DB?
SEG2 ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:SEG1
START:
mov AX, SEG1
mov DS, AX
mov AL, OPER2 'заносим значение переменной OPER2 в регистр AL
mul OPER1 'выполнение операции умножения
ASSUME DS: NOTHING, DS:SEG2
mov BX, SEG2
mov DS, BX
mov RESULT, AH
mov AH, 4CH
INT 21H
CODE ENDS
END START
Действие: деление
Реализация в ассемблере:
SEG1 SEGMENT
OPER1 DW 8
OPER2 DB 2
SEG1 ENDS
SEG2 SEGMENT
RESULT DB?
SEG2 ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:SEG1
START:
mov AX, SEG1
mov DS, AX
mov AX, OPER1
div OPER2 'операция деления
ASSUME DS: NOTHING, DS:SEG2
mov BX, SEG2
mov DS, BX
mov RESULT, AH
mov AH, 4CH
INT 21H
CODE ENDS
END START
Лабораторная работа №12
Задача: вычислить на ассемблере выражение

и вывести окончательный результат
Реализация в ассемблере:
seg1 segment
x1 dw 75
x2 db 26
x3 db 3
x4 db 99
x5 db 11
seg1 ends
seg2 segment
result db?
seg2 ends
code segment
assume cs:code, ds:seg1
start:
mov ax, seg1
mov ds, ax
mov ax, x1
sub ax, x2
mov al, ax
mul x3
sub al, x4
mov ax, al
div x5
assume ds:nothing, ds:seg2
mov bx, seg2
mov ds, bx
mov result, al
mov ah, 4ch
int 21h
code ends
end start
END START


