Как вы отображаете отрицательное число в сборке 68000?

Я думаю, что здесь что-то упускаю, потому что это должно быть легко, но я просто не могу понять, как отобразить отрицательное число. Я просто хочу, чтобы моя программа выводила -1 при переполнении, но вместо этого продолжала показывать 65535. Я просто не очень понимаю, как отрицательные числа вообще работают в 68k. Я пробовал так:

MOVE.W   #-1,D1
MOVE     #3,D0
TRAP     #15

а вот так:

MOVE.W   #1,D1
NEG      D1
MOVE     #3,D0
TRAP     #15

Поэтому я не уверен, что проблема заключается только в отображении отрицательного числа или в его сохранении, или в том и другом. Любая помощь приветствуется!


person Avalon    schedule 16.11.2019    source источник
comment
68k использует en.wikipedia.org/wiki/Two%27s_complement, и вы печатаете его с помощью функции, которая обрабатывает значение как беззнаковое.   -  person Peter Cordes    schedule 16.11.2019


Ответы (1)


В общем, если вы не используете язык программирования со встроенным способом вывода чисел со знаком, правильный способ отображения значений со знаком состоит в том, чтобы проверить, являются ли они отрицательными, а затем, если это так, инвертировать их и вывести -. Затем используйте любые средства, которые можно было бы использовать для беззнаковых чисел. В некоторых случаях может быть необходимо обработать - после обработки всего остального (например, если кто-то использует способность некоторых контроллеров ЖК-дисплея обрабатывать данные в порядке справа налево, можно выводить числа в порядке младших разрядов, останавливаться, как только один имеет нулевой остаток, затем выводить «-», если необходимо, и, наконец, выводить достаточно пробелов для заполнения поля), но такие вещи могут быть учтены, если процедура «выходного числа» принимает параметр, указывающий, какой символ, если таковой имеется , должен предшествовать номеру; затем вызывающий абонент может передать "+", "-" или " " в зависимости от ситуации.

person supercat    schedule 16.11.2019