SDCC コンパイラ、その Z80 部分 (sdasz80) を学習します。私が使用するアセンブラのネイティブバージョンでは:
ld (hl),LOW BUF
inc hl
ld (hl),HIGH BUF
16 ビット値BUF
を 2 つの 8 ビット部分 (上位と下位) に格納します。私はSDCCでそれを行う方法を見つけることができません。
ld (hl),#BUF & #0xff
inc hl
ld (hl),#BUF >> 8 & #0xff
生成されたコードは正しく、エラーなしでコンパイルされますが、2 番目のロードは私には見栄えがよくなく、論理演算を順序付けする括弧がコンパイラによって受け入れられません。それは正しく、16 ビット値を 2 バイトで分割する唯一の方法ですか?
アップデート。一部の ASxxxマニュアル >
および<
オペレーターに記載されています (表 4 を参照)。コンパイル エラー「エラー: マシン固有のアドレッシングまたはアドレッシング モード エラー」を出して動作しないでください。
Update1: 次のコード
BUF .equ #0xf55e
....
ld (hl),`HI(BUF)
エラーが発生しますError: <q> missing or improper operators, terminators, or delimiters
。