Скачиваний:
94
Добавлен:
15.06.2014
Размер:
443.64 Кб
Скачать

Команды ADD и SUB

ADD приемник, источник

приемник приемник + source

SUB приемник, источник

приемник приемник – source

Те же правила что и для команды MOV

Мусин С.Б., каф. ПОИТ, БГУИР, 2006 http://ppl.yohng.com

Web site Examples

21

Irvine, Kip R. Assembly Language for Intel-Based Computers, 2003.

 

 

Пример

.data

 

var1 DWORD 10000h

 

var2 DWORD 20000h

; ---EAX---

.code

mov eax,var1

; 00010000h

add eax,var2

; 00030000h

add ax,0FFFFh

; 0003FFFFh

add eax,1

; 00040000h

sub ax,1

; 0004FFFFh

Мусин С.Б., каф. ПОИТ, БГУИР, 2006 http://ppl.yohng.com

Web site Examples

22

Irvine, Kip R. Assembly Language for Intel-Based Computers, 2003.

 

 

Команда NEG

Изменяет знак операнда (регистр или память) на

противоположный.

.data

 

valB BYTE -1

 

valW WORD +32767

 

.code

; AL = -1

mov al,valB

neg al

; AL = +1

neg valW

; valW = -32767

Пусть в AX –32 768 и мы применяем NEG. Каким будет результат?

Мусин С.Б., каф. ПОИТ, БГУИР, 2006 http://ppl.yohng.com

Web site Examples

23

Irvine, Kip R. Assembly Language for Intel-Based Computers, 2003.

 

 

Влияние команды NEG на флаги

ЦП реализует NEG следующим образом:

SUB 0,операнд

Любой ненулевой операнд приводит у установке CF

.data

 

valB BYTE 1,0

 

valC SBYTE -128

 

.code

; CF = 1, OF = 0

neg valB

neg [valB + 1]

; CF = 0, OF = 0

neg valC

; CF = 1, OF = 1

Мусин С.Б., каф. ПОИТ, БГУИР, 2006 http://ppl.yohng.com

Web site Examples

24

Irvine, Kip R. Assembly Language for Intel-Based Computers, 2003.

 

 

Трансляция арифметических выражений

Компилятор языка высокого уровня транслирует арифметические выражения в машинный код.

Рассмотрим процесс трансляции в ЯА на примере

Rval = -Xval + (Yval – Zval)

Rval DWORD ?

Xval DWORD 26

Yval DWORD 30

Zval DWORD 40

.code

 

mov eax,Xval

; EAX = -26

neg eax

mov ebx,Yval

; EBX = -10

sub ebx,Zval

add eax,ebx

; -36

mov Rval,eax

Мусин С.Б., каф. ПОИТ, БГУИР, 2006 http://ppl.yohng.com

Web site Examples

25

Irvine, Kip R. Assembly Language for Intel-Based Computers, 2003.

 

 

Задача

Перевести следующее выражение на ЯА. Нельзя изменять

значение Xval, Yval, Zval:

Rval = Xval - (-Yval + Zval)

Все значения двойные слова со знаком.

Мусин С.Б., каф. ПОИТ, БГУИР, 2006 http://ppl.yohng.com

Web site Examples

26

Irvine, Kip R. Assembly Language for Intel-Based Computers, 2003.

 

 

Флаги, устанавливаемые арифметическими

командами

АЛУ оказывает влияние на флаги состояния при

выполнении арифметических и битовых операций.

флаг устанавливается в зависимости от результата

выполнения команды, помещаемого в приемник

Основные флаги:

ZF (Zero flag) – результат нулевое значение

SF (Sign flag) – результат отрицательное значение

CF (Carry flag) – переполнение значения без знака

OF (Overflow flag) – переполнение значения со знаком

Команда MOV не оказывает влияния на флаги.

Команды INC и DEC не устанавливают CF.

Мусин С.Б., каф. ПОИТ, БГУИР, 2006 http://ppl.yohng.com

Web site Examples

27

Irvine, Kip R. Assembly Language for Intel-Based Computers, 2003.

 

 

Карта представлений

ЦП

является исполняет частью

executes

АЛУ

Условные переходы

Арифметические и

битовые операции

присоединены

используются представляют

 

 

влияют на

Флаги

состояния Ветвящуюся логику

Мусин С.Б., каф. ПОИТ, БГУИР, 2006 http://ppl.yohng.com

Web site Examples

28

Irvine, Kip R. Assembly Language for Intel-Based Computers, 2003.

 

 

Флаг нуля (ZF)

Флаг ZF (Zero flag) устанавливается если приемник команды содержит нулевое значение.

mov cx,1

; CX = 0, ZF = 1

sub cx,1

mov ax,0FFFFh

; AX = 0, ZF =

1

inc ax

inc ax

; AX = 1, ZF =

0

Запомните...

Флаг установлен, если соответствующий бит равен 1.

Флаг cсброшен если соответствующий бит равен 0.

Мусин С.Б., каф. ПОИТ, БГУИР, 2006 http://ppl.yohng.com

Web site Examples

29

Irvine, Kip R. Assembly Language for Intel-Based Computers, 2003.

 

 

Флаг знака (SF)

Флаг SF (Sign flag) устанавливается если приемник

команды содержит отрицательное значение, в противном

случае флаг сбрасывается.

mov cx,0

; CX = -1, SF = 1

sub cx,1

add cx,2

; CX = 1, SF = 0

Флаг знака – копия старшего бита приемника:

mov al,0

; AL = 11111111b, SF =

1

sub al,1

add al,2

; AL = 00000001b, SF =

0

Мусин С.Б., каф. ПОИТ, БГУИР, 2006 http://ppl.yohng.com

Web site Examples

30

Irvine, Kip R. Assembly Language for Intel-Based Computers, 2003.

 

 

Соседние файлы в папке lec_4