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



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

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

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

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


назад далее