Чтобы разгрузить мозг в перерывах между написанием диплома пишу реализацию всех действий на mov и nor. Пока всё шло нормально, пока я не уперся в загвоздку в сложении.
Однобитный сумматор трудностей не представил. A, B на входе, Q (результат) и R (флаг переноса) на выходе:
[1, 1] -> [0, 1].
Проблемы начались, когда я попытался объединить его в 32х битный сумматор. Если использовать последовательную схему, то нам нужно, чтобы флаг переноса был на один разряд старше:
[10, 10] -> [00, 100].
И тут начались проблемы. Мне нужен <<. СПВ, можно ли на голой логике (not, and, or, xor, nor, nand) и присваивании (mov) сделать перенос влево?. Я бы мог сделать через умножение/деление, но для умножения нужно сложение. Here we go again.
Линукс тут притом, что если дойдут руки - сделаю интерпретатор на православной сишечке под линукс.
Эм... Как-то не въехал. OR, NOT, AND, XOR, NAND реализованы из начальных NOR и MOV. Как вы предлагаете перенести разряд, если все битовые операции работают только со своим битом? Вот как здесь: Сумматор на логике (комментарий) описать сможете?
Как вы предлагаете перенести разряд, если все битовые операции работают только со своим битом?
А как же SUM1Bit(T1, T2... в коде выше ? Очевидно, это нечто должно работать не с одним битом, а с двумя входными битами. И уметь выдавать результат в другой произвольный бит. Этого достаточно, чтобы перекинуть данные из одного бита в другой.
Да я понял. Я предлагаю забыть на время о мультибитном сумматоре и решить проблему битового сдвига. Если
Однобитный сумматор трудностей не представил
То, очевидно, моя схема в предыдущем посте позволит реализовать сдвиг. Если нет, то я тут уже ничем не помогу — отсутствие по условию задачи возможности копирования значения одного бита в другой кажется мне достаточно странным. Чисто физически непонятно, почему я не могу соединить проводниками пары входов и выходов, чтобы получить элементарный сдвиг.
Очень жаль. Я, собственно, так и понял, что тут без сдвига не обойтись, ибо каждый логический оператор работает только со своим битом и никак не трогает соседние.
Чисто физически непонятно, почему я не могу соединить проводниками пары входов и выходов, чтобы получить элементарный сдвиг.
Просто мне хотелось сделать тьюринг полноту как можно меньшим количеством исходных параметров. Раньше было два - mov и nor, теперь придется, наверное, делать три: mov, nor и shl.