Форум: "Потрепаться";
Текущий архив: 2005.02.06;
Скачать: [xml.tar.bz2];
ВнизПозор на мою седую голову... Найти похожие ветки
← →
vecna © (2005-01-19 12:06) [0]Приплыл...
есть код:
const
MyCharSet: set of char = ["a".."z"];
begin
MyCharSet := MyCharSet + ["?"];
end;
этот код вполне успешно компилируется из Delphi.
Но если собирать из командной строки, то получаю:
Error: Left side cannot be assigned to
вопрос собственно, в том, при каких условиях константа это константа, а при каких нет.
← →
DiamondShark © (2005-01-19 12:11) [1]{$J+}
← →
default © (2005-01-19 12:13) [2]есть опция в
проект/опции/компилятор
там есть переменная Assignable typed constants
которая управляет возможностью подобных присвоений
← →
vecna © (2005-01-19 12:18) [3]спорить не буду, но {$J+/-] или включение/отключение флага в Options никак не влияет... все компилируется. =(
← →
Sandman25 © (2005-01-19 12:26) [4][3] vecna © (19.01.05 12:18)
Build вместо Compile
← →
Alex_Bredin © (2005-01-19 12:45) [5]вообще лучше для таких целей использовать Include вместо +
← →
pasha_golub © (2005-01-19 12:52) [6]Alex_Bredin © (19.01.05 12:45) [5
Разницы никакой.
← →
Alex_Bredin © (2005-01-19 12:53) [7]
> pasha_golub © (19.01.05 12:52) [6]
Тейксейра обратное утверждает
← →
default © (2005-01-19 12:58) [8]pasha_golub © (19.01.05 12:52) [6]
разница в том что писать меньше
что писать
Include(egiogdfmhdkhk;erk;tkertjkrytryrtytryryryry, [1])
а что
egiogdfmhdkhk;erk;tkertjkrytryrtytryryryry :=
egiogdfmhdkhk;erk;tkertjkrytryrtytryryryry + [1]
можно, конечно, копировать, но тогда код будет более громоздким
(не результирующий, а компилируемый)
← →
pasha_golub © (2005-01-19 12:59) [9]Alex_Bredin © (19.01.05 12:53) [7]
Можно номер страницы?
← →
Alex_Bredin © (2005-01-19 13:09) [10]
> pasha_golub © (19.01.05 12:59) [9]
стр 103 для D6
но к теме ветки это вроде не относится
← →
MBo © (2005-01-19 13:23) [11]>pasha_golub © (19.01.05 12:59) [9]
код действительно при Include генерируется лучше, вот только для свойств-множеств это нельзя использовать
сравни asm-код строчек //1 и //2 (брекпойнт+Alt-Ctrl-C)
var
s:set of byte;
begin
s:=[1,5,23];
Include(s,3); //1
s:=s+[3]; //2
if 3 in s then Caption:="OK";
← →
pasha_golub © (2005-01-19 13:32) [12]Alex_Bredin © (19.01.05 13:09) [10]
MBo © (19.01.05 13:23) [11]
Спсб, щас гляну.
← →
pasha_golub © (2005-01-19 13:40) [13]Посыпаю голову пеплом. Был неправ.
← →
default © (2005-01-19 13:46) [14]MBo © (19.01.05 13:23) [11]
получается что команда BTS допускает смотреть биты с порядковыми номерами выше 31?(в инструкции написано что индекс лежит в интервале 0..31)
← →
MBo © (2005-01-19 14:18) [15]>default © (19.01.05 13:46) [14]
Да нет, не должна допускать.
У меня (D6) эта инструкция в коде не используется.
Include кодируется в один or.
← →
default © (2005-01-19 14:23) [16]MBo © (19.01.05 14:18) [15]
у меня используется она при Include и тоже D6
и значения больше 31 успешно включаются
← →
default © (2005-01-19 14:48) [17]MBo © (19.01.05 14:18) [15]
посмотрите следующий код в CPU
procedure TForm1.Button1Click(Sender: TObject);
var
s:set of byte;
x: Byte;
begin
x := 64;
Include(s,x);
if x in s then Caption := "OK"
end;
так что сделано маленькое открытие
← →
pasha_golub © (2005-01-19 14:52) [18]default © (19.01.05 14:48) [17]
Подтверждаю, у меня тоже BTS...
Но, может нужно обратить внимание на адрес? Может BTS применяется не ко всему сету, а со смещением, на требуемый байт?
← →
pasha_golub © (2005-01-19 14:59) [19]Intel Manual:
Selects the bit in a bit string (specified with the first operand, called the bit base) at the bitposition
designated by the bit offset operand (second operand), stores the value of the bit in the
CF flag, and sets the selected bit in the bit string to 1. The bit base operand can be a register or
a memory location; the bit offset operand can be a register or an immediate value. If the bit base
operand specifies a register, the instruction takes the modulo 16 or 32 (depending on the register
size) of the bit offset operand, allowing any bit position to be selected in a 16- or 32-bit register,
respectively (see Figure 3-1). If the bit base operand specifies a memory location, it represents
the address of the byte in memory that contains the bit base (bit 0 of the specified byte) of the
bit string (see Figure 3-2). The offset operand then selects a bit position within the range −231 to
231 − 1 for a register offset and 0 to 31 for an immediate offset.
Some assemblers support immediate bit offsets larger than 31 by using the immediate bit offset
field in combination with the displacement field of the memory operand. See “BT—Bit Test” in
this chapter for more information on this addressing mechanism.
← →
pasha_golub © (2005-01-19 15:04) [20]Неудачно скопировал. обратить внимание на такое предложение:
The offset operand then selects a bit position within the range −2^31 to
2^31 − 1 for a register offset and 0 to 31 for an immediate offset.
← →
MBo © (2005-01-19 15:11) [21]И правда, теперь это применяется к битовой строке, еслм не используется непосредственное значение второго параметра, а я в древний талмуд заглядывал. Век живи, век учись :) Спасибо за наводку.
← →
default © (2005-01-19 15:14) [22]pasha_golub © (19.01.05 15:04) [20]
понятно
просто в моём спрвочнике этого нет
вот что значит оригинальная документация!!!
← →
pasha_golub © (2005-01-19 15:16) [23]Мануалы по коммандам:
ftp://download.intel.com/design/Pentium4/manuals/25366614.pdf - 2,1Мб
ftp://download.intel.com/design/Pentium4/manuals/25366714.pdf - 1,7Мб
← →
pasha_golub © (2005-01-19 15:17) [24]MBo © (19.01.05 15:11) [21]
default © (19.01.05 15:14) [22]
Я просто 30 октября качал
← →
Игорь Шевченко © (2005-01-19 15:18) [25]pasha_golub © (19.01.05 15:16) [23]
Кстати, отличные мануалы. Благодарю за ссылку.
← →
pasha_golub © (2005-01-19 16:19) [26]Игорь Шевченко © (19.01.05 15:18) [25]
Не за что. Мануалы, конечно, кошерные... От самого Интела. :)
Страницы: 1 вся ветка
Форум: "Потрепаться";
Текущий архив: 2005.02.06;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.038 c