Как сохранить номер базы 2 в реестре? - PullRequest
0 голосов
/ 22 декабря 2018

но мой инструктор не отвечает.У меня есть дополнительный вопрос по кредиту для программы MIPS:

Extra credit covers binary to ASCII data type conversion. It is useful 
to convert the 2’s complement integer into an ASCII string so that it
can be displayed on the monitor. Derive a binary-to-ASCII conversion
routine, BinarytoASCII, for converting a 2’s complement integer stored 
in a0 register into an ASCII string stored in v0 register. The value 
initially in a0 is restricted to be within the range -999 to +999. After   
the algorithm completes execution, v0 contains the sign of the value 
initially stored in a0. The following three bytes contain the three 
ASCII codes corresponding to the three decimal digits representing its
magnitude. This algorithm always produces a string of four characters 
independent of the sign and magnitude of the integer being converted.

Может быть, я неправильно читаю эту проблему, но не невозможно ли сохранить двоичное значение непосредственно в регистре в MIPS?Кажется, что это требует десятичного преобразования в ASCII.Если я не прав, можете ли вы показать, как поместить номер base-2 в реестр в MIPS?спасибо

1 Ответ

0 голосов
/ 22 декабря 2018

Числа в регистрах в двоичном виде .Вот почему 32-битный регистр может хранить значения со знаком -2^31 .. 2^31-1, используя кодировку дополнения 2.https://en.wikipedia.org/wiki/Two%27s_complement

Если собственный формат хранения в регистре был десятичным, сдвиги влево и вправо будут умножаться / делиться на степени 10, а не на степени 2.


Кодированиеотделен от стоимости.При заданном битовом массиве 0b11111111111111111111110000011001 в 32-битном регистре вы можете описать / представить закодированное значение как

  • -999 десятичное, интерпретируя его как дополнение со знаком 2
  • 0xfffffc19 шестнадцатеричный беззнаковый
  • 037777776031 восьмеричный
  • 0b11111111111111111111110000011001 двоичный

Это все одно и то же число, просто разные способы выражения либо математическогозначение (как отрицательное десятичное число), или битовый шаблон дополнения 2 (шестнадцатеричный, восьмеричный и двоичный).

Обычно шестнадцатеричный используется только для описания битового шаблона, поэтому вы обычно не видитеотрицательное шестнадцатеричное число, например -0x3e7.


Это распространенное заблуждение, что числа в регистрах или в памяти «в шестнадцатеричном формате».Шестнадцатеричный формат - это формат сериализации для двоичных чисел, позволяющий хранить их в виде текста в удобочитаемом формате.Число только в шестнадцатеричном виде, если оно хранится в виде последовательности символов ASCII.

Строка десятичных цифр ASCII - это еще один способ сериализации чисел, и это то, что вас просят сделать здесь.

Шестнадцатеричные и десятичные обычно используются в исходном коде asm, но ассемблер соберет ваши числа в 32-битные двоичные слова.(Или 16-битный непосредственно как часть потока команд, для чего-то вроде addiu $t0, $t1, 0x1234)

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

...