

Команды 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. |
|||
|
|