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

时间:2016-04-14 21:33:56

标签: assembly bit byte-shifting

这是一项任务,我不知道从哪里开始。

分配:

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

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

编写一个过程 splitOctal ,将一个单词转换为一个正好为7个字符的字符串,表示分割八进制数字的值;由空格隔开的两组三个。

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

修改:不是将值转换为单词转换到堆栈,而是仅在堆栈上使用双字。因此,将值转换为DOUBLEword转换为堆栈

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

1 个答案:

答案 0 :(得分:1)

简单方法:

转换hex - >通过减去ASCII '0''A'得到8位整数,然后从第一个数字左移4位值,用第二个数字的4位值左移。

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

更复杂的方式:不要在任何点组合成单个8位整数。有许多方法可以将第一个十六进制数字中的第4位与第二个十六进制数字中的低两位相结合。您最好的选择可能仍然涉及OR。

如果您实际上定位的是8086,而不仅仅是正常的x86,那么按一个班次进行转换并按CL转换是您可用的唯一转换。因此,要移动4,您可能需要mov cl, 4 / shl al, cl,而不仅仅是shl al, 4