Лабораторная работа №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