0

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

任务:

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

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

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

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

修改:不是将值转换作为一个字推入堆栈,而是仅在堆栈上使用双字。因此,将要转换为 DOUBLEword 的值推入堆栈

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

4

1 回答 1

1

简单的方法:

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

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


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


如果您实际上是针对 8086,而不仅仅是普通的 x86,那么 shift-by-one 和 shift by CL 是您唯一可用的班次。因此,要移动 4,您可能必须mov cl, 4/ shl al, cl,而不仅仅是shl al, 4.

于 2016-04-15T03:03:20.210 回答