Bài viết này là khá nhiều thông tin cũng như: http://www.codeproject.com/Articles/461052/Stack-based-vs-Register-based-Virtual-Machine-Arch
"Máy ảo dựa trên ngăn xếp Máy ảo dựa trên stack thực hiện các tính năng chung được mô tả khi cần thiết bởi máy ảo ở các điểm trên, nhưng cấu trúc bộ nhớ trong đó các toán hạng được lưu trữ là cấu trúc dữ liệu ngăn xếp. Các hoạt động được thực hiện bằng cách popping dữ liệu từ ngăn xếp, xử lý chúng và đẩy lùi các kết quả trong thời trang LIFO (Last in First Out). Trong một máy ảo ngăn xếp dựa, hoạt động thêm hai con số sẽ thường được thực hiện theo cách thức sau đây (trong đó 20, 7, và 'kết quả' là toán hạng):
stackAdd
POP 20 POP 7 THÊM 20, 7, kết quả Kết quả PUSH Do các thao tác PUSH và POP, cần có bốn dòng lệnh để thực hiện thao tác bổ sung. Một lợi thế của mô hình dựa trên stack là các toán hạng được giải quyết ngầm bởi con trỏ ngăn xếp (SP trong hình trên). Điều này có nghĩa rằng máy ảo không cần biết địa chỉ toán hạng một cách rõ ràng, khi gọi con trỏ ngăn xếp sẽ cho (Pop) toán hạng tiếp theo. Trong máy ảo dựa trên stack, tất cả các phép toán số học và logic được thực hiện thông qua việc đẩy và đẩy các toán hạng và kết quả trong ngăn xếp.
Đăng ký dựa trên máy ảo Trong đăng ký dựa trên việc thực hiện một máy ảo, cấu trúc dữ liệu nơi các toán hạng được lưu trữ dựa trên sổ đăng ký của CPU. Không có hoạt động PUSH hoặc POP ở đây, nhưng các hướng dẫn cần chứa các địa chỉ (các thanh ghi) của các toán hạng. Đó là, các toán hạng cho các lệnh được giải quyết rõ ràng trong lệnh, không giống như mô hình dựa trên ngăn xếp nơi chúng ta có một con trỏ ngăn xếp để trỏ đến toán hạng. Ví dụ, nếu một hoạt động bổ sung là để được thực hiện trong một thanh ghi máy ảo dựa trên các hướng dẫn nhiều hơn hoặc ít hơn sẽ thực hiện như sau:
registerAdd
ADD R1, R2, R3; # Thêm nội dung của R1 và R2, lưu trữ kết quả trong R3 Như tôi đã đề cập trước đó, không có hoạt động POP hoặc PUSH, vì vậy hướng dẫn để thêm chỉ là một dòng. Nhưng không giống như stack, chúng ta cần phải đề cập một cách rõ ràng các địa chỉ của các toán hạng như R1, R2 và R3. Ưu điểm ở đây là chi phí của việc đẩy và popping từ một ngăn xếp là không tồn tại, và các lệnh trong một máy ảo dựa trên đăng ký thực thi nhanh hơn trong vòng điều khiển lệnh.
Một ưu điểm khác của mô hình dựa trên đăng ký là nó cho phép một số tối ưu hóa không thể thực hiện trong phương pháp tiếp cận dựa trên ngăn xếp. Một ví dụ là khi có các biểu thức con chung trong mã, mô hình đăng ký có thể tính toán nó một lần và lưu trữ kết quả trong sổ đăng ký để sử dụng trong tương lai khi biểu thức phụ xuất hiện trở lại, làm giảm chi phí tính toán lại biểu thức.
Sự cố với mô hình dựa trên đăng ký là hướng dẫn đăng ký trung bình lớn hơn lệnh ngăn xếp trung bình, vì chúng tôi cần chỉ định rõ địa chỉ toán hạng. Trong khi các hướng dẫn cho một máy stack là ngắn do con trỏ ngăn xếp, các hướng dẫn máy đăng ký tương ứng cần phải chứa các vị trí toán hạng, và kết quả trong mã đăng ký lớn hơn so với mã stack.
Một bài viết blog tuyệt vời mà tôi đã xem qua (Tại liên kết này), chứa một triển khai C giải thích và đơn giản của máy ảo dựa trên đăng ký. Nếu triển khai máy ảo và thông dịch viên là mối quan tâm chính của bạn, cuốn sách của người sáng tạo ANTLR Terrence Parr có tiêu đề 'Mẫu thực hiện ngôn ngữ: Tạo ngôn ngữ lập trình cụ thể và ngôn ngữ chung của riêng bạn', có thể rất tiện dụng. "
Từ nguồn Java Sự khác biệt là trong bytecode (mà javac tạo ra), nơi các bytecode dựa trên stack được viết theo một chồng, trong khi (ngạc nhiên!) cho mô hình dựa trên đăng ký các bytecode được viết theo các thuật ngữ –
(Java biên dịch JIT, ngay cả trên kiến trúc "dựa trên nền tảng", dựa trên đăng ký.) –
liên kết này sẽ giúp bạn nhận được giải thích thêm http://markfaction.wordpress.com/2012/07/ 15/stack-based-vs-register-based-virtual-máy-kiến trúc-và-the-dalvik-vm/ – LeoMobDev