0

レジスタに 32 ビットの値があるとします。r0 = 0x12345678; タスクは、0x5678 である下位ハーフワード部分を取得することです (または、上位ハーフワードを無効化します)。C コードに関しては、次と同等です。r0 = r0 & 0xFFFF;

制限: 他のレジスタを使用せずに、単一の ARM7TDMI 命令で実行する必要があります。これは、上半分を取得することがLSR r0, r0, #16.

これまでのところ、左シフト + 右シフト、回転 + シフトの 2 つの命令で実行できます。または、マスク 0xFFFF と AND-ing を含む追加のレジスタを使用します。

ARM7TDMI では、0xFFFF のような定数と単純に AND することはできません。これは、即値スキームに適合しないためです。

また、最近の ARM-s には を実行することで解決する "MOVT" があるようMOVT r0, #0ですが、ARM7TDMI にはありません。

MOVTはとても基本的なことなので、MOVTがなくても可能だと信じたいです。

4

1 に答える 1