2016-04-14 65 views
0

这是一个任务,我不知道从哪里开始。将二进制/十六进制转换为八进制分割的汇编程序

分配:

一个字节可以使用三个八进制数字来表示。位7和位6决定左边的八进制数字(从不高于3);位5,4和3是中间数字;比特2,1和0是正确的数字。

例如,11010110b是11 010 110 b或326 oct。通过将2-3-3系统分别应用于高位和低位字节,可以将字的值表示为分割八进制数。

写procesure splitOctal一个字转换为stringof表示分割八进制数的值正好为7个字符;两组由空间隔开的三组。

遵循cdecl协议。该过程将有两个参数: 1)字值(作为双字的低位字传递) 2)长度为7个字节的目标字符串的地址。

修改:不要将值转换为单词压入堆栈,只能在堆栈中使用双字。所以推到一个双字转换到堆栈

我不知道从哪里开始通过移位位和旋转位做到这一点的价值。 也许给我一些材料阅读,或一点点kickstart?

+2

你知道什么?你的教科书是否显示如何移位和旋转位,如果是这样,它说你不明白的是什么?你可以使用双字堆栈参数创建过程定义,并至少显示你知道的内容吗?另外,如果你指定了这个程序集的平台,它可能会有所帮助,因为它们通常非常不同(我已经使用过x86,x64,SPARC,PIC16F,Z80,IBM iSeries MI和其他一些平台)。 –

+1

我相信我们正在使用8086.我知道如何移位和旋转位。我不明白如何让3位进入某个寄存器或指定的内存。 – GeekyDewd

回答

1

简单的方法:

转换十六进制 - 通过减去ASCII '0''A'> 8位整数,则左移位4位值从第一个数字,并且OR用来自第二位的4位值。

然后通过移位/屏蔽将该8位整数转换为八进制来提取所需的三组位,并将'0'添加到每个位。


更复杂的方式:不要在任何点组合成一个单一的8位整数。从第一个十六进制数字结合第二个十六进制数字的低两位得到第四位的方法有很多种。你最好的选择仍然可能涉及到或。


如果你实际上目标8086,而不仅仅是正常的86,然后移接一个,并通过转变CL是你唯一可行的转变。所以要换到4,你可能必须去mov cl, 4/shl al, cl,而不是只有shl al, 4

相关问题