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



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- и 32-разрядными. Десятичные упакованные цифири вмещают в бите 2 цифры, распакованные - 1.

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

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

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


назад далее