| Разработка и ромхакинг > Ромхакинг и программирование |
| Кто знаком с синтаксисом at&t? Помогите разобраться? |
| (1/1) |
| pristavkin:
void gbz80_inc(byte* reg) { asm volatile ( "movl $0, %1\n" // load 0 to NFLAG "incb %2\n" "lahf\n" // get flags "andb $1,%%bh\n" // carry not affected "andb $0xFE,%%ah\n" "orb %%ah, %%bh \n" : "=b" (flags), "=g" (NFLAG), "=q" (*reg) : "2" (*reg), "0" (flags) : "cc", "ah"); } Собственно код. Первая часть понятно, а вот вторая : "=b" (flags), "=g" (NFLAG), "=q" (*reg) : "2" (*reg), "0" (flags) : "cc", "ah"); не пойму как это до конца работает. Может кто-нибудь объяснит, расскажет что всё это значит и как устроено. Спасибо. |
| Йобан Матич:
не ты ли? http://www.wasm.ru/forum/viewtopic.php?id=34531 http://www.ibiblio.org/gferg/ldp/GCC-Inline-Assembly-HOWTO.html Читать Extended Asm. копипаста: --- Цитата ---после первого двоеточия - выходные параметры после второго - входные параметры после третьего - список регистров, которые будут использованы (т.е. затерты). --- Конец цитаты --- Вариант с интел синтаксисом --- Код: ---typedef unsigned char byte; extern int NFLAG; extern unsigned short flags; void gbz80_inc(byte* reg) { NFLAG = 0; __asm mov eax,reg __asm mov dl,[eax] __asm mov bx,flags __asm inc dl __asm lahf __asm and bh,1 __asm and ah,0xFE __asm or bh,ah __asm mov flags,bx __asm mov eax,reg __asm mov [eax],dl } --- Конец кода --- |
| pristavkin:
Ничего я не понял. Плиз давай те разберём :-\ Добавлено позже: __asm mov eax,reg __asm mov dl,[eax] __asm mov bx,flags __asm inc dl = "incb %2\n" // Почему dl? Так и не понял %2. Второй какой то параметр но я его нигде не нашел. __asm lahf ="lahf\n" // тут понятно __asm and bh,1 = "andb $1,%%bh\n" // Тут очему то bh. НО параметр записан черещ $ почему-то а не через проценты __asm and ah,0xFE = andb $0xFE,%%ah.// Почему 2 процента __asm or bh,ah = "orb %%ah, %%bh \n" // понятно "movl $0, %1\n" куда то нолик грузим только не знаюкуда __asm mov flags,bx __asm mov eax,reg __asm mov [eax],dl : "=b" (flags), "=g" (NFLAG), "=q" (*reg) : "2" (*reg), "0" (flags) : "cc", "ah"); Тут между этими делами должна зависимость быть на я её не вижу :( |
| Йобан Матич:
Зачем тебе AT&T если есть пример на intel? GCC умеет и intel синтаксис понимать. У AT&T порядок операндов — вначале источник, затем приёмник. http://ru.wikipedia.org/wiki/AT&T-синтаксис %eax - регистр %%eax - переменная $0x10 - константа 0x10 - адрес |
| pristavkin:
Вообще нафиг не нужен но просто нужо перенес в инел код. Вот и сижу , пытаюсь понять, втыкаю, что всё то после : значит. Оно ведь там не просто так |
| Йобан Матич:
--- Цитата: pristavkin ---после : значит. --- Конец цитаты --- Во втором сообщении написано про : |
| GManiac:
--- Цитата ---не ты ли? http://www.wasm.ru/forum/viewtopic.php?id=34531 --- Конец цитаты --- --- Цитата ---ник: ajak --- Конец цитаты --- Всё понятно, Йобан Матич, спасибо за находку ;) |
| Йобан Матич:
Вот ещё похожая тема, по ошибке не на ту дал ссылку. http://www.wasm.ru/forum/viewtopic.php?id=33750 |
| romanich:
--- Цитата: Йобан Матич от 28 Сентябрь 2009, 17:11:17 ---Вот ещё похожая тема, по ошибке не на ту дал ссылку. http://www.wasm.ru/forum/viewtopic.php?id=33750 --- Конец цитаты --- ба! всё те же на манеже ;) |
| Навигация |
| Главная страница сообщений |