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



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

Работа с функциями АЛУ

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

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

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

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


назад далее