def iType(message): zero = "0000000" #messageSplit = message.split() messageSplit = message.rstrip().split('\t'); # ---------------------------------------- if messageSplit[1] == "lw": opcode = "010" elif messageSplit[1] == "sw": opcode = "011" elif messageSplit[1] == "beq": opcode = "100" print('im here') #else: #opcode = "000" # for check error # ------------ create RS ----------------- temprs = int(messageSplit[2]) rs = convert.numToBinary(temprs, 3) # ------------ create RS ----------------- temprt = int(messageSplit[3]) rt = convert.numToBinary(temprt, 3) # ------------ create RS ----------------- if messageSplit[4] == mem.label: # string other tempOffset = mem.addessPC else: tempOffset = messageSplit[4] int_Offset = int(tempOffset) offsetField = convert.numToBinary(int_Offset, 16) # ---------------------------------------- # ------------ merge code to Machine Language -------- machineCode = zero + opcode + rs + rt + offsetField # ---------------------------------------------------- return machineCode
#!/usr/bin/python import toFile as toFile import function as function import os os.remove("file/instruction.txt") mcand = 3 mplier = 4 x1 = 0 result = int(mcand * mplier) print("result[x1] = ", result) print("-----------------------------------") sizeOfMulti = 15 sizeOfProduct = 32 # initial value x2 = function.numToBinary(mcand, sizeOfMulti) # mcand x3 = function.numToBinary(mplier, sizeOfMulti) # mplier result = function.numToBinary(result, sizeOfProduct) # x1 = function.numToBinary(0, sizeOfProduct) # Product print("mcand : ", x2) # x2 is mcand in bin print("mplier : ", x3) # x3 is mplier in bin print("result[Multi] : ", result) tempMcand = function.numToBinary(mcand, sizeOfProduct) tempMcand = "0b" + tempMcand # no in inst check = function.numToBinary(1, sizeOfMulti) print("--------------------------------") for x in range(sizeOfMulti): check = function.shiftLeft("1", x) # 1 shift left x bit tempCheck = check.split('b') check = function.numToBinary(int(tempCheck[1], 2), sizeOfMulti) exe = function.andFunction(check, x3) # x3 and x4 if exe == 1:
def rType(instruction): #ใช้เเยก assembly code ออกเป็นส่วนๆ name = "" name += instruction keep_type = "" num1 = "" num2 = "" num3 = "" num = name.find('\t') #num = ตำเเหน่งของการ tab ครั้งเเรก # start add x1 x2 x3 for i in range(len(name)): #เพิ่มค่า num ไปเรื่อยๆ จนกว่าจะเจอตำเเหน่งที่ไม่ใช่ tab if (name[num + i] != '\t'): #ซึ่งก็คือตำเเหน่งเเรกของ name of instruction num = num + i break; nums = name.find('\t', num + 1) #num = ตำเเหน่งของการ tab หลังจาก num #ซึ่งก็คือตำเเหน่งเเรกของtab หลังจาก name of instruction for i in range(nums - num): keep_type = keep_type + name[i + num] #เพิ่มค่าname of instructionให้ keep_type เเต่ละตัวจนครบ for i in range(len(name)): #หาตำเเหน่งที่ไม่ไช่ tab หลัง nums if (name[nums + i] != '\t'): #ซึ่งก็คือตำเเหน่งเเรกของ register ตัวที่ 1 num = nums + i break; for i in range(len(name)): #หาตำเเหน่งที่เป็น tab หลัง num if (name[num + i] == '\t'): #ซึ่งก็คือตำเเหน่งเเรกของ tab หลัง register ตัวที่ 1 nums = num + i break; keep1 = num for i in range((nums - num)): #เพิ่มค่าregister ตัวที่ 1 ให้ num1 เเต่ละตัวจนครบ num1 += name[keep1] keep1 = keep1 + 1 for i in range(len(name)): #หาตำเเหน่งที่ไม่ไช่ tab หลัง nums if (name[nums + i] != '\t'): #ซึ่งก็คือตำเเหน่งเเรกของ register ตัวที่ 2 num = nums + i break; for i in range(len(name)): #หาตำเเหน่งที่เป็น tab หลัง num if (name[num + i] == '\t'): #ซึ่งก็คือตำเเหน่งเเรกของ tab หลัง register ตัวที่ 2 nums = num + i break; keep2 = num for i in range((nums - num)): #เพิ่มค่าregister ตัวที่ 2 ให้ num2 เเต่ละตัวจนครบ num2 += name[keep2] keep2 = keep2 + 1 for i in range(len(name)): #หาตำเเหน่งที่ไม่ไช่ tab หลัง nums if (name[nums + i] != '\t'): #ซึ่งก็คือตำเเหน่งเเรกของ register ตัวที่ 3 num = nums + i break; nums = len(name) #หาตำเเหน่งที่ไม่ไช่ tab จากหลังมาหน้า for i in range(len(name)): #ซึ่งก็คือตำเเหน่งสุดท้ายของ register ตัวที่ 3 if (name[nums - 1] != '\t'): break; nums = nums - 1 keep3 = num for i in range((nums - num)-1): #เพิ่มค่าregister ตัวที่ 3 ให้ num3 เเต่ละตัวจนครบ num3 += name[keep3] keep3 += 1 print(num3) tempnum3 = int(num3) #เปลี่ยน register ทุกตัวให้เป็น int tempnum2 = int(num2) tempnum1 = int(num1) num3 = convert.numToBinary(tempnum3, 3) #เปลี่ยนnumทุกตัวให้เป็น binary num2 = convert.numToBinary(tempnum2, 3) num1 = convert.numToBinary(tempnum1, 3) return create_machine(keep_type, num1, num2, num3) #เรียกใช้งาน function ที่เ็น machine code
def rType(instruction): name = "" name += instruction keep_type = "" num1 = "" num2 = "" num3 = "" num = name.find('\t') # start add x1 x2 x3 for i in range(len(name)): if (name[num + i] != '\t'): num = num + i break nums = name.find('\t', num + 1) for i in range(nums - num): keep_type = keep_type + name[i + num] for i in range(len(name)): if (name[nums + i] != '\t'): num = nums + i break for i in range(len(name)): if (name[num + i] == '\t'): nums = num + i break keep1 = num for i in range((nums - num)): num1 += name[num] keep1 = keep1 + 1 for i in range(len(name)): if (name[nums + i] != '\t'): num = nums + i break for i in range(len(name)): if (name[num + i] == '\t'): nums = num + i break keep2 = num for i in range((nums - num)): num2 += name[num] keep2 = keep2 + 1 for i in range(len(name)): if (name[nums + i] != '\t'): num = nums + i break nums = len(name) for i in range(len(name)): if (name[nums - 1] != '\t'): break nums = nums - 1 keep3 = num for i in range((nums - num) - 1): num3 += name[num] keep3 += 1 tempnum3 = int(num3) tempnum2 = int(num2) tempnum1 = int(num1) num3 = convert.numToBinary(tempnum3, 3) num2 = convert.numToBinary(tempnum2, 3) num1 = convert.numToBinary(tempnum1, 3) return create_machine(keep_type, num1, num2, num3) #run_R_type("start nand 55 22 33 ")