Mở rộng máy ảo ngăn xếp ở phần trước bằng cách thêm bộ nhớ biến (giống bảng ký hiệu — symbol table — mà trình biên dịch dùng để cấp phát biến cục bộ). Bộ lệnh gồm:
PUSH x: đẩy số nguyên x vào đỉnh ngăn xếp.LOAD name: đẩy giá trị hiện tại của biến name vào đỉnh ngăn xếp. Nếu biến name chưa từng được gán giá trị (chưa có lệnh STORE nào tới nó trước đó), giá trị mặc định của nó là 0.STORE name: lấy phần tử ở đỉnh ngăn xếp ra (ngăn xếp giảm 1 phần tử) và gán giá trị đó cho biến name (ghi đè nếu đã tồn tại).ADD, SUB, MUL, DIV: như trong bài máy ảo cơ bản (lấy 2 phần tử đỉnh b (đỉnh) và a (dưới), đẩy vào kết quả a op b; DIV làm tròn phần nguyên về 0 như phép chia C/C++/Java).PRINT: in ra giá trị đỉnh ngăn xếp (không lấy ra khỏi ngăn xếp).HALT: dừng ngay, bỏ qua các lệnh còn lại.Tên biến chỉ gồm chữ cái, chữ số, dấu gạch dưới, bắt đầu bằng chữ cái. Cho một chương trình, hãy mô phỏng thực thi và in ra các giá trị theo thứ tự các lệnh PRINT được thực hiện.
Ví dụ: PUSH 5 / STORE x / LOAD x / LOAD x / ADD / PRINT gán x=5, rồi nạp x hai lần và cộng lại, in ra 10.
Dòng đầu chứa số nguyên n (1≤n≤1000). n dòng tiếp theo là các lệnh PUSH x, LOAD name, STORE name, ADD, SUB, MUL, DIV, PRINT, HALT. Dữ liệu đảm bảo ngăn xếp không bao giờ underflow và không có DIV nào chia cho 0 trong các lệnh thực sự được thực thi.
Mỗi giá trị được PRINT in ra trên một dòng riêng, theo đúng thứ tự thực thi. Nếu không có PRINT nào được thực thi, không in gì.
Ví dụ:
Đầu vào:
6
PUSH 5
STORE x
LOAD x
LOAD x
ADD
PRINT
Đầu ra:
10
Đầu vào:
2
LOAD y
PRINT
Đầu ra:
0
Đang tải editor...