Форум программистов, компьютерный форум, киберфорум
Наши страницы
CoderHuligan
Войти
Регистрация
Восстановить пароль
Рейтинг: 1.00. Голосов: 2.

Школа программинга. Урок 1. Базовые понятия

Запись от CoderHuligan размещена 24.05.2019 в 17:59
Обновил(-а) CoderHuligan 25.05.2019 в 17:17

"Чем" думает компьютер?

Естественно, он думает, не задним местом, если вообще о чём-то "думает".
Думать это прерогатива человека, а компьютер призван вычислять по созданной человеком программе. Программа, это придуманная человеком-программистом последовательность команд или инструкций, которые выполняет процессор компьютра. Человек задаёт программу вычислений, а компьютер её реализует. Процессор это самая важная часть компьютера, как бы его сердце. Аналогия с сердцем вполне допустима, так как процессор работает через определённые промежутки времени, которые называются тактами. Как и сердце живых существ ритмично пульсируя перекачивает тонны крови с тем, чтобы насытить кислородом каждую клеточку организма, так и процессор повинуясь тактам "перемалывает" кучи команд-инструкций. Компьютер это автомобиль, его руль это программа, процессор - двигатель, а человек водитель, который при помощи программы-руля, направляет ход машины. Можно считать, что самым важным звеном в связке человек-машина является человек, ибо он ответственен за то, как будет работать машина по его программе. Осознав этот факт человек перестаёт бояться машины и берёт её под полный свой контроль. Вот об этом правильном(и не правильном) контроле над машиной и будет всё последующее изложение.
Существуют разные способы представления чисел. Люди привыкли к десятичной системе: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12... и т. д. Всего десятью цифрами можно представлять любые числа. Компьютер, увы, так не может. "По человечески" не может. Однако может по своему. Он знает всего две цифры: 0 и 1. На низком уровне, на котором работают логические схемы аппаратной части компьютера, эти числа представлены отсутствием напряжения (число 0) и присутствием напряжения (число 1). Например раньше были популярны микросхемы с так называемой TTL логикой, где число 0 представлялось напряжением от 0 до 0,7 вольт, а число 1 напряжением от 2,4 до 5 вольт. У меня, как у старого радиолюбителя, их до сих пор валяется много в загашнике.. В современных компьютерах примерно сопоставимые величины этих уровней, хотя там и другая логика, которая построена на полевых транзисторах с низким энергопотреблением. . Можно было бы, конечно, представить и все 10 цифр десятичной системы при помощи 10 уровней напряжения, но быстродействие такого компьютера было бы не велико, так как сложно было бы разделять уровни напряжений на составляющие части, да и напряжение питания процессора пришлось бы существенно поднять, что привело бы к большому расходу энергии.. Гораздо удобнее иметь всего два уровня - 0 и 1. Их удобно и записывать на различные носители информации. Можно привести аналогию и с природными явлениями: ночь-день, лето-зима, да-нет (из логики) и т.п. Дуализм природы, одним словом..
Итак компьютер мыслит всего двумя понятиями - числами 0 и 1.
Как же с их помощью можно представить числа больше единицы? Очень просто. Надо закодировать (зашифровать) каждое нужное число при помощи всего двух чисел 0 и 1.
Например шифр десятичного числа 2 будет таким:
10 (единица и ноль, а не число 10), а числа 3 такой:
11 (единица и единица, а не число 11).
Каждое знакоместо (разряд) такого шифра называется битом (бит).
Двумя разрядами можно зашифровать 4 десятичных числа:
0 -> 00
1 -> 01
2 -> 10
3 -> 11

Здесь все варианты двоичных чисел (0 и 1 называются двоичными числами) использованы. Чтобы можно было представить числа больше 3, нужно добавить ещё разрядов. Четырьмя разрядами можно представить уже 16 десятичных чисел, восемью - 256 и так далее. Современные компьютеры манипулируют 32 разрядными или 64 разрядными числами. В системном калькуляторе есть режим, который позволяет легко переводить числа из двоичной в десятичную и обратно, так что можно поэкспериментировать.
8-разрядное двоичное число называют байтом (байт). Это очень важная величина в компьютере, так как она является единицей адресации памяти. То есть в каждой единственной ячейке памяти компьютера может находится 8-разрядное двоичное число - 1 байт. Это очень важно знать! Не 16, не 32, не 64, а именно 8-битовое число!
На 16-разрядных машинах 16-разрядное двоичное число называлось "словом" (слово, word), а 32-разрядное двойным словом (double word).
Нумерация двойного слова начинается с крайнего правого (младшего) 0-го разряда и идёт налево до самого старшего 31-го разряда.
Вообще же здесь есть путаница (неоднозначность) что называть словом. На 64-разрядных машинах слово будет одно, а на 32-разрядных другое. Логично определять размер слова по разрядности основной шины данных процессора. Соответственно словом на 32-разрядной машине будем называть 32 битное двоичное число, а двойным 64-битное. На 64-разрядной машине словом называть 64-битное число, а двойным словом 128 битное. Но здесь определённости нет. Всё зависит от компилятора под каждую конкретную платформу..
Поскольку двойное слово состоит из двух слов, то биты с 0 по 15 разряды ( где слово 16-разрядное) называются младшим словом, а биты с 16 по 31 разряды старшим словом.
Надеюсь вы ещё не устали от этой хрестоматии, и не опустили руки.. Её нужно пройти, чтобы потом было легче ориентироваться что к чему в компьютерном деле. Базовые вещи нужно знать как "отче наш".
Размер двоичных чисел очень важно учитывать потому, что он является основой типизации языков программирования. То есть о типе данных можно судить по его размеру в памяти машины. 8-битное число будет иметь один тип данных, а 32 разрядное число другой тип данных, структура из нескольких типов имеет совсем другой размер, который к тому же может дополняться дополнительными байтами для скорости обращения к отдельным полям этой структуры, о чём позже.
Таким образом можно представлять положительные целые числа. А что же с отрицательными? Как их-то закодировать? Тоже довольно просто. Придумали так называемый "дополнительный код", чтобы сохранить простоту арифметических операций над этим кодом. Чтобы число стало отрицательным берут положительное число той же величины, затем инвертируют все его биты на противоположенные (0 меняют на 1, а 1 на 0 в каждом разряде) после чего к получившемуся числу добавляется единица. При этом надо помнить и учитывать тот факт, что если байт может представить от 0 до 255 различных положительных чисел, то отрицательный байт от -128 до +127 чисел, то есть область их определения сдвинулась в отрицательную сторону, хотя мы всё равно до сих пор можем представлять 256 величин, минус единица, одним байтом. Просто теперь максимальное положительное число не 255, а 127. Например десятичное число 5 будет равно 00000101, чтобы получить отрицательное число -5 сначала инвертируем все его разряды - 11111010, а затем прибавим к нему единицу:
11111010 + 00000001 = 11111011
Это и будет дополнительный код отрицательного числа 5. С арифметикой двоичных чисел можно ознакомиться в интернете.

Шестнадцатеричная система счисления.

Так как работать с двоичной системой человеку крайне неудобно, то была придумана шестнадцатеричная система или hexadecimal system. Она более удобная для человека, и восходит ещё к тем компьютерам, которые работали не байтами, а тетрадами. Множество символов этой системы выглядит так: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, a, b, c, d, e, f. Всего 16 символов, десять из которых это цифры от 0 до 9, а оставшиеся дополнительные символы (чтобы дополнить до 16 при помощи всего одного символа) это латинские буквы от a до f. При этом число 10 представлено символом a, 11 - b, 12 - c, 13 - d, 14 - e, 15 - f. Каждый отдельный символ этого набора, представляет из себя обозначение тетрады двоичного числа, то есть 4 разряда двоичного числа:
0000 = 0
0001 = 1
0010 = 2
0011 = 3
0100 = 4
0101 = 5
0110 = 6
0111 = 7
1000 = 8
1001 = 9
1010 = A
1011 = B
1100 = C
1101 = D
1110 = E
1111 = F
Соответственно, чтобы представить в этой системе не тетраду, а байт, нужно поделить этот байт на две тетрады и заменить по таблице эти тетрады соответствующими числами шестнадцатеричной системы. Например число 5, которое в двоичной выглядит так:
00000101
Делим его на тетрады:
0000 0101
заменяем каждую на её hex эквивалент и получаем:
05
в этой системе.
Советую хорошо привыкнуть к этой системе, и даже полюбить её, ибо она будет сопутствовать с нами везде где только можно. Она позволяет свободно работать с дампами программ, в hex-редакторах, в ассемблерах и т. п.

Что такое ячейка памяти?

Это такое устройство, которое способно некоторое время сохранять информацию о том какую величину имеет один бит - 0 или 1. В основном в оперативной памяти компьютера и в регистрах процессора для этой цели используются так называемые триггеры. Триггер это устройство способное длительное время (пока подаётся управляющее напряжение на один из его входов) находится в одном из двух состояний, и переключатся из одного (единичного) в другое (нулевое) состояние при подаче управляющего напряжения.
8-битное число можно хранить в 8 триггерах, а всё это число представляет из себя единственную ячейку памяти. Таким образом ячейка памяти состоит из 8 триггеров. Раньше ячейки памяти делались на ферритовых колечках, которые путём намагничивания сохраняли некоторое время магнитную составляющую. Сейчас триггеры на транзисторах можно сделать микроскопически малыми, что позволяет миниатюризировать вычислительную технику. На кольцах такое не сделаешь.
Так как память состоит из байтов, то важно знать каким образом расположены числа больше байта в памяти машины. Память можно представить как список из отдельных 8-битовых ячеек, каждая из которых имеет свой уникальный адрес (индекс). По этому адресу легко получить доступ к определённой ячейке..Величина адресного слова обычно равна разрядности компьютера. На 32 битных машинах его величина 32 бита, а на 64 битных - 64. Чтобы положить в ячейку к примеру 16 битное число на процессорах intel сначала в ячейку с младшим адресом кладётся младший байт, затем в ячейку со старшим адресом старший байт 16-битного числа.


Схематическое устройство процессора.



Процессор, в общем случае имеет в себе логическое устройство (арифметическое устройство), которое собственно выполняет команды и набор регистров для данных. Арифметико-логическое устройство (АЛУ) работает примерно так: в регистр счётчика команд записывается адрес очередной команды, команда считывается в АЛУ, затем микропрограммная матрица АЛУ преобразует команду в набор управляющих сигналов. Подробно с работой процессора можно ознакомится в соответствующей литературе, см. в конце. Программисту надо знать какие базовые регистры существуют в процессоре. В процессоре всегда есть регистр признаков (флагов), счётчик команд, указатель стека, регистры общего назначения. У каждого процессора свои наборы этих регистров, но базовые есть у всех. Я не буду пересказывать здесь все учебники, поэтому рекомендую обратиться к ним.

Язык ассемблера.

Ассемблер это язык команд данного конкретного семейства процессоров. Ассемблеры эти могут сильно различаться в зависимости от конкретной архитектуры процессора. Набор команд RISC процессоров сильно отличается от набора x86 процессоров INTEL. У первых набор команд упрощённый, у вторых сложный, но и программировать вторые намного более творческая работа, чем первые.
С языком ассемблера будем знакомиться постепенно по ходу изучения языка Си. То есть важно понимать в какой ассемблерный код компиляторы преобразуют сишные операции. Если этого не знать можно постоянно наступать на одни и те же грабли. Поэтому каждый сишник должен разбираться и в ассемблере.

Литература:
1) Микропроцессоры. А. В. Шилейко, Т. И. Шилейко.
2) Архитектура IBM PC и язык ассемблера. Митницкий.
3) Язык ассемблера для IBM PC. Нортон.
4) Персональные ЭВМ PC и XT. Программирование на языке ассемблера. Скэнлон.
5) Архитектура микропроцессора 80286. Морс, Алберт.
6) Микропроцессор 80386 и его программирование. Брамм П., Брамм Д.
7) Ассемблер для микропроцессоров Intel Pentium. Магда.
8) Программирование на языке ассемблера для микропроцессоров 8080 и 8085. Ливенталь.
9) Ассемблер. Это просто. Калашников О.
10) Искусство программирования на ассемблере. Лекции и упражнения. Голубь. Н.Г.
Размещено в Без категории
Просмотров 277 Комментарии 5
Всего комментариев 5
Комментарии
  1. Старый комментарий
    Аватар для XLAT
    Школа программинга. Урок 0. Базовые понятия.
    Абстракция данных в моделировании сущностей.
    ...
    Запись от XLAT размещена 25.05.2019 в 08:59 XLAT вне форума
    Обновил(-а) XLAT 25.05.2019 в 09:03
  2. Старый комментарий
    Аватар для CoderHuligan
    Цитата:
    Сообщение от XLAT Просмотреть комментарий
    Школа программинга. Урок 0. Базовые понятия.
    Абстракция данных в моделировании сущностей.
    ...
    Не понял намёка, намёк ли это, если да то на что? Вы же программист надеюсь, так прямо скажите. Приколистов, троллей буду удалять. Если по делу что есть, замечания, пожалуйста всегда рад.
    Запись от CoderHuligan размещена 25.05.2019 в 11:21 CoderHuligan вне форума
    Обновил(-а) CoderHuligan 25.05.2019 в 12:41
  3. Старый комментарий
    Аватар для XLAT
    Цитата:
    Сообщение от CoderHuligan Просмотреть комментарий
    Не понял намёка, намёк ли это, если да то на что?
    Это не намек. Этот базовый урок по базовым понятиям.
    Я надеюсь, что вы его напишите и я с интересом его прочту.
    Запись от XLAT размещена 25.05.2019 в 16:55 XLAT вне форума
  4. Старый комментарий
    Аватар для CoderHuligan
    Цитата:
    Сообщение от XLAT Просмотреть комментарий
    Это не намек. Этот базовый урок по базовым понятиям.
    Я надеюсь, что вы его напишите и я с интересом его прочту.
    Понял вас. Хорошая тема! Действительно базовая! Надеюсь, у меня хватит терпения продолжать, и подойти к данному вопросу.
    Запись от CoderHuligan размещена 25.05.2019 в 17:08 CoderHuligan вне форума
  5. Старый комментарий
    Аватар для Rius
    Цитата:
    В основном в оперативной памяти компьютера и в регистрах процессора для этой цели используются так называемые триггеры.
    Шёл 2019 год... А кто-то застрял в прошлом веке...
    Запись от Rius размещена 30.05.2019 в 06:00 Rius вне форума
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru