Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Основной текст лекций.doc
Скачиваний:
4
Добавлен:
01.05.2025
Размер:
1 Мб
Скачать
☆
    1. Инструкции пересылки данных и двоичной арифметики

Команды данной группы приведены в таблице 5.4. Код определяет выполняемое командой действие, операнды показывают адреса ячеек, хранящих исходные данные, необходимые для выполнения команды и адрес ячейки результата.

Таблица 5.4 Инструкции пересылки данных и двоичной арифметики

Мнемокод

Действие

Код

Операнды

mov

dst, src.

пересылка

add

dst, src

сложение

inc

dst

увеличить на единицу

sub

dst, src

вычитание

dec

dst

уменьшение на единицу

neg

dst

изменение знака

sal

dst,счетчик

арифметический сдвиг влево

sar

dst,счетчик

арифметический сдвиг вправо (по мере сдвига вправо освобождающиеся места заполняются значением знакового разряда)

shl

dst,счетчик

логический сдвиг влево

shr

dst,счетчик

логический сдвиг вправо

xlat

таблица

трансляция байтов из таблицы

lea

dst, src

загрузка исполнительного адреса

mod

dst, src

получения остатка от деления

Процессор i8086 и более поздние версии относятся к двухадресным машинам. Это значит, что его команда может содержать не более двух операндов. Если для выполнения команды необходимо иметь два источника данных, например, сложение, то сохранение результата выполнения команды производиться по адресу одного из источников данных. Чтобы показать, какой из операндов будет хранить результат, его обозначают при описании команды как dst (destination – назначение), операнд, который используется только как адрес исходных данных, обозначается как src (source – источник). В двухоперандных командах операнд dst указывает, перед выполнением команды, адрес исходного данного, а после выполнения – адрес результата.

Запись программ на языке Ассемблер

Ниже приведена типичная структура простой программы на ассемблере.

.model small

.data ;директива начала сегмента данных

d1 dw 34h

d2 db 10100110b

d3 dd 3 dup (?)

.code

start: mov ax,data ; Загрузить адрес

mov ds,ax ; сегмента данных

.

. ; текст программы

quit: mov ax,4c00h ; Код завершения 0

int 21h ; Выход в DOS

end start

Загрузка адреса сегмента данных состоит из двух команд, так как непосредственные данные нельзя заносить прямо в сегментный регистр.

Для завершения программы и выхода в DOS имеется несколько возможностей, рекомендуется использовать две команды, начинающиеся с метки quit.

Пример вычисления арифметического выражения

Вычислить Х = 3А + (В + 5 ) / 2 – С – 1,

где A, В, С, Х- целые знаковые числа, занимающие слово, написать программу, реализующую данную формулу.

Распишем формулу по отдельным операциям:

АХ ← А ; значение A в регистре АХ

АХ ← 2 *( АХ ) ; 2А в АХ

АХ ← ( АХ ) + А ; 3А в АХ

ВХ ← В ; В в ВХ

ВХ ← 5 + ( ВХ ) ; В+5 в ВХ

ВХ ← (ВХ ) / 2 ; ( В+5) / 2 в ВХ

АХ ← (BX ) + ( AX ) ; 3А+( В+5 ) / 2 в АХ

АХ ← ( АХ ) – С ; 3А+( В+5 ) / 2 – С в АХ

АХ ← ( АХ ) -1 ; 3А+( В+5 )/2 – С – 1 в АХ

Х ← ( АХ ) ; 3А+( В+5 )/2 – С – 1 в Х

Ниже приведена типичная структура простой программы на Ассемблере. Текст программы:

.model small

.data ; начало сегмента данных

a dw 10

b dw 20

c dw 5

x dw ? ;неинициализированное данное

.stack 100h ;сегмент стека

. code ;сегмент программы

start: mov ax, @data ; загрузка адреса сегмента данных

mov ds, ax ;регистр сегмента данных можно загружать только

;из регистра

mov ax, a

sal ax, 1 ;A * 2

add ax, a ;3 * A

mov bx, b

add bx, 5 ;B+5

shr bx, 1 ;(B+5)/2

add ax, bx ;3*A+(B+5)/2

sub ax, c ;3*A+(B+5)/2-C

dec ax ;3А+( В+5 )/2 – С – 1

mov x, ax ; запись результата в память

quit: mov ax, 4c00h ; код завершения 0, 4c – имя программы

int 21 ; выход в dos

end start