Краткие теоретические сведения icon

Краткие теоретические сведения




Скачати 83.56 Kb.
НазваКраткие теоретические сведения
Дата03.08.2012
Розмір83.56 Kb.
ТипЛабораторная работа

ЛАБОРАТОРНАЯ РАБОТА N 7.


Упрощенное описание сегментов. Арифметические команды.

Программирование сопроцессора

Краткие теоретические сведения



Упрощенное описание сегментов.

В современных ассемблерах можно использовать упрощенные способы описания сегментов. Применение таких средств позволяет существенно упростить оформление текста программы и сосредоточиться прежде всего на написании самих программ. Ниже приведена возможная структура программы с использованием модели SMALL. В этой модели сегмент кода отделен от сегмента данных и стека, данные и сегмент стека объединены в одну группу, т.е. регистры DS и SS имеют одно и то же значение. Это наиболее распространенная модель памяти при разработке отдельных (одномодульных)

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


.model small ; директива описания модели памяти

.stack 30 ; начало сегмента стека, задается также размер,

; равный 30-ти байтам

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

...........

.data? ; начало сегмента неинициализированных данных

...........

.code ; начало сегмента кода

.......... ; здесь могут располагаться подпрограммы и данные

.startup ; точка начала выполнения программы

..............

.exit 0 ; окончание программы, передача управления DOS

end ; окончание текста программы


Для использования возможностей процессоров, начиная с i386, необходимо добавить директиву .386 либо .486 после директивы .model. При таком построении программы адреса и переходы будут 16-разрядными, но разрешены к использованию 32-разрядные регистры и расширенные возможности команд для работы с двойными словами в реальном режиме

^

Арифметические команды



Микропроцессор может выполнять арифметические команды над двоичными числами со знаком и без знака, а также над десятичными числами без знака (упакованными и неупакованными).


1. Двоичные числа без знака принимают значения:

  • 0 - 255 (1 байт);

  • 0 - 65535 (2 байта).

2. Двоичные числа со знаком принимают значения:

  • -128 - +127 (8 битов);

  • 32768 - +32767 (16 битов).

У числа со знаком знак записывается в старший бит.

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

3. Десятичные числа без знака представляются:

  • в упакованном двоично-десятичном формате _ .(BCD) по 2 цифры в байте. В одном байте могут быть записаны числа от 00 до 99.

  • в неупакованном формате _ .(ASCII) каждая десятичная цифра занимает целый байт, код цифры записывается в младших 4-х битах байта.


Не существует специальных арифметических команд для десятичных чисел. Для действий с небольшими (однобайтовыми) десятичными числами используются команды двоичной арифметики, а затем производится корректировка результата в десятичную форму (для каждого типа арифметической операции существует своя команда десятичной корректировки). При выполнении операции деления порядок действий меняется - сначала производится преобразование операндов в десятичную форму, а затем непосредственно двоичное деление.


Ниже в табл.1 приведены арифметические команды над двоичными числами.


-----------T----------------------------T--T-----------------------

¦ Команда¦ Наименование и содержание¦ ¦ Флаги ¦

¦ ¦ ¦OF¦DF IF TF¦SF ZF AF PF CF¦

+----------+----------------------------+--+--------+--------------+

¦ ¦ Команды сложения ¦ ¦ ¦ ¦

+----------+----------------------------+--+--------+--------------+

¦ADD Пр,Ист¦ Сложение Пр <- (Пр)+(Ист) ¦* ¦ ¦ * * * * *¦

¦Содержимое приемника складывется с источником,результат-в приемник¦

¦ADC Пр,Ист¦ Сложение с переносом ¦ ¦ ¦ ¦

¦ ¦ Пр <- (Пр)+(Ист)+CF ¦* ¦ ¦ * * * * *¦

¦INC Пр ¦ Пр <- (Пр) + 1 ¦* ¦ ¦ * * * * -¦

¦ Команды вычитания ¦ ¦ Флаги ¦/

¦ ¦OF¦DF IF TF¦SF ZF AF PF CF¦

+----------T----------------------------+--T--------T--------------+

¦SUB Пр,Ист¦ Вычитание Пр <- (Пр)-(Ист) ¦* ¦ ¦ * * * * *¦

¦SBB Пр,Ист¦ Вычитание с заемом ¦ ¦ ¦ ¦

¦ ¦ Пр <- (Пр)-(Ист)-CF ¦* ¦ ¦ * * * * *¦

¦DEC Пр ¦ Пр <- (Пр)-1 ¦* ¦ ¦ * * * * -¦

¦NEG Пр ¦ Пр <- 0-(Пр) ¦* ¦ ¦ * * * * *¦

¦CMP Пр,Ист¦ (Пр)-(Ист) ¦* ¦ ¦ * * * * -¦

+----------+----------------------------+--+--------+--------------+

¦ ¦ Команды умножения ¦

+----------+----------------------------T--T--------T--------------+

¦MUL Ист ¦ Умножение чисел без знака ¦* ¦ ¦ ? ? ? ? *¦

¦ ¦ AX <- (AL) * (Ист-8б) ¦ ¦ ¦ ¦

¦ ¦ (умножается байт на байт) ¦ ¦ ¦ ¦

¦ ¦ DX:AX <- (AX) * (Ист-16б) ¦ ¦ ¦ ¦

¦ ¦ (умножается слово на слово)¦ ¦ ¦ ¦

¦ ¦EDX:EAX <- (EAX) * (Ист-32б)¦(для 32-разрядных МП) ¦

¦ ¦ (умножается двойное слово на двойное слово) ¦

¦ Формат зависит от того, как определен источник (DB, DW или DD). ¦

¦IMUL Ист ¦ Умножение чисел со знаком ¦* ¦ ¦ ? ? ? ? *¦

¦ Источником может быть адрес в памяти или регистр, ¦

¦ но не непосредственное значение !!! (аналогично MUL) ¦

¦IMUL Пр,Ис¦ Умножение Пр <- (Пр)*(Ист) ¦(для 32-разрядных МП) ¦

¦В качестве приемника может быть только регистр общего назначения !¦

¦IMUL Пр,Ис,const¦ Пр <- (Ист)*const ¦(для 32-разрядных МП) ¦

¦В качестве приемника может быть только регистр общего назначения !¦

+----------+----------------------------+--------------------------+

¦ ¦ Команды деления ¦

+----------+----------------------------T--T--------T--------------+

¦DIV Ист ¦ Деление чисел без знака ¦ ¦ ¦ ¦

¦ ¦ AH, AL<-(AH:AL)/(Ист-8б) - делится слово на байт ¦

¦ ¦остаток частное ¦ ¦ ¦ ¦

¦ ¦ DX:AX <-(DX:AX)/(Ист-16)-делится двойн. слово на слово¦

¦ ¦остаток частное ¦? ¦ ¦ ? ? ? ? ?¦

¦ ¦EDX:EAX<-(EDX:EAX)/(Ист-32)-делится 8б на двойное слово¦

¦ ¦остаток частное ¦? ¦ ¦ ? ? ? ? ?¦

¦ ¦ (для 32х-разрядных МП) ¦ ¦ ¦ ¦

¦IDIV Ист ¦ Деление со знаком ¦? ¦ ¦ ? ? ? ? ?¦

¦ Источником может быть адрес в памяти или регистр, ¦

¦ но не непосредственное значение !!! (аналогично DIV) ¦

+----------+----------------------------+--+--------+--------------+

¦ Команды расширения знака ¦

+----------T----------------------------T--T--------T--------------+

¦CBW ¦Преобразование байта в слово¦ ¦ ¦ ¦

¦ ¦ (AH -> AX) ¦ ¦ ¦ ¦

¦ ¦ AH <- знак (AL)- 7й бит AL¦ ¦ ¦ ¦

¦ ¦во всех разрядах AH ¦? ¦? ? ?¦? ? ? ? ? ¦

¦CWD ¦Преобразование слова в двой-¦ ¦ ¦ ¦

¦ ¦ное слово (AX -> DX:AX) ¦ ¦ ¦ ¦

¦ ¦DX <- знак (AX) (15й бит AX)¦? ¦? ? ?¦? ? ? ? ? ¦

¦CWDE ¦Преобразование слова в двой-¦ ¦ ¦ ¦

¦ ¦ное слово ¦ ¦ ¦ ¦

¦ ¦EAX <- знак(AX) (15й бит AX)¦? ¦? ? ?¦? ? ? ? ? ¦

¦CDQ ¦Преобразование двойного сло-¦ ¦ ¦ ¦

¦ ¦ ва в 8б (EAX->^ EDX:EAX) ¦? ¦? ? ?¦? ? ? ? ? ¦

L----------+----------------------------+--+--------+---------------


Пример


Произвести вычисления над двоичными числами:

y = (b1 + 10H + b2 * w2) / w1 - d1


.model small

.386

.stack 30

.data

b1 db 2

b2 db 3

w1 dw 4

w2 dw 9

d1 dd 15

.data?

dop dw ? ; промежуточный результат

wr dd ? ; окончательный результат

wost dw ? ; остаток

.code

.startup

mov al,b1 ; 2 -> al, b1 -> al

add al, 10h ; y1 = b1 + 10H, 12 -> al

mov bl,al ; y1 -> bl чтобы освободить ax для дальнейшего

; умножения

mov al,b2 ; 3 -> al

cbw ; преобразование байта в слово

imul w2 ; результат в dx,ax

mov dop,ax ; сохранение младшей части результата в dop

mov al,bl ; y1 -> al

cbw ; преобразование байта в слово, y1 -> ax

add ax,dop ; т.к. y1 - 16-битовое, а b2*w2 - двойное слово,

; то y1 складывается с младшей частью b2*w2

adc dx,0H ; сложение старшей части с 0 с учетом переноса ;(CF)

idiv w1 ; частное в AX, остаток - в DX

cwde ; частное в EAX

sub eax,d1 ; вычитание из полученного числа двойного слова d1

mov wr,eax ; окончательный результат -> в сегмент данных

mov wost,dx

.exit 0

end

^

Основы работы с арифметическим сопроцессором



Для того, чтобы выполнить операции с действительными числами, имеющим целую и дробную части, необходимо прибегнуть к услугам сопроцессора - от 8087 до i487. Они предназначены для совместной работы с основными микропроцессорами 8086-i486. Программисту доступны 8 десятибайтовых регистров общего назначения, обозначаемые ST(0)-ST(7) и 5 нечисловых регистров, используемых для управления. Регистры ST(0)-ST(7) используются как стек.


ST(0) иногда именуют просто ST.

------ Для использования сопроцессора нужно включить специа

¦ ST ¦ льные команды сопроцессора. Рассмотрим простую програм-

+-----+ му для сложения 2х действительных чисел.

¦ST(1)¦

+-----+ .model small

¦ST(2)¦ .data

+-----+ x dd 1.0

¦ST(3)¦ y dd 2.5

.data?

z dd ?

.code

.startup

fld x ; х загружается в ST

fld y ; x перемещается в ST(1), a y - в ST

fadd ; сумма получается в ST, ST(1) освобождается

fstp z ; сумма помещается в z, ST освобождается

.exit 0

end


В распоряжении программиста, использующего сопроцессор, имеется множество команд: это выполнение операций сложения, вычитания, умножения, деления, запись в регистры сопроцессора целых и действительных чисел и обратное действие – сохранение полученных в сопроцессоре результатов в памяти, различные сравнения чисел, вычисление тригонометрических и некоторых других функций (fsin,fcos,fsqrt,fpta,fpatan).


Пример.

Вычислить функцию:

y=s*sqrt(x)

...............

s dw 4

y dw ?

x dw 2

.........

fild s ; целое число заносится в регистр сопроцессора

fild x

fsqrt

fmulp ; ST(1)*ST->ST(1), p означает, что затем из ST число

; выталкивается из сопpоцессоpа, а пpоизведение из

; ST(1) пеpедвигается в ST если после окончания

; программы оставить непустыми регистры сопpоцессоpа,

; то могут быть пpоблемы, напpимеp, система зависнет

fistp y ; в поле данных посылается целое число после окpугления

.............

В отладчике TD при отладке можно использовать окно Numeric Coprocessor.


^ Задания к лабораторной работе.


1. Составьте выражение, используя в нем указанные в таблице варианты операций. Напишите программу на языке ассемблера, используя возможности реального режима МП i386, для вычисления значения выражения. Исходные данные для вычисления выражений должны присутствовать в сегменте данных. Аналогично результаты вычислений должны быть помещены в сегмент данных. Проведите трассировку программы для проверки правильности вычислений.

Указание. Для пересылки двойного слова из сегмента данных в регистры и обратно воспользуйтесь адресацией операндов по базе либо 32х-разрядными регистрами.

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


b - данное размеров в байт;

w - данное размером в слово (2 байта);

dw - данное размером в двойное слово (4 байта);

n - непосредственное значение.

Данные должны интерпретироваться как числа со знаком.


^ 2. Занесите в протокол:

  • составленное арифметическое выражение;

  • исходные данные и полученные результаты вычислений в шестнадцатиричной форме, а также их местоположение в оперативной памяти и их эквиваленты в десятичной форме (для возможности проверки вычислений);

  • текст программы и ее описание.


^ 3. Варианты заданий


-------------T---------------------TT-----------T-----------------

¦ N варианта¦ Набор операций ¦¦N варианта ¦ Набор операций ¦

+------------+---------------------++-----------+-----------------+

¦ 1 ¦ 1,8,11,15,22,33.55 ¦¦ 16 ¦ 8,20,23,35,52,57¦

¦ 2 ¦ 2,15,25,32,42,53,56¦¦ 17 ¦ 1,18,22,31,43 ¦

¦ 3 ¦ 3,9,19,23,34,52,57 ¦¦ 18 ¦ 2,13,24,34,41,55¦

¦ 4 ¦ 4,25,30,43,51,55,58¦¦ 19 ¦ 3,16,21,33,42,59¦

¦ 5 ¦ 5,10,21,36,52,57 ¦¦ 20 ¦ 4,10,25,36,53,58¦

L------------+---------------------++-----------+------------------

¦ 6 ¦ 6,11,22,30,42,59 ¦¦ 21 ¦ 5,11.24,32,43,57¦

¦ 7 ¦ 7,16,33,43,53,55 ¦¦ 22 ¦ 6,13,22,35,52,60¦

¦ 8 ¦ 8,17,21,32,41,56 ¦¦ 23 ¦ 7,19,23,32,43,55¦

¦ 9 ¦ 1,12,30,42,51,60 ¦¦ 24 ¦ 8,12,23,36,51,58¦

¦ 10 ¦ 2,11,22,30,41,56 ¦¦ 25 ¦ 1,11,22,34,53,59¦

¦ 11 ¦ 3,14,24,31,52,55 ¦¦ 26 ¦ ¦

¦ 12 ¦ 4,16,23,32,53,56 ¦¦ 27 ¦ ¦

¦ 13 ¦ 5,11,25,33,42,58 ¦¦ 28 ¦ ¦

¦ 14 ¦ 6,15,22,34,53,60 ¦¦ 29 ¦ ¦

¦ 15 ¦ 7,17,21,32,41,56 ¦¦ 30 ¦ ¦

L------------+---------------------++-----------+------------------


Сложение

-----T-----T-----T-----T------T-----T-----T------T------

¦ N ¦ 1 ¦ 2 ¦ 3 ¦ 4 ¦ 5 ¦ 6 ¦ 7 ¦ 8 ¦

+----+-----+-----+-----+------+-----+-----+------+------+

¦опер¦ b+b ¦ b+n ¦ b+w ¦ b+dw ¦ w+n ¦ w+w ¦ w+dw ¦ dw+n ¦

L----+-----+-----+-----+------+-----+-----+------+-------


Вычитание

-----T----T----T----T-----T----T----T----T-----T-----T---T---T----

¦ N ¦ 9 ¦ 10 ¦ 11¦ 12 ¦ 13 ¦ 14 ¦ 15 ¦ 16 ¦ 17 ¦ 18¦ 19¦ 20 ¦

+----+----+----+----+-----+----+----+----+-----+-----+---+---+----+

¦опер¦b-b ¦ b-n¦ b-w¦ b-dw¦w-b ¦w-n ¦w-b ¦dw-n ¦ dw-w¦n-b¦n-w¦n-dw¦

L----+----+----+----+-----+----+----+----+-----+-----+---+---+-----


Умножение Уменьшение значения на 1

-----T----T----T----T-----T---- -----T----T----T----T

¦ N ¦ 21 ¦ 22 ¦ 23 ¦ 24 ¦ 25 ¦ ¦ N ¦ 41 ¦ 42 ¦ 43 ¦

+----+----+----+----+-----+----+ +----+----+----+----+

¦опер¦b*b ¦ b*w¦ b*n¦ w*w ¦ w*n¦ ¦опер¦ b ¦ w ¦ dw ¦

L----+----+----+----+-----+----- L----+----+----+----+


Деление Увеличение значения на 1

|----T----T----T----T-----T----T----T---- -----T---T---T----

¦ N ¦ 30 ¦ 31 ¦ 32 ¦ 33 ¦ 34 ¦ 35 ¦ 36 ¦ ¦ N ¦51 ¦52 ¦ 53 ¦

+----+----+----+----+-----+----+----+----+ +----+---+---+----+

¦опер¦w/b ¦ w/n¦dw/b¦dw/w ¦dw/n¦n/b ¦n/w ¦ ¦опер¦ b ¦ w ¦ dw ¦

L----+----+----+----+-----+----+----+----- L----+---+---+-----


Программирование сопроцессора

---------T--------T-------T----------T---------T----------T-------

¦ 54 ¦ 55 ¦ 56 ¦ 57 ¦ 58 ¦ 59 ¦ 60 ¦

+--------+--------+-------+----------+---------+----------+-------+

¦w*sin(w)¦b+cos(w)¦w/tg(b)¦w-arctg(w)¦sin(w)/5c¦cos(2*w)+b¦tg(b)*b¦

L--------+--------+-------+----------+---------+----------+--------

Схожі:

Краткие теоретические сведения iconКраткие теоретические сведения
Создание и отладка ассемблерных программ. Разработка. Exe-файла. Получение навыков отладки в среде Turbo Debugger
Краткие теоретические сведения iconКраткие теоретические сведения
Макроопределения (макрокоманды) представляют собой последовательность операторов на языке ассемблера, которая будет заменять повсюду...
Краткие теоретические сведения iconКраткие теоретические сведения
Процедурам могут быть переданы некоторые аргументы, что позволяет, имея одну копию кода в памяти, изменять ее для каждого конкретного...
Краткие теоретические сведения iconКраткие теоретические сведения
Гарвардского университета "Марк I". После долгих поисков техники обнаружили источник своих бед небольшую моль, попавшую между контактами...
Краткие теоретические сведения iconСубд access теоретические сведения
База данных (БД) это хранилище данных о некоторой предметной области, организованное в виде специальной структуры
Краткие теоретические сведения iconМасаж завдання для індивідуальної роботи студентів заочної форми навчання І. Написати реферат однією з тем
Написати реферат однією з тем Краткие сведения о возникновении и развитии массажа
Краткие теоретические сведения iconДокументи
1. /4 курс/Mенеджмент.doc
2. /4 курс/_стор_я...

Краткие теоретические сведения iconДокументи
1. /4 курс/Mенеджмент.doc
2. /4 курс/_стор_я...

Краткие теоретические сведения iconДокументи
1. /4 курс/_стор_я _нженернох д_яльност_.doc
2. /4...

Краткие теоретические сведения iconУдк 669. 187: 621. 36. 001. 57 Теоретические аспекты разработки идентификационных моделей как законов регулирования координат электротехнического комплекса сталеплавления Труфанов И. Д., Бондаренко А. А., Чумаков К. И., Арсеньева С. И
...
Додайте кнопку на своєму сайті:
Документи


База даних захищена авторським правом ©zavantag.com 2000-2013
При копіюванні матеріалу обов'язкове зазначення активного посилання відкритою для індексації.
звернутися до адміністрації
Документи