Chào mọi người, “trả về chỉ thị lệnh kế tiếp và biến local là sao ạ”
có phải ngôn ngữ nào cũng vậy phải không ? ( nên mình không ghi hastag
)
Chào mọi người, “trả về chỉ thị lệnh kế tiếp và biến local là sao ạ”
có phải ngôn ngữ nào cũng vậy phải không ? ( nên mình không ghi hastag
)
chắc ý tác giả là quay về vị trí tiếp theo của câu lệnh ngay sau lời gọi hàm, các biến local bên trong hàm sẽ vẫn tiếp tục truy cập được (trước đó do chương trình nhảy vào bên trong hàm mới nên các biến local sẽ khác với hàm hiện tại).
cho mình 1 ví dụ được không, mình đọc đi đọc lại vẫn chưa hiểu 
Chương trình bạn viết bằng ngôn ngữ nào thì cuối cùng nó cũng được biến thành các lệnh đơn giản nhất mà CPU hiểu được. Các lệnh này sắp xếp thứ tự trước sau và mỗi lệnh có 1 địa chỉ riêng.
Trong con CPU, có 1 thanh ghi tên là PC (Program Counter). Giá trị của PC sẽ lưu địa chỉ của lệnh cần hoặc sẽ thực hiện (tùy loại CPU). Sau khi xử lý hoặc nạp lệnh mới, thông thường PC sẽ tăng lên 1 để nó biết rằng tiếp theo nó sẽ phải nạp hoặc xử lý lệnh ngay phía sau lệnh hiện tại.
Khi gọi một hàm khác, tức là ta sẽ cho CPU thực hiện 1 đoạn lệnh ở địa chỉ khác không tiếp sau lệnh hiện tại, thì lúc này giá trị của thành ghi PC sẽ thay đổi bất thường (không tăng 1) chỉ đến địa chỉ lệnh đầu tiên của hàm được gọi. Trước đó nó có thể sẽ lưu giá trị PC hiện tại vào đâu đó để biết đường quay về thực hiện hàm hiện tại. Và sau đó CPU bắt đầu thực thi lệnh của hàm được gọi.
Nhưng sau khi thực hiện xong hàm được gọi (gặp lệnh return) thì chương trình cần quay về thực hiện lệnh nằm phía dưới lệnh gọi hàm. Thế thì nó cần nạp lại giá trị cho thanh ghi PC địa chỉ của lệnh tiếp theo chính là địa chỉ lệnh phía sau lệnh gọi hàm (đoạn màu đỏ). Ở chu kỳ tiếp theo, CPU quay về thực hiện tiếp các câu lệnh sau lệnh gọi hàm.
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?