awesome-everything EN
↑ Обратно к восхождению

Базовый CS с нуля

Процессор: трассировка и декодирование

Суть Трассируйте небольшие программы в игрушечном наборе инструкций, предсказывайте состояние регистров и счётчика команд, декодируйте слово машинного кода и считайте такты.
Высота — путь к senior
НольJuniorMiddleSenior
Ты на middle-высоте — в небе
◷ 14 min

Понять процессор — значит уметь прогонять его в голове. Каждый фрагмент ниже — это крошечная программа или одно слово машинного кода; прочитайте его, прошагайте цикл и предскажите состояние так, как его произвёл бы CPU.

Цель

Отработайте ключевой навык юнита: взять инструкции и начальное состояние, вручную прошагать цикл fetch-decode-execute и считать получившиеся значения регистров, значение счётчика команд (program counter), смысл машинного кода и число тактов.

Эти фрагменты используют игрушечный набор инструкций из юнита: каждая инструкция — 2 байта, счётчик команд сдвигается на 2 после каждой инструкции, кроме JUMP, а регистры — R0 и R1.

Фрагмент 1 — трассировка состояния регистров

; Начальное состояние: R0 = 0, R1 = 0, PC = 0
; Память: mem[200] = 9, mem[201] = 4

0: LOAD  R0, 201
2: LOAD  R1, 200
4: ADD   R0, R1     ; R0 <- R0 + R1
6: STORE 202, R0
Викторина

После выполнения всех четырёх инструкций какое значение хранится по адресу 202?

Фрагмент 2 — счётчик команд и переход

; Начальное состояние: PC = 0, R0 = 0
; Каждая инструкция — 2 байта.

0: LOAD R0, 200
2: JUMP 6
4: ADD  R0, R1      ; никогда не достигается
6: STORE 202, R0
Викторина

Какая инструкция по адресу 4 НЕ выполнится, и каким будет значение счётчика команд сразу после выполнения JUMP по адресу 2?

Фрагмент 3 — декодирование слова машинного кода

; Кодировка 16-битной инструкции:
;   биты 15-12 (4 бита) = опкод
;   биты 11-8  (4 бита) = номер регистра-приёмника
;   биты 7-0   (8 бит)  = непосредственное значение (immediate)
; опкод 0001 = LOAD-IMMEDIATE (положить константу в регистр)

Слово в памяти:  0001 0011 00010010
Викторина

Декодируя это 16-битное слово, какую инструкцию оно представляет?

Фрагмент 4 — подсчёт тактов

; Программа выполняет 6 инструкций в теле плотного цикла.
; На этом CPU каждая инструкция занимает ровно 1 такт (clock cycle).
; Тело цикла выполняется 100 раз. Тактовая частота CPU — 2 ГГц
; (2 000 000 000 тактов в секунду).
Викторина

Сколько всего тактов потребляет тело цикла и сколько примерно времени это занимает на частоте 2 ГГц?

Итог

На каждый вопрос здесь отвечали, прошагав один и тот же цикл: выбрать инструкцию, на которую указывает PC, декодировать опкод и операнды, исполнить (LOAD и STORE двигают данные между памятью и регистрами; ADD задействует ALU над значениями регистров; JUMP перезаписывает PC), затем сдвинуть PC на размер инструкции — если только JUMP не задал его напрямую. Машинный код декодируется разбиением слова на поля опкода и операнда. А время работы — это просто инструкции x итерации x такты-на-инструкцию, делённые на тактовую частоту. Прошагайте вручную — и процессор перестанет быть чёрным ящиком.

Продолжить восхождение ↑Процессор: постройте симулятор CPU
хоткеи развернуть
поиск
K
пред. пьеса
k
след. пьеса
j
тиры
t
это меню
?
sources3
expand
  1. 01
  2. 02
  3. 03

Trademarks belong to their respective owners. Editorial reference only.