将二进制/十六进制转换为拆分八进制的程序集过程



这是一个作业,我不知道从哪里开始。

任务:

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

例如,11010110 b是11 010 110 b或326八进制。通过将2-3-3系统分别应用于高阶和低阶字节,单词的值以拆分八进制表示。

编写一个过程splitOctal,将一个单词转换为一个字符串,正好有7个字符表示splitOctl中的数字值;由一个空格分隔的两组三人。

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

MODIFICATIONS:与其将值convert作为一个字推送到堆栈上,不如只在堆栈上使用双字。因此,将要转换为DOUBLEword的值推送到堆栈上

我不知道从哪里开始通过移位和旋转位来实现这一点。也许给我一些材料读,或者给我一点启发

简单方法:

通过减去ASCII '0''A'来转换十六进制->8位整数,然后左移第一位的4位值,并与第二位的4位数进行or运算。

然后通过移位/掩码将该8位整数转换为八进制,以提取所需的三组位,并将'0'添加到每一组位上。


更复杂的方法是:不要在任何点组合成一个8位整数。有很多方法可以从第一个十六进制数字中获得第四位,并从第二个十六进制位数中获得低两位。你最好的选择可能仍然是手术室。


如果您实际的目标是8086,而不仅仅是普通的x86,那么移位一和移位CL是唯一可用的移位。因此,要偏移4,可能需要mov cl, 4/shl al, cl,而不仅仅是shl al, 4

最新更新