0

私は現在アセンブリを学んでいて、問題に行き詰まっています。0x006B を 0xF06B に変換する必要があります。ビデオ メモリ内の文字の「テンプレート」は、0xTextcolor(白)-bgColor(黒)-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」は「|」です。トバイアスが指摘した操作。

4

2 に答える 2

0

どのアセンブラを使用しているかはわかりませんが、0xF00 で 0x06B を使用する必要があります。

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

なんで ?は BYTE ではなくWORDset a, [xxxx]を読み取るため、テキストがアンパックされていないか、色属性が含まれている場合、色属性を定義する MSB にジャンクが表示されます。さらに、必要な属性を直接追加するか、直接追加することもできます。そのためにレジスタを無駄にする必要はありません。

レジスタの使用を避けることもできます(Iを除く):

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

ただし、このコードはおそらく RAM 上でより多くのスペースを使用し、おそらく数サイクル遅くなります。

于 2016-06-08T11:29:17.720 に答える