Отправляет email-рассылки с помощью сервиса Sendsay

Assembler - Просто и Эффективно.

  Все выпуски  

Assembler - Просто и Эффективно. Глава #2


Информационный Канал Subscribe.Ru


Assembler

Глава #2 - системы счисления

  Эта глава будет полезна начинающим программистам, но прочесть ее желательно всем читателям. Числа, и другая информация в компьютере, хранятся и обрабатываются в виде наборов едениц и нолей. Для этого придумана двоичная система счисления.
В двоичной системе каждая цифра может принимать только два значения (ноль и единица). Для хранения каждого разряда двоичного числа используется один бит. Так как представление числа в двоичной системе получается слишком длинным и неудобным, используется шестнадцатиричная система счисления, где в каждом разряде 16 цифр (от ноля до девяти, далее от A до F). Другие системы счисления (восьмиричная и т.д) на практике редко нужны.
    Пример- числа от ноля до 15 в разных системах:
Dec0123456789101112131415
Hex0123456789ABCDEF
Bin0000000100100011010001010110011110001001101010111100110111101111
Если к числу A прибавить единицу, то будет число 10, потом 11 и т.д
   -------------------------------

  Перевод из одной системы в другую.

Чтобы указать компилятору в какой системе находится число, нужно добавить в конце: символ b для двоичных чисел, d для десятичных и h для шестнадцатиричных .
Пример: Число 14 в разных системах:1110b 14d 0Eh
Число всегда должно начинаться с цифры. Добовляйте ноль в случае необходимости.
Пример: 0A8h
Система по умолчанию - десятичная, потому d можно не указывать.
При переводе из шестнадцатиричной системы в двоичную каждую цифру числа нужно заменить двоичным представлением из таблицы вверху. Точно также переводят двоичное число в шестнадцатиричное.
Пример: 0A8h = 10101000b т.к A=1010 и 8=1000.
   -------------------------------

  Типы данных.

1 бит (bite)- один разряд двоичного числа - принимает значение 0 или 1. Биты объединены в группы (типы данных), с которыми можно работать при помощи команд процессора: байт(byte): 8 бит; слово(word): 16 бит (2 байта); двойное слово (dword): 32 бита (4 байта). Нумерацая битов ведется справа на лево. Самый правый (младший) бит - #0, самый левый (старший) - в байте #7, в слове - #15, в двойном слове - #31. Нумерация байтов в слове и двойном слове ведется аналогично.
Размер группы битов определяется командой процессора, работающей с этой группой. Когда вы используете ту или иную команду процессора, вы указываете тип данных, с которым будете работать (byte, word, dword или другие) - если команда это позволяет.
  Так как в байте 8 бит, то он может принимать значения от 0 до 0FFh. Если прибавить к максимальному значению единицу, то получится ноль потому, что получившийся разряд не поместится в данном числе бит.
Пример: значение байта равно 0FAh, Прибавим к нему 8. Получим число 102h, но в байт поместится только 02, старший разряд отбрасывается - происходит переполнение.
И наоборот, если отнять от ноля единицу, то получим максимальное значение.
Пример: содрежимое байта равно 3 При вычитании из него 5, получим 0FEh, как бы, при вычитании пяти из 103h - происходит заем.
   -------------------------------

  Числа со знаком.

В зависимости от того, какая команда процессора работает с числом, числа могут быть знаковыми и беззнаковыми. Как говорилось выше, если из байта со значинием 0 вычесть единицу, то получится значение 0FFh. Если воспринимать его как беззнаковое, то оно равно 255. Знаковое 0FFh равно -1. В случае со знаковым байтом, числа от 0 до 7Fh - положительные, от 80h до 0FFh - отрицательные.
Старший бит знакового числа называется знаковым битом.
   -------------------------------

  Общий пример

Значение слова равно 0A83Ch.
В десятичной системе (беззнаковое):43068, в двоичной: 10101000 00111100b.
Значение старшего байта (#1) равно 0A8h, младшего (#0) равно 3Сh.
Если число знаковое, то оно отрицательное т.к значение знакового бита (#15) равно 1. В таком случае, это число равно -22468.
Для того, чтобы найти модуль отрицательного числа, нужно инвенсировать все его биты (0 заменить на 1, а 1 на 0), и прибавить единицу. В данном примере модуль равен 57C4h.
Проверка: 0A83Ch+57C4h=10000h, то есть ноль т.к переменная размером в слово, единица отбрасывается по причине переполнения.
   -------------------------------

 Содержание дальнейших выпусков зависит от вас. Будут разъясняться те темы, которые непонятны большинству читателей. Присылайте свои вопросы и предложения по адресу: VladimirPronin@nm.ru .
   -------------------------------


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


Subscribe.Ru
Поддержка подписчиков
Другие рассылки этой тематики
Другие рассылки этого автора
Подписан адрес:
Код этой рассылки: comp.soft.prog.asm32
Архив рассылки
Отписаться
Вспомнить пароль

В избранное