将 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
.
这是一个作业,我不知道从哪里开始。
作业:
一个字节可以用三个八进制数字表示。第 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
.