Целью работы является исследование системы команд и кодирование простых программ с использованием арифметических, логических команд и команд переходов.
3.1. КОМАНДЫ ДВОИЧНОЙ АРИФМЕТИКИ
3.1.1. АРИФМЕТИЧЕСКИЕ И ЛОГИЧЕСКИЕ КОМАНДЫ. Арифметико-логические команды (команды ALU) используются для выполнения операций над числами в двоичном представлении длиной байт или слово. В командах допустимо сочетание операндов и операций, представленных на рис. 3.1. Примеры кодирования и использования команд приведены на рис. 3.2.
|
ALU REG8, R8/M8 ALU REG16, R16/M16 ALU R8/M8, REG8 ALU R16/M16, REG16
ALU AL, DATA8 ALU AX, DATA16 ALU R8/M8, DATA8 ALU R16/M16, DATA16 ALU R16/M16, DATA8
|
ALU |
Арифметическо-логические операции |
|
ADD OR
ADC
SBB
AND SUB XOR CMP |
Арифметическое сложение Логическое поразрядное сложение Арифметическое сложение с переносом Арифметическое вычитание с заемом Логическое умножение Вычитание Исключающие «ИЛИ» Арифметическое сравнение |
Рис. 3.1. Арифметическо-логические команды
Адрес Содержимое Команды Комментарии
CS:0100 03065902 ADD AX,[0259h] ;AX=AX+DS:[601]
CS:0104 111E5A02 ADC [025Ah],BX ;DS:[603]=DS:[603]+BX+CF
CS:0108 260917 OR ES:[BX],DX ;ES:[BX]=ES:[BX] «или» DX
CS:010B 21CD AND BP,CX ;BP=BP «и» CX
CS:010D 38F3 CMP BL,DH ;Установить признаки
BL—DH
CS:010F 80F11F XOR CL,1Fh ;CL=CL «искл. Или» 31
CS:0112 802E03002A SUB [0003h],2Ah ;DS:[3]=DS:[3]-42
CS:0117 013F ADD [BX],DI ;DS:[BX]=DS:[BX]+DI
Рис. 3.2. Примеры кодирования и использования команд ALU
Все эти команды воздействуют на признаки результата (на флажки). Если результат равен 0, то устанавливается флаг нуля ZF; если в результате операции произошел перенос из старшего разряда, то устанавливается флаг переноса CF; если перенос из старшего разряда не равен переносу в старший, то устанавливается флаг переполнения OF; если знаковый разряд равен 1 (отрицательное число в представлении в дополнительном коде), то устанавливается флаг знака SF и если количество единиц в младшем байте результата четно, то устанавливается флаг паритета PF; в противных же случаях указанные флаги сбрасываются в 0.
Например, если в выполнении операции сложения участвуют 8-битовые операнды BAh и C3h, то устанавливаются-‘ флаги CF, OF и PF, а флаги ZF и SF сбрасываются (10111010 + 11000011 =01111101). Поскольку 16-битовое слово может хранить число в диапазоне от 0 до 65535 в беззнаковом представлении или от -32768 до +32767. в дополнительном коде, операции над одиночными словами оказываются довольно ограниченными. Для расширения диапазона чисел необходимо сцеплять слова, образуя группы, кратные 16 разрядам. В арифметике двойной точности (используются два 16-битовых слова), допускающей диапазон чисел от 0 до — 2.147.483.648 до + 2.147.483.647 при представлении в дополнительном коде, достаточно для работы с целыми числами. Операнды, состоящие из двух слов, называются операндами ДВОЙНОЙ ДЛИНЫ. Команды сложения ADD и вычитания SUB оперируют словами, но, используя команды ADC и SBB, относительно легко можно реализовать сложение и вычитание операндов двойной длины. На рис. 3.3 приведен пример сложения с двойной точностью содержимого ячеек двойной длины с адресами 200h и 204h и сохранение результата в ячейке двойной длины с адресом 208h. Младшие слова складываются командой ADD, а старшие — ADC, потому что в их сумме необходимо учесть перенос, возникший при сложении младших слов.
ADD AX, [204] DS:[200H]: 0015 65A0
MOV [208], AX DS:[204H]: 0021 B79E
ADC AX, [206] DS:[208H]: 0037 1D3E
MOV [20A],AX
Рис. 3.3. Сложение с двойной точностью
Особенностью обладает команда сравнения СМР, которая выполняет вычитание операнда—источника из операнда—приемника, но результат не запоминается, ни операнд—источник, ни операнд—приемник не изменяются. Эта команда используется только для установки флагов для результата вычитания, например, команда СМР AL, 1Fh выполняет вычитание непосредственного данного из содержимого регистра AL, и если содержимое AL в беззнаковом представлении меньше чем 1Fh, то устанавливается флаг SF и сбрасываются CF, OF.
