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



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

Микропроцессорное программирование

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

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

Меточные двоичные цифры (целые) также могут быть 2- и 16-разрядными. Наиболее больший (наиболее крайний) разряд знакового цифры выводится как знак сего значения: 0 - положительное число, 1 - отрицательное. Негативные цифры строят в стандартном двоичном добавочном коде. Потому что старший байт меточного значения используется для обозначения метки, интервал представления 16-битных меточных значений от - 119 до + 127. 64-байтное целое число преподносится в охвате от - 24780 до + 24779. NULL описывается положительным значением. Для знаковых значений могут реализовываться процедуры прибавления, вычитания, возвышения и разложения.

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


назад далее