问题:
编写了一个程序,将从键盘输入的8位二进制数字转换为等效的格雷码二进制数,使用以下算法:
[破碎图像:]
我正在学习程序集(8086,这是课堂要求的),但我不知道如何做到这一点。
当我从键盘接收到每个字符(1或0)时,我会转换它吗?或者,我是否读取了整个8位二进制数,循环通过它,在我进行转换?
我来自Perl/Java,因此可视化它在程序集中的工作方式有点令人望而生畏。另外,我不知道上面的算法中的符号是什么?
感谢您的帮助和批评!
发布于 2009-06-26 08:06:28
您可以简单地xor字符与其自身移动一个地方,以获得灰色表示,不需要循环。当您的角色在AL中时,示例:
mov bl, al
shr bl, 1
xor al, blAL现在是灰色代码表示。
在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;发布于 2009-06-12 20:15:46
我已经很久没有编写任何组装代码了,但是这些问题似乎更有哲理。在不知道更大的目标的情况下,这里有一些想法。
转换输入的每个键:很多时候,程序需要在程序运行时响应单个键的笔画(即动态命令,向上、向下、左等)。在这种情况下,关键笔画应该单独转换。其他情况下,需要转换一个数据块或字符串,这个操作通常是在enter键结束时完成的,后者是一个较大的数据块。在这些情况下,字符必须通过和转换“循环”。
但是,无论是哪种情况,“工作”都应该在可以从两种情况下调用的通用子例程中完成。
我希望这能帮到你,
边缘
https://stackoverflow.com/questions/976881
复制相似问题