
Цель работы: изучение операций сложения, вычитания, умножения и деления двоичных чисел на языке Ассемблер.
Основные понятия
Регистры общего назначения AX, BX, CX и DX
Регистры общего назначения являются основными рабочими регистрами ассемблерных программ. Их отличает то, что к ним можно адресоваться одним словом или однобайтовым кодом. Левый байт считается старшим, а правый - младшим.
Регистр AX – является основным сумматором и применяется во всех операциях ввода/вывода, в некоторых операциях со строками и в некоторых арифметических операциях. Например, команды умножения, деления и сдвига предполагают использование регистра АХ.
АХ: \ АН \ АL\
Регистр BX - базовый регистр, единственный из регистров общего назначения, используемый в индексной адресации. Кроме того, регистр BX используется при вычислениях.
BX: \ BH \ BL \
Регистр CX - является счётчиком. Он необходим для управления числом повторений циклов и для операций сдвига влево или вправо и для вычислений.
CX: \ CH \ CL \
Регистр DX - регистр данных. Используется в некоторых операциях ввода/вывода, в операциях умножения и деления больших чисел совместно с регистром AX.
DX: \ DH \ DL \
Любой из регистров общего назначения может быть использован для суммирования или вычитания 8- , 16- или 32- разрядных величин.
Команда MOV. Пересылка (байта или слова). Признаки не меняются. Рассмотрим примеры использования данной команды с применением имён, имён в квадратных скобках и чисел. В примерах предположено, что WORDAS определяет слово в памяти.
MOV AX , BX ; переслать содержимое ВX в регистр AX.
MOV AX , 28 ; переслать значение 28 в регистр AX.
MOV AX , WORDAS ; переслать WORDAS в регистр AX.
MOV AX , [ BX ] ; переслать содержимое памяти по адресу в регистре
; Bx в регистр ах.
MOV AX , [ 28 ] ; переслать содержимое по смещению 28.
Команда ADD (сложение) и SUB (вычитание) выполняют сложение и вычитание байтов или слов, содержащих двоичные данные. Вычитание осуществляется в компьютере по методу сложения с двоичным дополнением : для второго операнда устанавливаются обратные значения битов и прибавляется 1, а затем происходит сложение с первым операндом. Во всём, кроме первого шага операции сложения и вычитания идентичны. Оба операнда могут быть байтами или словами, и оба операнда могут быть двоичными числами со знаком или без знака.
Возможные ситуации сложения / вычитания: регистр – регистр; память – регистр; регистр – память; регистр – непосредственное значение; память – непосредственное значение. Например,
ADD BH , 10H ; непосредственное значение и регистр
ADD AX , BX ; регистр и регистр
ADD WORDAS , CX ; память и регистр
ADD AX , [DX] ; регистр и память
SUB WORDAS , BX ; регистр из памяти
SUB BX , 100H ; непосредственное значение из регистра
SUB WORDAS , 16H ; непосредственное значение из памяти
Один байт содержит знаковый бит и семь битов данных, т.е. результат арифметической операции может легко превзойти ёмкость регистра, и возникает переполнение. Полное слово имеет также ограничение, что ограничивает возможности компьютера для выполнения арифметических операций. Поэтому используют специальные сопроцессоры, которые быстро и эффективно выполняют эти операции, представляя числа в специальных кодах. Иногда вместо команды ADD используется команда ADC - сложения с переносом, которая складывает два значения и если флаг уже установлен, к сумме прибавляется 1. Для аналогичных целей (вычитание с заёмом) вместо команды SUB используется команда SBB.
Числовое содержимое поля может интерпретироваться по разному. Многие числовые поля являются беззнаковыми, например номер абонента, адрес памяти. Некоторые числовые поля предполагаются всегда положительными, например норма выплаты, день недели, число PI. Другие числовые поля являются знаковыми, так как их содержимое может быть положительным и отрицательным. Команды ADD и SUB не делают разницы между знаковыми и беззнаковыми данными, они просто складывают и вычитают биты.
Например, для беззнакового числа биты представляют число 249, а для знакового –7: