Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Архитектура компьютеров / 6_Доп программы.doc
Скачиваний:
44
Добавлен:
20.03.2015
Размер:
164.35 Кб
Скачать

4.13 Особенности арифметических операций c двоичными данными.

В этом разделе даются примеры программ с операциями сложения, вычитания, умножения и деления двоичных данных.

4.13.1 Сложение и вычитание

Команды ADD и SUB выполняют сложение и вычитание байтов или слов, содержащих двоичные данные. Вычитание осуществляется в компьютере по методу сложения с двоичным дополнением: для второго операнда устанавливаются обратные значения битов и прибавляется 1, а затем происходит сложение с первым операндом. Во всем, кроме первого шага, операции сложения и вычитания идентичны.

На рис. 4.24 представлены примеры команд ADD и SUB, обрабатывающих байты или слова. В процедуре B10ADD используется команда ADD для сложения байтов, а в процедуре C10SUB команда SUB вычитает слова. Примеры показывают все пять возможных ситуаций:

сложение/вычитание регистр - регистр;

сложение/вычитание память - регистр;

сложение/вычитание регистр - память;

сложение/вычитание регистр - непосредственное значение;

сложение/вычитание память - непосредственное значение.

.CODE

ORG 100H

BEGIN: JMP SHORT MAIN

.DATA

BYTEA DB 64Н ;Элементы данных

BYTEB DB 40H

BYTEC DB 16H

WORDA DW 4000H

WORDB DW 2000H

UORDC DW 1000H

MAIN PROC NEAR ;Основная процедура:

CALL B10ADD ;Вызвать сложение ADD

CALL C10SUB ;Вызвать вычитание SUB

RET

MAIN END

; Пример сложения байт:

B10ADD: PUSH AX ;Сохранение регистров

PUSH BX

MOV AL,BYTEA

MOV BL,BYTEB

ADD AL,BL ;Регистр и регистр

ADD AL,BYTEC ;Память и регистр

ADD BYTEA,AL ;Регистр и память

ADD BL,10H ;Непосредств.и регистр

ADD BYTEC,25H ;Непосредств.и память RET

ADD BYTEB,AL ;Регистр и память

POP AX

POP BX

RET

; Пример вычитания слов:

C10SUB: PUSH AX

PUSH BX

MOV AX,WORDA

MOV BX.WORDB

SUB AX,BX ;Регистр из регистра

SUB AX,WORDC ;Память из регистра

SUB BX, 1000H ;Непосредств. из peг.

SUB WORDA, BX ;Регистр из памяти

SUB WORDA,256H ;Непосредств. из пам.

POP AX

POP BX

RET

Рис. 4.24. Примеры команд ADD и SUB

Поскольку прямой операции память-память не существует, то данная операция выполняется через регистр. В следующем примере к содержимому слова WORDB прибавляется содержимое слова WORDA, описанные как DW:

MOV AX,WORDA

ADD AX,WORDB

MOV WORDB,AX

Переполнения

Опасайтесь переполнений в арифметических операциях. Один байт содержит знаковый бит и семь битов данных, т.е. значения от -128 до + 127. Результат арифметической операции может легко превзойти емкость однобайтового регистра. Например, результат сложения в регистре AL, превышающий его емкость, автоматически не переходит в регистр АН. Предположим, что регистр AL содержит 60Н, тогда команда

ADD AL, 20H

генерирует в AL сумму - 80Н. Но операция также устанавливает флаг переполнения и знаковый флаг в состояние "отрицательно". Причина заключается в том, что 80H или двоичное 1000 0000 является отрицательным числом. Таким образом, вместо + 128 сумма равна -128. Так как регистр AL слишком мал для такой операции, следует воспользоваться регистром AX. В следующем примере команда CBW (Convert Byte to Word - преобразовать байт в слово) преобразует 60Н в регистре AL в 0060Н в регистре AX, передавая при этом знаковый бит (0) через регистр АН. Команда ADD генерирует теперь в регистре AX правильный результат: 0080Н, или +128:

CBW ; Расширение AL до AX

ADD AX, 20Н ;Прибавить к AX

Но полное слово имеет также ограничение: один знаковый бит и 15 бит данных, что соответствует значениям от -32768 до + 32767. Рассмотрим далее, как можно обрабатывать числа, превышающие эти пределы.

Соседние файлы в папке Архитектура компьютеров