组装将2个十六进制值组合为一个



我目前正在学习汇编,并且遇到问题。我需要将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上使用更多的空间,并且可能会慢一些。

最新更新