ข้อตกลงการใช้ Stack และ Recursion

Slides:



Advertisements
งานนำเสนอที่คล้ายกัน
Suphot Sawattiwong Function ใน C# Suphot Sawattiwong
Advertisements

Introduction to C Introduction to C.
โครงสร้างโปรแกรมภาษา C
โครงสร้างภาษาซี เบื้องต้น
กระบวนการ (Process).
บทที่ 7 รีเคอร์ซีฟ ระหว่างการออกแบบเขียนโปรแกรมแบบบนลงล่าง (Top-down Design) จะมีงานย่อย(Subtask) เพื่อแก้ปัญหาในแต่ละเรื่อง และผู้เขียนโปรแกรมต้องการใช้งานย่อยในลักษณะที่เรียกตัวเองขึ้นมาทำงาน.
BC322 ครั้งที่ 6 Text file BC322 : computer Programming (Week6)
เริ่มต้นเขียนโปรแกรมภาษา C++
บทที่ 11 การเขียนโปรแกรมโดยใช้ข้อมูลชนิดพอยท์เตอร์
Intermediate Representation (รูปแบบการแทนในระยะกลาง)
Register Allocation and Graph Coloring
การผลิตโค๊ดสำหรับ Procedure Call
สภาวะแวดล้อมในขณะโปรแกรมทำงาน
Ordering and Liveness Analysis ลำดับและการวิเคราะห์บอกความ เป็นอยู่หรือความตาย.
Functional programming part II
Data Structures and Algorithms
Data Structures and Algorithms
Lecture 13: ฟังก์ชันเรียกตัวเอง
CS Assembly Language Programming
ฟังก์ชัน (Function).
Structure Programming
Structure Programming
LAB # 4 Computer Programming 1 1. พิจารณาโปรแกรมต่อไปนี้
Computer Programming 1 LAB # 6 Function.
ลักษณะการทำงานของ Stack
LAB # 4.
โดย อาจารย์ณัฐพงศ์ พยัฆคิน
ฟังก์ชั่น function.
ปฏิบัติการครั้งที่ 9 ฟังก์ชัน.
โปรแกรมย่อย : Pascal Procedure
ฟังก์ชัน (Function).
Lecture no. 10 Files System
การประกาศตัวแปร “ตัวแปร” คือสิ่งที่เราสร้างขึ้นมาเพื่อใช้เก็บค่าต่างๆและอ้างอิงใช้งานภายในโปรแกรม ตามที่เรากำหนดขึ้น การสร้างตัวแปรขึ้นมาเราเรียกว่า.
Macro Language and the Macro Processor
C Programming Lecture no. 6: Function.
การวิเคราะห์ประสิทธิภาพของอัลกอริธึม (Performance Analysis)
 เป็นเมธอดที่มีคุณลักษณะของ Polymorphism รูปแบบหนึ่ง โดยใช้ชื่อเมธอดเดียวกัน มากกว่า 1 เมธอด เพื่อทำงานในแบบเดียวกัน  คลาสลูกสามารถเขียนทับ เมธอดของคลาสแม่ได้
 เป็นเมธอดที่มีคุณลักษณะของ Polymorphism รูปแบบหนึ่ง โดยใช้ชื่อเมธอดเดียวกัน มากกว่า 1 เมธอด เพื่อทำงานในแบบเดียวกัน  คลาสลูกสามารถเขียนทับ เมธอดของคลาสแม่ได้
บทที่ 7 รีเคอร์ซีฟ ระหว่างการออกแบบเขียนโปรแกรมแบบบนลงล่าง (Top-down Design) จะมีงานย่อย(Subtask) เพื่อแก้ปัญหาในแต่ละเรื่อง และผู้เขียนโปรแกรมต้องการใช้งานย่อยในลักษณะที่เรียกตัวเองขึ้นมาทำงานลักษณะของฟังก์ชั่นมีความรอบรัดสั้นกว่าแบบวนลูป.
Lecture 7 ฟังก์ชัน To do: Hand back assignments
การเขียนโปรแกรมภาษาซี
ง30212 การเขียนโปรแกรมภาษาคอมพิวเตอร์ โรงเรียนปลวกแดงพิทยาคม
ฟังก์ชัน ง30212 การเขียนโปรแกรมด้วยภาษาคอมพิวเตอร์ ศูนย์คอมพิวเตอร์
คิว (Queue) Queue ADT Queue เป็น List ชนิดหนึ่ง แต่สำหรับ queue การแทรกข้อมูลลงบน queue (Insertion) จะทำที่ปลายใดปลายหนึ่งของ Queue ในขณะที่การลบข้อมูลออกจากคิว.
ตัวแปรกับชนิดของข้อมูล
Week 2 Variables.
เสรี ชิโนดม ฟังก์ชัน เสรี ชิโนดม
บทที่ 5 Link List Link List.
Computer Programming for Engineers
Recursion การเรียกซ้ำ
วิทยา กรระสี (วท.บ. วิทยาการคอมพิวเตอร์)
ฟังก์ชัน.
วิชา COSC2202 โครงสร้างข้อมูล (Data Structure)
กองซ้อน ยอดกองซ้อน (stack).
Recursive Method.
stack #2 ผู้สอน อาจารย์ ยืนยง กันทะเนตร
Chapter 11 Instruction Sets: Addressing Modes
ระบบคอมพิวเตอร์ (computer system)
CONDITION Computer Programming Asst. Prof. Dr. Choopan Rattanapoka.
1 Functions กนกวรรธน์ เซี่ยงเจ็น สำนักวิชาเทคโนโลยีสารสนเทศ และการสื่อสาร มหาวิทยาลัยนเรศวร พะเยา.
stack #1 ผู้สอน อาจารย์ ยืนยง กันทะเนตร
การเปรียบเทียบเงื่อนไข
Function. วัตถุประสงค์การเรียนรู้ ให้รู้จักว่าฟังก์ชันคืออะไร ให้รู้จักว่าเราสร้างฟังก์ชันเพื่อจุดประสงค์ใด หรือ เพื่อประโยชน์ใด ให้รู้จักประเภทของฟังก์ชัน.
Programming assignments ชื่องาน (subject) : program เขียนด้วยภาษา C หรือ C++ มีทั้งหมด 7 ข้อ กำหนดส่ง 29 กรกฎาคม 2554.
รายการ (Lis t) [3] ผู้สอน อาจารย์ ยืนยง กันทะเนตร สาขาวิชาเทคโนโลยีคอมพิวเตอร์เคลื่อนที่ คณะเทคโนโลยีสารสนเทศและการสื่อสาร Website : ict.up.ac.th/yeunyong.
Subroutine ธนวัฒน์ แซ่ เอียบ. Subrountine – คือส่วนหนึ่งของ code จากโปรแกรมทั้งหมด สำหรับปฏิบัติงานโดยเฉพาะ และเป็นอิสระ จาก code ส่วนอื่นของโปรแกรม ประโยชน์
การประยุกต์ใช้ Stack การประยุกต์ใช้ Stack
Stack Sanchai Yeewiyom
Chapter 7 ฟังก์ชัน Function.
ระบบตัวเลข, Machine code, และ Register
ใบสำเนางานนำเสนอ:

ข้อตกลงการใช้ Stack และ Recursion

ข้อตกลงการใช้ Stack (Stack Convention) เราจะเรียนรู้ stack convention ที่ไม่ใช่ของ MIPS โดยแท้ เป็นครั้งเดียวที่เราจะไม่ทำตามแบบแผนของ MIPS ถ้าเข้าใจแนวคิดการจัดการ stack เรียนรู้ convention ของแต่ละ CPU ได้ไม่ยาก เราจะเรียนรู้ stack convention ของ Intel/Linux ในส่วนของ MIPS อาจารย์ให้นิสิตไปศึกษาเพิ่มเติมด้วยตัวเอง

อะไรคือ Stack ส่วนของ memory ที่ใช้เก็บข้อมูลที่จำเป็นเวลา function/procedure ถูกเรียกใช้งาน แต่ละ function/procedure มี frame ของตัวเอง ขอบเขตของ frame กำหนดด้วย frame pointer กับ stack pointer Caller (โปรแกรมส่วนที่เรียกใช้งาน function) save ค่า register ที่อยู่ใน set caller save ส่งผ่าน arguments ลงบน stack Callee (function ที่ถูกเรียกใช้งาน) save ค่า return address ลงบน stack เก็บค่า frame pointer Save ค่า register ที่อยู่ใน callee save จองที่สำหรับ local variables

Caller Saved Registers Caller Saved Registers $fp+4N+4 Arg N Arg N-1 Caller Frame $fp+16 Arg 3 Caller Saved Registers $fp+12 Arg 2 Arguments $fp+8 Arg 1 $fp+4 Return Addr $fp $fp ของเฟรมก่อน Callee Saved Registers + Local Variables Callee Frame Caller Saved Registers Arguments $sp

Factorial ในภาษาซี int fact(int n) { if (n < 1) return 1; else return fact(n-1)*n; }

Factorial ใน MIPS Assembly fact: addi $sp, $sp, -8 sw $ra, 4($sp) sw $fp, 0($sp) move $fp, $sp lw $t0, 8($fp) slti $t1, $t0, 1 bne $t1, $0, L1 addi $t2, $t0, -1 addi $sp, $sp, -4 sw $t2, 0($sp) jal fact addi $sp, $sp, 4 mul $v0, $v0, $t0 lw $ra, 4($fp) lw $fp, 0($fp) addi $sp, $sp, 8 jr $ra L1: lw $ra, 4($fp) lw $fp, 0($fp) addi $sp, $sp, 8 addi $v0, $0, 1 jr $ra main: : addi $sp, $sp, -4 sw $t3, 0($sp) jal fact addi $sp, Ssp, 4 Factorial ใน MIPS Assembly $fp ($30) คือ frame pointer ใน MIPS

Factorial ใน MIPS Assembly fact: addi $sp, $sp, -8 sw $ra, 4($sp) sw $fp, 0($sp) move $fp, $sp lw $t0, 8($fp) slti $t1, $t0, 1 bne $t1, $0, L1 addi $t2, $t0, -1 addi $sp, $sp, -4 sw $t2, 0($sp) jal fact addi $sp, $sp, 4 mul $v0, $v0, $t0 lw $ra, 4($fp) lw $fp, 0($fp) addi $sp, $sp, 8 jr $ra L1: lw $ra, 4($fp) lw $fp, 0($fp) addi $sp, $sp, 8 addi $v0, $0, 1 jr $ra main: : addi $sp, $sp, -4 sw $t3, 0($sp) jal fact addi $sp, Ssp, 4 Factorial ใน MIPS Assembly Termination case

Factorial ใน MIPS Assembly fact: addi $sp, $sp, -8 sw $ra, 4($sp) sw $fp, 0($sp) move $fp, $sp lw $t0, 8($fp) slti $t1, $t0, 1 bne $t1, $0, L1 addi $t2, $t0, -1 addi $sp, $sp, -4 sw $t2, 0($sp) jal fact addi $sp, $sp, 4 mul $v0, $v0, $t0 lw $ra, 4($fp) lw $fp, 0($fp) addi $sp, $sp, 8 jr $ra L1: lw $ra, 4($fp) lw $fp, 0($fp) addi $sp, $sp, 8 addi $v0, $0, 1 jr $ra main: : addi $sp, $sp, -4 sw $t3, 0($sp) jal fact addi $sp, Ssp, 4 Factorial ใน MIPS Assembly Recursive case

Factorial ใน MIPS Assembly fact: addi $sp, $sp, -8 sw $ra, 4($sp) sw $fp, 0($sp) move $fp, $sp lw $t0, 8($fp) slti $t1, $t0, 1 bne $t1, $0, L1 addi $t2, $t0, -1 addi $sp, $sp, -4 sw $t2, 0($sp) jal fact addi $sp, $sp, 4 mul $v0, $v0, $t0 lw $ra, 4($fp) lw $fp, 0($fp) addi $sp, $sp, 8 jr $ra L1: lw $ra, 4($fp) lw $fp, 0($fp) addi $sp, $sp, 8 addi $v0, $0, 1 jr $ra main: : addi $sp, $sp, -4 sw $t3, 0($sp) jal fact addi $sp, Ssp, 4 Factorial ใน MIPS Assembly Returning from recursion

fact: addi $sp, $sp, -8 sw $ra, 4($sp) sw $fp, 0($sp) move $fp, $sp lw $t0, 8($fp) slti $t1, $t0, 1 bne $t1, $0, L1 addi $t2, $t0, -1 addi $sp, $sp, -4 sw $t2, 0($sp) jal fact B: addi $sp, $sp, 4 mul $v0, $v0, $t0 lw $ra, 4($fp) lw $fp, 0($fp) addi $sp, $sp, 8 jr $ra L1: lw $ra, 4($fp) lw $fp, 0($fp) addi $sp, $sp, 8 addi $v0, $0, 1 jr $ra main: : addi $sp, $sp, -4 sw $t3, 0($sp) jal fact A: addi $sp, Ssp, 4 การเติบโตของ stack สำหรับ fact(3) 3 A: $fp (fact(3)) $fp (main) 2 B: $fp (fact(2)) $fp (fact(3)) 1 B: $fp (fact(1)) $fp (fact(2)) B: $fp (fact(0)) $fp (fact(1))