Subroutine ธนวัฒน์ แซ่ เอียบ
Subrountine – คือส่วนหนึ่งของ code จากโปรแกรมทั้งหมด สำหรับปฏิบัติงานโดยเฉพาะ และเป็นอิสระ จาก code ส่วนอื่นของโปรแกรม ประโยชน์ – ลดความซ้ำซ้อนของ code ภายในโปรแกรม – โปรแกรมอื่นๆสามารถนำไปใช้ได้ – ทำให้แก้ปัญหาของงานที่ความซับซ้อนได้ – ทำให้ความสามารถในการอ่านดีขึ้น
Subrountine Subroutine ประกอบไปด้วย – code ที่จะนำไปปฏิบัติงาน – พารามิเตอร์ที่จะส่งให้กับ subroutine – ค่าที่ส่งกลับมาจาก subroutine int subroutine1(int para1){... }
Subrountine
Callers and Callees จากภาพมี subroutine ชื่อ main, ret และ sub – ถ้ากำหนดคำสั่ง j คือคำสั่งกระโดดไป location ที่ต้องการ Subroutine Call เกิดขึ้นเมื่อ Subroutine หลักส่งการควบคุมจากตัวเองไปให้ subroutine อื่น subroutine หลักเรียกว่า CALLER และ Subroutine ที่ถูกเรียก เรียกว่า CALLEE Subroutine Return เกิดขึ้นเมื่อ CALLEE ส่ง การควบคุมกลับไปให้ CALLER
Subroutine linkage วิธีการเชื่อมต่อระหว่าง Caller และ Callee – ทำอย่างไรเมื่อการควบคุมเปลี่ยนจาก caller -> callee แล้ว callee->caller ได้ จัดเก็บข้อมูล ของ caller นำข้อมูลของ caller กลับคืน ข้อมูล ?
Subroutine linkage ข้อมูล คือ Registers – ทำไมเราต้องจัดเก็บรีจีสเตอร์ ? Its value will be destroyed by callee, and We will need to use the value after that action. – ใครเป็นคนจัดเก็บรีจีสเตอร์ ? Caller –knows what it needs later, but may not know what gets altered by callee Callee –knows what it alters, but does not know what will be needed later by caller
Subroutine linkage-Step1 Calling – บันทึกรีจีสเตอร์ที่ค่าอาจจะมีการเปลี่ยนแปลง ได้จาก subroutine ที่ถูกเรียก เช่น program counter (PC) และ accumulator (context) – กำหนด PC เป็น address แรกของ subroutine ที่ต้องการ – ส่งพารามิเตอร์ไปให้ subroutine ถ้าต้องการ – ปฏิบัติงานของคำสั่งใน subroutine นี้ไป จนถึงคำสั่ง return
Subroutine linkage-Step2 Returning – ถ้ามีค่าส่งกลับ นำค่านั้นส่งให้กับ caller – นำ context ที่บันทึกไว้กลับคืน – ปฏิบัติงานของ caller ต่อไป
ที่มา William Stalling, Computer Organization and Architecture, USA