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