Минимальное количество бит для представления -130 в 8086?

Мне нужно знать минимальное количество битов, необходимое для представления 130 и -130 в 8086.

  • Для 130 (ussigned): это будет без знака, поэтому оно представлено нормально. 130 = 0x82 = 1000 0010b В этом случае ответ будет 8 бит
  • Для -130 (со знаком): отрицательное число в 8086 является вторым дополнением к используемому числу плюс 1. Таким образом, первое дополнение (не 0x82): 0111 1101b и плюс 1 будет 0111 1110b = 0x7E. По моему мнению, вам потребуется минимум всего 7 бит для представления -130. Правильно ли это? Если число отрицательное, разве не должен быть включен последний бит, чтобы знать, что знак отрицательный? Для этого потребуется более 7 бит.

Если кто-то точно знает ответ, сообщите, пожалуйста.


person user1812076    schedule 18.02.2015    source источник
comment
Вам нужно указать диапазон для этого вопроса, чтобы иметь смысл. Итак, вы хотите представить все числа {-130,..., 130}? Кроме того, количество битов для представления диапазона чисел не зависит от архитектуры (вы всегда можете сохранить значения после добавления или вычитания некоторого смещения). Предполагая, что вы имеете в виду этот диапазон, вам потребуется ceil(log_2(130-(-130)+1)) бит, что равно 9.   -  person DCTLib    schedule 18.02.2015
comment
Ну, это вопрос в основном, он странный, я знаю, поэтому я задал его здесь. Это вопрос для экзамена по ассамблее, и это в основном все, что я знаю. Вероятно, нужно было знать, может ли он быть представлен 1 байтом или словом (AL или AX). Ответ заключается в том, чтобы узнать минимальное количество битов, чтобы посмотреть, может ли кто-нибудь посмотреть на вопрос под другим углом.   -  person user1812076    schedule 18.02.2015
comment
Вы можете кодировать числа так, как хотите. Различение между +130 и -130 требует только одного бита. Но если вы хотите иметь возможность кодировать диапазон чисел между -130..+130, 261 различных значений, вам нужно log2(261) = 9 бит.   -  person Hans Passant    schedule 18.02.2015


Ответы (1)


При взятии дополнения числа до двух необходимо

  • поместить бесконечное количество нулевых битов слева
  • инвертировать все биты
  • добавить 1
  • удалить некоторые из бесконечного числа 1 бит, если это необходимо

Применим это к числу -130. Битовый шаблон для 130

1000 0010

После размещения бесконечного числа 0 слева это

0000 0000 1000 0010

Итак, восемь немного меньше бесконечности, но вы поняли идею. Далее инвертируйте, чтобы получить

1111 1111 0111 1101

и добавьте 1, чтобы получить

1111 1111 0111 1110

На этом этапе вы можете удалить некоторые из бесконечных единиц слева, но вы должны оставить хотя бы одну из них. Таким образом, самое короткое представление с дополнением до двух для -130 требует 9 бит.

1 0111 1110

Если вопрос, какой размер регистра нужен на процессоре x86, то ответ — 16-битный регистр.

person user3386109    schedule 18.02.2015
comment
Вау, спасибо ! теперь звучит лучше. Так что в основном мне понадобится AX для его представления. Тем не менее ... если я делаю mov al, -130, это не дает никакой ошибки, и я думаю, что должно ... -130 не помещается только в 8-битный регистр. - person user1812076; 18.02.2015
comment
Я предполагаю, что ассемблер не проверяет число. Вместо этого он просто отбрасывает верхние биты. Таким образом, mov al, -130 кодируется как mov al, 0x7e, то есть al просто получает младшие 8 бит любого указанного вами числа. - person user3386109; 18.02.2015
comment
Я понял, так что это в основном ассемблер. - person user1812076; 18.02.2015
comment
У меня есть еще один вопрос о imul и idiv, у вас есть скайп или что-то в этом роде? Был бы очень признателен, если бы вы могли сказать мне, в чем загадка этого. У меня через час экзамен. - person user1812076; 18.02.2015
comment
на самом деле достаточно добавить один 0. Нет необходимости в бесконечном количестве нулей. Поскольку положительные числа (например, 130) в дополнении до 2 начинаются с нуля, отрицательные — с единицы (например, -130) - person Blechdose; 18.02.2015
comment
edit: Хорошо, вы можете использовать бесконечное количество нулей, если не хотите ограничивать себя минимальным количеством необходимых битов. - person Blechdose; 18.02.2015