[an error occurred while processing this directive]
|
Нужно работать с 64-х битными указателями с использованием более чем 16 младших бит. Написан тест. Модель памяти - большая.
-----------------------------------
unsigned int *pMeme;
unsigned long int ilf;
unsigned int i;
int test(void)
{
ilf = 0x16756;
pMeme = (unsigned int *) 0x100;
i = *(pMeme + (long int)ilf);
}
--------------------------------
Указатели действительно получились 64-х битными. однако приведенный ниже тест показал, что данные беруться из обрезанного до 16-и бит указателя. С точки зрения ассемблера все логично - относительная адрессация, pMeme загоняется в XARx, смещение - в Tx, и обрезание получено. Если сначала получить long переменную, потом ее преобразовать в указатель - вот тогда все oK. Но ведь не должно же так быть. Конечно, можно сделать вставку на ассемблере, но ведь это же не совсем правильно (с точки зрения логики).
Андрей
E-mail: info@telesys.ru