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:
示例#3
0
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
示例#4
0
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    ")