diff --git a/triton-vm/src/error.rs b/triton-vm/src/error.rs
index 8c177b34..13f6a848 100644
--- a/triton-vm/src/error.rs
+++ b/triton-vm/src/error.rs
@@ -100,7 +100,7 @@ mod tests {
}
#[test]
- #[should_panic(expected = "Assertion failed: st0 must be 1. ip: 2, clk: 2, st0: 0")]
+ #[should_panic(expected = "Assertion failed: st0 must be 1. ip: 2, clk: 1, st0: 0")]
fn assert_false_test() {
let program = Program::from_code("push 0 assert halt").unwrap();
run(&program, vec![], vec![]).unwrap();
diff --git a/triton-vm/src/vm.rs b/triton-vm/src/vm.rs
index 08bea2ff..3110a1a9 100644
--- a/triton-vm/src/vm.rs
+++ b/triton-vm/src/vm.rs
@@ -223,352 +223,454 @@ impl<'pgm> VMState<'pgm> {
/// Perform the state transition as a mutable operation on `self`.
pub fn step(&mut self) -> Result