fix jmp illegal condition
This commit is contained in:
14
elm.go
14
elm.go
@@ -139,7 +139,7 @@ func (m* Machine) Execute() error {
|
|||||||
m.sp--
|
m.sp--
|
||||||
m.ip++
|
m.ip++
|
||||||
case JMP:
|
case JMP:
|
||||||
if (m.ip < instr.Operand || instr.Operand < 0) {
|
if (len(m.program) < instr.Operand || instr.Operand < 0) {
|
||||||
return errors.New("Illegal access")
|
return errors.New("Illegal access")
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -149,7 +149,7 @@ func (m* Machine) Execute() error {
|
|||||||
return errors.New("Stack Underflow")
|
return errors.New("Stack Underflow")
|
||||||
}
|
}
|
||||||
|
|
||||||
if (m.ip < instr.Operand || instr.Operand < 0) {
|
if (len(m.program) <= instr.Operand || instr.Operand < 0) {
|
||||||
return errors.New("Illegal access")
|
return errors.New("Illegal access")
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -184,20 +184,22 @@ func main() {
|
|||||||
// m.Push(Inst{Operation: DIV})
|
// m.Push(Inst{Operation: DIV})
|
||||||
// m.Push(Inst{Operation: HALT})
|
// m.Push(Inst{Operation: HALT})
|
||||||
|
|
||||||
m.Push(Inst{Operation: PUSH, Operand: 0})
|
|
||||||
m.Push(Inst{Operation: PUSH, Operand: 1})
|
m.Push(Inst{Operation: PUSH, Operand: 1})
|
||||||
m.Push(Inst{Operation: ADD})
|
m.Push(Inst{Operation: JMPIF, Operand: 3})
|
||||||
m.Push(Inst{Operation: JMP, Operand: 1})
|
m.Push(Inst{Operation: HALT})
|
||||||
|
m.Push(Inst{Operation: PUSH, Operand: 1})
|
||||||
|
m.Push(Inst{Operation: PUSH, Operand: 2})
|
||||||
m.Push(Inst{Operation: HALT})
|
m.Push(Inst{Operation: HALT})
|
||||||
|
|
||||||
stackCounter := 0
|
stackCounter := 0
|
||||||
for !m.isHalted && stackCounter < 69 {
|
for !m.isHalted && stackCounter < 69 {
|
||||||
m.Print()
|
|
||||||
err := m.Execute()
|
err := m.Execute()
|
||||||
|
m.Print()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Fprintf(os.Stderr, "[ERR] %s\n", err);
|
fmt.Fprintf(os.Stderr, "[ERR] %s\n", err);
|
||||||
os.Exit(1)
|
os.Exit(1)
|
||||||
}
|
}
|
||||||
|
|
||||||
stackCounter++
|
stackCounter++
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user