На ассемблере пишу только потому что нужно выжать из камня максимум(реализую алгоритм), учитываю каждый такт, компилятор с опцией -O3 очень сильная вещь, но мне удается обойти его и по компактности кода и, что самое важное, по быстродействию. Еще приметил одну особенность: Пишу функцию на ассембреле, на мнемонике, а вызывающий код - сишный, так вот вызываю свою ф-ю в цикле. Отрабатывает первый раз и глохнет, смотрю ассемблер, в функцию передается переменная таким образом:
Код
B.S1 MyFunс
ADDKPC.S2 RL1,B3,4
OR.L1 0,A10,A4
т.е. он переменную для функции загоняет сначала в А10 перед циклом, а потом в цикле перед вызовом функции передает в регистре А4. Так вот, в функции я использую регистр А10, соответственно значение переменной затирается и уже при втором вызове функции передается неправильное значение. Как узнать, какие регистры свободные на момент вызова функции, а какие несут полезную информацию? На ПК было все просто, сохранил все хозяйство в стек, отработал, восстановил и порядок, а здесь?