首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >汇编8086:将8位二进制数字转换为其灰度值?

汇编8086:将8位二进制数字转换为其灰度值?
EN

Stack Overflow用户
提问于 2009-06-10 16:56:45
回答 2查看 12.9K关注 0票数 0

问题:

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

[破碎图像:]

我正在学习程序集(8086,这是课堂要求的),但我不知道如何做到这一点。

当我从键盘接收到每个字符(1或0)时,我会转换它吗?或者,我是否读取了整个8位二进制数,循环通过它,在我进行转换?

我来自Perl/Java,因此可视化它在程序集中的工作方式有点令人望而生畏。另外,我不知道上面的算法中的符号是什么?

感谢您的帮助和批评!

EN

回答 2

Stack Overflow用户

发布于 2009-06-26 08:06:28

您可以简单地xor字符与其自身移动一个地方,以获得灰色表示,不需要循环。当您的角色在AL中时,示例:

代码语言:javascript
复制
mov bl, al
shr bl, 1
xor al, bl

AL现在是灰色代码表示。

在C中,这将是:

代码语言:javascript
复制
c^=c>>1;

要回到二进制表示形式,您可以使用它自身的灰色代码,通过减小2的幂来右移,从最大的2的幂开始,它比数据的大小小,例如:

代码语言:javascript
复制
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中,这将是:

代码语言:javascript
复制
c^=c>>4; c^=c>>2; c^=c>>1;
票数 2
EN

Stack Overflow用户

发布于 2009-06-12 20:15:46

我已经很久没有编写任何组装代码了,但是这些问题似乎更有哲理。在不知道更大的目标的情况下,这里有一些想法。

转换输入的每个键:很多时候,程序需要在程序运行时响应单个键的笔画(即动态命令,向上、向下、左等)。在这种情况下,关键笔画应该单独转换。其他情况下,需要转换一个数据块或字符串,这个操作通常是在enter键结束时完成的,后者是一个较大的数据块。在这些情况下,字符必须通过和转换“循环”。

但是,无论是哪种情况,“工作”都应该在可以从两种情况下调用的通用子例程中完成。

我希望这能帮到你,

边缘

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/976881

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档