mirror of
https://gitlab.os-k.eu/os-k-team/kvisc.git
synced 2023-08-25 14:05:46 +02:00
fix
This commit is contained in:
parent
7a8474e1de
commit
a0572e759f
@ -386,10 +386,14 @@ def parse_instr(line):
|
|||||||
|
|
||||||
regoff = "inv"
|
regoff = "inv"
|
||||||
|
|
||||||
# [reg+off]
|
# [reg+off] or [reg+regoff]
|
||||||
if len(word.split('+')) == 2:
|
if len(word.split('+')) == 2:
|
||||||
reg, off = word.split('+', 1)
|
reg, off = word.split('+', 1)
|
||||||
|
|
||||||
|
if not is_number(off):
|
||||||
|
regoff = off
|
||||||
|
off = '0'
|
||||||
|
|
||||||
# [reg+regoff+off]
|
# [reg+regoff+off]
|
||||||
else:
|
else:
|
||||||
assert(len(word.split('+')) == 3)
|
assert(len(word.split('+')) == 3)
|
||||||
|
@ -26,7 +26,7 @@ main:
|
|||||||
|
|
||||||
mov rsi, 0x10
|
mov rsi, 0x10
|
||||||
mov rdi, 8
|
mov rdi, 8
|
||||||
lea rbi, b[rsi + rdi]
|
lea rbi, b[rsi + rdi + 1]
|
||||||
|
|
||||||
leave
|
leave
|
||||||
ret
|
ret
|
||||||
|
14
vm/pc/decd.c
14
vm/pc/decd.c
@ -44,7 +44,21 @@ static void scan_param(ctx_t *ctx, acc_t *p)
|
|||||||
p->mem = 1;
|
p->mem = 1;
|
||||||
p->mlen = c & 0xF;
|
p->mlen = c & 0xF;
|
||||||
p->off = (short)ctx->get(ctx);
|
p->off = (short)ctx->get(ctx);
|
||||||
|
|
||||||
p->offreg = ctx->get(ctx);
|
p->offreg = ctx->get(ctx);
|
||||||
|
|
||||||
|
if (p->offreg > NREGS) {
|
||||||
|
_except(ctx, E_ILL, "Inexistent REG (offreg)");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (p->offreg != INV) {
|
||||||
|
r = &ctx->r[p->offreg];
|
||||||
|
|
||||||
|
if (r->flags & (RES | CTL)) {
|
||||||
|
_except(ctx, E_ACC, "Reserved REG (offreg): %s", r->name);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
c = ctx->get(ctx);
|
c = ctx->get(ctx);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -58,15 +58,17 @@ void dumpinstr(ctx_t *ctx, ulong _rip, uint rep,
|
|||||||
p = p1;
|
p = p1;
|
||||||
lp:
|
lp:
|
||||||
if (p != 0) {
|
if (p != 0) {
|
||||||
if (p->mem) d_log(ctx, " %c:[", getmempref(p->mlen));
|
if (p->mem) d_log(ctx, " %c[", getmempref(p->mlen));
|
||||||
else d_log(ctx, " ");
|
else d_log(ctx, " ");
|
||||||
|
|
||||||
if (p->type == A_REG)
|
if (p->type == A_REG)
|
||||||
d_log(ctx, "%s", ctx->r[p->val].name);
|
d_log(ctx, "%s", ctx->r[p->val].name);
|
||||||
else
|
else
|
||||||
d_log(ctx, "%c:0x%lX", getmempref(p->ilen), p->val);
|
d_log(ctx, "%c0x%lX", getmempref(p->ilen), p->val);
|
||||||
|
|
||||||
if (p->mem) {
|
if (p->mem) {
|
||||||
|
if (p->offreg)
|
||||||
|
d_log(ctx, "+%s", ctx->r[p->offreg].name);
|
||||||
if (p->off)
|
if (p->off)
|
||||||
d_log(ctx, "+%hd", p->off);
|
d_log(ctx, "+%hd", p->off);
|
||||||
d_log(ctx, "]");
|
d_log(ctx, "]");
|
||||||
|
Loading…
Reference in New Issue
Block a user