|
Ушел с форума
16374 / 7686 / 1080
Регистрация: 11.11.2010
Сообщений: 13,760
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 14.11.2013, 10:29 [ТС] | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
ГЛАВА 10 Синтаксис команд:АРИФМЕТИЧЕСКИЕ КОМАНДЫ (часть 2/7) Команды ADC и SBB (Сложение с переносом = «ADDITION with Carry») (Вычитание с займом = «SUBTRACT with Borrow») adc reg,reg/mem adc reg/mem,reg adc reg/mem,imm Возможные варианты команды SBB: sbb reg/mem,reg sbb reg,reg/mem sbb reg/mem,imm Псевдокод команды ADC: Псевдокод команды SBB: Для чего нужны команды ADC и SBB? Максимальное значение целого числа определяется числом бит, отведенных для его хранения. Если целое число хранится в одном, двух, трех и т.д. байтах, говорят, что оно имеет одинарную, двойную, тройную и т.д. точность. Микропроцессор i4004 мог обрабатывать 4-разрядные двоичные числа, действия над более длинными операндами выполнялись по частям. Микропроцессор i8080 обрабатывал 8-разрядные двоичные числа. Микропроцессоры i8086-i80286 одной командой складывали/вычитали уже числа размером в слово (16 бит), действия над более длинными операндами продолжали выполняться по частям. Начиная с i386 одной командой можно было уже сложить/вычесть числа размером в двойное слово (32 бита). Сложение и вычитание чисел других размеров, например учетверенных слов, приходилось реализовывать через сложение (вычитание) чисел размером в двойное слово. В Pentium III произошло расширение набора инструкций командами SSE (Streaming SIMID Extension), основанных на блоке 128-разрядных регистров XXM, а проблема сложения/вычитания длинных чисел осталась.Арифметика одинарной и многократной точности Рассмотрим сложение учетверенных слов: X=12300004F0000003h и Y=805000023000000Fh. Условно разбиваем каждое учетверенное слово на два двойных: X1=12300004h, X2=F0000003h, Y1=80500002h, Y2=3000000Fh.Сначала складываем младшие (правые) части (X2 и Y2), используя команду ADD. Может получиться единица переноса, которую надо учесть. Как это сделать? Единица переноса попадает во флаг CF, поэтому к сумме старших частей (X1 и Y1) надо добавить значение этого флага (если единицы переноса не было, то CF=0 поэтому и здесь можно прибавлять CF), именно это и осуществляет команда ADC. Поэтому старшие части чисел складываем командой ADC. Таким образом, команды ADC и SBB значительно расширяют диапазон значений складываемых и вычитаемых чисел. С помощью команд ADC и SBB можно реализовать сложение и вычитание чисел любого размера, причем эти операции для знаковых и беззнаковых чисел реализуются одинаково. Применение команды SBB
Команда SALC Синтаксис команды:(Set register AL according to Carry flag) Алгоритм работы: Если CF=1, то в AL установится значение 0FFh, если CF=0, то AL установится в 0. Псевдокод:
Кодировка команд сложения и вычитания Внимательно рассмотрим кодировку всех четырех команд ADD/ADC/SUB и SBB (рис. 10.2.1). Кроме битов d (бит направления) и w (бит размера) в кодировке этих команд используется бит C (бит переноса). Если бит C=1, значит при получении суммы/разности будет производится учет переноса/займа.Рис. 10.2.1 кодировка ADD/ADC/SUB/SBB Флаги переполнения и переноса Флаг переноса (CF) взводится только тогда, когда происходит перенос из разрядной сетки из 7, 15 или 31 разрядов в 8, 16, 32, несуществующие для регистра указанной размерности. «Переполнение» обозначает, что результат арифметических операций либо слишком велик, либо слишком мал, чтобы его можно было корректно представить в выходном регистре. Если в результате сложения или вычитания целых чисел взвелся флаг переполнения (OF), это означает, что при «сложении по модулю 2» знаковых битов слагаемых (S1 и S2), знакового бита суммы (SR) и флага переноса (CF) получилась единица.
Команда XADD (Обмен и сложение = «EXCHANG and ADD operands») xadd reg/mem,reg Алгоритм работы: операнд DEST должен быть ячейкой памяти или регистром, а операнд SRC только регистром. После сложения DEST и SRC исходное содержимое памяти (операнд DEST) переносится в операнд SRC (регистр), а полученная сумма записывается в память (на место операнда DEST). Аналогично последовательному употреблению команд XCHG и ADD. SRC+DEST SRC TEMP
0
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Новые блоги и статьи
|
|||
|
Программа для com-порта
Uhbif79 05.06.2026
Всем привет, давно хотел изучить Qt, начинал, бросал, потом снова начинал. И сейчас вот смог написать свою первую программу.
До этого имел опыт программирования микроконтроллеров, писал прошивки на. . .
|
Транскрипция 55-минутного видео через Whisper: WhisperDesktop облажался, спас Google Colab[
anaschu 01.06.2026
Понадобилось получить текст из свежезагруженного видео на YouTube. Казалось бы, задача на пять минут. Заняла полтора часа. Делюсь опытом — может кому пригодится последовательность решений.
. . .
|
21 мат мед. Планы на развитие модели здравоСохранения
anaschu 01.06.2026
AnyLogic: план развития симуляционной модели рабочего коллектива — динамический абсентеизм, реальные данные, три сценария сравнения
Продолжаю серию постов о дискретно-событийной модели рабочего. . .
|
20. Мат мед. Абсентеизм как отдельный тип простоя
anaschu 29.05.2026
Апдейт модели: исправленные баги, абсентеизм и новые механизмы
Продолжаю развивать ранее описанную модель рабочего коллектива на AnyLogic. За последние несколько дней был проведён серьёзный. . .
|
|
19. здоровье, усталость и психотип работника влияют на производительность предприятия, и наоборот, производительность на здоровье, усталось и психотип
anaschu 28.05.2026
Дискретно-событийная модель рабочего коллектива на AnyLogic: здоровье, выгорание, психотипы и микростимуляция
Привет, коллеги. Хочу поделиться итогами нескольких недель работы над симуляционной. . .
|
"Прокси" для последовательного порта
Eddy_Em 28.05.2026
Эту штуку написал я достаточно давно. Но сейчас вот понадобилось настроить датчик грозы, но при этом не отключать его от "метеодемона". Соответственно, надо запустить этот "прокси": метеодемон будет. . .
|
Рефакторинг программы уравнивания.
Massaraksh7 26.05.2026
Пример по предыдущей записи в блоге. Но, надо заметить, что, во-первых, там оптимизация не только математики, но и работы с базой данных, и с графами, а во-вторых, это ещё не всё.
|
Использование TThread в Lazarus для математических вычислений.
Massaraksh7 25.05.2026
Производя рефакторинг своих программ на предмет ускорения их работы, обратил внимание на такой аспект, как сокращение времени матвычислений. Дело в том, что приходится работать с большими матрицами. . .
|