pythonでアセンブリ言語ソースを処理しています。オペコードによって駆動される私のメインテーブルには、レジスタオペランドの数/使用法、操作のサイズなど、各オペコードに関する情報があります。現在、オペコードをキーとして、インジケーターのリストを値として持つ辞書として保存されています。それは機能しますが、失敗するのは非常に簡単で、修正する必要があるときにどのように機能するかを思い出せません。データを処理から分離するより良い方法はありますか?
opdefs={ #operator defs
#[number of register operands,
# <for each operand code 1=dest,2=src,3=both,4=overhead>,
#storage use code:0 for none, 1 for dest, 2 for source
#operation size(-means call opsizer routine)]
'cpy2': [2,1,2,0,4], 'cpy1': [2,1,2,0,2], 'cpy4': [2,11,12,0,8],
この例では、cpy2 には 2 つのレジスタ オペランドがあり、最初のオペランドは宛先、2 番目のオペランドはソースであり、ストレージ参照はなく、長さは 4 バイトです。
ファイルの各行をトークン化した後のメインループは次のようになります
numoperands=opdefs[tokens[0]][0] #numer of operands
for operandnum in range(1,numoperands+1):
if opdefs[tokens[0]][operandnum]==1: #dest register
destreg(tokens[operandnum]) #count times register is loaded
これを一度だけ実行するつもりだったとしてもかまいませんが、これを整理またはエンコードするためのより良い方法が必要だと思います. 助言がありますか?