Ff 16 система счисления. Алфавит шестнадцатеричной системы счисления

Для написания программ на Ассемблере, необходимо разобраться с шестнадцатеричной системой счисления. Ничего сложного в ней нет. Мы используем в жизни десятичную систему. Уверен, что вы все ее знаете, поэтому я постараюсь объяснить шестнадцатеричную систему, проводя аналогию с десятичной.

Итак, в десятичной системе если мы к какому-нибудь числу справа добавим нуль, то это число увеличится в 10 раз. Например: 1 х 10 = 10; 10 х 10 = 100; 100 х 10 = 1000 и т.д. В этой системе мы используем цифры от 0 до 9, т.е. десять разных цифр (собственно, поэтому она и называется десятичная).

В шестнадцатеричной системе мы используем, соответственно, шестнадцать "цифр". Я специально написал слово "цифр" в кавычках, т.к. в ней используются не только цифры. Да и в самом деле как так? Объясняю: от 0 до 9 мы считаем так же, как и в десятичной, а вот дальше будет так: A, B, C, D, E, F. Число F, как не трудно посчитать, будет равно 15 в десятичной системе (см. табл. 1).

Десятичное число

Шестнадцатеричное число

Таблица 1. Десятичная и шестнадцатеричная системы.

Т.о., если мы к какому-нибудь числу в шестнадцатеричной системе добавим справа нуль, то это число увеличится в 16 раз.

Пример 1: 1 х 16 = 10; 10 х 16 = 100; 100 х 16 = 1000 и т.д.

Вы смогли отличить в Примере 1 шестнадцатеричные числа от десятичных? А из этого ряда: 10, 12, 45, 64, 12, 8, 19? Это могут быть как шестнадцатеричные, так и десятичные. Для того, чтобы не было путаницы, и компьютер смог бы однозначно отличить одни числа от других, в Ассемблере принято после шестнадцатеричного числа ставить символ h или H (H это сокращение от англ. hexadecimal (шестнадцатеричное). Для краткости его иногда называют просто Hex ) . А после десятичного ничего не ставить. Т.к. числа от 0 до 9 в обоих системах имеют одинаковые значения, то числа, записанные как 5 и 5h одно и тоже.

Т.о. Пример 1 (см. выше) правильнее будет записать так: 1 х 16 = 10h; 10h x 16 = 100h; 100h x 16 = 1000h. Либо так: 1h x 10h = 10h; 10h x 10h = 100h; 100h x 10h = 1000h.

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

Итак, подведем итог. Шестнадцатеричная система счисления состоит из 10 цифр (от 0 до 9) и 6 букв латинского алфавита (A, B, C, D, E, F). Если к какому-нибудь числу в шестнадцатеричной системе добавим справа нуль, то это число увеличится в 16 раз. Очень важно уяснить данную тему , так как мы будем постоянно использовать ее при написании программ.

Теперь немного о том, как я буду строить примеры на Ассемблере. Не совсем удобно приводить их в HTML-формате, поэтому сперва будет сам код программы с пронумерованными строчками, а сразу же после него объяснения и примечания.

Примерно так:

строк Код программы
(1) mov ah,9

Объяснения:

В строке (1) мы делаем то-то, а в строке (15) то-то.

Огромная просьба: НЕ копируйте программы со страницы в буфер, а затем не вставляйте их в Блокнот (или еще куда-нибудь)! Перепечатывайте их вручную в текстовом редакторе. Если есть принтер, то выделите программу, распечатайте выделенный фрагмент, а затем перебейте в редактор с бумаги. Все примеры нужно набирать самостоятельно! Это ускорит запоминание операторов.

И еще. Строчные и ПРОПИСНЫЕ буквы в Ассемблере не различаются. Записи вида:

Ассемблером воспринимаются одинаково. Можно, конечно, заставить Ассемблер различать строчные и ПРОПИСНЫЕ символы, но мы пока этого делать не будем. Для удобства чтения программы лучше всего операторы печатать строчными буквами, а названия подпрограмм и меток начинать с прописной. Но это как кому будет удобно.

Итак, переходим к нашей первой программе:

(1) CSEG segment

(2) org 100h

(4) Begin:

(6) mov ah,9

(7) mov dx,offset Message

(8) int 21h

(10) int 20h

(11)

(12) Message db "Hello, world!$"

(13) CSEG ends

(14) end Begin

Для того, чтобы объяснить все операторы данного примера, нам потребуется несколько выпусков. Поэтому описание некоторых команд мы просто опустим на данном этапе. Просто считайте, что так должно быть. В самое ближайшее время мы рассмотрим эти операторы подробно. Итак, строки с номерами (1), (2) и (13) вы просто игнорируете.

Строки (3), (5), (9) и (11) остаются пустыми. Это делается для наглядности. Ассемблер их будет просто опускать.

Теперь перейдем к рассмотрению остальных операторов. Со строки (4) начинается код программы. Это метка, указывающая Ассемблеру на начало кода. В строке (14) стоят операторы end Begin ( Begin англ. начало; end конец). Это конец программы. Вообще вместо слова Begin можно было бы использовать что-нибудь другое. Например, Start:. В таком случае, нам пришлось бы и завершать программу End Start (14).

Строки (6) (8) выводят на экран сообщение Hello, world!. Здесь придется вкратце рассказать о регистрах процессора (более подробно эту тему мы рассмотрим в следующем выпуске).

Регистр процессора это специально отведенная память для хранения какого-нибудь числа.

Например:

Если мы хотим сложить два числа, то в математике запишем так:

A, B и C это своего рода регистры (если говорить о компьютере), в которых могут хранится некоторые данные. А=5 можно прочитать как: Присваиваем А число 5 .

Для присвоения регистру какого-нибудь значения, в Ассемблере существует оператор mov (от англ. move загрузить). Строку (6) следует читать так: Загружаем в регистр AH число 9 (проще говоря, присваиваем AH число 9). Ниже рассмотрим зачем это надо.

В строке (7) загружаем в регистр DX адрес сообщения для вывода (в данном примере это будет строка Hello, world!$ ).

Прерывания будут подробно рассматриваться в последующих выпусках. Здесь я скажу несколько слов.

Прерывание MS-DOS это своего рода подпрограмма (часть MS-DOS) , которая находится постоянно в памяти и может вызываться в любое время из любой программы.

Рассмотрим вышесказанное на примере (мелким шрифтом выделим примечания ):

Программа сложения двух чисел

НачалоПрограммы

A=5 в переменную A заносим значение 5

B=8 в переменную B значение 8

ВызовПодпрограммы Сложение

теперь С равно 13

A=10 тоже самое, только другие числа

B=25

ВызовПодпрограммы Сложение

теперь С равно 35

КонецПрограммы

Подпрограмма Сложение

C=A+B

ВозвратИзПодпрограммы возвращаемся в то место, откуда вызывали

КонецПодпрограммы

В данном примере мы дважды вызвали подпрограмму Сложение , которая сложила два числа, переданные ей в переменных A и B. Результат помещается в переменную С. Когда вызывается подпрограмма, компьютер запоминает с какого места она была вызвана, а затем, когда закончила работу подпрограмма, компьютер возвращается в то место, откуда она вызывалась. Т.о. можно вызывать подпрограммы неопределенное количество раз с любого места.

При выполнении строки (8) программы на Ассемблере мы вызываем подпрограмму (в данном случае это называется прерывание), которая выводит на экран строку. Для этого мы, собственно, и помещаем необходимые значения в регистры. Всю необходимую работу (вывод строки, перемещение курсора) берет на себя подпрограмма. Эту строку можно прочитать так: вызываем двадцать первое прерывание ( int от англ. interrupt прерывание). Обратите внимание, что после числа 21 стоит буква h. Это, как мы уже знаем, шестнадцатеричное число (33 в десятичной системе). Конечно, нам ничего не мешает заменить строку int 21h на int 33. Программа будет работать корректно. Просто в Ассемблере принято указывать номер прерывания в шестнадцатеричной системе.

В строке (10) мы, как вы уже догадались, вызываем прерывание 20 h. Для вызова данного прерывания не нужно указывать какие-либо значения в регистрах. Оно выполняет только одну задачу: выход из программы (выход в DOS). В результате выполнения прерывания 20h, программа вернется туда, откуда ее запускали (загружали, вызывали). Например, в Norton Commander или DOS Navigator.

Строка (12) содержит сообщение для вывода. Первое слово ( message сообщение) название сообщения. Оно может быть любым (например, mess или string и пр.). Обратите внимание на строку (7), в которой мы загружаем в регистр DX адрес нашего сообщения.

Можно создать еще одну строку, которую назовем Mess2. Затем, начиная со строки (9) вставим следующие команды:

(10) mov dx,offset Mess2

(13) Message db "Hello, world!$"

(14) Mess2 db "Это Я! $"

и ассемблировать нашу программу заново. Надеюсь, что вы догадались, что произойдет

Обратите внимание на последний символ в строках Message и Mess2 - $. Он указывает на конец строки. Если мы его уберем, то 21 h прерывание продолжит вывод до тех пор, пока не встретится где-нибудь в памяти символ $. На экране мы увидим мусор .

Если у вас есть отладчик, то можно посмотреть как будет работать наша программа.

Целю настоящего выпуска не было разобраться подробно с каждым оператором . Это невозможно, т.к. у вас еще недостаточно знаний. Я полагаю, что уже через 3-4 выпуска вы поймете принцип и структуру программы на Ассемблере. Может быть, вам показался язык Ассемблера чрезвычайно сложным, но это, поверьте, с первого взгляда.

Таблица 2.4. 16-ричная система кодирования
Десятичная система 16-ричная система Десятичная система 16-ричная система
0 0 (0000) 10 A (1010)
1 1(0001) 11 B (1011)
2 2 (0010) 12 C (1100)
3 3 (0011) 13 D (1101)
4 4 (0100) 14 E (1110)
5 5 (0101) 15 F (1111)
6 6 (0110) 16 10 (00010000)
7 7 (0111) 17 11 (00010001)
8 8 (1000) 18 12 (00010010)
9 9 (1001) 19 13 (00010011)

Для перевода 16-ричного числа в десятичное необходимо умножить значение младшего (нулевого) разряда на единицу, значение следующего (первого) разряда на 16, второго разряда на 256 (16 2) и т.д., а затем сложить все произведения. Например, возьмем число A17F :

A17F=F*16 0 + 7*16 1 + 1*16 2 + A*16 3 = 15*1 + 7*16+1*256+10*4096=41343

Таблица 2.5. 8-ричная система кодирования
Десятичная система 8-ричная система Десятичная система 8-ричная система
0 0 (000) 10 12 (001010)
1 1(001) 11 13 (001011)
2 2 (010) 12 14 (001100)
3 3 (011) 13 15 (001101)
4 4 (100) 14 16 (001110)
5 5 (101) 15 17 (001111)
6 6 (110) 16 20 (010000)
7 7 (111) 17 21 (010001)
8 10 (001000) 18 22 (010010)
9 11 (001001) 19 23 (010011)

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

Значительно реже, чем 16-ричное, используется восьмеричное кодирование , которое строится по такому же принципу, что и 16-ричное, но двоичные разряды разбиваются на группы по три разряда. Каждая группа (разряд кода) затем обозначается одним символом. Каждый разряд 8-ричного кода может принимать восемь значений: 0, 1, 2, 3, 4, 5, 6, 7 (табл. 2.5) .

Помимо рассмотренных кодов, существует также и так называемое двоично-десятичное представление чисел. Как и в 16-ричном коде, в двоично-десятичном коде каждому разряду кода соответствует четыре двоичных разряда, однако каждая группа из четырех двоичных разрядов может принимать не шестнадцать, а только десять значений, кодируемых символами 0, 1, 2, 3, 4, 5, 6, 7, 8, 9. То есть одному десятичному разряду соответствует четыре двоичных. В результате получается, что написание чисел в двоично-десятичном коде ничем не отличается от написания в обычном десятичном коде (табл. 2.6) , но в реальности это всего лишь специальный двоичный код, каждый разряд которого может принимать только два значения: 0 и 1. Двоично-десятичный код иногда очень удобен для организации десятичных цифровых индикаторов и табло.

Таблица 2.6. Двоично-десятичная система кодирования
Десятичная система Двоично-десятичная система Десятичная система Двоично-десятичная система
0 0 (0000) 10 10 (00010000)
1 1(0001) 11 11 (00010001)
2 2 (0010) 12 12 (00010010)
3 3 (0011) 13 13 (00010011)
4 4 (0100) 14 14 (00010100)
5 5 (0101) 15 15 (00010101)
6 6 (0110) 16 16 (00010110)
7 7 (0111) 17 17 (00010111)
8 8 (1000) 18 18 (00011000)
9 9 (1001) 19 19 (00011001)

В двоичном коде над числами можно проделывать любые арифметические операции : сложение , вычитание , умножение , деление .

Рассмотрим, например, сложение двух 4-разрядных двоичных чисел. Пусть надо сложить число 0111 (десятичное 7) и 1011 (десятичное 11). Сложение этих чисел не сложнее, чем в десятичном представлении:

При сложении 0 и 0 получаем 0, при сложении 1 и 0 получаем 1, при сложении 1 и 1 получаем 0 и перенос в следующий разряд 1. Результат - 10010 (десятичное 18). При сложении любых двух n-разрядных двоичных чисел может получиться n-разрядное или (n+1) -разрядное число.

Точно так же производится вычитание . Пусть из числа 10010 (18) надо вычесть число 0111 (7). Записываем числа с выравниванием по младшему разряду и вычитаем точно так же, как в случае десятичной системы:

При вычитании 0 из 0 получаем 0, при вычитании 0 из 1 получаем 1, при вычитании 1 из 1 получаем 0, при вычитании 1 из 0 получаем 1 и заем 1 в следующем разряде. Результат - 1011 (десятичное 11).

При вычитании возможно получение отрицательных чисел, поэтому необходимо использовать двоичное представление отрицательных чисел.

Для одновременного представления как двоичных положительных, так и двоичных отрицательных чисел чаще всего используется так называемый дополнительный код . Отрицательные числа в этом коде выражаются таким числом, которое, будучи сложено с положительным числом такой же величины, даст в результате нуль. Для того чтобы получить отрицательное число, надо поменять все биты такого же положительного числа на противоположные (0 на 1, 1 на 0) и прибавить к результату 1. Например, запишем число –5. Число 5 в двоичном коде выглядит 0101. Заменяем биты на противоположные: 1010 и прибавляем единицу: 1011. Суммируем результат с исходным числом: 1011 + 0101 = 0000 (перенос в пятый разряд игнорируем).

по модулю 2 два двоичных числа 0111 и 1011:

Среди других побитовых операций над двоичными числами можно отметить функцию И и функцию ИЛИ. Функция И дает в результате единицу только тогда, когда в соответствующих битах двух исходных чисел обе единицы, в противном случае результат -0. Функция ИЛИ дает в результате единицу тогда, когда хотя бы один из соответствующих битов исходных чисел равен 1, в противном случае результат 0.

0123456789ABCDEF. Приняв за основание число 16, получаем шестнадцатеричную систему счисления. Здесь мы можем воспользоваться 10 знаками десятичной системы, добавив еще 6 знаков – буквы латинского алфавита (A, B, C, D, E, F): 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F 10 11 12 13 14 15 Всего 16 разных знаков составляют алфавит шестнадцатеричной системы счисления. Можно записать любое число включая все эти знаки: А37, 1В45, F302, 1A3C5… - обратите внимание: используем знаки от 0 до F. Для шестнадцатеричной системы счисления q=16. Содержание.

Слайд 32 из презентации «История счёта и систем счисления» . Размер архива с презентацией 2292 КБ.

Информатика 9 класс

краткое содержание других презентаций

««Моделирование» 9 класс» - Моделирование как метод познания. Файловая система ПК. Тест завершён. Птолемей построил модель мира. Модель человека в виде детской куклы. Удобнее всего при описании траектории движения объекта использовать информационную модель. Существующие признаки объекта. Описание дерева. Удобнее всего использовать информационную модель. Список депутатов государственной Думы. Список учащихся школы; план классных комнат.

«История счёта и систем счисления» - Основание системы счисления. Десятки. Десятичное число. Славянская кириллическая нумерация. Нумерация. Цветок лотоса. Позиция цифры в числе называется разрядом. Положение цифры. В древние времена люди ходили босиком. Позиционная система счисления характеризуется своим основанием. Деление на основание. Запись чисел нового типа. Умножение двоичных чисел. Перевод десятичного числа. Арифметические действия.

«Сортировка в электронных таблицах» - Сортировка и поиск данных в электронных таблицах. Поиск данных в ЭТ. Порядок проведения вложенной сортировки. Отдел. Условия поиска записей. Запишите фамилии. Практическая работа. Сортировка по возрастанию. Порядок следования строк. Сортировка и поиск данных. Оклад и возраст. Рефлексивный экран. Сортировка данных. Выберите примеры баз данных. Сортировка записей. Разница между записью и полем. Порядок использования автофильтра.

«Циклические программы» - Составить программу. Найти сумму. Введите целое число. Найти количество трехзначных натуральных чисел. Найти сумму натуральных чисел. Вычислить. Цикл с постусловием. Напечатать на экране таблицу. Первоначальный взнос. Цикл с предусловием. Делители. Циклические программы. Информатика. Табулирование функции. Понятие цикла. Цикл с параметром. Ввод исходных данных. Таблица перевода долларов. Найти количество чисел.

«Моделирование как метод научного познания» - Таблица типа «объекты-объекты-один». Описания объекта. Метод познания окружающего мира. Решение задач. Образовательные ресурсы. Пятеро ребят. Формализация. Этапы моделирования. Мальчик. Иерархическая модель. Описание объекта моделирования. Юра. Сирень. Обозначения серверов. Технические модели. Ярусные диаграммы. Диаграмма. Тип. Моделирование как метод познания. Модели на графах. Задачи, решаемые с помощью графов.

«Что такое электронная почта» - Адрес электронной почты. Маршутизация почты. Письмо. Как работает электронная почта. X-mailer. Вопрос появления электронной почты. Дата. Копия. Электронное письмо. Структура письма. История электронной почты. Отправитель. Электронная почта.

Шестнадцатеричная система счисления. аша первая программа.

Для написания программ на Ассемблере, необходимо разобраться с шестнадцатеричной системой счисления. Ничего сложного в ней нет. Мы используем в жизни десятичную систему. Уверен, что вы все ее знаете, поэтому я постараюсь объяснить шестнадцатеричную систему, проводя аналогию с десятичной.

Итак, в десятичной системе если мы к какому-нибудь числу справа добавим нуль, то это число увеличится в 10 раз. Например: 1 х 10 = 10; 10 х 10 = 100; 100 х 10 = 1000 и т.д. В этой системе мы используем цифры от 0 до 9, т.е. десять разных цифр (собственно, поэтому она и называется десятичная).

В шестнадцатеричной системе мы используем, соответственно, шестнадцать "цифр". Я специально написал слово "цифр" в кавычках, т.к. в ней используются не только цифры. Да и в самом деле как так? Объясняю: от 0 до 9 мы считаем так же, как и в десятичной, а вот дальше будет так: A, B, C, D, E, F. Число F, как не трудно посчитать, будет равно 15 в десятичной системе (см. табл. 1).

Десятичное число

Шестнадцатеричное число

Таблица 1. Десятичная и шестнадцатеричная системы.

Т.о., если мы к какому-нибудь числу в шестнадцатеричной системе добавим справа нуль, то это число увеличится в 16 раз.

Пример 1: 1 х 16 = 10; 10 х 16 = 100; 100 х 16 = 1000 и т.д.

Вы смогли отличить в Примере 1 шестнадцатеричные числа от десятичных? А из этого ряда: 10, 12, 45, 64, 12, 8, 19? Это могут быть как шестнадцатеричные, так и десятичные. Для того, чтобы не было путаницы, и компьютер смог бы однозначно отличить одни числа от других, в Ассемблере принято после шестнадцатеричного числа ставить символ h или H (H это сокращение от англ. hexadecimal (шестнадцатеричное). Для краткости его иногда называют просто Hex ) . А после десятичного ничего не ставить. Т.к. числа от 0 до 9 в обоих системах имеют одинаковые значения, то числа, записанные как 5 и 5h одно и тоже.

Т.о. Пример 1 (см. выше) правильнее будет записать так: 1 х 16 = 10h; 10h x 16 = 100h; 100h x 16 = 1000h. Либо так: 1h x 10h = 10h; 10h x 10h = 100h; 100h x 10h = 1000h.

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

Итак, подведем итог. Шестнадцатеричная система счисления состоит из 10 цифр (от 0 до 9) и 6 букв латинского алфавита (A, B, C, D, E, F). Если к какому-нибудь числу в шестнадцатеричной системе добавим справа нуль, то это число увеличится в 16 раз. Очень важно уяснить данную тему , так как мы будем постоянно использовать ее при написании программ.

Теперь немного о том, как я буду строить примеры на Ассемблере. Не совсем удобно приводить их в HTML-формате, поэтому сперва будет сам код программы с пронумерованными строчками, а сразу же после него объяснения и примечания.

Примерно так:

строк Код программы
(1) mov ah,9

Объяснения:

В строке (1) мы делаем то-то, а в строке (15) то-то.

Огромная просьба: НЕ копируйте программы со страницы в буфер, а затем не вставляйте их в Блокнот (или еще куда-нибудь)! Перепечатывайте их вручную в текстовом редакторе. Если есть принтер, то выделите программу, распечатайте выделенный фрагмент, а затем перебейте в редактор с бумаги. Все примеры нужно набирать самостоятельно! Это ускорит запоминание операторов.

И еще. Строчные и ПРОПИСНЫЕ буквы в Ассемблере не различаются. Записи вида:

Ассемблером воспринимаются одинаково. Можно, конечно, заставить Ассемблер различать строчные и ПРОПИСНЫЕ символы, но мы пока этого делать не будем. Для удобства чтения программы лучше всего операторы печатать строчными буквами, а названия подпрограмм и меток начинать с прописной. Но это как кому будет удобно.

Итак, переходим к нашей первой программе:

(1) CSEG segment

(2) org 100h

(4) Begin:

(6) mov ah,9

(7) mov dx,offset Message

(8) int 21h

(10) int 20h

(11)

(12) Message db "Hello, world!$"

(13) CSEG ends

(14) end Begin

Для того, чтобы объяснить все операторы данного примера, нам потребуется несколько выпусков. Поэтому описание некоторых команд мы просто опустим на данном этапе. Просто считайте, что так должно быть. В самое ближайшее время мы рассмотрим эти операторы подробно. Итак, строки с номерами (1), (2) и (13) вы просто игнорируете.

Строки (3), (5), (9) и (11) остаются пустыми. Это делается для наглядности. Ассемблер их будет просто опускать.

Теперь перейдем к рассмотрению остальных операторов. Со строки (4) начинается код программы. Это метка, указывающая Ассемблеру на начало кода. В строке (14) стоят операторы end Begin ( Begin англ. начало; end конец). Это конец программы. Вообще вместо слова Begin можно было бы использовать что-нибудь другое. Например, Start:. В таком случае, нам пришлось бы и завершать программу End Start (14).

Строки (6) (8) выводят на экран сообщение Hello, world!. Здесь придется вкратце рассказать о регистрах процессора (более подробно эту тему мы рассмотрим в следующем выпуске).

Регистр процессора это специально отведенная память для хранения какого-нибудь числа.

Например:

Если мы хотим сложить два числа, то в математике запишем так:

A, B и C это своего рода регистры (если говорить о компьютере), в которых могут хранится некоторые данные. А=5 можно прочитать как: Присваиваем А число 5 .

Для присвоения регистру какого-нибудь значения, в Ассемблере существует оператор mov (от англ. move загрузить). Строку (6) следует читать так: Загружаем в регистр AH число 9 (проще говоря, присваиваем AH число 9). Ниже рассмотрим зачем это надо.

В строке (7) загружаем в регистр DX адрес сообщения для вывода (в данном примере это будет строка Hello, world!$ ).

Прерывания будут подробно рассматриваться в последующих выпусках. Здесь я скажу несколько слов.

Прерывание MS-DOS это своего рода подпрограмма (часть MS-DOS) , которая находится постоянно в памяти и может вызываться в любое время из любой программы.

Рассмотрим вышесказанное на примере (мелким шрифтом выделим примечания ):

Программа сложения двух чисел

НачалоПрограммы

A=5 в переменную A заносим значение 5

B=8 в переменную B значение 8

ВызовПодпрограммы Сложение

теперь С равно 13

A=10 тоже самое, только другие числа

B=25

ВызовПодпрограммы Сложение

теперь С равно 35

КонецПрограммы

Подпрограмма Сложение

C=A+B

ВозвратИзПодпрограммы возвращаемся в то место, откуда вызывали

КонецПодпрограммы

В данном примере мы дважды вызвали подпрограмму Сложение , которая сложила два числа, переданные ей в переменных A и B. Результат помещается в переменную С. Когда вызывается подпрограмма, компьютер запоминает с какого места она была вызвана, а затем, когда закончила работу подпрограмма, компьютер возвращается в то место, откуда она вызывалась. Т.о. можно вызывать подпрограммы неопределенное количество раз с любого места.

При выполнении строки (8) программы на Ассемблере мы вызываем подпрограмму (в данном случае это называется прерывание), которая выводит на экран строку. Для этого мы, собственно, и помещаем необходимые значения в регистры. Всю необходимую работу (вывод строки, перемещение курсора) берет на себя подпрограмма. Эту строку можно прочитать так: вызываем двадцать первое прерывание ( int от англ. interrupt прерывание). Обратите внимание, что после числа 21 стоит буква h. Это, как мы уже знаем, шестнадцатеричное число (33 в десятичной системе). Конечно, нам ничего не мешает заменить строку int 21h на int 33. Программа будет работать корректно. Просто в Ассемблере принято указывать номер прерывания в шестнадцатеричной системе.

В строке (10) мы, как вы уже догадались, вызываем прерывание 20 h. Для вызова данного прерывания не нужно указывать какие-либо значения в регистрах. Оно выполняет только одну задачу: выход из программы (выход в DOS). В результате выполнения прерывания 20h, программа вернется туда, откуда ее запускали (загружали, вызывали). Например, в Norton Commander или DOS Navigator.

Строка (12) содержит сообщение для вывода. Первое слово ( message сообщение) название сообщения. Оно может быть любым (например, mess или string и пр.). Обратите внимание на строку (7), в которой мы загружаем в регистр DX адрес нашего сообщения.

Можно создать еще одну строку, которую назовем Mess2. Затем, начиная со строки (9) вставим следующие команды:

(10) mov dx,offset Mess2

(13) Message db "Hello, world!$"

(14) Mess2 db "Это Я! $"

и ассемблировать нашу программу заново. Надеюсь, что вы догадались, что произойдет

Обратите внимание на последний символ в строках Message и Mess2 - $. Он указывает на конец строки. Если мы его уберем, то 21 h прерывание продолжит вывод до тех пор, пока не встретится где-нибудь в памяти символ $. На экране мы увидим мусор .

Если у вас есть отладчик, то можно посмотреть как будет работать наша программа.

Целю настоящего выпуска не было разобраться подробно с каждым оператором . Это невозможно, т.к. у вас еще недостаточно знаний. Я полагаю, что уже через 3-4 выпуска вы поймете принцип и структуру программы на Ассемблере. Может быть, вам показался язык Ассемблера чрезвычайно сложным, но это, поверьте, с первого взгляда.

Шестнадцатеричная система счисления имеет алфавит, состоящий из 16 цифр:

0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, b, c, d, e, f.

При записи числа в шестнадцатеричной системе для записи цифр обозначающих числа 10, 11, 12. 13, 14. 15 используются соответственно буквы А, В, С, D, E, F.

Перевод чисел из шестнадцатеричной системы в десятичную

Перевести любое шестнадцатеричное число в десятичное можно по уже известной формуле

Примеры.

    АЕ07 16 =10∙16 3 +14∙16 2 +0∙16 1 +7∙16 0 =44551 10 .

    100 16 =1∙16 2 +0∙16 1 +0∙16 0 =256 10 .

    58 16 =5∙16 1 +8∙16 0 =.88 10 .

    2А 16 =2∙16 1 +10∙16 0 =42 10 .

Перевод числа из десятичной системы в шестнадцатеричную осуществляется также, как в двоичную.

Перевод чисел из шестнадцатеричной системы в двоичную и обратно

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

2) 2A= 0010 1010 2 = 101010 2 .

3) 58 16 = 0101 1000 2 = 1011000 2 .

И наоборот, перевести любое двоичное число в шестнадцатеричное можно аналогичным образом. Каждые четыре двоичные цифры, считая справа налево, записываются одной шестнадцатеричной цифрой. Эти цифры располагаются также справа налево.

Примеры.

2. 101010 2 = 10 1010 2 = 2A.

3. 1011000 2 = 101 1000 2 = 58 16 .

Восьмеричная система счисления

Восьмеричная система счисления имеет алфавит, состоящий из 8 цифр:

0, 1, 2, 3, 4, 5, 6, 7.

Перевод числа из десятичной системы в восьмеричную и обратно осуществляется по аналогии с переводом в двоичную / из двоичной.

Перевод чисел из восьмеричной системы в двоичную и обратно

Каждая цифра восьмеричной записи числа записывается трехзначным двоичным числом - триадой .

Примеры.

2563 8 = 010 101 110 011 2 =10101110011 2 .

1001101 2 = 001 001 101 2 = 115 8 .

Методические материалы для лабораторного занятия №1

Тема лабораторного занятия: Системы счисления. Измерение информации.

Количество часов: 2.

Примеры с решениями

    Перевод из p -ичной системы в 10-ичную. Пусть надо перевести число в некоторой системе счисления в десятичную. Для этого надо представить его в виде

11100110 2 = 1∙2 7 + 1∙2 6 + 1∙2 5 + 0∙2 4 + 0∙2 3 + 1∙2 2 + 1∙2 1 + 0∙2 0 = 128 + 64 + 32 + 4 + 2 = 230 10 .

2401 5 = 2∙5 3 + 4∙5 2 + 0∙5 1 + 1∙5 0 = 250 + 100 + 0 + 1 = 351.

    Перевод из 10-ичной системы в p -ичную.

2.1 98 10 → Х 2 .

Делим число на 2. Затем делим неполное частное на 2. Продолжаем до тех пор, пока неполное частное не станет меньше 2, т.е. равным 1.

    98: 2 = 49. Остаток - 0 .

    49: 2 = 24. Остаток - 1 .

    24: 2 = 12. Остаток - 0 .

    12: 2 = 6. Остаток - 0 .

    6: 2 = 3. Остаток - 0 .

    3: 2 = 1 . Остаток - 1 .

Так как последнее неполное частное равно 1, процесс окончен. Записываем все остатки снизу вверх, начиная с последнего неполного частного, и получаем число 1100010. Итак 98 10 = 1100010 2 .

2.2 2391 10 → Х 16 .

Делим число на 16. Затем делим неполное частное на 16. Продолжаем до тех пор, пока неполное частное не станет меньше 16.

    2391: 16 = 149. Остаток - 7 .

    149: 16 = 9 . Остаток - 5 .

Так как последнее неполное частное (9) меньше 16, процесс окончен. Записываем, начиная с последнего неполного частного, все остатки снизу вверх и получаем число 957. Итак 2391 10 = 957 16 .

2.3 12165 10 → Х 2 .

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

12165 10 = 27605 8 = 010 111 110 000 101 = 10111110000101.

    Определение основания системы счисления p .

Один мальчик так написал о себе: «Пальцев у меня 24, на каждой руке по 5, а на ногах 12». Как такое может быть?

Решение. Надо определить основание системы счисления p . Так как мы знаем, что пальцев на ногах всего 10 10 , то 12 p =1∙p +2 = 10 10 . Отсюда получаем уравнение p + 2 = 10  p = 8. Значит, мальчик имел в виду числа в восьмеричной системе. Действительно, всего пальцев 24 8 = 2∙8+4 = 20 10 , а на ногах - 12 8 = 1∙8+2 = 10 10 .

  • Сергей Савенков

    какой то “куцый” обзор… как будто спешили куда то