Разумеется, в качестве операндов выражений
можно использовать другие выражения, получая та-
ким образом сложные формулы. Кстати, использо-
вать выражения можно во всех местах, где использу-
ются константы. Приоритет операторов - это услов-
ное число, показывающее порядок выполнения опе-
раторов, если не используются скобки. Чем больше
приоритет, тем раньше вычисляется результат опе-
ратора. То есть в выражении А + В * N mod 3 сначала
будет вычислен результат B*N, затем будет вычис-
лен остаток от деления этого результата на 3, и лишь
затем к полученному числу будет прибавлено число
А. Если требуется изменить порядок вычисления опе-
раторов, необходимо использовать скобки.
Кроме того, можно использовать и
логические
выражения, которые строятся при помощи операто-
ров логического И, ИЛИ, ИСКЛЮЧАЮЩЕГО ИЛИ и
инверсии, а также знаков логических отношений
(больше, меньше, равно, больше или равно и т.д.).
Результатом логических выражений будет также
ло-
гическое
значение, которое преобразуется в нужный
формат (байт, бит или двойное слово), при этом зна-
чению ИСТИНА соответствует
ненулевое
значение,
а значению ЛОЖЬ -
нулевое.
----------
О
“РЛ" - НАЧИНАЮЩИМ
&
Таблица 12. Перечень операторов выражений
Оператор
Действие
Приоритет
- X
Противоположный знак числа X
9
+ Х
Положительный знак числа X
9
hlgh(XX)
Старший байт 16-битного числа XX
10
low(XX)
Младший байт 16-битного числа XX
10
\Y или not Y
Побитовая инверсия числа У
8
X ** Y
Возведение X в степень У
7
X * Y
Умножение X на V
6
X / Y или XdlvY
Целочисленное деление X на V
6
X mod Y
Остаток от деления X на V
6
X + Y
Сложение X с V
5
X - Y
Разность X и У
5
X shr Y или X » Y
Побитовый сдвиг X на V разрядов вправо
4
X shl Y или X « Y
Побитовый сдвиг X на V разрядов влево
4
X and Y или X & Y
Логическое И операндов X и V
3
X or Y или X л Y
Логическое ИЛИ операндов Х и У
2
X xor Y
Логическое ИСКЛЮЧАЮЩЕЕ ИЛИ
операндов Х и У
2
Чтобы вы смогли лучше понять использование выражений, приведу несколько примеров:
Datal: DB
25 * 6 + RF5
;
определяет метку байта Datal в сегменте данных, значение
;
которого равно сумме константы RF5 и числа 150
MOV
A, #(25+RF5)
;
Заносит в аккумулятор константу, равную сумме константы RF5
;
и числа 25
MOV
A, 25+RF5
;
Заносит в аккумулятор содержимое ячейки,, адрес которой есть
; сумма 25 и константы ШГ5
Ad г 2
EQU
147*(2A5)
; определяет константу 4704 (126011)
MOV
Rl, #low(Adr2)
; Заносит в И1 число
6011
MOV
R2, #h±gh(Adr2) ; заносит в И2 число
1 2 1 1
Bytel: DB
RF5. > 7
; Заносит в байт сегмента данных с меткой Bytel значение 0, если
; константа RF5 больше 7
Главное, что вы должны помнить при использовании
выражений, так это то, что их значения вычисляются на-
этапе компиляции программы, т.е. операнды выражений
должны быть определены в тексте вашей программы.
Это означает, что использовать, например, значения ре-
гистров в выражениях нельзя.
И теперь несколько слов о том, как определяются в
программе сегменты. Вы помните, что сегменты имеют
собственные названия - именно эти предопределенные
имена сегментов и являются, в сущности, директивами
задания сегментов. Формат директивы задания сегмен-
та следующий:
.
<ИМЯ СЕГМЕНТА>
[АТ <константа>]
Обратите внимание, что часть директивы в квадрат-
ных скобках может отсутствовать. Эта часть (АТ <кон-
станта>) определяет адрес, с которого будет начат (или
продолжен) сегмент. Если вы не используете эту часть,
можно задать адрес начала или продолжения сегмента
директивой ОРЮ, вам уже знакомой - результат будет
одинаковым. Директива указания сегмента позволяет
компилятору узнать, с какой именно областью памяти
должна вестись работа следующих директив. Область
действия директив задания сегмента распространяется
вплоть до конца программы или до очередной директи-
вы задания сегмента. Для каждого сегмента компиля-
тор ведет отдельный учет использованных ячеек, поэто-
му можно в разных местах программы описывать раз-
ные части одного и того же сегмента, при этом факти-
чески все они будут последовательно (если не было яв-
ного указания адресов участков директивами ОРЮ или
АТ) объединены в один. Я знакомлю вас с несколько
упрощенным подходом в работе с сегментами. На са-
мом деле существует и более сложный, но более гибкий
способ, однако я считаю, что начинающим не стоит сра-
зу хвататься за все. По мере роста вашей опытности в
программировании вы вполне сможетё по существую-
щей литературе освоить работу с перемещаемыми сег-
ментами.
42
У
Радиолюбитель - 0 7 /2 0 0 7
предыдущая страница 42 Радиолюбитель 2007-07 читать онлайн следующая страница 44 Радиолюбитель 2007-07 читать онлайн Домой Выключить/включить текст