Сборка 8086: преобразование 8-разрядного двоичного числа в его эквивалент числа Грея? - PullRequest
0 голосов
/ 10 июня 2009

Проблема:

Напишите программу для преобразования 8-разрядного двоичного числа, введенного с клавиатуры, в эквивалентное двоичное число кода Грея, используя следующий алгоритм:

[битое изображение: http://www.harborlandings.com/images/grayAlgm.jpg]

Я изучаю ассемблер (8086, требуется для класса) и не знаю, как это сделать.

Преобразует ли я каждый символ (1 или 0), когда получаю его с клавиатуры? Или, я читаю все 8-битное двоичное число, перебираю его, конвертирую на ходу?

Я из Perl / Java, поэтому визуализация того, как это будет работать в сборке, немного устрашает. Кроме того, я не уверен, что символ в алгоритме выше?

Спасибо за вашу помощь и критику!

Ответы [ 2 ]

2 голосов
/ 26 июня 2009

Вы можете просто сделать xor персонажа с собой, смещенного вправо на одно место, чтобы получить представление Грея, без необходимости петли. Пример, когда ваш персонаж в AL:

mov bl, al
shr bl, 1
xor al, bl

AL теперь является кодом Грея.

В C это будет:

c^=c>>1;

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

mov bl, al
shr bl, 4
xor al, bl
mov bl, al
shr bl, 2
xor al, bl
mov bl, al
shr bl, 1
xor al, bl

В C это будет:

c^=c>>4; c^=c>>2; c^=c>>1;
1 голос
/ 13 июня 2009

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

Преобразование каждой клавиши при вводе: во многих случаях программе необходимо реагировать на отдельные нажатия клавиш во время работы программы (т. Е. Динамические команды, вверх, вниз, влево и т. Д.). В этом случае нажатия клавиш должны быть преобразованы индивидуально. В других случаях блок данных или строк необходимо преобразовать, и эта операция обычно выполняется при заключении клавиши ввода более крупного блока данных. В этих случаях требуется, чтобы символы были «зациклены» и преобразованы.

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

Надеюсь, это поможет,

Ed

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...