任意の言語を使用して 2 パス アセンブラを作成する割り当てがあります。私はパイソンを選びました。1つの短い問題を除いて、それは私に役立ちました.
.asm 入力ファイルを使用してシンボル テーブルを作成しました。次に、シンボル テーブルを使用してオブジェクト コードを作成します。私のコードは以下のとおりです。
import re,os
import ast
fr=open("2input.asm","r")
fw=open("symbol.txt","r+")
objFile=open("symbol1.txt","w")
str2=fr.readline() #reads lines in file
temp=""
str1="" #used for splitting original string
var=""
var1=""
printstr=""
location=map(int, re.findall('\d+',str2)) #extracts location in the form of string and then converts it to integer
loc=location[0] #converts location from list form to integer form
for line in fr: #creates a symbol table
str2=line
loc=loc+1
if str2.find(":")!=-1:
str1=str2.split(":")
str1.append(str(loc))
print>>fw, str1
elif str2.find("DC")!=-1:
str1=str2.split("DC")
str1.append(str(loc))
print>>fw, str1
elif str2.find("DS")!=-1:
str1=str2.split("DS")
str1.append(str(loc))
print>>fw, str1
#symbol table created
fw.seek(0)
fr.seek(0)
for line in fr: #creates object file
str2=line
if str2.find("READ")!=-1:
str1=str2.split()
var=str1[1]
for line in fw:
var1=ast.literal_eval(line)
var2=var1[0]
if var==var2: #it never goes in this if even if the condition is true
printstr="rohit"
print>>objFile, printstr
fw.close()
最後の if 条件では、ast ライブラリを使用して、リスト形式の文字列をリスト データ型に変換しました。
コントロールが最後に行かない場合、なぜこれが起こるのですか? コントロールはどのようにifに入ることができますか? 両方の文字列が同じであっても、制御は if に入りません。なぜこれが起こるのですか?
「symbol.txt」ファイルにはいくつかの行が含まれており、すべてリスト形式で保存されています。これらの行は、ast ステートメントによってリスト データ型に変換されています。
編集:
問題が発生しました。どうやら、ast ステートメントは、文字列をリスト データ型に変換する際に、余分な空白を追加し、if 条件の偽造につながったようです。if 条件を次のように変更しました。
if var1 in var2:
#do my job