|
|||||||
АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
Команды сложения и вычитанияКоманды сложения и вычитания, используемые микропроцессором Intel 80×86 приведены в табл. 3. Таблица 3
В качестве операндов dst и src в этихкомандах могут быть указаны общие регистры и ячейки памяти с любым режимом адресации. Кроме того, в качестве src может быть указани непосредственный операнд. Результат выполнения этих команд изменяет состояние следующих флагов: OF, SF, AF, PF, CF. Отметим, что бит CF устанавливается в “1”, когда возникает перенос из 16-ого разряда при сложении и заём в 16-й разряд при вычитании. Состояние этого флага можно использовать для анализа переполнения при работе с беззнаковыми операндами. В арифметике двойной и т.д. точности этот флаг используется в командах adc и sbb. Признаком переполнении при работе со знаковыми числами служит состояние флага OF. Приведём пример сложения с двойной точностью: Перенос ← А0 + 0021 В79Е D3E Фрагмент программы, реализующий данную операцию: . . . mov ax,x1; сложить младшие слова из x1 и y1 add ax,y1; и поместить сумму в sum Mov sum,ax mov ax,x1+2; сложить старшие слова из x1 и y1 adc ax,y1+2; и поместить сумму в sum+2 mov sum+2,ax . . . В нём предполагается, что младшие слова операндов и суммы находятся соответственно в x1, y1 и sum, а старшие слова в x1, y1 и sum+2. Младшие словаскладываются командой add (поскольку нет необходимости учитывать значение флага CF от предыдущей операции), а старшие слова – adc. Аналогичным образом при операции с большей точностью операнды следует хранить в последовательно расположенных ячейках памяти, причём младшее слово имеет наименьший адрес, следующее слово – адрес больший на 2 и т.д. Рассмотрим вычитание с двойной точностью.
Заем 1 – 0006→A92F В837 F0F8 По прежнему правильные результаты получаются при обработке операндов по 16 бит. Прив е дем пример программы вычисляющей выражение U=X+Y+24–Z с двойной точностью: . . . mov ax,x; сложить числа с двойной mov dx,x+2; точностью x, x+2 и y,y+2 Add ax,y adc dx,y+2 add ax,24; прибавить к результату число 24 adc dx,0; с двойной точностью sub ax,z; вычесть из суммы число z, z+2 sbb dx,z+2; с двойной точностью mov w,ax; запомнить весь результат в w, w+2 mov w+2,dx . . .
Команды расширения знака. Команда cbw расширяет знак байта из регистра al, образуя в регистре ax эквивалентное слово в дополнительном коде. Если например, (al) = 11001000, то после выполнения команды cbw в регистре ax получится код 1111111111001000. Аналогично команда cwd расширяет знак слова из ax в регистр dx, формирую двойное слово dx:ax. В обеих командах операнд неявно указывается кодом операции и должен находиться в al или ax, Флажки не модифицируются. Рассмотренные команды используются для выравнивания длины операндов, участвующих в операциях сложения и вычитания. Поиск по сайту: |
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.007 сек.) |