01.1 Conspect (ru)

Предположим у нас есть калькулятор. У него есть ввод и вывод, состоит из цифр и арифметических операций. Теперь из калькулятора сделаем компьютер:нам не хватает оперативной памяти. В ней будут хранится данные и команды, также нам нужно понять как их в этой памяти хранить. Для этого нужны управляющие команды.

Нам нужно придумать адреса, чтобы обращаться к памяти и выполнять операции. Также нужно определить последовательность выполнения команд. Самое простое решение - ввести команды перехода. Команда перехода будет означать что следующая команда берётся не из соседней ячейки, а из другой, а команда условного перехода будет означать проверку какого-то условия и, по результатам проверки либо выполним, либо не выполним переход.

1.png

Память состоит из двоичных слов, память адресуемая, максимальный размер числа зависит от размера машинного слова. Мы хотим, чтобы в одной ячейке хранилась одна команда, для этого мы храним opode, например команда сложения может быть 01. Также в ячейке должны храниться операнды (то, с чем совершается операция и/или куда сохранить результат), может не быть ни одного, может быть много. Может быть абсолютная (у каждой ячейки свой адрес) или относительная адресация(относительно ячейки, в которой производится операция. Например, +100). Чтобы размер ячейки был меньше применяется двухадресная адресация (Например, a += b). В такой архитектуре страдает команда условного перехода, т.к. в таком случае придётся поменять одну из переменных на True/False. Чтобы избежать этого используется регистр флагов. В нём как раз хранятся результаты сравнения.

Для того чтобы не ограничивать скорость процессора скоростью оперативной памяти, придумали такую штуку как регистры, таким образом мы получаем быстрое обращение и малую длину каждого адреса, т.к. их всего 32, в современных архитектурах - 64. Среди них есть регистр-аккумулятор, в него всегда сохраняется результат вычисления.

Теперь безадресная архитектура: в ней числа идут потоком в стеке и операции выполняются последовательно.

Также можно считывать opode, затем определять количество операндов и на этом заканчивать, затем идти дальше по памяти и повторять процесс. В такую структуру можно гораздо более плотно “напихать” команды. Главный минус - скорость, потому что требуется множество промежуточных операций. Также со случайного момента не факт, что мы попадем в opode.

2.png

HSE/ArchitectureASM/01_IsaAssebmler/Conspect (last edited 2020-06-24 17:01:22 by FrBrGeorge)