Как 8-битный компьютер или «cpu» интерпретируют числа, превышающие 255?

Хорошо, поэтому я искал это, но я не могу найти ничего, что связано с этим.
Я знаю, что если число больше 255, компьютер использует новый блок памяти из 8 бит ( 1 байт ) для хранения большого числа.

Итак, скажем, я хочу, чтобы компьютер добавил 255 + 7 . Это даст мне 262 в базе 10, но в двоичном коде это должно быть:

00 00 <- до
01 06 <- после
(Это в шестнадцатеричной форме btw)

Как компьютер будет декодировать эти 2 байта обратно в форму 10 / десятичную форму базы, если компьютер не может добавить 6 и 256, потому что 255 – это наибольшее число, к которому он может добавить. Как компьютер сделает этот 2- байтовый ответ / результат отображаемым как 262 на экране?

One Solution collect form web for “Как 8-битный компьютер или «cpu» интерпретируют числа, превышающие 255?”

Во-первых, см. Комментарий Аганджу ниже вопроса.

Теперь о том, как компьютер может отслеживать это, я могу дать вам свои знания из 16-битного программирования. Понятия, вероятно, совпадают. (Тем не менее, точный точный ответ может быть зависимым от реализации. Другими словами, люди, которые разрабатывают чипы, могут, по крайней мере теоретически, принимать различные решения о том, как это работает.)

Когда вы добавляете два числа с 8 бит, наибольшее количество вы можете получить (0xFF + 0xFF = 1FE). Фактически, если вы умножаете два числа, которые являются 8-битными, наибольшее количество, которое вы можете получить (0xFF * 0xFF = 0xFE01), по-прежнему составляет 16 бит, что вдвое больше, чем 8 бит.

Теперь вы можете предположить, что 8-разрядный процессор может отслеживать только 8 бит. Это неверно. 8-разрядный процессор получает данные в 8-битных кусках. (Эти «куски» обычно имеют формальный термин: «слово». На 8-битном процессоре используются 8-битные слова. В 64-битном процессоре могут использоваться 64-битные слова.)

Итак, когда вы даете компьютеру 3 байта:
Байт # 1: инструкция MUL
Байт # 2: байты верхнего порядка (например, 0xA5)
Байт # 3: байты нижнего порядка (например, 0xCB)
Компьютер может генерировать результат, который составляет более 8 бит. CPU может генерировать такие результаты:
0100 0000 0100 0010 xxxx xxxx xxxx xxxx 1101 0111
иначе:
0x4082xxxxD7
Теперь позвольте мне интерпретировать это для вас:
0x означает, что следующие цифры являются шестнадцатеричными.
Я буду обсуждать «40» более подробно на мгновение.
82 является частью регистра «A», который представляет собой серию из 8 бит.
Xx и xx являются частью двух других регистров, называемых регистром «B» и регистром «C».
D7 будет вписываться в большее количество бит, называемый регистром «D».
Регистр – всего лишь часть памяти. Регистры встроены в ЦП, поэтому ЦПУ может обращаться к регистрам без необходимости взаимодействовать с памятью на палке RAM.

Таким образом, математический результат 0xA5 раз 0xCB равен 0x82D7.

Теперь, почему биты разделились на регистры A и D вместо регистров A и B или регистров C и D? Ну, еще раз, это пример сценария, который я использую, который должен быть похож на концепцию на реальный язык ассемблера (16-разрядная версия Intel x86, используемая Intel 8080 и 8088 и многие новые процессоры). Могут быть некоторые общие правила, такие как регистр «C», обычно используемый как индекс для операций подсчета (типичный для циклов), а регистр «B» используется для отслеживания смещений, которые помогают указывать места памяти. Таким образом, «A» и «D» могут быть более распространены для некоторых общих арифметических функций.

Каждая инструкция ЦП должна иметь некоторую документацию, которую используют люди, которые программируют в Assembly. В этой документации следует указать, какие регистры будут использоваться каждой инструкцией. (Таким образом, выбор, который позволяет использовать регистры, часто задают разработчики CPU, а не программисты на языке Ассамблеи. Хотя, может быть и некоторая гибкость.)

Теперь вернемся к «40» в приведенном выше примере: это серия бит, которую часто называют «регистром флагов». Каждый бит в регистре флагов имеет имя. Например, есть бит «переполнения», который CPU может установить, если итоговое значение больше, чем пространство, в котором может храниться один байт результатов. (Бит «переполнения» часто может упоминаться сокращенным названием «OF». Это капитал o, а не ноль.) Программное обеспечение может проверить значение этого флага и заметить «проблему». Работа с этим битом часто обрабатывается невидимыми языками более высокого уровня, поэтому начинающие программисты часто не узнают о том, как взаимодействовать с флагами CPU. Однако программисты Ассамблеи могут обычно обращаться к некоторым из этих флагов так же, как и другие переменные.
Например, у вас может быть несколько инструкций ADD. Одна инструкция ADD может хранить 16 бит результатов в регистре A и в регистре D, в то время как другая команда может просто сохранить 8 младших бит в регистре A, игнорировать регистр D и указать бит переполнения. Затем, позже (после сохранения результатов регистра A в основной ОЗУ), вы можете использовать другую инструкцию ADD, которая хранит только 8 старших бит в регистре (возможно, регистр A). Следует ли вам использовать флаг переполнения, может Зависит от того, какую команду умножения вы используете.

(Обычно также есть флаг «underflow», если вы вычтите слишком много, чтобы соответствовать желаемому результату.)

Просто, чтобы показать вам, как получилось сложное:
Intel 4004 был 4-разрядным процессором
Intel 8008 был 8-битным процессором. Он имел 8-битные регистры с именами A, B, C и D.
Intel 8086 был 16-разрядным процессором. Он имел 16-разрядные регистры с именем AX, BX, CX и DX.
Intel 80386 был 32-битным процессором. Он имел 32-разрядные регистры с именем EAX, EBX, ECX и EDX.
Процессоры Intel x64 имеют 64-разрядные регистры с именами RAX, RBX, RCX и RDX.
Чипы x64 могут запускать 16-разрядный код (в некоторых режимах работы) и могут интерпретировать 16-разрядные инструкции. При этом биты, составляющие регистр AX, составляют половину бит, составляющих регистр EAX, которые составляют половину бит, составляющих регистр RAX. Поэтому в любое время, когда вы меняете значение AX, вы также меняете EAX и RAX, потому что эти биты, используемые AX, являются частью бит, используемого RAX.
Есть больше флагов и регистров, чем те, о которых я упоминал.
Теперь, если вы работаете с 8-разрядным процессором, когда вы пишете в память, вы можете найти некоторые ограничения на возможность ссылаться на адрес 8-битных, а не на адрес 4 бит или 16 бит. Детали будут различаться в зависимости от процессора, но если у вас есть такие ограничения, тогда CPU может иметь дело с 8-битными словами, поэтому процессор чаще всего называют «8-разрядным ЦП».

Давайте будем гением компьютера.