Главная

Популярная публикация

Научная публикация

Случайная публикация

Обратная связь

ТОР 5 статей:

Методические подходы к анализу финансового состояния предприятия

Проблема периодизации русской литературы ХХ века. Краткая характеристика второй половины ХХ века

Ценовые и неценовые факторы

Характеристика шлифовальных кругов и ее маркировка

Служебные части речи. Предлог. Союз. Частицы

КАТЕГОРИИ:






Лабораторная работа №2. 1.1. Программирование арифметических выражений.




Лабораторная работа №1.

ОБЗОР ПРИЕМОВ ПРОГРАММИРОВАНИЯ НА АССЕМБЛЕРЕ

1.1. Программирование арифметических выражений.

Программа на языке Ассемблер состоит из операторов (команд). Каждый оператор занимает одну строку. Общий вид оператора:

<оператор> <операнд1>,<операнд2>

Некоторые операторы могут содержать только один из операндов.

Пример наиболее часто встречающейся команды:

Mov ax,x

Команда копирует содержимое переменной (операнда) x в регистр процессора ax. Соответствует команде в языке Паскаль:

Ax:=x;

Операторы языка Ассемблер не допускают использования двух переменных в качестве операндов для команды, т. е. команда

mov x,y { в Паскале x:=y}

где x и y – переменные, недопустима. Следует писать:

Mov ax,x

Mov y,ax

В данном курсе рассмотрена арифметика для целых двоичных чисел. В табл. 1 представлены основные команды для выполнения арифметических операции, а в табл. 2 — дополни тельные.

Таблица 1 Двоичная арифметика.

Обозначения, используемые в таблице:

on 1, on 2, on — операнды, т.е. содержимое, стоящее по первому (оп 1), вто­рому (оп 2) адресам или единственный операнд (on); al, ah, ax, dx, eax, edx — регистры, при­чем eax, edx допустимы только для процессоров 80386 и выше.

Как видно из табл. 1, в командах умножения и деления задается один операнд, второй сомножитель или делимое в фиксированных регистрах. Ко­манда умножения возвращает результат в два раза длиннее сомножителей, команда деления требует, чтобы делимое было в два раза длиннее делителя. Ре­зультатом выполнения команды деления являются частное (регистр, запи­санный первым в таблице) и остаток (регистр, запи­санный вторым).

Если перед кодом стоит буква i (imul, idiv, i-integer -целый), операции выполняются с учетом знаков исходных данных, в противном случае — без­знаковые операции.

ПРИМЕР: Вычислить значение выражения x=y+(z-u*v)/w, если исход­ные данные занимают одно слово.

Program asm_prg;

Var

X,y,z,u,v,w:integer;

Begin

Writeln(‘ Writeln y,z,u,v,w’);

Readln (y,z,u,v,w); { это комментарий}

Asm { Здесь начинается ассемблерный код}

mov ax,v { ax:=v}

mul u { ax:=ax*u}

mov bx,ax (bx:=ax)

mov ax,z (ax:=z)

sub ax,bx (ax:=ax-bx)

cwd {подготовка к делению}

Idiv w (ax:=ax div w)

add ax,y (ax:=ax+y)

mov x,ax (x:=ax)

End; { Здесь заканчиваетсяассемблерный код}

Writeln (‘x= ‘,x);

Readln;

End.

 

"Узелки" на память

Данные, участвующие в операциях, должны быть одной длины (байт-байт, слово-слово, двойное слово - двойное слово).

Команда умножения изменяет содержимое регистра dx (edx) даже если сомножители дают произведение, которое помещается в ах (еах).

Команда деления требует дополнительной подготовки, т.е. увеличения длины делимого(длина делимого должна быть в 2 раза больше длины дели­теля). Для расширения делимого в ah, dx, eaх (для байта, слова и двойного слова соответственно) записывается знаковый разряд.

Рекомендуем просмотреть выполнение программы с помо­щью от­ладчика!

Таблица 2 Двоичная арифметика(дополнительные команды)

Заметим, что команды inc(dec) используются вместо add(sub), если нельзя менять флаг переноса; команды adc(sbb) используются для вычислений с многократной точностью

 

Задание. Написать программу на языке Паскаль с использованием Ассемблерной вставки для произведения вычислений.

1. x;=x/2+y-2*x)

2. x:=y-(x-2*y)

3. x:=x/y-(y-2*x)/2

 


 

Лабораторная работа №2.






Не нашли, что искали? Воспользуйтесь поиском:

vikidalka.ru - 2015-2024 год. Все права принадлежат их авторам! Нарушение авторских прав | Нарушение персональных данных