第七章 ビット操作命令 |
TRONアーキテクチャでは操作するビットをbaseとoffsetの2つのパラメータで指定します。ビット操作命令にはBTST、BSET、BCLR、BNOT、BSCHがあります。
メモリのビットを操作するときには、offsetの値は制限されておらず、バイト境界を越えることができます。offsetオペランドは符号付き整数として扱われます。baseが操作するデータ(オペランド)の原点を指定し、baseのサイズがメモリアクセスのサイズを指定します。すなわち、baseのサイズはreadまたはread-modify-writeのためにメモリにアクセスする単位を指定するものであり、offsetの範囲を規定する(たとえば、baseのサイズがバイトのときにはoffsetが8未満でなければならない)ものではありません。
メモリアクセス
レジスタのビットを操作するときには、offset値はbaseのサイズに応じてoffsetオペランドの下位3、4、または5ビット(つまり、それぞれバイト、ハーフワード、またはワード)で指定し、上位ビットは無視されます。上位ビットがすべて"0"でないとしても、それはエラーではなく、EITは発生しません。offset= 0 (MSB) のビット位置はbaseのサイズに応じて変わります。異なるoffsetを使用することにより、異なるbaseのサイズで同一のビットを示すことができます。
レジスタアクセス
baseのアドレッシングモードがレジスタ直接でないときには、ハーフワードとワードのbaseのサイズ指定は仕様レベル<<L2>>です。baseのサイズをハーフワードまたはワードとして指定するときには、baseアドレスのアライメントが必要です。つまり、baseのサイズがハーフワードアクセスでは2の倍数、ワードアクセスでは4の倍数でなければなりません。offsetの値は制限されていません。しかし、baseアドレスのアライメントを行わない場合には、メモリアクセス範囲がインプリメントに依存します。下にハーフワードのケースを示します。baseアドレスがアライメントのとれたアドレスである場合には、アクセス範囲は図のケース1の様に、baseのアドレスで指定されるバイトアドレスを先頭とするハーフワード単位となります。このとき、範囲1が指定ビットを含むのでメモリアクセスは範囲1について行われます。アライメントのとれていないアドレスである場合には、インプリメントに応じて2つのケースがあります。一方はアライメントのとれている場合と同様にメモリアクセスは範囲1について行われます(ケース1)。他方は図のケース2の様に、アクセス範囲がbaseアドレスで指定されるバイトアドレスを先頭としないハーフワード単位となり、メモリアクセスは範囲1'について行われます。
アセンブラのデフォルトは各社のインプリメントではbaseのサイズはメモリについてもレジスタについてもバイトです。短縮形ビット操作命令では、命令仕様そのものによってサイズがバイトに固定されます。
【baseのサイズと仕様レベル】
レジスタ
メモリ
base size = バイト A
A
base size = ハーフワード A
<<L2>>
base size = ワード A
<<L2>>
注 : "A"は<<L1R>>,<<L1>>,<<L2>>のすべての仕様レベルで有効なことを意味します。