Меню сайта

Урок 52. Арифметические команды ( Сложение )

Арифметические команды любогомикропроцессора привлекают к себе
— — — наибольшее внимание. Каждый заинтересованв выполнении
— — — арифметических вычислений, и именно этикоманды проделывают такую
— — — работу. Хотя их немного, они выполняютбольшинство преобразований
— — — данных а микропроцессоре. В реальных жеусловиях арифметические
— — — команды занимают лишь малую часть всехисполняемых команд.

— — — — — Команды пересылки используют большинствопринципов работы
— — — команд микропроцессора 8088, а приизучении арифметических команд
— — — необходимо рассмотреть некоторые тонкостиих выполнения.

Сложение

— — — Команда ADD выполняет сложение указанныхоперандов, представленных
— — — в двоичном дополнительном коде. — Микропроцессор помещает результат
— — — на место первого операнда после того, каксложит оба операнда.
— — — Второй операнд не изменяется. — Команда корректирует регистр флагов
— — — в соответствии с результатомсложения. — Например, команда

— — — — — — — — — -ADD — — AX,BX

— — — складывает содержимое регистра BX ссодержимым регистра AX, и
— — — оставляет результат в регистре AX. — — — Регистр флагов сообщает о том,
— — — был ли результат нулевым, отрицательным,имел ли четность, перенос
— — — или переполнение.

— — — — — Фиг. 4.8 кратко иллюстрирует вариантыкоманды ADD.
— — — Существуют две формы сложения, 8=битовое и16=битовое. В различных
— — — формах сложения принимают участиеразличные регистры. Ассемблер
— — — следит за тем, чтобы операндысоответствовали друг другу.
— — — Содержимое байтового регистра (например,CH) не может быть
— — — прибавлено к ячейке памяти, которая неимеет тип BYTE. Если ячейка
— — — памяти является одним из операндов, онаможет быть либо
— — — операндом=результатом, либо неизменяемымоперандом. Тем самым
— — — команда может прибавить содержимоерегистра к ячейке памяти и
— — — возвратить результат в память. Одним изоперандов может также быть
— — — непосредственное значение. На Фиг. 4.9показан листинг ассемблера с
— — — накоторыми арифметическими командами.

— — — — — Команда сложения с переносом ADC — это таже команда ADD, за
— — — исключением того, что в сумму включаетсяфлаг переноса. Для любой
— — — формы команды ADD существует сравнимая сней команда ADC.
— — — — ЪДДДДДДДДї — — — — ЪДДДДДДДДї — — — — — — — — — — — — — ЪДДДДДДДДї
— — — — і — — — — — AX — — і — — — — і — — — — AX — — і — — — — — — — — — — — — — і — -AX — — і
— — — — і — — — — — BX — — і — — — — і — — — — BX — — і — — — — — — — — — — — — — і — -BX — — і
— — — — і — — — — — CX — — і — — — — і — — — — CX — — і — — — — — ДДДДДДД&gt- — — і — -CX — — і
— — — — і — — — — — DX — — і — — — — і — — — — DX — — і — — — — — — — — — — — — — і — -DX — — і
— — — — АДДДДДДДДЩ — — — — АДДДДДДДДЩ — — — — — — — — — — — — — АДДДДДДДДЩ
— — — — ЪДДДДДДДДї — + — ЪДДДДДДДДї — — — — — — — — — — — — -ЪДДДДДДДДї
— — — — і — — — — — SI — — і — — — — і — — — — SI — — і — — — — — — — — — — — — — і — -SI — — і
— — — — і — — — — — DI — — і — — — -і — — — — DI — — і — — — — — — — — — — — — -і — — DI — — і
— — — — і — — — — — BP — — і — — — — і — — — — BP — — і — — — — — ДДДДДДД&gt- — — і — -BP — — і
— — — — і — — — — — SP — — і — — — — і — — — — SP — — і — — — — — — — — — — — — — і — -SP — — і
— — — — АДДДДДДДДЩ — — — — АДДДДДДДДЩ — — — — — — — — — — — — — АДДДДДДДДЩ
— — — — — — — — — — — — — -ЪДДДДДДДДї
— — — — — — — — — — — — — -і Память і
— — — — — — — — — — — — — -і(слова) і
— — — — — — — — — — — — — -АДДДДДДДДЩ
— — — — — — — — — — — — — -ЪДДДДДДДДДї
— — — — — — — — — — — — — -іНепосред-і
— — — — — — — — — — — — — -іственный і — — — — — — — — — — — — — -АДДДДДДДДДЩ

— — — — ЪДДДДДДДДДї — — — ЪДДДДДДДДДї — — — — — -ЪДДДДДДДДДї
— — — — і — — — — — AH — — — і — — — і — — — — AH — — — і — — — — — -і — -AH — — — і
— — — — і — — — — — AL — — — і — — — і — — — — AL — — — і — — — — — -і — -AL — — — і
— — — — і — — — — — BH — — — і — — — і — — — — BH — — — і — — — — — -і — -BH — — — і
— — — — і — — — — — BL — — — і — — — і — — — — BL — — — і — — — — — -і — -BL — — — і
— — — — і — — — — — CH — — — і — — — і — — — — CH — — — і — — — — — -і — -CH — — — і
— — — — і — — — — — CL — — — і -+ і — — — — CL — — — і — — — — — -і — -CL — — — і
— — — — і — — — — — DH — — — і — — — і — — — — DH — — — і — — — — — -і — -DH — — — і
— — — — і — — — — — DL — — — і — — — і — — — — DL — — — і — — — — — -і — -DL — — — і
— — — — АДДДДДДДДДЩ — — — АДДДДДДДДДЩ — — — — — -АДДДДДДДДДЩ
— — — — — — — — — — — — — -ЪДДДДДДДДДї — — — -ЪДДДДДДДДДї
— — — — — — — — — — — — — -і Память — і — ДДДДДДД&gt- -і Память — і
— — — — — — — — — — — — — -і(слова) — і — — — -і(слова) — і
— — — — — — — — — — — — — -АДДДДДДДДДЩ — — — -АДДДДДДДДДЩ
— — — — — — — — — — — — — -ЪДДДДДДДДДї
— — — — — — — — — — — — — -іНепосред-і
— — — — — — — — — — — — — -іственный і
— — — — — — — — — — — — — -АДДДДДДДДДЩ

— — — — — — — — — — — — — — -Фиг. 4.8 Операции сложения

— — — — — Обе команды сложения, как ADD, так и ADC,устанавливают равным
— — — 1 флаг переноса, если произошел перенос изстаршего разряда
— — — результата. Команда ADD складывает дваоперанда, не обращая
— — — внимания на флаг переноса, а команда ADCучитывает и флаг переноса.
— — — Если флаг переноса равен 0, результатравен результату выполнения
— — — команды ADD. Если же флаг переноса равен1, то результат на 1
— — — больше результата команды ADD. Такимобразом, программа может
— — — использовать флаг переноса для операцийповышенной точности.
— — — — — — — — -Microsoft (R) Macro Assembler Version 5.00 — — — — — — — — — — — — 1/1/80 04:00:49
— — — — — — — — -Фиг. 4.9 — Арифметические команды — — — — — — — — — — — — — — — — — — — — — — Page — 1-1


— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — PAGE — — -,132
— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — TITLE — -Фиг. 4.9 — Арифметические команды
— — — — — — — — — -0000 — — — — — — — — — — — — — — — — — CODE — — -SEGMENT
— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — ASSUME -CS:CODE,DS:CODE
— — — — — — — — — -0000 — — — — — — — — — — — — — — — — — EXBYTE -LABEL — — BYTE
— — — — — — — — — -0000 — — — — — — — — — — — — — — — — — EXWORD -LABEL — — WORD

— — — — — — — — — -0000 — 03 1E 0000 R — — — — — — — — — — — — — — -ADD — — — — BX,EXWORD — — — — — -BX &lt— BX + [EXWORD]
— — — — — — — — — -0004 — 29 0E 0000 R — — — — — — — — — — — — — — -SUB — — — — EXWORD,CX — — — — — -[EXWORD] &lt— [EXWORD] — CX
— — — — — — — — — -0008 — 12 3E 0000 R — — — — — — — — — — — — — — -ADC — — — — BH,EXBYTE — — — — — -BH &lt— BH + [EXBYTE] + Carry
— — — — — — — — — -000C — 18 0E 0000 R — — — — — — — — — — — — — — -SBB — — — — EXBYTE,CL — — — — — -[EXBYTE] &lt— [EXBYTE] — CL — Carry
— — — — — — — — — -0010 — F7 1E 0000 R — — — — — — — — — — — — — — -NEG — — — — EXWORD — — — — — — — — [EXWORD] &lt— -[EXWORD]
— — — — — — — — — -0014 — FE 06 0000 R — — — — — — — — — — — — — — -INC — — — — EXBYTE — — — — — — — — [EXB
YTE] &lt— [EXBYTE] + 1
— — — — — — — — — -0018 — 4E — — — — — — — — — — — — — — — — — — — — — — — — -DEC — — — — SI — — — — — —SI &lt— SI — 1

— — — — — — — — — -0019 — 81 C7 00C8 — — — — — — — — — — — — — — — — — ADD — — — — DI,200 — — — — — — — — DI &lt— DI + 200
— — — — — — — — — -001D — 83 EC 64 — — — — — — — — — — — — — — — — — — — SUB — — — — SP,100 — — — — — — — — SP &lt— SP — 100
— — — — — — — — — -0020 — 83 D1 0A — — — — — — — — — — — — — — — — — — — ADC — — — — CX,10 — — — — — — — — — CX &lt— CX + 10 + Carry
— — — — — — — — — -0023 — 83 1E 0000 R 14 — — — — — — — — — — — -SBB — — — — EXWORD,20 — — — — — -[EXWORD] &lt— [EXWORD] — 20 — Carry

— — — — — — — — — -0028 — 3B C3 — — — — — — — — — — — — — — — — CMP — — — — AX,BX — — — — — — — — — Установка флагов по AX — BX
— — — — — — — — — -002A — 81 FE 01F4 — — — — — — — — — — — — — — — — — CMP — — — — SI,500 — — — — — — — — Установка флагов по SI — 500

— — — — — — — — — -002E — F6 26 0000 R — — — — — — — — — — — — — — -MUL — — — — EXBYTE — — — — — — — — AX &lt— AL * [EXBYTE]
— — — — — — — — — -0032 — F7 EB — — — — — — — — — — — — — — — — IMUL — — — BX — — — — — —DX:AX &lt— AX * BX
— — — — — — — — — -0034 — F7 36 0000 R — — — — — — — — — — — — — — -DIV — — — — EXWORD — — — — — — — — AX &lt— DX:AX / [EXWORD]
— — — — — — — — — -0038 — F6 FD — — — — — — — — — — — — — — — — IDIV — — — CH — — — — — —AL &lt— AX / CH

— — — — — — — — — -003A — 27 — — — — — — — — — — — — — — — — — — — — — — — — — DAA — — — — — — — — — — — — — Десятичное коррекция для сложения
— — — — — — — — — -003B — 2F — — — — — — — — — — — — — — — — — — — — — — — — — DAS — — — — — — — — — — — — — Десятичное коррекция для вычитания
— — — — — — — — — -003C — 37 — — — — — — — — — — — — — — — — — — — — — — — — — AAA — — — — — — — — — — — — — ASCII коррекция для сложения
— — — — — — — — — -003D — 3F — — — — — — — — — — — — — — — — — — — — — — — — — AAS — — — — — — — — — — — — — ASCII коррекция для вычитания
— — — — — — — — — -003E — D4 0A — — — — — — — — — — — — — — — — AAM — — — — — — — — — — — — — — ASCII коррекция для умножения
— — — — — — — — — -0040 — D5 0A — — — — — — — — — — — — — — — — AAD — — — — — — — — — — — — — — ASCII коррекция для деления
— — — — — — — — — -0042 — 98 — — — — — — — — — — — — — — — — — — — — — — — — — CBW — — — — — — — — — — — — — AX &lt— расширенное по знаку AL
— — — — — — — — — -0043 — 99 — — — — — — — — — — — — — — — — — — — — — — — — — CWD — — — — — — — — — — — — — DX:AX &lt— расширенное по знаку AX

— — — — — — — — — -0044 — — — — — — — — — — — — — — — — — CODE — — -ENDS
— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — END

— — — — — — — — — — — Фиг. 4.9 Арифметические команды
— — — — — — — — — -Microsoft (R) Macro Assembler Version 5.00 — — — — — — — — — — — — 1/1/80 04:00:54
— — — — — — — — — -Фиг. 4.10 Пример вычислений с повышенной точностью — — — -Page — — — — — — — 1-1


— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — PAGE — — -,132
— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — TITLE — -Фиг. 4.10 Пример вычислений с повышенной точностью
— — — — — — — — — — -0000 — — — — — — — — — — — — — — — — — CODE — — -SEGMENT
— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — -&nb
sp- — — — — — — ASSUME -CS:CODE,DS:CODE

— — — — — — — — — — -0000 — ???????? — — — — — — — — — — — — -VALUE1 — DD — — — — — ? — — — — — — — — — — — Область данных размером 32 разряда
— — — — — — — — — — -0004 — ???????? — — — — — — — — — — — — -VALUE2 — DD — — — — — ?

— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — —— -Сложение двух 32-разрядных чисел

— — — — — — — — — — -0008 — A1 0000 R — — — — — — — — — — — — — — — — — — MOV — — — — AX,WORD PTRVALUE1
— — — — — — — — — — -000B — 01 06 0004 R — — — — — — — — — — — — — — -ADD — — — — WORD PTR VALUE2,AX — — — — — — Сложение младших 16 разрядов
— — — — — — — — — — -000F — A1 0002 R — — — — — — — — — — — — — — — — — — MOV — — — — AX,WORD PTRVALUE1+2
— — — — — — — — — — -0012 — 11 06 0006 R — — — — — — — — — — — — — — -ADC — — — — WORD PTR VALUE2+2,AX — — — — Сложение старших 16 разрядов
— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — —— -Вычитание двух 32-разрядных чисел

— — — — — — — — — — -0016 — A1 0000 R — — — — — — — — — — — — — — — — — — MOV — — — — AX,WORD PTRVALUE1
— — — — — — — — — — -0019 — 29 06 0004 R — — — — — — — — — — — — — — -SUB — — — — WORD PTR VALUE2,AX — — — — — — Вычитание младшей части
— — — — — — — — — — -001D — A1 0002 R — — — — — — — — — — — — — — — — — — MOV — — — — AX,WORD PTRVALUE1+2
— — — — — — — — — — -0020 — 19 06 0006 R — — — — — — — — — — — — — — — SBB — — — -WORD PTR VALUE2+2,AX — — — -Вычитание старшей части

— — — — — — — — — — -0024 — — — — — — — — — — — — — — — — — CODE — — -ENDS
— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — END

— — — — — — — -Фиг. 4.10 Пример с повышенной точностью

— — — Фиг. 4.10 иллюстрирует сложение пары32=битовых чисел- в
— — — примере складываются 32=битовые числа поляVALUE1 и поля VALUE2, а
— — — результат помещается в поле VALUE2.Заметим, что один из операндов
— — — должен быть помещен в регистр. В первомсложении используеся
— — — команда ADD, так как текущее значениефлага переноса несущественно
— — — для первого сложения. Послесоответствующего размещения операндов
— — — программа на Фиг. 4.10 выполняет второесложение с помощью команды
— — — ADC, с учетом флага переноса,установленного предыдущим сложением.
— — — Это также хороший пример показывающий,почему команда MOV не
— — — устанавливает никаких флагов. Если быкоманда MOV изменяла флаги,
— — — выполнить правильно второе сложение былобы гораздо труднее.

Категория: Программирование на Ассемблере | Дата: 10.02.13

Меню раздела
Блок