Для начала, не сбрасывайте со счетов то, что хранится в каждом сегменте - это только сбьет вас с толку. Проблема состоит в том, чтобы просто попросить вас вычислить шестнадцатеричную нумерацию, и это не так уж сложно. Вот требования:
- 64 КБ общей памяти
- Первые 16 байтов адресного пространства (начиная с адреса 0x0000) зарезервированы для регистров специальных функций (IE1, IE2, IFG1, IFG2 и т. Д.)
- Следующие 240 байт зарезервированы для 8-разрядных периферийных устройств
- Следующие 256 байтов зарезервированы для 16-разрядных периферийных устройств
- Объем оперативной памяти составляет 2 Кбайт и начинается с адреса 0x1100
- В верхней части адресного пространства находится 56KB флэш-памяти, зарезервированной для таблицы кодов и векторов прерываний.
Поскольку каждая шестнадцатеричная цифра в вашем адресе памяти может обрабатывать 16 значений (0-F), вам потребуется 4 цифры для отображения 64 КБ памяти (16 ^ 4 = 65536 или 64 КБ).
Вы начинаете с 16 байтов, и это охватывает 0x0000 - 0x000F (одна полная цифра вашего адреса). Это означает, что следующий сегмент, который начинается сразу после него (8-разрядные устройства), начинается с 0x0010 (следующий байт), а поскольку его длина составляет 240 байт, он заканчивается байтом 256 (240 + 16) или 0x00FF.
Следующий сегмент (16-разрядные устройства) начинается со следующего байта, который составляет 0x0100, и имеет длину 256 байтов, что ставит конец в 0x01FF.
Затем идет 2 КБ (2048 байт) оперативной памяти, но она начинается с 0x1100, как указано в описании, а не сразу после предыдущего сегмента, так что это ваш начальный адрес. Добавьте к этому 2048, и вы получите 0x18FF.
Последний сегмент охватывает верхнюю часть памяти, поэтому вам придется работать в обратном направлении. Вы знаете, что он заканчивается на 0xFFFF (конец доступной памяти) и имеет длину 56 КБ. Если вы конвертируете 56КБ в гекс, это 0xDFFF. Если вы представите, что этот сегмент начинается с 0, то 2000 не используются (0xE000-0xEFFF и 0xF000-0xFFFF), так что вы знаете, что этот сегмент должен начинаться с 0x2000 до конца в верхнем конце пространства памяти.
Надеюсь, это более понятно, хотя, когда я перечитываю это, я не знаю, что это вообще поможет :( Может быть, поэтому я оставлю преподавание этой концепции кому-то более квалифицированному ...