我目前正在学习汇编,并且遇到问题。我需要将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格式读取。"鲍尔"是" |"托比亚斯指出的操作。
我不知道您使用的是什么汇编器,但是您必须使用0xf00:
0x06b:0x06B | 0xF00
如何完成此操作取决于您的组装。
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 ,而不是字节,因此,如果您的文本未打开或包含颜色属性,则会在定义颜色属性的MSB上获得垃圾。作为额外的,您可以直接添加或直接添加所需的属性。您无需浪费登记册即可。
即使您也可以避免使用任何寄存器(i):
set [0x8000+i], [text+i]
and [0x8000+i], 0x00FF
bor [0x8000+i], 0xf000
但是,此代码可能会在RAM上使用更多的空间,并且可能会慢一些。