Читайте также:
|
|
Допустим, нам нужно перевести число 19 в двоичное. Вы можете воспользоваться следующей процедурой:
19/2=9 c ост.1 > 9/2=4 с ост.1 > 4/2=2 с ост.0 > 2/2=1 с ост.0
1/2=0 с ост. 1
Итак, мы делим каждое частное на 2 и записываем остаток в конец двоичной записи. Продолжаем деление до тех пор, пока в делимом не будет 0. В результате получаем число 19 в двоичной записи: 10011.
Иногда, зная положительное число, требуется получить противоположное ему отрицательное число. Для этого используется команда NEG, обеспечивающая преобразование знака двоичных чисел из положительного в отрицательное и наоборот. Общий вид:
NEG <операнд>.
Пример. Пусть регистр AX содержит слово 0001H. После выполнения команды NEG AX содержимым регистра AX будет FFFFH. Таким образом, команда NEG инвертирует значения битов и прибавляет 1.
6. операции с двоичными числами со знаком.
ADD (Сложение). Определяет двоичную сумму двух указанных операндов. Результат помещается на место операнда-приемника, второй операнд остается без изменения. Общий вид:
ADD <1-й операнд>, <2-й операнд>
<1-й операнд> <-- <1-й операнд> + <2-й операнд>
Пример. Пусть регистр DL содержит число 58H, однобайтовая ячейка памяти TEST_BYTE содержит 27H. После выполнения команды ADD TEST_BYTE,DL в ячейку памяти будет записано 7FH:
содержимое регистра DL: 0101 10002 = 58H;
содержимое ячейки TEST_BYTE: 0010 01112 = 27H;
новое содержимое ячейки TEST_BYTE: 0111 11112 = 7FH.
Флаги, затрагиваемые операцией: OF, ZF, AF, PF, CF.
2. ADC (Сложение с переносом). Определяет двоичную сумму двух указанных операндов и содержимого флага переноса CF. Результат помещается на место операнда-приемника, второй операнд остается без изменений. Общий вид:
ADC <1-й операнд>, <2-й операнд>
<1-й операнд> <-- <1-й операнд> + <2-й операнд> + <CF>.
Команда работает с байтами и со словами, со знаковыми и беззнаковыми двоичными числами. Первый операнд может храниться в регистре или ячейке памяти. Второй операнд может быть задан в регистре, ячейке памяти или непосредственным числовым значением. Не разрешается задавать операнды в регистрах сегментов, а также хранение (запись) двух операндов одновременно в ячейках памяти. Операнды могут быть байтами или словами, представлять числа со знаком или без знака. Поскольку команда ADC использует флаг переноса CF, то она может применяться для сложения чисел, длина которых превышает 16 бит.
Пример 1. Пусть регистр BX содержит число 4803H, регистр AX - число 2517H, а регистр флагов процессора содержит значение F047H (11110000010001112), то есть флаг переноса CF равен 1. После выполнения команды ADC AX,BX вместо 2517H в регистре AX будет записано 6D1BH:
содержимое BX: 0100 1000 0000 0011 = 4803H;
содержимое AX: 0010 0101 0001 0111 = 2517H;
флаг переноса CF: 1;
новое содержимое AX: 0110 1101 0001 1011 = 6D1BH.
Пример 2. Проиллюстрируем использование этой команды при сложении так называемых "длинных" чисел, которые не помещаются в одно слово. Пусть требуется сложить два таких числа:
H
E1ADH
Сначала сложим младшие слова этих чисел, используя команду ADD:
H
E1ADH
------
(1)29BDH
Единица в скобках - это значение флага CF. Одновременно это значение, которое должно быть перенесено в следующий разряд. Мы должны его учесть при сложении старших разрядов этих чисел. Поэтому нужно воспользоваться командой ADC:
H
H
Дата добавления: 2015-02-16; просмотров: 156 | Поможем написать вашу работу | Нарушение авторских прав |