qeos писал(а):
спасибо за подсказки. читать доки полностью нет времени.)
Ага. Кстати, забыл сказать про одну важную вещь. В параметрах ассемблерной вставки надо указывать
все изменяемые регистры, иначе может произойти конфликт с сишным кодом и возникнуть ошибки в работе. Там я указал изменение только одного параметра, а надо ещё указать и ecx.
Если регистр соответствует какому-нибудь входному или выходному параметру, то отмечаем "+" или "=" соответствено. Если изменяемый регистр ни в каких параметрах не используется, то он прописывается в третьем ряду.
Иногда к слову asm нужно добавлять volatile или указать изменение памяти "memory", (что называется "побочный эффект"), иначе этот код может быть оптимизатором съеден как не производящий ни какого полезного действия. Типа того:
Код:
asm volatile("rep insw"
: "+D"(buff), "+c"(256)
: "d"(dev->base+REG_DATA)
: "memory");
Изменяемые параметры указываются в первом ряду, неизменяемые параметры во втором, а изменяемые регистры в третьем.