0

我目前正在学习组装,但遇到了一个问题。我需要将 0x006B 转换为 0xF06B。视频内存中字符的“模板”是 0xTextcolor(white)-bgColor(black)-charactercode(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' 是 '|' Tobias 指出的操作。

4

2 回答 2

0

我不知道你使用什么汇编器,但你必须或 0x06B 和 0xF00:

0x06B | 0xF00

如何做到这一点取决于您的装配..

于 2012-10-21T15:47:30.747 回答
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 您想要的属性。你不需要浪费一个寄存器来做到这一点。

即使你可以避免使用任何寄存器(除了我):

set [0x8000+i], [text+i]
and [0x8000+i], 0x00FF
bor [0x8000+i], 0xf000

但是,此代码可能会在 RAM 上使用更多空间,并且可能会慢几个周期。

于 2016-06-08T11:29:17.720 回答