Может ли адрес быть отрицательным в непосредственном поле I-типа RIS C -V? - PullRequest
0 голосов
/ 05 апреля 2020

Я узнал, что в RICS_V ISA «subi» не требуется, и непосредственное поле представляет целое число, равное двум, для выполнения всей операции.

Мой вопрос заключается в том, можно ли представить непосредственную часть в виде Отрицательное число тогда мы могли бы также представить адреса как отрицательное целое число?

1 Ответ

1 голос
/ 05 апреля 2020

Может ли адрес быть отрицательным в непосредственном поле RIS C -V I-типа?

В этом непосредственном поле не хранятся адреса - оно слишком короткое для сделай это. Он хранит средние-малые целые числа и подписан расширенным в использовании, так что он может содержать положительные и отрицательные целые числа.

Я узнал, что в RICS_V ISA «subi» не требуется, и непосредственное поле представляет целое число, дополняющее два, для выполнения операции в целом.

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

Мой вопрос, может ли непосредственная часть быть представленный как отрицательное число, тогда можем ли мы также представить адреса как отрицательное целое число?

Последний элемент не следует из первого.

Система памяти имеет адресную шину, которая это просто упорядоченный массив битов. На адресной шине не учитываются знаки или отрицательные значения - MSB рассматривается как большая величина, а не как знаковый бит. Таким образом, мы рассматриваем адреса как числа без знака.

Однако ничто не мешает вам интерпретировать (например, печатать) адрес памяти как целое число со знаком.


2 дополняющее представление для числа со знаком означают, что при сложении, умножении, вычитании или сравнении чисел со знаком возникают те же битовые комбинации, что и при выполнении тех же операций с использованием чисел без знака. Поскольку битовые комбинации результатов одинаковы, реальная разница заключается в определении переполнения, так как числа со знаком и числа без знака переполняются по-разному.

Мы должны использовать арифметику без знака c для адресов, поскольку без знака имеет правильное значение Критерии переполнения: значение всех 1 - это большое положительное число, которое при увеличении переполняется и становится равным 0.

В отличие от этого, если мы используем подписанную арифметику c для адресов, мы не получим переполнение при переходе от всех 1 до 0, хотя мы должны. Кроме того, мы получим переполнение, когда не должны, если мы добавим 1 к 01111 ... 111, получив 10000 ... 000.


Обратите внимание, что во многих случаях мы не беспокоимся о проверке переполнения, особенно с адресами и арифметикой указателей c. Если программа верна, то при вычислении адреса некоторой памяти, которую мы знаем, существует, вычисление не будет переполнено. Поэтому важно убедиться, что выделение памяти успешно выполнено.

...