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



asm: mov еах. SUMADDR fstp TBYTE PTR [еах] сохраняем интеграл Кроме косвенной адресации, сделать некую область памяти общей для разных процедур помогают директивы EXTERN и PUBLIC. Если область памяти общая, то и существовать она может только в единственном экземпляре, следовательно, объявить ее нужно только в одной из процедур. И там же нужно выделить ее ди­рективой PUBLIC, чтобы показать ассемблеру, что переменная доступна другим процедурам. В других же процедурах, использующих эту переменную, нужна пометка EXTERN, которая просит компилятор «не волноваться» насчет этой пере­менной, мол, для нее уже выделена память, а где конкретно — определит компо­новщик.

В качестве примера сделаем так, чтобы процедура simpson.asm использовала константы two и four, определенные в файле main.asm. Для этого нужно в файле main.asm пометить их как PUBLIC:

Обратите внимание, что теперь в процедуре simpson.asm память выделяется только одной переменной three QW0RD 3.0, которая не помечена директивой PUBLIC и пото­му доступна только внутри файла simpson.asm. Память для переменных two и four не выделяется, потому что она уже выделена в процедуре main.asm. Об этом как раз и говорит директива EXTERN two:QW0RD, four:QW0RD. Встретив ее, компилятор пой­мет, как обращаться с переменными two, four, упомянутыми в файле simpson.asm. Директива EXTERN указывает имена переменных и их тип (в нашем случае это 8-бай­товые слова QW0RD) — это все, что нужно знать компилятору. А где выделить для них память, решит компоновщик. И в этом ему поможет директива PUBLIC.


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

Числовые команды имеют возможность пропускать два разновидности чисел - беззнаковые двоичные, меточныешестнадцатеричные, без знака упакованные 10-тичные и без знака распакованные 10-тичные . Двоичные тысячи имеют возможность быть 2- и 32-битными. 10-тичные уложенные цифири содержат в байте две цифры, неупакованные - единственную.

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

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

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


назад далее