Flat Assembler 1.64. Мануал программера | страница 6



», для того, чтобы поместить адрес начала этих данных в регистр BX, вам нужно использовать инструкцию «>mov bx,char», а для того, чтобы поместить в регистр DL значение байта, на который ссылается «>char», нужно использовать «>mov dl,[char]» (или «>mov dl,ptr char»). Если вы попытаетесь ассемблировать «>mov ax,[char]», FASM выдаст ошибку, так как он сравнивает размеры операндов, которые должны быть равны. Вы можете принудительно проассемблировать эту инструкцию, изменяя размер операнда: «>mov ax, word [char]», но помните, что эта инструкция прочитает два байта, начинающихся с адреса «>char», тогда как он был определен как один байт.

Последний и самый гибкий способ задания меток — это использование директивы «>label». За этой директивой должно следовать имя метки, далее, опционально, размер оператора (может предваряться двоеточием), и далее, также опционально, оператор «>at» и числовое выражение, определяющее адрес, на который данная метка должна ссылаться. Например, «>label wchar word at char» определяет новую метку для 16-битных данных по адресу «>char». Теперь инструкция «>mov ax,[wchar]» после компиляции будет выглядеть так же, как «>mov ax,word [char]». Если адрес не указан, директива «>label» будет ссылаться на текущий адрес. Таким образом, «>mov [wchar],57568» скопирует два байта, тогда как «>mov [char],224» скопирует один байт на тот же адрес.

Метка, имя которой начинается с точки, обрабатывается как локальная, и её имя прикрепляется к имени последней глобальной метки (с названием, начинающемся с чего угодно, кроме точки) для создания полного имени этой метки. Так, вы можете использовать короткое имя (начинающееся с точки) где угодно перед следующей глобальной меткой, а в других местах вам придется пользоваться полным именем. Метки, начинающиеся с двух точек — исключения. Они имеют свойства глобальных, но не создают новый префикс для локальных меток.

«>@@» обозначает анонимную метку, вы можете определить её множество раз. Символ «>@b» (или эквивалент «>@r») ссылается на ближайшую предшествующую анонимную метку, а символ «>@f» ссылается на ближайшую после неё анонимною метку. Эти специальные символы нечувствительны к регистру.

1.2.4 Числовые выражения

В предыдущих примерах все числовые выражения были обычными числами, константами или метками. Но они могут быть более сложными, использовать арифметические или логические операторы для вычисления во время компиляции. Все эти операторы с их значениями приоритета перечислены в таблице 1.4.