\documentclass[11pt,oneside,a4paper]{book}
\usepackage[utf8]{inputenc}
\usepackage[english,russian]{babel}
\usepackage{hyperref}
\usepackage{framed}
\usepackage{indentfirst}
\begin{document}
\pagenumbering{arabic}
\title{Методическое пособие. Общие тезисы для понимания работы вычислительной техники.}
\author{Назарьев C.}
\date{\today}
\maketitle
\tableofcontents
\frontmatter
\pagenumbering{arabic}
\chapter{Введение}
Дорогой друг, если ты читаешь это, то ты внезапно решил почитать вместо адекватных учебников и пособий по программированию краткое руководство-шпаргалку о том, как же этот ваш компьютер устроен и как же можно программировать под него.
\mainmatter
\pagenumbering{arabic}
\chapter{Вычислительная техника}
Главное, что должна делать любая вычислительная техника -- внезапно, вычислять. Значит, должно быть некое устройство, которое именно что вычисляет. Фактически, первым вычисляющим устройством был <<абак>> -- прародитель русских счётов из 5 века до н.э. Абак имеет набор операций, которые с ним можно выполнять (ввод данных, сумма, вычитание, умножение, деление). Если абстрагироваться от реализации (камней и палок), то такое описание полностью подходит и для описания нынешних процессоров: процессор умеет выполнять некоторые операции и предоставляет возможность ему <<приказывать>>. Уясним ещё раз: есть некое устройство, процессор, который умеет выполнять некий ряд операций, если его попросить.

Для того, чтобы процессор понял, что от него хотят, ему нужно передать команду, или инструкцию. Команды в случае двоичных процессоров (то есть процессоров, работающих только с двоичными числами) -- это наборы единиц и нулей (спасибо, К.О.), или просто двоичное число, которое <<интерпретируeтся>>\footnote{воспринимаeтся} процессором как приказ выполнить определённую операцию. Фактически, мы можем подсунуть процессору любое число, чтобы он попытался интерпретировать его как команду\footnote{но в случае неизвестной команды может произойти всё, что угодно; часто в таких случаях говорят, что у выч. техники неопределённое поведение}. Из предположений, что команды и данные -- это просто числа, а процессору без разницы, что ему подсовывают, то для хранения команд и данных мы можем использовать одну и ту же память. Память в данном случае называют \textit{однородной}, а архитектуру такой вычислительной машины называют \textit{архитектурой фон Неймана} в противопоставлении с \textit{Гарвардской архитектурой}, в которой существует два вида памяти для инструкций и данных соответственно. 

 Для того, чтобы хранить команду в процессоре, которые он выполняет, существует некоторое устройство -- \textit{регистр}. \textit{$N$-разрядный регистр} позволяет хранить $N$ двоичных разрядов. Процессор может считывать эти разряды из регистра и/или записывать в них новые значения. 

Теперь рассмотрим такой процессор, у которого есть два регистра -- регистр для хранения команд (регистр команд) и регистр для хранения результата какой-либо операции (аккумулятор). Из-за того, что процессор имеет централизованное место для хранения результата операций, такой процессор обычно называют <<процессором с аккумулятором>>. Наш процессор умеет лишь складывать две шестандцатиричные цифры, указанные внутри команды. Допустим, увидев команду $A12_{16}$, процессор разберёт её по частям (A -- операция сложения двух шестнадцатиричных цифр, а 1 и 2 -- операнды) и выполнит операцию сложения, положив результат в аккумулятор.
Как именно? Всё зависит от внутренностей процессора, но обычно для этого используются логические операции, а реализуются они логическими схемами. 

\begin{framed}
\hyperref[sum]{Рассказ о том, как работает операция сложения}
\end{framed}

Каким же образом команды попадают в процессор, откуда они берутся? В данном случае мы должны иметь источник наших команд и устройство, которое подсовывает процессору в его регистр команд команду и заставляет его эту команду выполнять. Источником могут служить, например, перфокарты -- пластинки с дырками или без дырок в определённых местах, обозначающие двоичные разряды, или же набор ламп: включенная лампа -- единица, а выключенная -- ноль; или же любое другое устройство, имеющее два состояния, которые можно интерпретировать как двоичную цифру (или же bit, BInary digiT). Набор ламп, перфокарты, набор конденсаторов или любые другие устройства, в совокупности позволяющие хранить единицы и нули, называются памятью. Для удобства, память разбивают на ячейки по $N$ бит, и опять же, для удобства, размер одной ячейки обычно равен размеру аккумулятора. Процессор, умеющий работать с $N$-битными числами, внезапно, называется $N$-битным процессором.

\begin{framed}
\hyperref[size]{А почему размер аккумулятора именно такой? Почему игровые приставки называются 8-битными или 16-битными?}
\end{framed}

Каждая ячейка имеет свой адрес, по которому она доступна в памяти. Легко посчитать нужное количество бит, которое необходимо, чтобы хранить адрес ячейки: нужно найти ближайшее число-степень двойки, тогда степенью будет то число бит, сколько нужно для хранения адреса в памяти.

\begin{framed}
\hyperref[windows]{Windows и проблемы с оперативной памятью 4 Гб+}
\end{framed}

Кроме самого источника, в котором у нас будут храниться данные, нам необходимо так называемое <<устройство управления>>, которое вытаскивает данные из памяти и кладёт их в регистр команд. 
В свою очередь размер аккумулятора зависит от того, с какими числами может оперировать процессор. Так как для процессора и наши исходные данные в памяти, и команды -- это всего лишь единицы и нули, то есть двоичные числа, то получается, что процессор обязан уметь работать с $N$-разрядными числами, где $N$ -- это максимум среди максимально возможного размера данных и максимально возможного размера команды.

\appendix
\input{size}
\input{windows}
\input{sum}
\backmatter
\chapter{Послесловие}
\end{document}
