15280

Застосування асемблерних команд з реалізації арифметичних, логічних операцій і операцій зсуву

Лабораторная работа

Информатика, кибернетика и программирование

Лабораторна робота № 5 Тема: Команди і директиви мови Асемблер. Мета роботи: Набути навичок застосування асемблерних команд з реалізації арифметичних логічних операцій і операцій зсуву. Засвоїти способи адресування операндів вказаних гру

Украинкский

2013-06-11

156 KB

13 чел.

PAGE  2

Лабораторна робота № 5

Тема: Команди і директиви мови Асемблер.

Мета роботи: Набути навичок застосування асемблерних команд з реалізації арифметичних, логічних операцій і операцій зсуву. Засвоїти  способи адресування операндів вказаних груп команд та алгоритми їх виконання.                                  

 

  1.  Короткі теоретичні відомості

  1.  Арифметичні і логічні операції

Більшість арифметичних і логічних операцій впливають на регістр стану мікропроцесора (прапорці), структура якого зображена на рис.1.




Рисунок 1 – Структура регістру стану

Це 16-розрядний регістр, кожний біт якого називається прапорець (flag) і може приймати значення 1 або 0. Прапорці мають наступні назви і призначення:

  •  Carry Flag (CF) – цей прапорець встановлюється в 1, коли має місце без знакове переповнення. Наприклад, якщо долавати байти 255 + 1 (результат виходить за діапазон 0...255). Якщо немає переповнення, то цей прапорець встановлений в 0.
  •  Zero Flag (ZF) – встановлюється в 1, коли результат є ноль. Для ненульового результату цей прапорець встановлюється в  0.
  •  Sign Flag (SF) – встановлюється в 1, коли результат є від’ємний. Для позитивного результату цей прапорець встановлюється в 0. Зауважимо, що цей прапорець приймає значення найстаршого значущого розряду.
  •  Overflow Flag (OF) – встановлюється в 1, коли має місце знакове переповнення . Наприклад, якщо ви одаєте байти 100 + 50 (результат виходить за діапазон -128...127).
  •  Parity Flag (PF) – цей прапорець встановлюється в 1, коли має місце парне число одиниць в результаті, і в 0 – коли має місце непарне число одиничних бітів. Навіть якщо результат є слово, то аналізується на парність тільки вісім молодших біт.  
  •  Auxiliary Flag (AF) – встановлюється в  1, коли має місце беззнакове переповнення молодшої чверті (4 біти).
  •  Interrupt enable Flag (IF) – коли цей прапорець встановлений в 1 CPU реагує на переривання від зовнішніх пристроїв (біт дозволу переривання).
  •  Direction Flag (DF) – цей прапорець використовується деякими командами для оброблення ланцюга даних, коли цей прапорець встановлений в 0 – обробка здійснюється вперед, коли цей прапорець встановлений в 1 обробька здійснюється назад.

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

1 – команда встановлює цей прапорець в одиницю 1.
0 – команда встановлює цей прапорець в 0.
r – значення прапорця залежить від результату виконання команди.
? – стан прапорця невизначений (може бути 1 або 0).

Арифметичні та логічні операції умовно поділяють на три групи.
До
першої групи входять команди: ADD, SUB, CMP, AND, TEST, OR, XOR
Ці команди підтримують наступні формати:

REG, memory
memory, REG
REG, REG
memory, immediate
REG, immediate

REG (регістр загального призначення): AX, BX, CX, DX, AH, AL, BL, BH, CH, CL, DH, DL, DI, SI, BP, SP.

memory (адреса комірки пам’яті): [BX], [BX+SI+7], variable, etc...

immediate (безпосереднє число): 5, -24, 3Fh, 10001101b, etc...

Після виконання операції між двома операндами результат завжди поміщається в перший операнд. Команди CMP і TEST тільки впливають на прапорець і не запам’ятовують результат.

Вказані вище команди впливають на наступні прапорці: CF, ZF, SF, OF, PF, AF.

Команди цієї групи виконують наступні дії:

  •  ADD – додає другий операнд до першого;
  •  SUB – віднімає другий операнд від першого;
  •  CMP - віднімає другий операнд від першого тільки для прапорця (без збереження результату);
  •  AND – логічна операція І (AND) між відповідними бітами двох операндів згідно з правилами:

1 AND 1 = 1
1 AND 0 = 0
0 AND 1 = 0
0 AND 0 = 0

Як бачимо, результат дорівнює одиниці тільки тоді, коли обидва біти рівні одиниці..

  •  TEST – виконується так само як і AND, але тільки для прапорців;
  •  OR - логічна операція АБО (OR) між відповідними бітами двох операндів згідно з правилами:

1 OR 1 = 1
1 OR 0 = 1
0 OR 1 = 1
0 OR 0 = 0

Як бачимо, якщо хоча б один з двох бітів дорівнює одиниці, то і результат дорівнює одиниці.

XOR - логічна операція виключаюче АБО (XOR) між відповідними бітами двох операндів згідно з правилами:

1 XOR 1 = 0
1 XOR 0 = 1
0 XOR 1 = 1
0 XOR 0 = 0

Як бачимо, результат дорівнює одиниці, коли значення бітів є різними.


До
другої групи входять команди: MUL, IMUL, DIV, IDIV

Ці команди підтримують наступні операнди:

REG
memory

REG: AX, BX, CX, DX, AH, AL, BL, BH, CH, CL, DH, DL, DI, SI, BP, SP.

memory: [BX], [BX+SI+7], variable, і ін..

Команди
MUL і IMUL впливають на стан наступних прапорців:
       
CF, OF
Якщо результат перевищує розмір операнду, то ці прапорці встановлюються в 1, а коли результат є меншим, то прапорці приймають значення 0.

Для команд
DIV і IDIV стан прапорців невизначений.

  •  MUL – беззнакове множення:

коли operand є байт:
AX = AL * operand.

коли operand є слово:
(DX AX) = AX * operand.

  •  IMUL – множення зі знаком:

коли operand є байт:
AX = AL * operand.

коли operand є слово:
(DX AX) = AX * operand.

  •  DIV – беззнакове ділення:

коли operand є байт:
AL = AX / operand
AH = залишок (модуль).  

коли operand є слово:
AX = (DX AX) / operand
DX = залишок (модуль).  

  •  IDIV – Ділення зі знаком:

коли operand є байт:
AL = AX / operand
AH = залишок (модуль).  

коли operand є слово:
AX = (DX AX) / operand
DX = залишок (модуль).


До
третьої групи входять команди: INC, DEC, NOT, NEG

Ці команди підтримують наступні операнди:

REG
memory

REG: AX, BX, CX, DX, AH, AL, BL, BH, CH, CL, DH, DL, DI, SI, BP, SP.

memory: [BX], [BX+SI+7], variable, etc...

Команди INC, DEC впливають на прапорці: ZF, SF, OF, PF, AF; команда NEG – на прапорці: CF, ZF, SF, OF, PF, AF, а команда NOT не впливає на стан прапорців.

Функції деяких команд даної групи:   .

  •  NOT – інвертує кожний біт операнду;
  •  NEG – перетворює операнд у число  з протилежним знаком (two's complement). Це здійснюється інвертуванням кожного біту операнду з наступним арифметичним додаванням 1 до інвертованого числа. Наприклад, число 5 буде перетворене на -5, а -2 – на 2.
    1.   Команди зсуву
      1.  Команди лінійного зсуву

До цього типу відносяться команд, що працюють за наступним алгоритмом:

  •  біт, що висувається з розряду операнду, заноситься в прапорець CF;
  •  біт, що вводиться в операнд з другого кінця, має значення 0;
  •  при зсуві чергового біту він переміщається в прапорець CF, при цьому значення попереднього зсунутого біту втрачається.

Команди лінійного зсуву поділяються на два підтипи:

  •  команди логічного лінійного зсуву;
  •  команди арифметичного лінійного зсуву.

До команд логічного лінійного зсуву відносяться команди SHL (Shift Logical Left) і SHR (Shift Logical Right), які здійснюють зсув вліво і вправо відповідно.

Ці команди підтримують наступні операнди:

memory, immediate
REG, immediate
memory, CL
REG, CL.

Безпосереднє число (immediate) або регістр CL вказують на число зсувів.

Рис.2 ілюструє принцип роботи команд SHL і SHR.

Рисунок 2 – Принцип роботи команд: а) SHL і б) SHR

Нижче наведений приклад, що ілюструє роботу  команди такого типу:

MOV AL, 11100000b

SHL AL, 1         ; AL = 11000000b,  CF=1

RET

Команди арифметичного лінійного зсуву вирізняються тим, що вони особливим чином працюють зі знаковим розрядом операнду:

  •  при виконанні команди SAL (Shift Arithmetic Left– арифметичний зсув вліво) значення знакового розряду не зберігається. Кожний наступний біт при зсуві переноситься в прапорець CF, а зліва звільнені розряди операнду доповнюються нулями. Арифметичний зсув вліво за своєю суттю практично співпадає з логічним зсувом вліво;
  •   при виконанні команди SAR (Shift Arithmetic Right – арифметичний зсув вправо) значення знакового розряду зберігається, відновлюючись при кожному такті зсуву. Кожний наступний біт, що висувається, переноситься в прапорець CF, а звільнені справа (після знакового) розряди операнду доповнюються значенням знакового розряду.

Рис.3 ілюструє принцип роботи команд SAL і SAR.

Рисунок 3 – Принцип роботи команд: а) SAL і б) SAR

Нижче наведений приклад, що ілюструє роботу  команди такого типу:

MOV AL, 0E0h      ; AL = 11100000b

SAL AL, 1         ; AL = 11000000b,  CF=1.

MOV BL, 83h       ; BL = 10000011b

SAR BL, 1         ; BL = 11000001b,  CF=1.

RET

  1.  Команди циклічного зсуву

До команд циклічного зсуву (інша назва – команди обертання) відносять команди, які зберігають біти, що зсуваються. Є два типи команд циклічного зсуву:

  •  команди простого циклічного зсуву;
  •  команди циклічного зсуву через прапорець переносу.

До команд першого типу відносяться дві команди: ROL (Rotate Left) і ROR (Rotate Right). Вони працюють таким чином, що біт який висувається зі старшого (молодшого) розряду при зсуві вліво (вправо), переписується в прапорець CF і переміщається в молодший (старший) розряд операнду. Роботу цих команд ілюструє рис.4.

 

Рисунок 4 – Принцип роботи команд: а) ROL і б) ROR

Нижче наведений приклад, що ілюструє роботу  команди такого типу:

MOV AL, 1Ch       ; AL = 00011100b

ROL AL, 1         ; AL = 00111000b,  CF=0.

RET

C

O

r

r

Команди циклічного зсуву через прапорець CF – RCL і RCR вирізняються тим, що значення біту який висувається зі старшого (молодшого) розряду при зсуві вліво (вправо) спочатку переміщається в прапорець, а вже в наступному такті – в молодший (старший) розряд операнду. Роботу цих команд ілюструє рис.5.

Рисунок 5 – Принцип роботи команд: а) RCL і б) RCR

Нижче наведений приклад, що ілюструє роботу  команди такого типу:

STC               ; set carry (CF=1).

MOV AL, 1Ch       ; AL = 00011100b

RCL AL, 1         ; AL = 00111001b,  CF=0.

RET

C

O

r

r

  1.  Постановка завдання

  1.  Використовуючи середовище емулятора МП і8086, створити проект асемблерної програми відповідно до індивідуального завдання за нижченаведеним шаблоном програми:

ORG 100H

MOV OP1, C1

MOV OP2, C2

PUSH OP1

COM1 OP1, OP2

MOV Rez, OP1

POP OP1

COM2 OP1, OP2

MOV R1, C3

MOV OP3, C4

COM3 OP3

COM4, OP3

MOV OP4, C5

COM5, OP4, C6

MOV OP5, C7

MOV CL, C8

COM6 OP5, CL

RET

Rez dw 0

END.

  1.  Використовуючи середовище емулятора скласти лістинг програми (табл..1)

Таблиця 1 Лістинг програми

Зміщення

Код (Hex)

Мнемокод команди

К-сть байт

Коментар

100

B8

MOV AX, 0000h

3

Код операції – запис числа 0000h в регістр AX

101

00

Молодший байт числа

102

00

Старший байт числа

  1.  Використовуючи покроковий режим роботи емулятора, проаналізувати хід виконання програми. Заповнити табл..2 результатів досліджень. Обов’язково показати регістри і комірки памяті, в які поміщаються результати виконання арифметичних та логічних операцій.

  1.  Варіанти індивідуальних завдань

  1.  Варіанти індивідуальних завдань до даної лабораторної роботи наведені у табл.. 3.

  1.  Методичні вказівки

  1.  Увійти в середовище емулятора Emu8086.
    1.  Створити новий проект типу “com” під власним іменем.
    2.  У створеному проекті набрати текст програми відповідно до п.2.1 і індивідуального завдання.
    3.  Скомпілювати створений проект.
    4.  Проаналізувати повідомлення про помилки, якщо такі мають місце. Записати повідомлення у звіт до лабораторної роботи. Пояснити причини виникнення помилок і вказати шляхи їх усунення.
    5.  Після успішного завершення процедури компілювання проекту перейти до аналізу роботи створеної програми відповідно до п.п.2.2 і 2.3, використовуючи покроковий режим роботи емулятора.
    6.  В процесі аналізу роботи програми контролювати і записувати зміни вмісту регістрів, що приймають участь в роботі програми, а також зміну значень прапорців.

  1.  Зміст звіту

  1.  Назва теми.
    1.  Мета роботи.
    2.  Індивідуальне завдання.
    3.  Лістинг програми відповідно до п.2.2 з відповідними коментарями.
    4.  Результати досліджень роботи команд відповідно до п.2.3.
    5.  Відповіді на контрольні запитання.
    6.  Висновки, в яких дати характеристику досліджуваних команд.

  1.  Контрольні запитання
    1.  Які команди відносяться до групи арифметичних команд?
    2.  Які команди відносяться до групи логічних команд?
    3.  На які групи поділяються команди переходів?
    4.  Які способи адресування операндів застосовують в арифметичних та логічних командах?
    5.  Які є типи команд зсуву даних?
    6.  В чому полягає різниця між логічним і арифметичним зсувом?
    7.  Які є різновиди команд циклічного зсуву (обертання)?

  1.  Джерела інформації
    1.  Ю.І. Якименко, Т.О. Терещенко, Є.І. Сокол та ін. Мікропроцесорна техніка: Підручник. – Київ. – ІВЦ «Видавництво «Політехніка». – 2004. – 439 с.
    2.  Юров В., Хорошенко С. Assembler: учебный курс – СПб: Питер Ком, 1999. – 672 с.


Таблиця 2 Результати досліджень

№ кроку

IP

Команда

CS

SS

SP

BP

SI

DI

DS

ES

BX

CX

AX

DX

Коментар

H

L

H

L

H

L

H

L

0

100

MOV AX, 0000H

0B56

0B56

FFFE

0000

0000

0000

0B56

0B56

00

00

00

17

00

00

00

00

очистка регістру AX

1

103

Таблиця 3 Індивідуальні завдання до лабораторної роботи №5

№ варіанту

OP1

OP2

COM1

COM2

C1

C2

R1

C3

OP3

C4

COM3

COM4

Примітка

1

[200H]

AX

ADD

AND

512

1024

AX

500

DI

1000

MUL

INC

2

BX

[220H]

SUB

OR

400H

200H

AX

2000

CH

100

DIV

DEC

3

[BX]

A010H

CMP

XOR

A010H

A010H

AX

1024

DI

128

MUL

NOT

BX230H

4

DX

[BX]

ADD

TEST

16000

4000

DX, AX

100H, 100H

SI

100H

DIV

NEG

BX220H

5

[DI]

BX

SUB

AND

32768

2000H

AL

64

CL

32

MUL

NOT

DI180H

6

BX

[SI]

CMP

OR

10000

9999

DX, AX

A0H, 10H

BX

20H

DIV

NEG

SI190H

7

[BX+DI]

500

ADD

XOR

524

-

AX

200

SI

1000

MUL

INC

BX220H; DIAH

8

CX

[200H]

SUB

TEST

65536

4000H

DX, AX

200H, 20H

CX

40H

DIV

DEC

9

AX

[BX+SI]

CMP

AND

5555H

AAAAH

AX

1010H

DI

10

MUL

INC

BX200H; SI10H

10

[220H]

CX

ADD

OR

500H

400H

AX

A020H

BH

16H

DIV

DEC

11

CX

[190H]

SUB

XOR

E0E0H

A0A0H

AL

B0H

BL

F0H

MUL

NOT

12

[BX]

1010H

CMP

TEST

10000

10000

DX, AX

2020H, 2020H

SI

20H

DIV

NEG

BX220H

13

AX

[180H]

ADD

AND

2048

4096

AX

50

CX

10000

MUL

NOT

14

[SI]

DX

SUB

OR

2000H

200H

AX

FFFFH

BL

FFH

DIV

NEG

SI180H

15

AX

[BX+DI]

CMP

XOR

1000H

1000H

AX

AAH

SI

10H

MUL

INC

BX220H; DIAH

16

[BX+SI]

B0C0H

ADD

TEST

64

32

DX, AX

F4H, 240H

DI

3E8H

DIV

DEC

BX200H; SI10H

Продовження таблиці 3

№ варіанту

OP4

C5

C6

COM5

OP5

COM6

C7

C8

Примітка

1

[SI]

20H

1

SHR

CL

ROL

10H

4

SI200H

2

[BX]

10H

2

SHL

SI

ROR

1010H

3

BX240H

3

[190H]

30H

3

SAR

DH

RCL

55H

2

4

[180H]

A0H

4

SAL

AL

RCR

A0H

1

5

[19AH]

B0H

1

SHR

AH

RCL

A5H

4

6

[20AH]

C0H

2

SHL

AX

RCR

2020H

3

7

[19BH]

D0H

3

SAR

CH

ROL

B5H

2

8

[DI]

E0H

4

SAL

SI

ROR

D0D0H

1

DI250H

9

[18BH]

F0H

1

SHR

BL

ROL

C3H

4

10

[BX+SI]

1AH

2

SHL

AH

ROR

33H

3

BX190H; SI10H

11

[SI]

2BH

3

SAR

DL

RCL

44H

2

SI220H

12

[20CH]

3CH

4

SAL

DH

RCR

22H

1

13

[BX+DI]

4DH

1

SHR

CL

RCL

5AH

4

BX220H; DIAH

14

[20CH]

5EH

2

SHL

CH

RCR

88H

3

15

[19DH]

6FH

3

SAR

DH

ROL

99H

2

16

[18EH]

70H

4

SAL

AL

ROR

77H

1


 

А также другие работы, которые могут Вас заинтересовать

72544. МЕТОД ПРАВОВОГО РЕГУЛИРОВАНИЯ БЮДЖЕТНОГО ПРАВА 104.5 KB
  В самом общем виде методы правового регулирования общественных отношений в том числе и отношений в сфере бюджетной деятельности это совокупность правовых средств или способов применяемых в ходе правового регулирования названных отношений.
72545. К ВОПРОСУ ОБ ОТНОШЕНИЯХ В СФЕРЕ ЭКОНОМИКИ КАК ЧАСТИ САМОСТОЯТЕЛЬНОГО ПРЕДМЕТА УГОЛОВНОГО ПРАВА 107.5 KB
  Реформирование российской экономики развитие рыночных отношений сложный процесс требующий больших усилий и времени. В связи с преобразованиями в экономической и политической жизни страны происходят качественные изменения в различных отраслях права: гражданском земельном предпринимательском и других.
72546. МЕСТО НОТАРИАЛЬНЫХ ПАЛАТ В ОРГАНИЗАЦИИ ГРАЖДАНСКОГО ОБЩЕСТВА РОССИИ 186.5 KB
  Глубокие политические и социально-экономические преобразования в России возникновение и развитие рыночных отношений конституционное закрепление равенства частной государственной муниципальной и иных форм собственности обусловили серьезное видоизменение роли и значения многих традиционных...
72547. ПОНЯТИЕ И СУЩНОСТЬ БАНКА 130 KB
  Будучи юридическим лицом в качестве основной цели деятельности которого законодательно закреплено извлечение прибыли банк совершая банковские операции стремится увеличить превышение своих доходов над расходами. Движущим мотивом деятельности банка является не выполнение общеэкономических...
72548. ОСОБЕННОСТИ ПРАВОВОГО РЕГУЛИРОВАНИЯ ИМУЩЕСТВА ДОЛЖНИКА В КОНКУРСНОМ ПРОИЗВОДСТВЕ 138 KB
  Имущество должника в конкурсном производстве служит главной цели наиболее полному удовлетворению требований кредиторов. Закон О несостоятельности банкротстве далее Закон называет все имущество должника имеющееся в момент открытия конкурсного производства и выявленное в ходе конкурсного...
72550. ХРИСТИАНСКАЯ МОДЕЛЬ ЧЕЛОВЕКА И МОДЕЛЬ ПРЕСТУПНИКА: ИХ СООТНОШЕНИЕ 173 KB
  В начале 1990 г. Главный смысл содержания этого раздела заключался в том что партия как бы опомнившись от длительного летаргического сна впервые обратила свое внимание на человека не как на винтик в приводе государственной машины или лагерную пыль но как на действительную историческую реальность.
72551. ПОНЯТИЕ АДМИНИСТРАТИВНОЙ ПРОЦЕДУРЫ И КОНЦЕПЦИИ ЗАКОНОДАТЕЛЬНОГО РЕГУЛИРОВАНИЯ АДМИНИСТРАТИВНЫХ ПРОЦЕДУР В ЗАРУБЕЖНЫХ ГОСУДАРСТВАХ 91 KB
  В науке административного права административные процедуры рассматриваются как составная часть административного процесса. В связи с этим наиболее типично следующее определение административной процедуры: административная процедура это нормативно установленный порядок последовательно...
72552. ПОЛНОМОЧИЯ, ПОРЯДОК ОБРАЗОВАНИЯ И ДЕЯТЕЛЬНОСТИ ФЕДЕРАЛЬНОГО АРБИТРАЖНОГО СУДА МОСКОВСКОГО ОКРУГА 106.5 KB
  Согласно ст. 24 Федерального конституционного закона О судебной системе Российской Федерации Федеральный арбитражный суд округа: в пределах своей компетенции рассматривает дела в качестве суда кассационной инстанции а также по вновь открывшимся обстоятельствам; является вышестоящей судебной...