我有一个问题要解决,但我不知道如何去解决。我想知道如何去解决这个问题的大致想法。我有一个存储器地址,在ESI中。存储器代表某种简化的ASCII编码,其中5位,一个接一个表示一个特定字符。存储器以五位结束-00000 b。为了转换为正常的8-必须向每个5位值添加60 H位ASCII码我希望将每个5位编码字符存储为EDI地址下8位ASCII码EDI还必须以0 - 0000000 b结尾
例如:[ESI] = 00011 00010 11010 00000 b [EDI] = 01100011 01100010 01111010 00000000 b
我将如何去提取每5位,一个接一个从esi?
1条答案
按热度按时间5lhxktic1#
让我们看看一种从字节流中累积位的方法。
假设内存中有以下源字节
它们表示5位代码如下:
我们将做一个类似这样的算法,我们使用一个16位累加器,当我们没有至少5位可供使用时,再取8位。
因此,第一次迭代将具有:
将刚刚获取的temp 8与当前累加器组合的工作需要对temp进行可变移位,以便该值的第一位与累加器中数据的最后一位对齐。
注意事项:上面假设我们想要
abcdefgh
中的abcde
作为第一个5位代码,而不是defgh
,这也是合乎逻辑的。对于读者来说,将上述方法适用于该情况是一种练习,但并不复杂--想法是从累加器的低端而不是从累加器的高端取出5位,并且合并从最后一次迭代剩余的左边的8位,而不是组合从最后一次迭代剩余的右边的8位。(This也可以适于一次取出多于8位;但是,可能不希望对未对齐的字符串数据执行字或更大的读取操作(例如,在MIPS上不起作用,在支持它的体系结构上可能性能较低)。