Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Языки и методы программирования - лекция-2: арх...

Anton
December 08, 2024

Языки и методы программирования - лекция-2: архитектура компьютера, язык ассемблера, машинный код

Лекция курса "Языки и методы программирования"
Лекция-2: архитектура компьютера, язык ассемблера, машинный код
- Компьютеры на полупроводниках
- Архитектура, микроархитектура, физическая реализация
- Память компьютера
- Вычислитель (центральный блок)
- Разрядность процессора
- Набор инструкций
- Архитектура MIPS32
- Сложение двух чисел на ассемблере MIPS32
- Набор инструкций MIPS32
- Файл регистров
- Команда add (add — сложить)
- Команда sub (subtract — вычесть)
- Команды R-type
- Машинный код команд R-type
- Команда lw (load word — загрузить слово)
- Команда sw (store word - сохранить слово)
- Команды I-type
- Машинный код команд I-type
- Программа в памяти
- Машинный код как структурированные данные
- Как процессор выполняет команды: почему перед выполнением арифметических операций данные нужно перенести из оперативной памяти в регистры?
- CPU: логика инструкций + регистры
- MARS MIPS

Anton

December 08, 2024
Tweet

More Decks by Anton

Other Decks in Education

Transcript

  1. Компьютеры на полупроводниках • Наша эра • С середины XX

    века • Архитектура имени Джона фон Неймана
  2. • Архитектура компьютера — то, что знает о вычислителе программист:

    набор команд, регистры • Микроархитектура компьютера — внутреннее устройство вычислителя (от программиста скрыта) • И архитектура и микроархитектура — логическое описание вычислителя • Физическая реализация — еще «ниже» микроархитектуры: шестеренки, реле, транзисторы, фотоны, водопроводные трубы
  3. Память компьютера • «Всё есть число» [а кроме чисел ничего

    больше нет] • (Аристотель приписал Пифагору) • (для вычислителя справедливо вполне) • (если вы молоток, то вокруг одни гвозди) • Один из ключевых отличительных принципов архитектуры вычислителей имени Джона фон Неймана (фоннеймановская архитектура)
  4. Вычислитель (центральный блок) • CPU — central processor unit, центральный

    процессор • Набор инструкций (язык ассемблера, машинный код) • Набор регистров (внутренняя память процессорного блока)
  5. Разрядность процессора • Чтобы работать с лентой памяти, её нужно

    разбить на блоки, блокам присвоить уникальные адреса (проще всего пронумеровать) • Чтобы обратиться по адресу в ленте памяти, его нужно разместить в ячейке памяти процессора (в регистре) • Размер такой ячейки нужно определить заранее на этапе проектирования процессора
  6. Разрядность процессора • Если ячейка для хранения адреса 1 бит

    — можно адресовать всего 2 байта • Если 2 бита — 4 адреса (4 байта) • 3 бита — 8 адресов (8 байт) • … • 8 бит — 256 адресов (256 байт) • 16 бит — ~64 тыс. адресов (64КБ) • 32 бит — ~4 млрд. адресов (4ГБ) • 64 бит — много адресов (16777216 Терабайт)
  7. Разрядность процессора • Размер адреса, с которым умеет работать процессор,

    обычно совпадает с размером двоичного кода его команд • Под разрядностью процессора могут понимать и то и другое (если совпали, то вопросов вообще нет) • Но это не обязательное правило • Строгого определения или стандарта, определяющего разрядность вычислителя, нет • Строго говоря, это вообще разговорное выражение
  8. Набор инструкций Архитектура, производители • x86: Intel, AMD • x86_64:

    AMD, Intel — ноутбуки, настольные компьютеры, серверы • ARM: Qualcomm, Apple, Байкал Электроникс и т. п. (много) — смартфоны, планшеты, ноутбуки, мирконтроллеры • MIPS: Силикон Графикс, Microchip, Байкал Электроникс и т. п. — маршрутизаторы, шлюзы, встраиваемые системы (со смартфонами не задалось) • Эльбрус: МЦСТ
  9. Архитектура MIPS32 • 1981-й год, Джон Хеннеси, Стэнфорд • Как

    сейчас дела: бывало и лучше • Wave Computing (немного ранее — MIPS Technologies) — проектируют «нейропроцессоры»
  10. Архитектура MIPS32 • Промышленная архитектура с историей • При этом

    достаточно проста для обучения • Философия RISC — reduced instruction set • (похоже на ARM и RISC-V) • 32 бит: размер адреса и размер инструкции • Есть и MIPS64 64-бит версия
  11. Давайте посмотрим, как это работает • Выполним простую программу —

    сложение 2-х чисел • На ассемблере MIPS32 — 4 команды
  12. Набор инструкций MIPS32 • Всего около 120 инструкций (команд) •

    Например: cложение, вычитание, умножение, ветвление, чтение-запись оперативной памяти и т. п.
  13. Файл регистров • Файл (набор) регистров — register file •

    Внутренняя память процессора (на одном чипе с логикой) • Набор 32-битных ячеек быстрой памяти с заранее определенными именами и рекомендованными ролями • Каждый регистр имеет порядковый номер, 5 бит • Всего 2^5=32 регистра
  14. Некоторые регистры • Имя, порядковый номер, роль • $0 —

    0 — константа 0 (только чтение) • $v0-$v1 — 2-3 — возвращаемые значения процедур • $a0-$a3 — 4-7 — аргументы процедур • $s0-$s7 — 16-23 — сохраненные переменные • $t8-$t9 — 24-25 — временные переменные • $sp — 29 — указатель стека • $ra — 31 — адрес возврата процедуры
  15. Некоторые регистры • Имя, порядковый номер, двоичный номер • $0

    — 0 — 00000 ... • $s0 — 16 — 10000 • $s1 — 17 — 10001 • $s2 — 18 — 10010 ...
  16. Команда add (add — сложить) • Складывает значения 2-х регистров

    и кладет результат в 3-й регистр • синтаксис на ассемблере: add rd, rs, rt • rd, rs, rt — адреса (имена) регистров — команда add должна взять значения из регистров rs и rt, вычислить сумму rs+rt и записать результат в регистр rd.
  17. Команда add (add — сложить) • например: add $s2, $s0,

    $s1 • Выполнится как: $s2=$s0+$s1 • вычислить сумму значений, хранящихся в регистрах $s0 и $s1, и записать результат в регистр $s2.
  18. Команда sub (subtract — вычесть) • Вычисляет разность значений 2-х

    регистров и кладет результат в 3-й регистр • синтаксис на ассемблере: sub rd, rs, rt • rd, rs, rt — адреса (имена) регистров — команда add должна взять значения из регистров rs и rt, вычислить разность rs-rt и записать результат в регистр rd.
  19. Команда sub (subtract — вычесть) • например: sub $s2, $s0,

    $s1 • Выполнится как: $s2=$s0-$s1 • вычислить разность значений, хранящихся в регистрах $s0 и $s1, и записать результат в регистр $s2.
  20. Команды R-type • Register type (работают с регистрами) • add

    и sub — команды R-type • (в качестве параметров 3 регистра)
  21. Машинный код команд R-type • Шаблон: [ op (6 бит)

    ][ rs (5 бит) ][ rt (5 бит) ][ rd (5 бит) ][ shamt (5 бит) ][ funct (6 бит) ] • 6+5+5+5+5+6 = 32 (в сумме 32 бита) • op+funct = операция • op (opcode) = 0 для всех операций R-type • funct (function): для add = 32, для sub = 34 • rs, rt, rd — операнды - адреса регистров ('r' везде от register) • rs, rt — источник1, источник2 (обозначение выбрано как s - source, а 't' просто идет в алфавите после 's') • rd - назначение (destination) • shamt — сдвиг (ammount of shift) = 0 для всех операций R-type
  22. Команда lw (load word — загрузить слово) • Загружает значение

    из памяти данных в регистр • синтаксис на ассемблере: lw rt, imm (rs) • rt — адрес регистра-назначения • imm — константа - адрес загружаемого значения в памяти данных • rs — адрес регистра, содержащего значение сдвига для адреса загрузки
  23. Команда lw (load word — загрузить слово) • например: lw

    $s0, 4 ($0) • сначала вычислит адрес загружаемого значения как значение imm + значение, содержащееся в регистре rs (4+0=4), • затем считает значение по вычисленному адресу (4) из памяти данных и запишет его в регистр rt ($s0).
  24. Команда sw (store word - сохранить слово) • Записывает (сохраняет)

    значение из регистра в память данных. • синтаксис на ассемблере: sw rt, imm (rs) • rt — адрес регистра-источника • imm — константа - адрес сохранения значения в памяти данных • rs — адрес регистра, содержащего значение сдвига для адреса сохранения
  25. Команда sw (store word - сохранить слово) • например: sw

    $s0, 4 ($0) • сначала вычислит адрес сохранения значения как значение imm + значение, содержащееся в регистре rs (4+0=4), • затем считает значение из регистра rt ($s0) и сохранит его в память данных по вычисленному адресу (4).
  26. Машинный код команд I-type • Шаблон: [ op (6 бит)

    ][ rs (5 бит) ][ rt (5 бит) ][ imm (16 бит) ] • 6+5+5+16 = 32 (в сумме 32 бита) • op — код операции: для lw = 35, для sw = 43, для addi = 8, для beq = 4 • rs, rt — адреса регистров-операндов - смысловые роли могут быть разные для разных команд • imm (immediate) — значение операнда-константы
  27. Машинный код как структурированные данные • Нужно выбрать коды для

    > 100 команд • Так, чтобы одну можно было сразу отличить от другой • И при этом чтобы осталось место для аргументов • И, желательно, побольше места (например, для адреса)
  28. Машинный код как структурированные данные • Ограничение: нужно уместиться в

    32 бита • (в синтаксисе языка ассемблера это в глаза не бросается) • Оставляем за скобками вопрос, какие именно команды должны быть реализованы среди избранных • (их должно быть достаточно, чтобы релизовать любую программу — вопросы математики) • (при этом дополнительные ограничения наложет аппаратная реализация — микроархитектура, физическое воплощение)
  29. CPU: логика инструкций + регистры • (плюс непубличная «невидимая» для

    программистов внутренняя кухня, например, внутренний кэш) • Тактовый сигнал: проворачивает «шестеренки» процессора — меняет одно дискретное состояние, определяемое значениями регистров и некотрых внутренних ячеек памяти, на следующее • В простом случае: от начала до конца выполняет текущую команду • (в более сложном случае это будет не обязательно так, но это будет всегда переход от одного дискретного состояния процессора к другому)
  30. • Транзисторы выстраивают цепочки связей через открытие и закрытие ключей

    • Состояния переключаются по правилам двоичной логики (булева алгебра, дискретная математика) • Тактовый сигнал должен успеть пройти через все выстроенные цепочки связей транзисторов до того, как будет подан следующий такт Clock • Оперативная память по отношению к блоку вычислителя является внешним устройством со своей (обычно более медленной) скоростью • Поэтому мы не можем включить ячейки оперативной памяти в логические цепочки ценрального вычислителя, вместо этого мы устраиваем обмен данными между оперативной памятью и регистрами вычислителя как необходимый промежуточный шаг
  31. • Проворот (или несколько поворотов) ручки переводит текущее положение шестеренок

    в новое дискретное положение, отрабатывая таким образом логику команды
  32. MARS MIPS • MARS (MIPS Assembler and Runtime Simulator) •

    courses.missouristate.edu/KenVollmar/MARS/ • => download • java -jar Mars4_5.jar