14.1. Таблица приоритетов операций (в Турбо Си)
Операции в таблице расположены в порядке убывания приоритетов, операции в одной строке имеют одинаковый приоритет.
Операция |
Назначение |
[ ] |
Задание элемента массива |
( ) |
Вызов функции |
. |
Выбор поля структуры |
-> |
Выбор поля структуры посредством указателя |
++ , - - |
Постфиксный и префиксный инкремент и декремент. Если они встречаются в одном выражении, то постфиксные операции имеют больший приоритет |
sizeof |
Определение размера аргумента к байтах |
(тип) |
Приведение к типу |
~ |
Побитовое отрицание |
! |
Логическое НЕ |
- |
Унарный минус |
& |
Взятие адреса |
* |
Обращение по адресу |
*, /, % |
Умножение, деление и взятие остатка |
+, - |
Сложение, вычитание |
<<,>> |
Битовые сдвиги влево и вправо |
<,>,<=,>= |
Сравнение |
==, != |
Сравнение на равенство и неравенство |
& |
Побитовое И |
^ |
Побитовое исключающее ИЛИ |
| |
Побитовое ИЛИ |
&& |
Логическое И |
|| |
Логическое ИЛИ |
?: |
Условная операция |
=,+=,-=,*=,/=,<<=,>>=,^=, |= |
Присваивание и замещение |
, |
Операция запятая |
14.2. Функция для установки палитры (см. 10.1)
В разделе 10.1 мы обещали привести функцию, использование которой позволяет устранить подергивание экрана при смене палитры (при использовании этой функции четвертый тест примера, приведенного в 10.1, . будет работать так, как и задумывалось). Вот эта функция:
void setVgaDAC(RGB pal)
{ int seg_table=FP_SEF(pal),off_table=FP_OFF(pal) ;
asm {
push ds
push es
xor ax,ax
mov es,ax
mov dx,es:[463h]
add dx,6
pop es
in al,dx
nор
nор
test al,08h
jz wait_on
}
wait_off:
asm {
in
al,dx
nор
nор
test
al,08h
jnz
wait off
}
wait_on:
asm {
in
al,dx
nор
nор
test
al,08h
jz wait
on
mov
dx,3c8h
mov
ax,0
out
dx,al
nор
nор
mov
ax,seg_table
mov
ds,ax
mov
si,off_table
mov cx,
(256*3)
mov
dx,3c9h
cld
}
get_reg:
asm
{
lodsb
out
dx,al
nор
nор
loop
get_reg
pop ds
}