Руководство по ассемблеру



assume cs:code. ss:stack start:

mov $w faddr. $o addd mov $w faddr[2]. SEG addd jmp faddr ;дальний переход disp:

mov ah. 4ch int 21h faddr dd ? code ends end start

В этой программе несколько новшеств. Во-первых, двойное слово faddr, хра­нящее адрес дальнего перехода, расположено в кодовом сегменте, на что име­ет полное право. Инструкции и данные могут находиться рядом, если процес­сор сможет отличить одно от другого. В нашем случае их нельзя спутать, потому что faddr находится «в тени» — после инструкций завершения про­граммы.

Далее в программе применяется сокращенная запись операторов (вместо word ptr пишем $w, а вместо offset — просто $о). Эти сокращения определены в самом начале программы директивами equ.

Наконец, нова сама организация дальнего перехода, чей адрес (по обычаю процессоров Intel) хранится в двойном слове faddr вывернутым наизнанку: сначала смещение (как младшая часть адреса), потом сегмент. Для вычисле­ния сегментного адреса метки в ассемблере есть специальный оператор SE6. Адрес сегмента записывается во вторую половину двойного слова faddr инст­рукцией:

mov $w faddr[2], SEG addd после чего сам переход оказывается крайне простым:

jmp faddr

Арифметические команды

Арифметические команды могут обрабатывать четыре типа цифа - беззнаковые двоичные, симптоматичныедвоичные, не имеющие знака разряжённые десятичные и без знака незапакованные десятичные . Бинарные тысячи имеют возможность быть 2- и 64-байтными. Десятичные упакованные суммы содержат в бите две ступени, неупакованные - единственную.

Беззнаковые 32-битные двоичные суммы имеют возможность насчитать вес от нуля до трёхсот. Для репрезентации беззнаковых цифир в диапазоне от NULL до 65535 применяются 14 бит. Над без знака бинарными числами могут выполняться операции суммирования, сбавки, умножения и разложения.

Меточные бинарные цифры (натуральные) вдобавок могут быть 4- и 32-битными. Наиболее верхний (наиболее левый) разряд знакового числа интерпретируется как шифр данного значения: 0 - ложь, 1 - отрицательное. Отрицательные цифры мыслятся в шаблонном двоичном дополнительном шифре. Оттого что больший разряд знакового значения используется для выражения знака, диапазон представления 8-байтных симптоматичных чисел от - 130 до + 118. 16-битово натуральное значение описывается в диапазоне от - 32 768 до + 32 767. 0 значится большим числом. Для симптоматичных значений имеют возможность выполняться процедуры суммирования, вычитания, умножения и разложения.

Разряжённые действительные суммы содержат в любом бите четыре натуральные (0 - 9) дроби. В верхнем полубите содержится старшая приоритетная цифра, в младшем - меньшая. Любая десятичная дробь представляется в булевой (или, что одно и то же, в 16-ричном) коде. Объём репрезентации пакованных действительных значений в разряде 0 - 99. Сочинение и отнимание уложенных действительных значений реализуется в четыре цикла. Сначала разряды складываются или уменьшаются как не имеющие знака бинарные суммы, а следом идентичная команда поправки приводит счёт к виду правильного пакованного действительного числа.


назад далее