3

У меня есть вопрос об архитектуре процессора 32-битных и 64-битных систем.

Когда вы работаете с 64-битной системой, я предполагаю, что это означает, что у вас есть 64-битная адресная шина байтово-адресуемой памяти и 64-битные регистры в самом CPU.

Один из регистров является регистром команд, который содержит текущую инструкцию, которая выполняется. Этот регистр также имеет ширину 64 бита.

Мои вопросы

Как это возможно, что инструкция шириной 64 бита может содержать ссылку на адрес 64 бита, чтобы загрузить ее в регистр ЦП? Регистр инструкций имеет ширину всего 64 бита, поэтому для кода операции больше не будет места?

Кроме того, когда адрес памяти относится к байту памяти (максимальное целое число 2 ^ 8 - 1), как тогда можно выразить 64-битные целые числа?

И что делает ALU, когда он складывает 2 64-битных целых числа с результатом, который не может быть выражен в 64-битном целом числе?

1 ответ1

2

Как это возможно, что инструкция шириной 64 бита может содержать ссылку на адрес 64 бита, чтобы загрузить ее в регистр ЦП?

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

Регистр инструкций имеет ширину всего 64 бита, поэтому для кода операции больше не будет места?

Как правило, полная инструкция по сборке выглядит примерно так: «ADD AX, BX». (Детали могут различаться в зависимости от того, какой ассемблер используется.) В этом случае ЦП затем примет значение регистра AX, добавит его к значению регистра BX и сохранит результаты. Например, если AX хранит 2, а BX хранит 7, то результатом может быть AX-хранилище 9. (Это 16-битная версия: для 64-битной вы можете использовать RAX вместо AX.)

Кроме того, когда адрес памяти относится к байту памяти (максимальное целое число 2 ^ 8 - 1), как тогда можно выразить 64-битные целые числа?

Адрес памяти, как и физический адрес, в котором находится дом, просто указывает на место памяти. 64-разрядное целое число не будет сохранено полностью в 1 байт; это заняло бы 8 байтов.

И что делает ALU, когда он складывает 2 64-битных целых числа с результатом, который не может быть выражен в 64-битном целом числе?

Он просто сохраняет результаты, которые он может в пределах 64 битов, которые он находит доступными. Однако он также отображает флаг "переполнения". Программист может проверить, был ли изменен флаг "переполнения", и понять, что результаты превысили 64 бита, и, следовательно, результаты не полностью сохраняются в регистре.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .