Вторник, 19.03.2024, 06:12
Приветствую Вас, Гость |
Меню сайта
Наш опрос
Нужен ли форум на этом сайте?
Всего ответов: 1296
Статистика

Онлайн всего: 8
Гостей: 8
Пользователей: 0

Двоичная система счисления. Бит и байт

В прошлой главе мы рассмотрели с Вами шестнадцатеричную систему счисления и простую программу вывода строки на экран.

В настоящей главе мы рассмотрим основополагающие сведения по программированию на языке Ассемблера. Необходимо тщательно разобраться в каждом предложении и уяснить двоичную систему счисления, понять принцип сегментации памяти в DOS. Мы также рассмотрим операторы Ассемблера, которые не затрагивали в примерах из предыдущей главы. Сразу отмечу, что это один из самых сложных разделов данной книги. Я пытался объяснить все это как можно проще, не используя сложных определений и терминов. Если что-то не поняли - не пугайтесь! Со временем все станет на свои места. Более того, мне можно задавать вопросы по адресу, указанному в предисловии. Если Вы полностью разберетесь во всем в данной главе, то считайте, что базу Ассемблера Вы изучили.

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

Предположим, что:
нуль будет обозначаться как 0000 (четыре нуля),
Один - 0001,
Два - 0010 (т.е. правую единицу заменяем на 0, а вторую устанавливаем в 1).
Далее так:
Три - 0011
Четыре - 0100
Пять - 0101
Шесть - 0110
Семь - 0111
Восемь - 1000
Девять - 1001
и т.д.

Уловили принцип? "0" и "1" - это т.н. биты. Один бит, как Вы уже заметили, может быть нулем или единицей, т.е. размагничена или намагничена та или иная дорожка ("0" и "1" - это условное обозначение). Присмотревшись, можно обнаружить, что каждый следующий установленный бит (начиная справа) увеличивает число в два раза: 0001 в нашем примере - единица; 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 бита. Как Вы уже поняли, компьютер хранит в памяти не сами буквы (символы) этого слова, а последовательность "единичек" и "ноликов".

"Почему же тогда на экране мы видим набор символов (текст, предложения, слова), а не "единички-нолики"? - спросите Вы. Чтобы удовлетворить Ваше любопытство, я забегу немного вперед и скажу, что всю работу по выводу самогo символа на экран (а не битов) выполняет видеокарта (видеоадаптер), которая находится в Вашем компьютере. И если бы ее не было, то мы, естественно, ничего бы не видели, что у нас отображено на экране.

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

Например:

 mov ax,20
mov bh,10100b
mov cl,14h

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

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

Форма входа
Поиск
Мы в сети
Реклама
Для того чтобы не видеть рекламу в правом верхнем углу сайта пройдите простую процедуру регистрации
ФОРУМ
У нас наконецто появился форум! Добро пожаловать! Будьте первыми, задайте направление форуму! =)
--- Не стесняемся - заходим на форум! ---