Как использовать "asm" в C++ ?
Привет, у меня есть некоторые проблемы, когда я использую "asm" в C++.
Мне нужно найти максимальное значение в массиве, я написал код, но он не сравнивается.
Что я уже пробовал:
void func1(int x[],int lenght){ // Find MAX int max, z = x[0]; //Make first elem is MAX __asm__ volatile ( "movl %1, %%eax;" "movl %%eax, %0;" : "=r" ( max ) : "r" ( z ) : "%eax" ); for(int i = 1 ; i < lenght; i++) //From second element to end { __asm__ volatile ( "movl %1, %%ebx;" // Move x[i] to EBX "cmpl %%ebx,%%eax;" "jl DONE;"// If EAX less EBX JUMP to 'DONE' "DONE: movl %%ebx,%%eax;" // MOVE EBX to EAX "movl %%eax , %0" // MOVE EAX to 'max' :"=r"(max) :"r"(x[i]) ); } cout << "MAX" << endl; cout << max << endl; }
Rick York
Вот как пишется длина.
Я не знаю языка ассемблера, потому что никогда не считал его необходимым. Однако однажды я написал генератор машинного кода "на лету". Я сделал это, выяснив, какой машинный код испускается при написании фрагментов кода на языке Си, а затем изучив ассемблер компилятора и списки машинного кода. Я рекомендую сделать это для этого кода. Это довольно просто, поэтому напишите его на языке Си, а затем посмотрите, что компилятор делает с кодом в своих списках ассемблера. В любом случае, именно так я и поступлю.
Nabiev Anush
Спасибо за совет !
Stefan_Lang
Это на самом деле очень хороший совет: может быть, он даст людям представление о том, насколько бессмысленно в наши дни предоставлять ассемблерный код самостоятельно ;-)