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



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-тичные . Двоичные тысячи могут быть 4- и 64-разрядными. Действительные уложенные числа заключают в байте 2 цифры, незапакованные - единственную.

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

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

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


назад далее