Перейти к содержимому

Msb и lsb что это

  • автор:

Байты данных

Информацию с органов управления можно разделить на два основных вида: логический и числовой. Если, например, педаль имеет только два состояния (нажата или отпущена, On/Off), то это — логическая информация. Если же мы крутим колесо, то каждое его положение представляется одним значением из некоторого диапазона.

Как это закодировать? Для логической информации достаточно, по идее, одного бита. Если бит сброшен (0), то педаль (или кнопка) отпущена, если установлен (1), то нажата. Но минимальной единицей информации в MIDI является байт, в данном случае байт данных. Поэтому придется использовать его целиком, несмотря на то, что реально нужен только один бит.

Для числовой информации один MIDI-байт позволяет закодировать 128 различных значений (от 0 от 127). А если изменения в звуке требуют более тонкой градации? Тогда используются два байта. Диапазон значений, который можно закодировать двумя обычными байтами, составляет 216-1, то есть от 0 до 65535. Но в MIDI, как говорилось в предыдущей статье, один бит из байта расходуется по служебной необходимости, поэтому два MIDI-байта дают в наше распоряжение только 14 бит. Но и это уже неплохо: 214 дает 16384 различных значений. Для изменений параметров синтеза этого более чем достаточно.

Мы уже говорили, что два байта составляют машинное слово. На рисунке 2 показана схема «MIDI-слова». Старшие биты обоих байтов заняты (сброшены в 0; напомню, что таким образом приемник может всегда отличить байт данных от статус-байта, в котором старший бит установлен в 1). Биты с 0 по 6 составляют младший значащий MIDI-байт (LSB, Least Significant Byte), c 8 по 14 — старший значащий байт (MSB, Most Significant Byte).

MSB и LSB на практике
Для того, чтобы передать число, большее 127, его нужно преобразовать в два MIDI-байта, то есть в пару MSB:LSB. Предположим, что орган управления (например, колесо) реагирует на самые аккуратные наши движения и может передавать свое положение в диапазоне от 0 до 16383. Мы повернули колесо в положение 11960. Какие MSB и LSB будут сгенерированы?

Число 11960 (шестнадцатеричное 0x2EB8) в двоичной форме записывается как 10111010111000. Для получения LSB нужно взять младшие семь бит (0111000) и дополнить их слева нулевым битом, как признаком байта данных (см. рис. 2, «упаковка»). Получится 00111000 (десятичное 56, шестнадцатеричное 0x38). Для получения MSB берем старшие семь бит (1011101) и также дополняем нулевым старшим битом. Получается 01011101 (десятичное 93, шестнадцатеричное 0x5D). Таким образом, число 11960 в виде пары MSB:LSB записывается как 93:56 (или, в шестнадцатеричном виде, 0x5D:0x38).

На практике, естественно, никто с нулями и единицами не заморачивается. Для упаковки числа в пару MSB:LSB нужно просто разделить число на 128. MSB будет частным от деления, LSB — остатком. Но обычный калькулятор так вот сразу вам частное и остаток не покажет. Поэтому алгоритм такой. Делим 11960 на 128, калькулятор дает 93,4375. Дробную часть отбрасываем, получаем MSB. Умножаем MSB на 128, получаем 11904. Вычитаем это число из исходного (11960 — 11904). Получаем LSB.

Распаковка выполняется с точностью до наоборот: умножаем MSB на 128, а затем прибавляем LSB (93 x 128 + 56 = 11960).

Работая с устройствами, удобнее представлять пару MSB:LSB не как одно большое число, а как результат грубой и тонкой настройки. MSB можно представлять в виде линейки с крупным делением шкалы (128 отрезков, рис. 3). Но если поднести к линейке лупу, то мы увидим, что каждый отрезок состоит еще из 128 частей. Можно представить MSB сантиметрами, а LSB — миллиметрами. Зачастую тонкая настройка не нужна даже для тех параметров, которые ее позволяют. Достаточно «сантиметровой линейки». С помощью нее можно оперировать шагами по 128. Установили MSB в 93, получили значение 11904, установили в 94 — получили 12032. Во многих случаях такой точности вполне достаточно.

Но бывает, параметр нужно задать абсолютно точно. Например, в MIDI предусмотрено до 16384 банков звуков. Команда «выбрать примерно 15-й банк» здесь не пройдет. Нужен точный номер банка, а, следовательно, пара MSB:LSB.

Сообщения RPN и NRPN

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

Определено специальное сообщение Control Change, в байте данных которого передается номер сообщения третьего уровня. Этот номер задается двумя байтами данных: MSB и LSB. Сообщения третьего уровня могут быть двух типов: зарегистрированные параметры (RPN, Registered Parameter Numbers) и незарегистрированные параметры (NRPN, Non Registered Parameter Numbers). Первые кодируются с помощью пары Control Change #101 и Control Change #100, вторые — Control Change #99 и Control Change #98. Таким образом, третий уровень может содержать 16384 зарегистрированных параметров и 16384 незарегистрированных, то есть всего 32768 сообщений.

Спецификация определяет назначение только для зарегистрированных параметров. Незарегистрированные параметры предназначены для свободного использования. Каждый производитель может использовать собственные номера NRPN. Roland и Yamaha использовали эту возможность в своих стандартах GS и XG.

Проблема, которая может возникнуть при использовании NRPN — несовместимость устройств. Так, одно устройство может применять NRPN номер 1 для настройки добротности эквалайзера, а другое — для изменения точки начала петли внутри семпла, и т.д. Поэтому, многие устройства позволяют отключить реакцию на NRPN.

Чтобы отправить сообщение третьего уровня, сначала нужно задать его номер, используя пару MSB: LSB. Например, для сообщения RPN номер 1 эта пара будет иметь вид 0:1. Следовательно, нужно послать в CC#101 значение 0, а в CC#100 — 1. Для передачи значения параметра есть специально выделенное сообщение Control Change под названием Data Entry: Control Change #6 (MSB) и Control Change #38 (LSB). Предположим, нам нужно задать параметру RPN номер 1 значение 500. Пара MSB:LSB в этом случае будет иметь вид 3:116 (128 x 3 + 116 = 500). Посылаем в CC#6 значение 3, а в CC#38 — 116. Если параметр не требует тонкой настройки, достаточно послать только MSB посредством контроллера CC#6.

Если нужно увеличить или уменьшить на единицу ранее переданное значение параметра, то для этого проще воспользоваться сообщениями Data Increment (СС#96) или Data Decrement (CC#97). Передавать заново пару MSB:LSB не нужно. Байт данных в сообщениях Data Increment/Decrement не используется и должен быть равен нулю. Пример использования контроллеров Data Entry и Data Increment/Decrement приведен далее, при рассмотрении конкретных сообщений.

Доступ к параметрам NRPN происходит аналогично, только номер параметра задается парой CC#101:СС#100.

Схема передачи сообщений разного уровня:

midi

Требуемое количество байт:

Сообщения RPN

Сообщение Pitch Bend Sensitivity (#0) задает чувствительность звуковысотного колеса, точнее — диапазон изменения высоты тона от центрального значения. В MSB передаются полутона, в LSB — в центы (цент = полутон/100). Например, для настройки диапазона в +/-3 полутона и 8 центов (на первом MIDI-канале) последовательность байт показана на рис. (если центы не важны, LSB можно не посылать):

Сообщение Channel Fine Tuning (#1) раньше назывался просто Fine Tuning. С помощью него можно подстроить высоту тона для всего канала в центах. Значение 8192 (0x2000) означает стандартную настройку (то есть нота Ля первой октавы имеет частоту 440 Гц). Значение 0 — строй понижается на 100 центов, 16383 (0x7F7F) — повышается на 100 центов.

Например, если мы работаем на седьмом MIDI-канале и хотим понизить строй партии на 15 центов. Рассчитаем, какое значение нужно передать в сообщении Channel Fine Tuning (RPN #1). Стандартной настройке соответствует значение 8192, понижению на 100 центов — 0. Следовательно, для понижения партии на 15 центов нужно 8192 умножить на 15/100. Получится 1228,8. Дробную часть мы передать не можем, поэтому округляем до 1229. Преобразуем это число в MSB и LSB: MSB = 1229 / 128 = 9, LSB = 1229 — (9 x 128) = 77. Последовательность байт показана на рис.:

Если понадобится изменить настройку на 1, можно воспользоваться сообщением Data Increment или Data Decrement, а не посылать MSB и LSB заново (см. рис. ниже). Сообщение Data Increment/Decrement работает по отношению к тому RPN, который последний подвергался настройке (если последним был NRPN, то по отношению к нему).

Сообщение Channel Coarse Tuning (#2) раньше назывался Coarse Tuning. С помощью него строй можно менять шагами по 100 центов (т. е. в полутонах). Используется только MSB: значение 64 (0x40) означает стандартную настройку, значение 0 — строй понижается на 6400 центов (64 полутона), 127 (0x7F) — повышается на 6300 центов (63 полутона).

Сообщения #3 и #4 (Tuning Program Change и Tuning Bank Select соответственно) используются в устройствах, которые отвечают спецификации MIDI Tuning (рассмотрим ее отдельно). Как и тембры, строи организуются в программы и банки. RPN 3 и 4 работают по аналогии с сообщениями Program Change и Bank Select, то есть позволяют выбрать для канала конкретный строй.

Наконец, предусмотрено служебное сообщение RPN Reset (#16383). Представьте такую ситуацию: вы выбрали RPN #1 для тонкой подстройки партии. После чего установили какое-либо значение в центах (путем использования контроллеров Data Entry или Data Increment/Decrement) и спокойно продолжаете работать. Принимающее устройство все это время считает текущим RPN #1, и будет так считать до тех пор, пока явно не будет задан новый RPN сообщениями RPN MSB и RPN LSB.

Если в то время, пока активен RPN #1, случайно будет изменено значение Data Entry или Data Increment/Decrement, то у вас собьется настройка партии! Для того, чтобы избежать подобных случайностей и используется сообщение RPN Reset. После его получения значение «последнего активного RPN» обнуляется, и значения Data Entry и Data Increment/Decrement перестают на него влиять . Обычно рекомендуется всегда посылать RPN Reset после завершения настройки какого-либо RPN.

Пример использования RPN Reset на первом MIDI-канале при понижении стандартной настройки на полутон:

Битовая нумерация

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

Наименее значащий бит

Двоичное представление десятичного 149, с LSB подсвечивается. MSB в 8-битном двоичном числе представляет собой десятичное значение 128. LSB представляет собой значение 1.

В вычислении , то младший значащий бит ( LSB ) является бит положение в двоичном целое число дает значение единицы, то есть определить , является ли число четным или нечетным. LSB иногда называют битом младшего разряда или крайним правым битом из-за принятого в позиционном обозначении правила записи менее значимых цифр дальше вправо. Она аналогична значащая цифра в виде десятичного целого числа, которое является цифрой в них (самом правом) положении. [1]

Обычно каждому биту присваивается номер позиции в диапазоне от нуля до N-1, где N — количество битов в используемом двоичном представлении. Обычно номер бита — это просто показатель степени для соответствующего веса бита в базе 2 (например, в 2 31 ..2 0 ). Некоторые производители ЦП присвоили номера битов противоположным образом (что не то же самое, что и другой порядок следования байтов ). В любом случае, самый младший бит остается однозначным как единичный бит.

Младшие значащие биты (множественное число) — это биты числа, ближайшего к младшему разряду и включающего его. Младшие значащие биты обладают полезным свойством быстро изменяться, если число изменяется даже незначительно. Например, если 1 (двоичный 00000001) добавить к 3 (двоичный 00000011), результатом будет 4 (двоичный 00000100), а три младших бита изменятся (с 011 на 100). Напротив, три старших бита (MSB) остаются неизменными (от 000 до 000). Из-за этой изменчивости наименее значимые биты часто используются в генераторах псевдослучайных чисел , стеганографических инструментах, хэш-функциях и контрольных суммах .

Наименьший бит в цифровой стеганографии

A diagram showing how manipulating the least significant bits of a color can have a very subtle and generally unnoticeable affect on the color. In this diagram, green is represented by its RGB value, both in decimal and in binary. The red box surrounding the last two bits illustrates the least significant bits changed in the binary representation.

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

Наименьший байт

LSB также может обозначать наименее значимый байт . [2] Значение аналогично приведенному выше: это байт (или октет ) в той позиции многобайтового числа, которая имеет наименьшее потенциальное значение.

Старший бит

Двоичное представление десятичного числа 149 без знака с выделенным старшим битом. MSB в 8-битном двоичном числе без знака представляет собой десятичное значение 128. LSB представляет собой значение 1.

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

Знаковый бит является MSB в двоичном числа . В обозначении дополнения до единицы и двух «1» означает отрицательное число, а «0» означает положительное число.

Обычно каждому биту присваивается номер позиции в диапазоне от нуля до N-1, где N — количество битов в используемом двоичном представлении. Обычно назначенный номер бита — это просто показатель степени для соответствующего веса бита в основании 2 (например, в ). Некоторые производители ЦП по-разному назначают номера битов. Вне зависимости от нумерации, то MSB остается наиболее значащий бит. 2 31 ..2 0

Старший байт

MSB также может означать « старший байт ». [3] Значение аналогично приведенному выше: именно байт (или октет ) в той позиции многобайтового числа имеет наибольшее потенциальное значение.

Чтобы избежать этой двусмысленности, часто используются менее сокращенные термины « MSbit » или « MSbyte ». [4] [5] [6]

Пример беззнакового целого числа

Эта таблица иллюстрирует пример десятичного значения 149 и расположение LSB. В этом конкретном примере позиция значения единицы (десятичная 1 или 0) находится в позиции бита 0 (n = 0). MSB обозначает наиболее значимый бит, а LSB обозначает наименьший значимый бит.

Двоичный (десятичный: 149) 1 0 0 1 0 1 0 1
Битовый вес для данной битовой позиции n (2 n ) 2 7 2 6 2 5 2 4 2 3 2 2 2 1 2 0
Метка битовой позиции MSB Младший бит

Позиция LSB не зависит от того, как передается позиция бита (некоторые системы сначала передают MSB, а другие сначала передают LSB), что больше относится к теме Endianness .

Сначала старший и младший бит

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

Большинство значащего бита означает , что самый значимый бит будет прибывающим первым: следовательно , например, шестнадцатеричное число 0x12 , 00010010 в двоичном представлении, поступят в виде последовательности 0 0 0 1 0 0 1 0 .

Первый младший бит означает, что младший бит прибудет первым: следовательно, например, то же шестнадцатеричное число 0x12 , опять же 00010010 в двоичном представлении, прибудет как (обратная) последовательность 0 1 0 0 1 0 0 0 .

Нумерация битов LSB 0

LSB 0: контейнер для 8-битного двоичного числа с выделенным младшим значащим битом, которому назначен бит номер 0.

Когда нумерация битов начинается с нуля для младшего значащего бита (LSB), схема нумерации называется «LSB 0». [7] Этот метод битовой нумерации имеет то преимущество, что для любого беззнакового числа значение числа может быть вычислено с использованием возведения в степень с битовым номером и основанием 2. [8] Таким образом, значение двоичного целого числа без знака равно

∑ я знак равно 0 N — 1 б я ⋅ 2 я ^ b_ \ cdot 2 ^ >

где b i обозначает значение бита с номером i , а N обозначает общее количество битов.

Нумерация битов MSB 0

MSB 0: контейнер для 8-битного двоичного числа с выделенным старшим значащим битом, которому назначен бит номер 0

Точно так же, когда нумерация битов начинается с нуля для самого старшего бита (MSB), схема нумерации называется «MSB 0».

Таким образом, значение двоичного целого числа без знака равно

∑ я знак равно 0 N — 1 б я ⋅ 2 N — 1 — я ^ b_ \ cdot 2 ^ >

Algol 68 «сек эля оператор эффективен„старший бит 1 битой нумерация“ , как биты пронумерованы слева направо, причем первый бит (биты Эль 1) быть„самым старшим бит“, и выражение (биты эль биты ширина) давая «младший значащий бит». Точно так же, когда биты приводятся (приведение типов) к массиву логических значений ([] bool bits), первый элемент этого массива (биты [ lwb биты]) снова является «наиболее значимым битом».

Для нумерации MSB 1 значение двоичного целого числа без знака равно

∑ я знак равно 1 N б я ⋅ 2 N — я ^ b_ \ cdot 2 ^ >

PL / I нумерует BIT- строки, начиная с 1 для крайнего левого бита.

Функция Fortran BTEST использует нумерацию LSB 0.

Применение

Процессоры с прямым порядком байтов обычно используют нумерацию битов «LSB 0», однако оба соглашения о нумерации битов можно увидеть в машинах с прямым порядком байтов . Некоторые архитектуры, такие как SPARC и Motorola 68000, используют нумерацию битов «LSB 0», в то время как S / 390 , PowerPC и PA-RISC используют «MSB 0». [9]

Рекомендуемый стиль для документов запроса комментариев (RfC) — это нумерация битов «MSB 0». [10] [11]

Нумерация битов обычно прозрачна для программного обеспечения , но некоторые языки программирования, такие как Ada, и языки описания оборудования, такие как VHDL и verilog, позволяют указать соответствующий порядок битов для представления типа данных. [12]

Смотрите также

  • ARINC 429
  • Двоичная система счисления
  • Знаковые представления чисел
  • Два дополнения
  • Порядок байтов
  • Двоичный логарифм
  • Единица на последнем месте (ULP)
  • Найти первый набор
  • MAC-адрес: нотация с инверсией битов

Рекомендации

  1. ^ «Порядок битов форматов IBM SNA противоположен соглашению Intel» . Microsoft . 2014-02-23.
  2. ^
  3. Бучинский, Дон (05.09.2002). «Учебник MSB / LSB» . [ самостоятельно опубликованный источник? ]
  4. ^
  5. Роуз, Маргарет (сентябрь 2005 г.). «старший бит или байт» . TechTarget .
  6. ^
  7. II, Патрик Дж. Суини (11 марта 2010 г.). RFID для чайников . Джон Вили и сыновья. ISBN 9781118054475 .
  8. ^
  9. «Формат растрового изображения амулета» . web.mit.edu . Проверено 25 февраля 2018 .
  10. ^
  11. «Память MAYHEM! Память, порядок байтов и выравнивание» . www.cs.umd.edu . Проверено 25 февраля 2018 .
  12. ^
  13. Лэнгдон, Глен Г. (1982). Компьютерный дизайн . Computeach Press Inc. стр. 52 . ISBN 0-9607864-0-6 .
  14. ^
  15. «Битовые числа» . Проверено 30 марта 2021 .
  16. ^
  17. Дэвид В. Джеймс (июнь 1990 г.). «Мультиплексные автобусы: войны с порядком байтов продолжаются». IEEE Micro . 10 (3): 9–21. DOI : 10.1109 / 40.56322 . ISSN 0272-1732 . S2CID 24291134 . их первые биты и полубайты поступали от микросхем ALU , которые отображают ноль (0) в младший бит. (. ) некоторые (в противном случае) конструкторы с прямым порядком байтов настаивают на использовании нотации с прямым порядком байтов для описания битов и нотации с прямым порядком байтов для описания байтов. (. ) Обратите внимание, что IBM (на S / 360 и 370 ) и Hewlett-Packard (на процессоре PA-RISC ) последовательно сопоставляют ноль с MSB
  18. ^
  19. Скотт, Грегор (июнь 1998 г.). «RFC 2360 — Руководство для разработчиков Интернет-стандартов» . Инженерная группа Интернета (IETF). п. 11 . Проверено 14 февраля 2010 . Предпочтительная форма для диаграмм пакетов — это последовательность длинных слов в сетевом порядке байтов, где каждое слово горизонтально на странице, а нумерация битов вверху.
  20. ^
  21. «RFC 1166 — ИНТЕРНЕТ-НОМЕРА» . Инженерная группа Интернета (IETF). Июль 1990 г. с. 1 . Проверено 11 июня 2014 . Всякий раз, когда октет представляет числовую величину, крайний левый бит на диаграмме является старшим или наиболее значимым битом.
  22. ^
  23. Норман Х. Коэн (январь 1994 г.). «Условия представления записей, не зависящие от порядка байтов» (PDF) . Письма Ады . ACM SIGAda. XIV (1): 27–29. DOI : 10.1145 / 181492.181493 . ISSN 1094-3641 . S2CID 31612852 . Проверено 20 декабря 2008 .

Внешние ссылки

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *