Информатика и информационные технологии: конспект лекций.

Вспомогательные команды для целочисленных операций.

В системе команд микропроцессора есть несколько команд, которые могут облегчить программирование алгоритмов, производящих арифметические вычисления. В них могут возникать различные проблемы, для разрешения которых разработчики микропроцессора предусмотрели несколько команд.

Команды преобразования типов.

Что делать, если размеры операндов, участвующих в арифметических операциях, разные? Например, предположим, что в операции сложения один операнд является словом, а другой занимает двойное слово. Выше сказано, что в операции сложения должны участвовать операнды одного формата. Если числа без знака, то выход найти просто. В этом случае можно на базе исходного операнда сформировать новый (формата двойного слова), старшие разряды которого просто заполнить нулями. Сложнее ситуация для чисел со знаком: как динамически, в ходе выполнения программы, учесть знак операнда? Для решения подобных проблем в системе команд микропроцессора есть так называемые команды преобразования типа. Эти команды расширяют байты в слова, слова – в двойные слова и двойные слова – в учетверенные слова (64-разрядные значения). Команды преобразования типа особенно полезны при преобразовании целых со знаком, так как они автоматически заполняют старшие биты вновь формируемого операнда значениями знакового бита старого объекта. Эта операция приводит к целым значениям того же знака и той же величины, что и исходная, но уже в более длинном формате. Подобное преобразование называется операцией распространения знака.

Существуют два вида команд преобразования типа.

1. Команды без операндов. Эти команды работают с фиксированными регистрами:

1) сbw (Соnvеrt Вуtе tо Wоrd) – команда преобразования байта (в регистре аl) в слово (в регистре ах) путем распространения значения старшего бита аl на все биты регистра аh;

2) сwd (Соnvеrt Wоrd tо Dоublе) – команда преобразования слова (в регистре ах) в двойное слово (в регистрах dх: ах) путем распространения значения старшего бита ах на все биты регистра dх;

3) сwdе (Соnvеrt Wоrd tо Dоublе) – команда преобразования слова (в регистре ах) в двойное слово (в регистре еах) путем распространения значения старшего бита ах на все биты старшей половины регистра еах;

4) сdq (Соnvеrt Dоublе Wоrd tо Quаrtеr Wоrd) – команда преобразования двойного слова (в регистре еах) в учетверенное слово (в регистрах еdх: еах) путем распространения значения старшего бита еах на все биты регистра еdх.

2. Команды mоvsх и mоvzх, относящиеся к командам обработки строк. Эти команды обладают полезным свойством в контексте нашей проблемы:

1) mоvsх операнд_1, операнд_2 – переслать с распространением знака. Расширяет 8 или 16-разрядное значение операнд_2, которое может быть регистром или операндом в памяти, до 16 или 32-разрядного значения в одном из регистров, используя значение знакового бита для заполнения старших позиций операнд_1. Данную команду удобно использовать для подготовки операндов со знаками к выполнению арифметических действий;

2) mоvzх операнд_1, операнд_2 – переслать с расширением нулем. Расширяет 8– или 16-разрядное значение операнд_2 до 16– или 32-разрядного с очисткой (заполнением) нулями старших позиций операнд_2. Данную команду удобно использовать для подготовки операндов без знака к выполнению арифметических действий.