Привет всем! У меня есть код на ASM'е, полученный с помощью Visual C++ 6.0. Отлично компилируется в MASM. Мне нужно его немного оптимизировать. Дело в том, что все параметры и результаты функций передаются через стек. Я слышал, что можно сэкономить немного времени и уменьшить размер кода, если использовать для этого регистры. Кто-нибудь может изменить этот код так, чтобы он использовал регистры? Исходный код на C++ на всякий случай: Код (Text): //Процедура Sum. //Получает сумму С = А + В в системе счисления с основанием р. //В массивах a и b содержатся цифры представления соответственно A и B. //Полученный результат помещается в массив С. void Sum(int p, int n, int m, int *a, int *b, int &l, int *c) { int i = 0; int t = 0; if (n > m) { do { c[i] = a[i] + b[i] + t; if (c[i] >= p) { c[i] -= p; t = 1; } i++; } while (i < m); do { c[i] = a[i] + t; t = 0; if (c[i] >= p) { c[i] -= p; t = 1; } i++; } while (i < n); } else { do { c[i] = a[i] + b[i] + t; if (c[i] >= p) { c[i] -= p; t = 1; } i++; } while (i < n); while (i < m) { c[i] = b[i] + t; t = 0; if (c[i] >= p) { c[i] -= p; t = 1; } i++; } } if (t != 0) { l = i + 1; c[i] = 1; } else { l = i; } } int main(int argc, char* argv[]) { int a[] = {0, 1, 1, 1}; int b[] = {1, 1, 1, 8}; int c[100]; int p = 10; int n = sizeof(a) / sizeof(a[0]); int m = sizeof(b) / sizeof(b[0]); int l; Sum(p, n, m, a, b, l, c); if (c[0] == 1 && c[1] == 2 && c[2] == 2 && c[3] == 9 && l == 4) { printf("Test is OK\n"); } else { printf("Test is NOT OK\n"); } return 0; }
чтобы получить передачу через регистры, объяви ф-цию как fastcall и перекомпилируй. И возьми лучше седьмой VC. Он делает более быстрый код.
Crash Когда параметров много и сама функция их интенсивно использует, как в вашем примере, fastcall скорее ухудшит скорость и размер.