В какой системе исчисления хранит данные компьютер

Обновлено: 02.07.2024


Основные принципы устройства и работы компьютера были сформулированы в 1945 г. американским математиком Джоном фон Нейманом. Согласно этим принципам, машина должна использовать двоичную систему счисления, выполнять команды последовательно, одну за другой, и состоять из:

Важная особенность в архитектуре машины фон Неймана: команды и данные хранятся в памяти, причем в разные моменты времени в одном и том же месте памяти могут храниться и данные, и команды.

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

В общих чертах работа компьютера состоит в следующем: с какого-то внешнего устройства в память компьютера вводится программа – последовательность инструкций (команд). Устройство управления считывает из ячейки памяти первую инструкцию программы и организует ее выполнение с помощью арифметико-логического устройства. Эта команда может задавать выполнение каких-либо вычислений, чтение данных из памяти для выполнения операций или запись результатов в память, ввод данных с внешнего устройства в память или вывод данных из памяти на внешнее устройство. Затем выполняется следующая команда и т.д. Устройство управления выполняет команды автоматически, без вмешательства человека. Оно обменивается информацией с памятью компьютера и внешними устройствами. Результаты выполненной программы выводятся на внешние устройства компьютера.

В современных компьютерах устройство управления и арифметико-логическое устройство объединены в единое устройство – центральный процессор.

Системы счисления, используемые в компьютере

В компьютерах используется двоичная система счисления. Она оказалась наиболее простой для аппаратной реализации: естественным электронным способом счета является система, основанная на двух значениях – «нет сигнала/ есть сигнал». Если числа в десятичной системе записываются с помощью цифр от 0 до 9, то в двоичной – с помощью цифр 0 и 1. Информация любого типа может быть закодирована с использованием двух цифр.

В десятичной системе – 250=2•102+5•101+0•100
11=1•101+1•100

В двоичной системе – 10=1•21+0•20 = 2 в 10-ной системе
101=1•22+0•21+1•20 = (4+0+1)=5 в 10-ной системе.

Для обозначения адресов ячеек памяти и других целей удобнее пользоваться не двоичной, а более компактной шестнадцатиричной системой счисления, в которой двоичные цифры группируются по 4, и каждая такая группа, или тетрада, обозначается одним символом или шестнадцатиричной цифрой. В качестве цифр в шестнадцатиричной системе используются десять цифр обычной десятичной системы от 0 до 9 и шесть латинских букв от A до F (A – 10, B – 11, C – 12, D – 13, E – 14, F –15). При написании шестнадцатиричных цифр иногда используют символ h в конце числа.

Например, Ah=1•161+10•160=(16+10)=26 в десятичной системе
D4Fh=13•162+4•161+15•160=(3328+64+15)=3407 в десятичной.

Статьи к прочтению:


Похожие статьи:

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

Введение

Для того чтобы было намного проще понять, как представляются файлы в компьютере приведем несколько примеров из жизни с которыми сталкивался каждый:

  1. Вы хотите перейти дорогу, но дойдя до перекрестка, вы останавливаетесь, потому что загорелся красный свет. После небольшого ожидания цвет светофора меняется на зеленый. Машины тормозят, а вы продолжайте свой путь.
  2. Вы сильно торопитесь, когда едете на работу или учебу. Участник дорожного движения, который едет спереди двигается на низкой скорости. Вы моргаете ему фарами, он уступает вам дорогу, и вы едете дальше.

А теперь переведем эти ситуации на язык информатики – в данных ситуациях светофор и фары передают код. Красный сигнал говорит нам о том, что нужно остановиться, а моргание фарами это “код” с помощью которого мы просим уступить дорогу. Быть может вы удивитесь, но в основу любого человеческого языка тоже положен код, только символы в нем называются алфавитом. Теперь рассмотрим это определение более подробно. Итак:

Код – набор обозначений, с помощью которого можно представить информацию.

Кодирование – процесс, при котором данные переводятся в код.

По мере развития информационной сферы учеными и разработчиками предлагались многие способы кодирования информации. Некоторые из них остались незамеченными, другими же мы пользуемся до сих пор. В качестве примера приведем азбуку Морзе, разработанную Самюэлем Морзе в 1849 году. Буквы и цифры определяются в ней тремя символами:

  • Тире (длинный сигнал);
  • Точка (короткий сигнал);
  • Пауза или отсутствие сигнала.

Однако наибольшую популярность завоевал “двоичный код”, который предложил использовать Вильгельм Лейбниц в семнадцатом веке. Информация в нем определяется двумя символами – 0 и 1. Разработчикам данный метод кодирования сильно понравился из-за простоты его реализации. 0- это пропуск сигнала, а число 1- его наличие. Именно двоичное представление используется сегодня в ПК и в другой цифровой технике.

Это интересно Текстовый редактор 🔧 Редакторы текста в компьютере

Представление и устройство памяти персонального компьютера

Скорее всего, вы знаете, что внутренняя память компьютера состоит из двух частей – оперативной и основной:

Чтобы иметь представление, как работает внутренняя память компьютера, и как её использовать, нужно заглянуть внутрь системного блока. Здесь можно провести аналогию с тетрадным листом “в клеточку”. Каждая клетка содержит в себе одно из двух состояний – 0 или 1. Если в ячейке стоит 1, то это говорит о том, что данная ячейка внутренней памяти включена, если 0, то выключена. Этот способ представления информации называется цифровым кодированием.

Представление памяти пк

Каждая ячейка внутренней памяти ПК хранит в себе единицу информации, которая называется битом. Составляя различные последовательности из битов, мы можем определить различную информацию. У цифрового кодирования много преимуществ – легко копировать и переносить материалы с одного носителя на другой. При создании дубликата копия полностью идентична оригиналу, что невозможно осуществить с данными, которые представлены в аналоговой форме. Из-за большого количества преимуществ в 80-х годах 20 века люди начали использовать способы представления текста, звука и фото с помощью цифр.

Представление графических типов информации в ПК

Сейчас существует два способа представления графических данных в машинном коде.

Растровый

Суть этого способа заключается в том, что графическое изображение делится на маленькие фрагменты, которые называются пиксели. Каждый пиксель содержит в себе информацию о своем цвете. Данный способ называется растровым кодированием.

Растровое изображение

Векторный

В отличие от растрового кодирования, в данном способе представление графики описывается с помощью векторов. Каждому вектору задают координаты начала и конца, толщину и цвет. Например, для отрисовки окружности надо будет задать координаты её центра и радиус, цвет заполнения (если он есть), а также цвет и толщину контура.

векторное изображение

Текст и числа

Представление текстовой информации во внутренней памяти персонального компьютера осуществляется с помощью специальных таблиц. На данный момент, распространение получили стандарты ASCII и UTF-8

ASCII

Таблица была разработана и стандартизирована в 1963 в США. Она предназначалась для обмена данными по телетайпу. Однако сейчас, с её помощью, можно определить различные буквы, знаки и числа. Один знак в этой таблице кодируется восемью битами.

Стандарт был предложен в 1992 году. Её разработали Кен Томпсон и Роб Пайк. С помощью этой кодировки можно представить все знаки в мире. Обладает большой популярностью в интернете – большинство сервисов и сайтов используют именно это таблицу.

Для записи голоса используется микрофон и звуковая плата компьютера. Чтобы компьютер смог определить звуковую информацию – её необходимо перевести в цифровую. Для этого аналоговый сигнал поступает на аналого-цифровой преобразователь. Там он разбивается на маленькие временные кусочки, каждому из которых устанавливается величина интенсивности голоса.

представление звука в пк

В результате функция A(t) преобразуется в дискретную последовательность. Качество звуковой информации полученной на выходе определяется частотой дискретизации.

Частота дискретизации – количестве измерений уровней громкости за одну секунду. Чем больше это значение, тем лучше качество.

Видео

Заключение

Теперь вы знаете о представлении информации в памяти компьютера. Если разобраться в цифровом кодировании и устройстве внутренней памяти ПК, то вы сможете понять и другие, более серьезные разделы информатики, такие как программирование, IP-адресация и другие. Если у вас возникли вопросы по теме, то задавайте их в комментариях к статье.

Алфавит системы счисления — это перечень символов, используемый в конкретной системе счисления.

Основание системы счисления — это количество символов в её алфавите.

В системах счисления, которые содержат больше \(10\) знаков, после цифры \(9\) начинаются латинские буквы. \(10\), \(11\), \(12\) использовать мы не можем, т. к. это уже числа, а для продолжения алфавита нужны ещё цифры, поэтому было принято использовать латинские буквы.

Это самая распространённая система счисления в мире. Её применяют для повседневного счёта. Для записи чисел используются арабские цифры \(0\), \(1\), \(2\), \(3\), \(4\), \(5\), \(6\), \(7\), \(8\), \(9\).

Любое число позиционной системы счисления можно записать в развёрнутом виде. То есть в виде суммы произведений цифр числа на основание этой системы счисления с соответствующей степенью.

Представим десятичное число \(652,17\) в развёрнутом виде.

Сначала пронумеруем разряды числа, начиная с младшего — единиц. Нумерацию начинаем с \(0\). Цифра \(2\) находится в разряде единиц, ставим над ней \(0\), далее разряд десятков — над цифрой \(5\) ставим \(1\) и т. д.

Запишем сумму произведений цифр числа на основание системы счисления с соответствующей степенью:

652,17 10 = 6 × 10 2 + 5 × 10 1 + 2 × 10 0 + 1 × 10 − 1 + 7 × 10 − 2 .

Двоичные числа получили широкое применение в компьютерной технике. Два значения, используемые в двоичной системе счисления, позволяют идентифицировать два состояния: есть ток (\(1\)), нет тока (\(0\)); использовать булеву алгебру для работы логических устройств; легко производить арифметические операции.

Запишем двоичное число \(111001,101\) в развёрнутом виде.

111001,101 2 = 1 × 2 5 + 1 × 2 4 + 1 × 2 3 + 0 × 2 2 + 0 × 2 1 + 1 × 2 0 + 1 × 2 − 1 + 0 × 2 − 2 + 1 × 2 − 3 .

Восьмеричная и шестнадцатеричная системы счисления

У двоичной системы счисления есть один недостаток. Разряды чисел очень быстро растут. Поэтому в компьютерной технике стали широко применять восьмеричную и шестнадцатеричную системы счисления. Компьютер легко переводит числа из одной системы счисления в другую.

Рассмотрим развёрнутую запись восьмеричного числа \(452,214\).

452,214 8 = 4 × 8 2 + 5 × 8 1 + 2 × 8 0 + 2 × 8 − 1 + 1 × 8 − 2 + 4 × 8 − 3 .

Знание алгоритма записи развёрнутой формы числа пригодится нам в будущем для перевода чисел из любой позиционной системы счисления в десятичную.

Вообще, как компьютер может хранить, например, слово "диск"? Главный принцип - намагничивание и размагничивание одной дорожки (назовем ее так). Одна микросхема памяти - это, грубо говоря, огромное количество дорожек. Сейчас попробуем разобраться. Например:

нуль будет обозначаться как 0000 (четыре нуля),

(т.е. правую единицу заменяем на 0 и вторую устанавливаем в 1).

Уловили принцип? "0" и "1" - это т.н. биты. Один бит, как вы уже заметили, может быть нулем или единицей, т.е. размагничена или намагничена та или иная дорожка ("0" и "1" это условное обозначение). Если еще присмотреться, то можно заметить, что каждый следующий установленный бит (начиная справа) увеличивает число в два раза: 0001 в нашем примере = 1; 0010 два; 0100 четыре; 1000 восемь и т.д. Это и есть т.н. двоичная форма представления данных.

Т.о. чтобы обозначить числа от 0 до 9 нам нужно четыре бита (хоть они и не до конца использованы. Можно было бы продолжить: десять 1010, одиннадцать 1011 , пятнадцать 1111).

Компьютер хранит данные в памяти именно так. Для обозначения какого-нибудь символа (цифры, буквы, запятой, точки. ) в компьютере используется определенное количество бит. Компьютер "распознает" 256 (от 0 до 255) различных символов по их коду. Этого достаточно, чтобы вместить все цифры (0 - 9), буквы латинского алфавита (a - z, A - Z), русского (а - я, А - Я), а также другие символы. Для представления символа с максимально возможным кодом (255) нужно 8 бит. Эти 8 бит называются байтом. Т.о. один любой символ - это всегда 1 байт (см. рис. 1).

01011010
рнрннрнр
Рис. 1. Один байт с кодом буквы Z

(буквы н и р обозначают: намагничено или размагничено соответственно)

Можно элементарно проверить. Создайте в текстовом редакторе файл с любым именем и запишите в нем один символ, например, "М" (но не нажимайте Enter!). Если вы посмотрите его размер, то файл будет равен 1 байту. Если ваш редактор позволяет смотреть файлы в шестнадцатеричном формате, то вы сможете узнать и код сохраненного вами символа. В данном случае буква "М" имеет код 4Dh в шестнадцатеричной системе, которую мы уже знаем или 1001101 в двоичной.

Т.о. слово "диск" будет занимать 4 байта или 4*8 = 32 бита. Как вы уже поняли, компьютер хранит в памяти не сами буквы этого слова, а последовательность "единичек" и "ноликов". "Почему же тогда на экране мы видим текст, а не "единички-нолики"? - спросите вы. Чтобы удовлетворить ваше любопытство, я забегу немного вперед и скажу, что всю работу по выводу самого символа на экран (а не битов) выполняет видеокарта (видеоадаптер), которая находится в вашем компьютере. И если бы ее не было, то мы, естественно, ничего бы не видели, что у нас творится на экране.

В Ассемблере после двоичного числа всегда должна стоять буква "b". Это нужно для того, чтобы при ассемблировании нашей программы Ассемблер смог отличать десятичные, шестнадцатеричные и двоичные числа. Например: 10 - это "десять", 10h - это "шестнадцать" а 10b - это "два" в десятичной системе.

Т.о. в регистры можно загружать двоичные, десятичные и шестнадцатеричные числа.

В результате в регистрах AX, BH и CL будет находится одно и тоже число, только загружаем мы его в разных системах. Компьютер же будет хранить его в двоичном формате (как в регистре BH).

Итак, подведем итог. В компьютере вся информация хранится в двоичном формате (двоичной системе) примерно в таком виде: 10101110 10010010 01111010 11100101 (естественно, без пробелов. Для удобства я разделили биты по группам). Восемь бит - это один байт. Один символ занимает один байт, т.е. восемь бит. По-моему, ничего сложного. Очень важно уяснить данную тему, так как мы будем постоянно пользоваться двоичной системой, и вам необходимо знать ее на "отлично".

Как перевести двоичное число в десятичное:

Надо сложить двойки в степенях, соответствующих позициям, где в двоичном стоят единицы. Например:

Возьмем число 20. В двоичной системе оно имеет следующий вид: 10100b

Итак (начнем слева направо, считая от 4 до 0; число в нулевой степени всегда равно единице (вспоминаем школьную программу по математике)):

Как перевести десятичное число в двоичное:

Можно делить его на два, записывая остаток справа налево:

В результате получаем: 10100b = 20

Как перевести шестнадцатеричное число в десятичное:

В шестнадцатеричной системе номер позиции цифры в числе соответствует степени, в которую надо возвести число 16:

В настоящий момент есть множество калькуляторов, которые могут считать и переводить числа в разных системах счисления. Например, калькулятор Windows, который должен быть в инженерном виде. Очень удобен калькулятор и в DOS Navigator'е. Если у вас есть он, то отпадает необходимость в ручном переводе одной системы в другую, что, естественно, упростит вам работу. Однако, знать этот принцип крайне важно!

Сегментация памяти в DOS.

Возьмем следующее предложение: "Изучаем сегменты памяти". Теперь давайте посчитаем, на каком месте стоит буква "ы" в слове "сегменты" от начала предложения включая пробелы. На шестнадцатом. Подчеркну, что мы считали слово от начала предложения.

Теперь немного усложним задачу и разобьем предложение следующим образом (символом "_" обозначен пробел):

В слове "Изучаем" символ "И" стоит на нулевом месте; символ "з" на первом, "у" на втором и т.д. В данном случае мы считаем буквы начиная с нулевой позиции, используя два числа. Назовем их сегмент и смещение. Тогда, символ "ч" будет иметь следующий адрес: 0000:0003, т.е. сегмент 0000, смещение 0003. Проверьте.

В слове "сегменты" будем считать буквы начиная с десятой позиции, но с нулевого смещения. Тогда символ "н" будет иметь следующий адрес: 0010:0005, т.е. пятый символ начиная с десятой позиции. 0010 - сегмент, 0005 смещение. Тоже проверьте.

В слове "память" считаем буквы начиная с 0020 сегмента и также с нулевой позиции. Т.о. символ "а" будет иметь аодрес 0020:0001, т.е. сегмент 0020, смещение 0001. Опять проверим.

Итак, мы выяснили, что для того, чтобы найти адрес нужного символа необходимо два числа: сегмент и смещение внутри этого сегмента. В Ассемблере сегменты хранятся в сегментных регистрах: CS, DS, ES, SS (см. предыдущий выпуск ), а смещения могут храниться в других (но не во всех).

Регистр CS служит для хранения сегмента кода программы (Code Segment - сегмент кода);

Регистр DS для хранения сегмента данных (Data Segment - сегмент данных);

Регистр SS для хранения сегмента стека (Stack Segment - сегмент стека);

Регистр ES дополнительный сегментный регистр, который может хранить любой другой сегмент (например, сегмент видеобуфера).

Пример N 2:

Давайте попробуем загрузить в пару регистров ES:DI сегмент и смещение буквы "м" в слове "памяти" из примера N 1 (см. выше). Вот как это запишется на Ассемблере:

Теперь в регистре ES находится сегмент с номером 20, а регистре DI смещение к букве "м" в слове "памяти". Проверьте, пожалуйста.

Здесь стоит отметить, что загрузка числа (т.е. какого-нибудь сегмента) напрямую в сегментый регистр запрещена. Поэтому мы в строке (1) загрузили сегмент в AX, а в строке (2) загрузили в регистр ES число 20, которое находилось в регистре AX:

Пара регистров CS:IP задает текущий адрес кода. Теперь рассмотрим, как все это происходит на конкретном примере:

Пример N 3.

Итак, строки (1) и (8) описывают сегмент: CSEG (даем имя сегменту) segment (оператор Ассемблера, указывающий, что имя CSEG - это название сегмента); CSEG ends (end segment - конец сегмента) указывает Ассемблеру на конец сегмента.

Запускаем программу из Примера N 3 в отладчике. Допустим, она загрузилась в свободный сегмент 1234h. Первая команда в строке (4) будет располагаться по такому адресу:

1234h:0100h (т.е. CS = 1234h, а IP = 0100h) (посмотрите в отладчике на регистры CS и IP).

AX = 0900h (точнее, AH = 09h, а AL = 0, т.к. мы загрузили командой mov ah,9 число 9 в регистр AH, при этом не трогая AL. Если бы AL был равен, скажем, 15h, то после выполнения данной команды AX бы равнялся 0915h)

IP = 102h (т.е. указывает на адрес следующей команды. Из этого можно сделать вывод, что команда mov ah,9 занимает 2 байта: 102h - 100h = 2).

Следующая команда (нажимаем клавишу F8) изменяет регистры DX и IP. Теперь DX указывает на смещение нашей строки ("Oleg$") относительно начала сегмента, т.е. 109h, а IP равняется 105h, т.е. адрес следующей команды. Нетрудно посчитать, что команда mov dx,offset My_name занимает 3 байта (105h - 102h = 3).

Обратите внимание, что в Ассемблере мы пишем:

а в отладчике видим следующее:

mov dx,109 (109 - шестнадцатеричное число, но CodeView символ 'h' не ставит. Это надо иметь в виду).

Почему так происходит? Дело в том, что при ассемблировании программы, Ассемблер подставляет вместо offset My_name реальный адрес строки с именем My_name в памяти. Можно, конечно, записать сразу

Программа будет работать нормально. Но для этого нам нужно высчитать самим этот адрес. Попробуйте вставить следующие команды, начиная со строки (7) в примере N 3:

Просто продублируем команду int 20h (хотя, как вы уже знаете, до строки (8) программа не дойдет).

Теперь ассемблируйте программу заново. Запускайте ее под отладчиком. Вы увидите, что в DX загружается не 109h, а другое число. Подумайте, почему так происходит. Это просто!

В окне "Memory" ("Память") вы должны увидеть примерно такое:

Позиция N1 (1234) - сегмент, в который загрузилась наша программа (может быть любым).

Позиция N2 (0000) - смещение в данном сегменте (сегмент и смещение отделяются двоеточием (:)).

Позиция N3 (CD 20 00 . F0 FE) - код в шестнадцатеричной системе, который располагается с адреса 1234:0000.

Позиция N4 (= .a.) - код в ASCII (ниже рассмотрим), соответствующий шестнадцатеричным числам с правой стороны.

В Позиции N2 (смещение) введите значение, которое находится в регистре DX после выполнения строки (5). После этого в Позиции N4 вы увидите строку "Oleg$", а в Позиции N3 - код символов "Oleg$" в шестнадцатеричной системе. Вот что загружается в DX! Это не что иное, как АДРЕС (смещенеие) нашей строки в сегменте!

Но вернемся. Итак, мы загрузили в DX адрес строки в сегменте, который мы назвали CSEG (строки (1) и (9) в Прмере N 3). Теперь переходим к следующей команде: int 21h. Вызываем прерывание DOS с функцией 9 (mov ah,9) и адресом строки в DX (mov dx,offset My_name).

Как я уже говорил раньше, для использования прерываний в программах, в AH заносится номер функции. Номера функций нужно запоминать.

Наше первое прерывание.

Функция 09h прерывания 21h выводит строку на экран, адрес которой указан в регистре DX.

Вообще, любая строка, состоящая из ASCII символов, называется ASCII-строка. ASCII символы - это символы от 0 до 255 в DOS, куда входят буквы русского и латинского алфавитов, цифры, знаки препинания и пр.

Изобразим это в таблице (так всегда теперь будем делать):

Функция 09h прерывания 21h - вывод строки символов на экран в текущую позицию курсора:

Выход: ничего

Вот мы и рассмотрели сегментацию памяти. Если я что-то упустил, то это рассмотрим в последующих выпусках. Очень надеюсь на то, что вы разобрались в данной теме.

Теперь интересная программка для практики, которая выводит в верхний левый угол экрана веселую рожицу на синем фоне:

Многие операторы вы уже знаете. Поэтому я буду объяснять только новые.

В данном примере мы используем вывод символа прямым отображением в видеобуфер.

В строках (4) и (5) загружаем в сегментный регистр ES число 0B800h, которое соответствует сегменту дисплея в текстовом режиме (запомните его!). В строке (6) загружаем в регистр DI нуль. Это будет смещение относительно сегмента 0B800h. В строках (8) и (9) в регистр AH заносится атрибут символа (31 - ярко-белый символ на синем фоне) и в AL - ASCII-код символа (01 - это рожица) соответственно.

В строке (10) заносим по адресу 0B800:0000h (т.е. первый символ в первой строке дисплея - верхний левый угол) атрибут и ASCII-код символа (31 и 01 соответственно) (сможете разобраться?).

Обратите внимание на запись регистров в строке (10). Скобки ( [ ] ) указывают на то, что надо загрузить число не в регистр, а по адресу, который содержится в регистре (в данном случае, как уже отмечалось, - это 0B800:0000h).

Можете поэксперементировать с данным примером. Только не меняйте строки (4) и (5). Сегментный регистр должен быть ES (можно, конечно, и DS, но тогда надо быть осторожным). Более подробно данный метод рассмотрим позже. Сейчас нам из него нужно понять принцип сегментации на практике.

Следует отметить, что вывод символа прямым отображением в видеобуфер является самым быстрым. Выполнение команды в строке (10) занимает 3 - 5 тактов. Т.о. на Pentium-100Mhz можно за секунду вывести 20 миллионов(!) символов или чуть меньше точек на экран! Если бы все программисты (а особенно Microsoft) выводили бы символы или точки на экран методом прямого отображения в видеобуфер на Ассемблере, то программы бы работали чрезвычайно быстро. Я думаю, вы представляете.

Читайте также: