1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137
| """ 1 getReg
2 getReg
8: REG[r1] = REG[r1] << REG[r2]
"""
opcodes = [1, 1, 0, 0, 0, 0, 1, 2, 0, 0, 0, 0, 1, 3, 0, 0, 0, 0, 16, 1, 1, 1, 1, 2, 0, 0, 0, 8, 2, 3, 1, 17, 3, 2, 15 , 2, 3, 3, 16, 2, 1, 2, 1, 2, 0, 0, 0, 1, 3, 1, 2, 12, 1, 256, 13, 0, 0, 0, 18, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0 , 0, 0, 15, 2, 1, 0, 3, 1, 2, 15, 2, 2, 0, 3, 1, 2, 1, 2, 0, 0, 0, 256, 17, 1, 2, 15, 2, 1, 1, 15, 3, 1, 0, 16 , 1, 0, 2, 16, 1, 1, 3, 1, 2, 0, 0, 0, 1, 3, 0, 2, 12, 0, 256, 13, 0, 0, 0, 71, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0 , 0, 0, 1, 2, 0, 0, 0, 0, 1, 3, 0, 0, 0, 1, 3, 1, 3, 1, 3, 0, 0, 0, 256, 17, 1, 3, 15, 3, 1, 1, 3, 2, 3, 1, 3 , 0, 0, 0, 256, 17, 2, 3, 15, 3, 1, 1, 15, 4, 1, 2, 16, 1, 2, 3, 16, 1, 1, 4, 3, 3, 4, 1, 4, 0, 0, 0, 256, 17 , 3, 4, 15, 4, 0, 0, 11, 4, 3, 16, 0, 0, 4, 1, 4, 0, 0, 0, 1, 3, 0, 4, 12, 0, 27, 13, 0, 0, 0, 145, 0]
""" 1, 1 , getreg 1 0, 0, 0, 0, 累加 save reg 1
mov eax,0
1, 2, 0, 0, 0, 0, mov ebx,0 1, 3, 0, 0, 0, 0, mov ecx,0 16, 1, 1,1, REG[rindx]=buff[idx]
1, 2, 0, 0, 0, 8, mov ebx,8 2, 3,1, 17, 3, 2, ModReg
15 , 2, 3, 3, 16, 2, 1, 2,
1, 2, 0, 0, 0, 1, 3, 1, 2, 12, 1, 256, 13, 0, 0, 0, 18, jne 18???
1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 15, 2, 1, 0, 3, 1, 2, 15, 2, 2, 0, 3, 1, 2, 1, 2, 0, 0, 0, 256, 17, 1, 2, 15, 2, 1, 1, 15, 3, 1, 0, 16, 1, 0, 2, 16, 1, 1, 3,
1, 2, 0, 0, 0, 1, 3, 0, 2, 12, 0, 256, 13, 0, 0, 0, 71, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 2, 0, 0, 0, 0, 1, 3, 0, 0, 0, 1, 3, 1, 3, 1, 3, 0, 0, 0, 256, 17, 1, 3, 15, 3, 1, 1, 3, 2, 3, 1, 3, 0, 0, 0, 256, 17, 2, 3, 15, 3, 1, 1, 15, 4, 1, 2, 16, 1, 2, 3, 16, 1, 1, 4, 3, 3, 4, 1, 4, 0, 0, 0, 256, 17, 3, 4, 15, 4, 0, 0, 11, 4, 3, 16, 0, 0, 4, 1, 4, 0, 0, 0, 1, 3, 0, 4, 12, 0, 27, 13, 0, 0, 0, 145, 0 """
ip = 0
while opcodes[ip] != 0:
ccode = opcodes[ip] if ccode == 1: reg = opcodes[ip + 1] data = sum(opcodes[ip+2:ip+6]) # print('REG[reg:%d]=%d'% (reg, data)) print('mov REG[reg:%d],%d'% (reg, data)) ip += 6 if ccode == 2:
# print("REG[reg:%d] = REG[reg:%d]"%(opcodes[ip + 2], opcodes[ip + 1])) print("mov REG[reg:%d], REG[reg:%d]"%(opcodes[ip + 2], opcodes[ip + 1])) ip += 3 if ccode == 3: print("add REG[reg:%d], REG[reg:%d]"%(opcodes[ip + 1], opcodes[ip + 2])) ip += 3 if ccode == 4: print("sub REG[reg:%d], REG[reg:%d]"%(opcodes[ip + 2], opcodes[ip + 1])) ip += 3 if ccode == 11: print("xor REG[reg:%d],REG[reg:%d]"%(opcodes[ip + 2], opcodes[ip + 1])) ip += 3
if ccode == 12: print("cmp REG[reg:%d], %d"%(opcodes[ip + 1], opcodes[ip + 2])) ip += 3 if ccode == 13: print("jne %d"%sum(opcodes[ip+1:ip+6])) ip += 5 if ccode == 15: print("REG[dataIdx:%d]=buf[bufIdx:%d]=REG[regid:%d]"%(opcodes[ip + 3], opcodes[ip + 2],opcodes[ip + 1])) ip += 4
if ccode == 16: print("REG[regid:%d]=REG[dataIdx:%d]=buf[bufIdx:%d]"%(opcodes[ip + 3], opcodes[ip + 2],opcodes[ip + 1])) ip += 4 if ccode == 17: # print("modREG REG[reg:%d]-=REG[reg:%d]"%(opcodes[ip + 2], opcodes[ip + 1])) print("mod REG[reg:%d],REG[reg:%d]"%(opcodes[ip + 1], opcodes[ip + 2])) ip += 3
|