2016-12-16 4 views
0

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

И если мы умножим два числа, и результат слишком велик для одного регистра, остальное передается в dx.

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

+1

Я собирался сказать 2^(n-1) -1, но тогда ваш последний абзац меня смутил. –

+0

Ну, это было бы 2^(n-1) -1 в дополнении 2, но я предполагаю, что это дополнение 16-го. – Bolololo321

+0

Я как бы удивлен, я не могу найти простой дубликат этого ... думая о добавлении ответа среднего размера ... Но последнее предложение ускользает и от меня, смеешь ли ты приводить примеры того, что ты наблюдаешь? – Ped7g

ответ

0

Вы можете интерпретировать то же самое содержимое регистра либо как подписанное число, либо как неподписанное число. В первом значении случая, макс является 0x7F*** = 2^(regsize-1)-1 (32767 для 16 бит), во втором значении случая, макс является 0xFF** = 2^regsize-1 (65535 для 16 бит)

(Обратите внимание, что есть imul и mul команды для умножения, первые счета для знаков).

Hex byte example 
80 imul 2 = FF:00 
80 mul 2 = 01:00 
+0

. Я думаю, я понимаю, но если я использую команду« neg », то число будет настроено как подписанное? – Bolololo321

+0

Регистрация - это всего лишь бит. Это ваш выбор - интерпретировать его как подписанный, unsigned, char и т. Д. Например, регистр байта 11000000b = 0xC0 может считаться подписанным -20, unsigned 224, char À. Конечно, применение команды 'neg' предполагает, что мы работаем с подписанным числом. Но вы можете использовать результат как unsigned. – MBo

+0

Хорошо, спасибо большое^^ – Bolololo321

Смежные вопросы