Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
мк экз.docx
Скачиваний:
21
Добавлен:
01.04.2022
Размер:
2.93 Mб
Скачать

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

Представим, что необходимо просмотреть содержимое некотоpых байт в памяти. Требуется oпределить содержимое четырех последовательных байт (двух слов), которые имеют двоичные значения. Так как четыре байта включают в себя 32 бита, то специалисты разработали «стенографический» метод представления двоичных данных. По этому методу каждый байт делится пополам и каждые полбайта выражаются соответствующим значением. Рассмотрим следующие четыре байта:

Двоичное: 0101 1001 0011 0101 1011 1001 1100 1110

Десятичное: 5 9 3 5 11 9 12 14

Так как здесь для некоторых чисел требуется две цифры, расширим систему счисления так, чтобы 10=A, 11=B, 12=C, 13=D, 14=E, 15=F. Таким образом получим более сокращенную форму, которая представляет содержимое вышеуказанных байт:

59 35 B9 CE

Такая система счисления включает «цифры» от 0 до F, и так как таких цифр 16, она называется шестнадцатеричным представлениeм.

Шестнадцатеричный формат нашел большое применение в языке Ассемблера. В листингах ассемблирования программ в шестнадцатеричном формате показаны все адреса, машинные коды команд и содержимое констант. Также для отладки при использовании программы DOS DEBUG адреса и содержимое байтов выдается в шестнадцатеричном формате.

В случае, если немного поработать с шестнадцатеричным форматом, то можно быстро привыкнуть к нему. Рассмотрим несколько простых примеров шестнадцатеричной арифметики. Следует помнить, что после шестнадцатеричного числа F следует шестнадцатеричное 10, что равно десятичному числу 16.

Заметьте также, что шестнадцатеричное 20 эквивалентно десятичному 32, шестнадцатеричное 100 — десятичному 256 и шестнадцатеричное 100 — десятичному 4096.

Шестнадцатеричные числа записываются, например, как шест. 4B, двоичные числа как дв.01001011, а десятичные числа, как 75 (отсутствие какого-либо описания предполагает десятичное число). Для индикации шестнадцатеричные числа в ассемблерной программе непосредственно после числа ставится символ H, например, 25H (десятичное значение 37). Шестнадцатеричное число всегда начинается с деcятичной цифры от 0 до 9, таким образом, B8H записывается как 0B8H.

Сегменты

Сегментом называется область, которая начинается на границе параграфа, то есть, по любому адресу, который делится на 16 без остатка. Хотя сегмент может располагаться в любом месте памяти и иметь размер до 64 Кбайт, он требует столько памяти, cколько необходимо для выполнения программы.

Сегмент кодов

Регистр сегмента кодов (CS) адресует данный сегмент.

Сегмент данных

Регистр сегмента данных (DS) адресует данный сегмент.

Сегмент стека

Стек содержит адреса возврата как для программы для возврата в операционную систему, так и для вызовов подпрограмм для возврата в главную программу. Регистр сегмента стека (SS) адресует данный сегмент.

Еще один сегментный регистр, регистр дополнительного сегмента (ES), предназначен для специального использования. Последовательность регистров и сегментов на практике может быть иной.

Три сегментных регистра содержат начальные адреса соответствующих сегментов и каждый сегмент начинается на границе параграфа.

Внутри программы все адреса памяти относительны к началу cегмента. Такие адреса называются смещением от начала сегмента. Двухбайтовое смещение (16-бит) может быть в пределах от шест.0000 до шест.FFFF или от 0 до 65535. Для обращения к любому адресу в программе, компьютер складывает адрес в регистре сегмента и смещение. Например, первый байт в сегменте кодов имеет смещение 0, второй байт — 01 и так далее до смещения 65535.

В качестве примера адресации, допустим, что регистр сегмента данных содержит шест.045F и некоторая команда обращается к ячейке памяти внутри сегмента данных со смещением 0032. Несмотpя на то, что регистр сегмента данных содержит 045F, он указывает на адрес 045F0, то есть, на границе параграфа. Действительный адрес памяти поэтому будет следующий:

Адрес в DS: 045F0

Смещение: 0032

Реальный адрес: 04622

Каким образом процессоры адресуют память в один миллион байт?

В регистре содержится 16 бит. Так как адрес сегмента всегда на границе параграфа, младшие четыре бита адреса pавны нулю.

Шест.FFF0 позволяет адресовать до 65520 (плюс смещение) байт. Но специалисты решили, что нет смысла иметь место для битов, которые всегда равны нулю.

Поэтому адрес хранится в cегментном регистре как шест. nnnn, а компьютер полагает, что имеются еще четыре нулевых младших бита (одна шест. цифра), то есть, шест.nnnn0. Таким образом, шест.FFFF0 позволяет адресовать до 1048560 байт.

В случае, если вы сомневаeтесь, то декодируйте каждое шест.F как двоичное 1111, учтите нулевые биты и сложите значения для единичных бит.

4