我正在学习装配,并且遇到了问题。我需要将0x006B转换为0xF06B。 视频存储器中字符的“模板”是0xTextcolor(白色)-bgColor(黑色) - 字符代码(6B)。 我认为最好的选择是换位?虽然我一点也不熟悉它。刚开始学习装配昨天。
编辑:
首先感谢回复,我想通了。我正在使用0x10c开发工具包,如果我没有错误模拟DCPU-16 cpu。我需要做的是(这段代码是循环的一部分)
set a, [text+i]
set b, 0xf000
bor a, b
set [0x8000+i], a ;Put the data in the video memory
其中'a'是以0x00XX格式读取的当前字符。 'bor'是'|'托比亚斯指出的行动。
答案 0 :(得分:0)
我不知道你使用的是汇编程序,但你必须使用0x0600或0x06B:
0x06B | 0xF00
如何完成这取决于你的装配..
答案 1 :(得分:0)
set a, [text+i]
and a, 0x00FF
bor a, 0xf000
set [0x8000+i], a ;Put the data in the video memory
为什么? set a, [xxxx]
会读取 WORD ,而不是BYTE,因此如果您的文本未解包或包含颜色属性,您将在MSB上获得定义颜色属性的垃圾。
另外,您可以直接添加OR您想要的属性。你不需要浪费一个寄存器就可以了。
即使您可以避免使用任何寄存器(I除外):
set [0x8000+i], [text+i]
and [0x8000+i], 0x00FF
bor [0x8000+i], 0xf000
然而,这段代码可能会在RAM上占用更多空间,并且可能会慢几个周期。