68 lines
1.4 KiB
Lua
68 lines
1.4 KiB
Lua
local REGS = {
|
|
al = {bits = 8, mask = 0x1},
|
|
ah = {bits = 8, mask = 0x2},
|
|
ax = {bits = 16, mask = 0x3},
|
|
eax = {bits = 32, mask = 0x3},
|
|
|
|
bl = {bits = 8, mask = 0x4},
|
|
bh = {bits = 8, mask = 0x8},
|
|
bx = {bits = 16, mask = 0xC},
|
|
ebx = {bits = 32, mask = 0xC},
|
|
|
|
cl = {bits = 8, mask = 0x10},
|
|
ch = {bits = 8, mask = 0x20},
|
|
cx = {bits = 16, mask = 0x30},
|
|
ecx = {bits = 32, mask = 0x30},
|
|
|
|
dl = {bits = 8, mask = 0x40},
|
|
dh = {bits = 8, mask = 0x80},
|
|
dx = {bits = 16, mask = 0xC0},
|
|
edx = {bits = 32, mask = 0xC0},
|
|
|
|
di = {bits = 16, mask = 0x100},
|
|
edi = {bits = 32, mask = 0x100},
|
|
|
|
si = {bits = 16, mask = 0x200},
|
|
esi = {bits = 32, mask = 0x200},
|
|
|
|
bp = {bits = 16, mask = 0x400},
|
|
ebp = {bits = 32, mask = 0x400},
|
|
|
|
sp = {bits = 16, mask = 0x800},
|
|
esp = {bits = 32, mask = 0x800},
|
|
|
|
ds = {bits = 16, mask = 0x100},
|
|
es = {bits = 16, mask = 0x2000},
|
|
fs = {bits = 16, mask = 0x4000},
|
|
gs = {bits = 16, mask = 0x8000},
|
|
}
|
|
|
|
local REG_CLASSES = {
|
|
reg8 = {
|
|
items = {"al", "ah", "bl", "bh", "cl", "ch", "dl", "dh"}
|
|
},
|
|
regn8 = {
|
|
items = {"eax", "ebx", "ecx", "edx", "ax", "bx", "cx", "dx", "di", "si", "bp", "edi", "esi", "ebp"}
|
|
},
|
|
seg = {
|
|
items = {"ds", "es", "fs", "gs"}
|
|
},
|
|
rmptr = {
|
|
items = {"bx", "bp", "di", "si"}
|
|
}
|
|
}
|
|
|
|
for _, reg_class in pairs(REG_CLASSES) do
|
|
local mask = 0
|
|
for _, reg in ipairs(reg_class.items) do
|
|
mask = mask | REGS[reg].mask
|
|
end
|
|
reg_class.mask = mask
|
|
end
|
|
|
|
return {
|
|
GPR_SIZE = 32,
|
|
REGS = REGS,
|
|
REG_CLASSES = REG_CLASSES,
|
|
}
|