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



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

Арифметические команды

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

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

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

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


назад далее