2009-06-10 110 views
0

问题:程序集8086:将8位二进制数转换为其灰数相等?

写一个程序,转换从键盘输入到等效的格雷码二进制数的8位二进制数,使用以下算法:

[破图像:http://www.harborlandings.com/images/grayAlgm.jpg]

我正在学习程序集(8086,所需的类),不知道如何做到这一点。

我是否将每个字符(1或0)转换为从键盘接收的字符?或者,我读取整个8位二进制数字,循环访问,转换为我?

我来自Perl/Java,所以想象这将如何在汇编中工作有点令人生畏。另外,我不确定上述算法中的符号是什么?

谢谢你的帮助和批评!

+0

加在-A-圆是不含usive或(XOR)运算符。 – AakashM 2009-06-10 16:58:59

回答

1

自从我编写了汇编代码以来,这已经很长时间了,但问题似乎更具哲理性。不知道这些更大的目标是一些想法。

转换输入的每个按键:程序运行时(即动态命令,上,下,左等等),程序需要多次响应各个按键。在这种情况下,击键应单独转换。其他时候,需要转换一块数据或字符串,并且此操作通常在输入键结束时完成是一个较大的数据块。这些情况要求字符被“循环”并转换。

但是,在任何一种情况下,“工作”都应该在通用的子程序中完成,可以从任何一种情况下调用子程序。

我希望这有助于

埃德

2

你可以简单的异或字符与自身向右移动一个地方,以获得灰色显示,没有循环需要。当您的字符在AL中时的示例:

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

AL现在是格雷码表示法。

在C,这将是:

c^=c>>1; 

要返回二进制表示你可以用它自异或格雷码,右移通过降低功率为2的,从最大功率-of-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; 
相关问题