170 похожих чатов

Что не так? int main() { int a =

0;
asm("mov a, 100");
cout << a << endl;
return 0;
}

Ошибка:
<inline asm>:1:6: error: invalid operand for instruction
mov a, 100
^
1 error generated.

3 ответов

17 просмотров

Вроде четыре проблемы: 1. Нельзя так просто взять и записать константу в память, надо через промежуточный регистр. Например, eax. 2. Если мы хотим использовать какой-то регистр, компилятору иногда надо об этом сообщить, чтобы он не хранил в этом регистре что-то промежуточное. В случае с gcc надо использовать extended asm (https://gcc.gnu.org/onlinedocs/gcc/Extended-Asm.html) 3. Если gcc — нужен синтаксис AT&T, а не Intel (см. вики). В частности: а. Перед константами надо ставить доллар, иначе это будет чтение из соответствующего адреса памяти. б. Перед именами регистров надо ставить процент. в. Порядок операндов: сначала откуда, потом куда. В Intel наоборот. 4. Приведённый вами код неполный и не компилируется по причинам, не связанным с ассемблером. А ещё inline assembly вроде почти никак не регламентируется, так что могут быть дикие несовместимости между компиляторами. Какой у вас компилятор?

всё не так, ты пишешь на ассемблере там где надо писать на С

Например, на GCC можно написать так: https://ideone.com/u0FOFT Тут я использую extended asm и говорю gcc, что я буду писать в переменную a, а она должна лежать в регистре (иначе mov не сработает), внутри ассемблерного кода использую %0, чтобы получить то место, в которое gcc положит a. Если посмотреть на ассемблерный вывод, то у меня gcc заоптимизировал это до уровня "запишем сотню сразу в регистр, из которого будет читать вызванный operator<<"

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Гайс, вопрос для разносторонее развитых: читаю стрим с юарта, нада выделять с него фреймы с определенной структурой, если ли чо готовое, или долбаться с ринг буффером? нада у...
Vitaly
9
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
длина пакета фиксированная, или меняется?
Okhsunrog
7
Карта сайта