биты, байты, слова, параграфы...Компьютер работает в двоичной системе счисления - минимальным информационным элементом является бит, который может принимать значение 0 или 1. Этим значениям соответствуют различимые физические состояния ячейки, чаще всего - уровень напряжения (низкий или высокий). Биты организуются в более крупные образования - ячейки памяти и регистры. Каждая ячейка памяти (регистр) имеет свой адрес, однозначно ее идентифицирующий в определенной системе координат. Минимальной адресуемой (пересылаемой между компонентами компьютера) единицей информации является байт, состоящий, как правило, из 8 бит1. Два байта со смежными адресами образуют слово (word) разрядностью 16 бит, два смежных слова образуют двойное слово (double word) разрядностью 32 бита, два смежных двойных слова образуют учетверенное слово (quad word) разрядностью 64 бита. В двухбайтном слове принят LH-порядок следования байт: адрес слова указывает на младший байт L (Low), а старший байт Н (High) размещается по адресу, на единицу большему. В двойном слове порядок будет аналогичным - адрес укажет на самый младший байт, после которого будут размещены следующие по старшинству. Этот порядок, естественный для процессоров Intel, применяется не во всех других микропроцессорных семействах. Байт (8 бит) делится на пару тетрад (nible): старшую тетраду - биты [7:4] и младшую тетраду - биты [3:0]. В технической документации, электрических схемах и текстах программ могут применяться разные способы представления чисел.
В таблице приведены разные представления одной тетрады (4 бит). Чтобы перевести любое 8-битное число в десятичное, нужно десятичный эквивалент старшей тетрады умножить на 16 и сложить с эквивалентом младшей тетрады. Для нашего примера A5h=10x16+5=165. Обратный перевод тоже несложен: десятичное число делится на 16, целая часть даст значение старшей тетрады, остаток - младшей.
В "наследство" от процессоров 8086/88 достался своеобразный способ задания адреса ячейки памяти в виде указателя "seg:offset", состоящего из двух слов: сегмента (seg - segment) и смещения (offset). Такая запись предполагает вычисление полного адреса по формуле addr=16xseg+offset. Такое представление 20-битного адреса двумя 16-битными числами в процессорах 8086/88 поддерживается и в реальном режиме всех последующих процессоров х86 (подробнее об адресации памяти см. в п. 5.2.2). Здесь сегмент указывает адрес параграфа -16-байтной области памяти. Выравнивание адреса по границе параграфа означает, что он кратен 16 (4 младших бита нулевые). Нетрудно видеть, что один и тот же адрес можно задавать разными сочетаниями этих двух компонентов. Так, например, адрес начала области данных BIOS (BIOS Data Area) 00400h представляют как 0000:0400, так и 0040:0000 (шестнадцатеричное представление подразумевается). Возможны и другие варианты, но их не используют. В данной книге в основном будем пользоваться первым способом, причем нулевое значение сегмента будем представлять кратко, то есть 0:0400. Обозначение и порядок бит и байт шин адреса и данных, принятое в аппаратуре PC, пришло от процессоров Intel 8086/88 (и даже от 8080). Самый младший бит LSB (Least Significant Bit) имеет номер 0, старший (MSB - Most Significant Bit) бит байта - 7, слова - 15, двойного слова -31. На рисунках принято старший бит изображать слева, а младший - справа. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||