def direc(line, addressCounter): tokens=line.split() if(len(tokens)>0): for t_indx in range(len(tokens)): token = tokens[t_indx] if(token[0]=="."): if(token[1:]=="text"): symtab_append("address:"+str(addressCounter)+"\tname:text\ttype:label\n") #appending to symbol table elif(token[1:]=="data"): symtab_append("address:"+str(addressCounter)+"\tname:data\ttype:label\n") elif(token[1:]=="word"): symtab_update() value = tokens[t_indx+1] v_bin = "0000000"+bin(int(value))[2:] v_bin = v_bin[-8:] mem_mod.update_memory(addressCounter,v_bin) addressCounter+=4 elif(token[1:]=="doubleword"): symtab_update() value = tokens[t_indx+1] v_bin = "0000000"+bin(int(value))[2:] v_bin = v_bin[-8:] mem_mod.update_memory(addressCounter+4,v_bin) addressCounter+=8 else: print("Unrecognized assembler directive!") return addressCounter
def stb(line): rs = int(line[6:11], 2) ra = int(line[11:16], 2) ds = int(line[16:30], 2) t1 = int(mem_man.read_register(ra), 2) ea = ds + t1 data = mem_man.read_register(rs) mem_man.update_memory(ea, data[-8:])
def stw(line): rs = int(line[6:11], 2) ra = int(line[11:16], 2) ds = int(line[16:30], 2) t1 = int(mem_man.read_register(ra), 2) ea = ds + t1 data = mem_man.read_register(rs) mem_man.update_memory(ea, data[-8:]) mem_man.update_memory(ea + 1, data[-16:-8]) mem_man.update_memory(ea + 2, data[-24:-16]) mem_man.update_memory(ea + 3, data[-32:-24])
def std(line): rs = int(line[6:11], 2) ra = int(line[11:16], 2) ds = int(line[16:30], 2) t1 = int(mem_man.read_register(ra), 2) disp = ds * 4 ea = disp + t1 data = mem_man.read_register(rs) mem_man.update_memory(ea, data[-8:]) mem_man.update_memory(ea + 1, data[-16:-8]) mem_man.update_memory(ea + 2, data[-24:-16]) mem_man.update_memory(ea + 3, data[-32:-24]) mem_man.update_memory(ea + 4, data[-40:-32]) mem_man.update_memory(ea + 5, data[-48:-40]) mem_man.update_memory(ea + 6, data[-56:-48]) mem_man.update_memory(ea + 7, data[-64:-56])