Во-первых, не сбивайтесь с толку тем, что хранится в каждом сегменте — это только запутает вас. Проблема только в том, чтобы попросить вас вычислить шестнадцатеричную нумерацию, и это не так уж сложно. Вот требования:
- 64 КБ общей памяти
- Первые 16 байт адресного пространства (начиная с адреса 0x0000) зарезервированы для регистров специальных функций (IE1, IE2, IFG1, IFG2 и т. д.)
- Следующие 240 байт зарезервированы для 8-битных периферийных устройств.
- Следующие 256 байт зарезервированы для 16-битных периферийных устройств.
- Объем оперативной памяти составляет 2 Кбайта и начинается с адреса 0x1100.
- В верхней части адресного пространства находится 56 КБ флэш-памяти, зарезервированной для кода и таблицы векторов прерываний.
Поскольку каждая шестнадцатеричная цифра в вашем адресе памяти может обрабатывать 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 и заканчиваться в верхнем конце области памяти.
Я надеюсь, что это более понятно, хотя, когда я читаю это, я не знаю, поможет ли это вообще :( Может быть, поэтому я оставлю преподавание этой концепции кому-то более квалифицированному...
person
SqlRyan
schedule
10.05.2010