Ошибка шины: 10 при умножении двух матриц

Вот подробное объяснение, которое, как я считаю, является сутью устройства Даффа:

Дело в том, что C - это в основном приятный фасад для языка ассемблера (сборка PDP-7 для конкретных , если вы изучили это, вы увидите, насколько поразительны сходства). И на языке ассемблера у вас на самом деле нет циклов - у вас есть метки и инструкции условной ветви. Таким образом, цикл является лишь частью общей последовательности команд с меткой и веткой где-то:

        instruction
label1: instruction
        instruction
        instruction
        instruction
        jump to label1  some condition

и команда переключения несколько разветвляется / прыгает вперед:

        evaluate expression into register r
        compare r with first case value
        branch to first case label if equal
        compare r with second case value
        branch to second case label if equal
        etc....
first_case_label: 
        instruction
        instruction
second_case_label: 
        instruction
        instruction
        etc...

В сборке легко мыслимо, как объединить эти две структуры управления, и когда вы думаете об этом таким образом, их комбинация в C больше не кажется такой странной.

0
задан Primoz 18 March 2019 в 15:25
поделиться