LINUX.ORG.RU

История изменений

Исправление quasimoto, (текущая версия) :

А ты какой ответ спрашиваешь?

Даже не знаю, например:

#include <cstddef>

enum op { halt = 0, pls, dbl };

size_t ev(size_t in, op code[]) {

    for (size_t reg = in;; ++code)
        switch (*code) {
        case pls:
            ++reg;
            break;
        case dbl:
            reg *= 2;
            break;
        case halt:
            return reg;
        }

}

int main() {

    op code[] = { pls, dbl, pls, pls, dbl, dbl, halt };

    return ev(1, code);

}

теперь вопрос — как нам получить ассемблер соответствующий ev? Ну -S. Ассемблер для { pls, dbl, pls, pls, dbl, dbl, halt } — любо петросянство про то что ev для любого аргумента возвращает свой собственный машинный код (какого звучит, а :)), либо нам надо пройтись руками по цепочке, делать switch и собрать нужный код руками. Ну то есть выбросить интерпретатор и написать компилятор (не путаем с превращением ev в транслятор из (size_t, op[]) в size_t — речь про (size_t, op[]) -> asm).

Исправление quasimoto, :

А ты какой ответ спрашиваешь?

Даже не знаю, например:

#include <cstddef>

enum op { halt = 0, pls, dbl };

size_t ev(size_t in, op code[]) {

    size_t reg = in;

    for (;; ++code)
        switch (*code) {
        case pls:
            ++reg;
            break;
        case dbl:
            reg *= 2;
            break;
        case halt:
            return reg;
        }

}

int main() {

    op code[] = { pls, dbl, pls, pls, dbl, dbl, halt };

    return ev(1, code);

}

теперь вопрос — как нам получить ассемблер соответствующий ev? Ну -S. Ассемблер для { pls, dbl, pls, pls, dbl, dbl, halt } — любо петросянство про то что ev для любого аргумента возвращает свой собственный машинный код (какого звучит, а :)), либо нам надо пройтись руками по цепочке, делать switch и собрать нужный код руками. Ну то есть выбросить интерпретатор и написать компилятор (не путаем с превращением ev в транслятор из (size_t, op[]) в size_t — речь про (size_t, op[]) -> asm).

Исходная версия quasimoto, :

А ты какой ответ спрашиваешь?

Даже не знаю, например:

#include <stddef.h>

enum op { halt = 0, pls, dbl };

size_t ev(size_t in, op code[]) {

    size_t reg = in;

    for (;; ++code)
        switch (*code) {
        case pls:
            ++reg;
            break;
        case dbl:
            reg *= 2;
            break;
        case halt:
            return reg;
        }

}

int main() {

    op code[] = { pls, dbl, pls, pls, dbl, dbl, halt };

    return ev(1, code);

}

теперь вопрос — как нам получить ассемблер соответствующий ev? Ну -S. Ассемблер для { pls, dbl, pls, pls, dbl, dbl, halt } — любо петросянство про то что ev для любого аргумента возвращает свой собственный машинный код (какого звучит, а :)), либо нам надо пройтись руками по цепочке, делать switch и собрать нужный код руками. Ну то есть выбросить интерпретатор и написать компилятор (не путаем с превращением ev в транслятор из (size_t, op[]) в size_t — речь про (size_t, op[]) -> asm).