Нужно с использованием оператора LEA узнать адрес начала списка символов, чтобы потом с помощью XLAT выбрать нужный символ. С обычной переменной LEA работает, но вот в случае списка ассемблер ругается:
undefined reference to `table'
Код:
using namespace std;
short a,b,c;
int main (int argc, char** argv) {
char C, *table;
short d;
table = new char [16];
C='0';
for (int i=0;i<=9;i++)
{
table[i]=C;
cout<<table[i]<<endl;
C++;
}
C='A';
for (int i=10;i<=15;i++)
{
table[i]=C;
cout<<table[i]<<endl;
C++;
}
__asm__ ("movb $13, %al\n"
"lea $table, %ebx\n"
"xlat\n"
"movb %al, c\n"
);
cout << "c= " << table << endl;
return 0;
}
Перед командой xlat
в регистр ebx
нужно положить адрес таблицы, вы же пытаетесь положить туда адрес переменной-указателя на таблицу.
Вместо lea
нужно использовать команду movl foo, %ebx
, тогда в ebx
окажется значение переменной (адрес таблицы).
В вашем случае программа отказывается компилироваться, т.к. запись
leal $table, %ebx
эквивалентна в синтаксисе intel следующей записи:
lea ebx, offset table
Такой тип операнда-источника lea
не поддерживает.
Программа скомпилируется, если перед table
убрать доллар, но результат будет неправильный, т.к., как уже было сказано, в ebx
окажется адрес переменной-указателя, а не её значение.
Прочитал, что такая ошибка при делении на ноль, но у меня нет никакого деления, самая простая программа:
Есть много функций с одинаковым именем и разной цифрой в конце этого имени, то есть function1, function2, function3 и тд
Не знаю правильно ли я назвал вопрос, но ситуация такаяЕсть класс Parent: