将 binary/hex 转换为拆分八进制的汇编程序

Assembly procedure to convert binary/hex to split octal

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

作业:

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

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

编写一个程序splitOctal,将一个单词转换为一个恰好由 7 个字符组成的字符串,表示八进制拆分中数字的值;由 space.

分隔的两组三个

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

修改:不是将值转换为单词压入堆栈,而是仅在堆栈上使用双字。所以将要转换的值作为 DOUBLEword 压入堆栈

我不知道从哪里开始通过移位和旋转位来完成这个。 也许给我一些 material 阅读,或一点启动?

简单方法:

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

然后通过shifting/masking将那个8位整数转换为八进制,提取出你想要的三组位,每组加'0'


更复杂的方法:不要在任何时候组合成一个 8 位整数。有很多方法可以从第一个十六进制数字中获取第 4 位,并结合第二个十六进制数字中的低两位。您最好的选择可能仍然涉及 OR。


如果您实际上以 8086 为目标,而不仅仅是普通的 x86,那么逐一移位和按 CL 移位是您唯一可用的移位。所以要移动 4,你可能必须 mov cl, 4 / shl al, cl,而不仅仅是 shl al, 4.