บทที่ 15 โปรแกรมย่อยและแสต็ก

Slides:



Advertisements
งานนำเสนอที่คล้ายกัน
โครงสร้างโปรแกรมภาษา C
Advertisements

บทที่ 3 ภาษาสำหรับเขียนโปรแกรม
บทที่ 11 โปรแกรมย่อยขั้นต้น
สาขาวิชาคอมพิวเตอร์ คณะวิทยาศาสตร์และเทคโนโลยี
สถาปัตยกรรมแบบ stack และ การผลิตโค๊ด
Ordering and Liveness Analysis ลำดับและการวิเคราะห์บอกความ เป็นอยู่หรือความตาย.
Control structure part II
Data Type part.III.
CS Assembly Language Programming
Structure Programming
CS Assembly Language Programming
CS Assembly Language Programming
CS Assembly Language Programming
CS Assembly Language Programming Period 16.
ชนิดของข้อมูลและตัวดำเนินการ
ลักษณะการทำงานของ Stack
องค์ประกอบของโปรแกรม
Properties ของคอนโทรล ที่ควรรู้จักในเบื้องต้น
ปฏิบัติการครั้งที่ 9 ฟังก์ชัน.
โปรแกรมย่อย : Pascal Procedure
ฟังก์ชันของ PHP ฟังก์ชันคือ โปรแกรมย่อยที่สามารถประมวลผล และ คืนผลลัพธ์จาการประมวลผลนั้นสู่โปรแกรมหลักได้ ซึ่งจำเป็นในการเขียนโปรแกรมเพื่อช่วยให้การทำงานมีประสิทธิภาพที่สูงขึ้น.
C Programming Lecture no. 6: Function.
Selected Topics in IT (Java)
Control Transfer Instructions
Addressing Modes Assembly Programming.
Computer Architecture and Assembly Language
CS Assembly Language Programming
CS Assembly Language Programming
CS Assembly Language Programming Period 30.
ASSIGN3-4. InstructionResult Z-FlagC-FlagP-FlagS-FlagO-Flag MOV AL,9Eh 9Eh H ????? ADDAL,9Eh 3C ADD AL,1Eh 5A
แบบฝึกหัด 24/12/09. เมื่อคอมพ์ทำคำสั่งต่อไปนี้ จงแสดง ผลลัพธ์และ ค่าแฟลกต่างๆ InstructionResult Z-FlagC-FlagP- Flag S- Flag O- Flag MOV AL,3h Inc AL Mov.
อาร์เรย์และข้อความสตริง
บทที่ 17 คำสั่งตารางและการสร้างแมคโคร
บทที่ 10 โครงสร้างควบคุม
ความหมายของตัวเลขในหลักต่าง ๆ
ธนาวินท์ รักธรรมานนท์
ธนาวินท์ รักธรรมานนท์
ธนาวินท์ รักธรรมานนท์
โปรแกรมภาษาแอสเซมบลี้ (2)
บทที่ 7 รีเคอร์ซีฟ ระหว่างการออกแบบเขียนโปรแกรมแบบบนลงล่าง (Top-down Design) จะมีงานย่อย(Subtask) เพื่อแก้ปัญหาในแต่ละเรื่อง และผู้เขียนโปรแกรมต้องการใช้งานย่อยในลักษณะที่เรียกตัวเองขึ้นมาทำงานลักษณะของฟังก์ชั่นมีความรอบรัดสั้นกว่าแบบวนลูป.
ภาควิชาวิทยาศาสตร์ประยุกต์ คณะวิทยาศาสตร์เทคโนโลยีและการเกษตร
ตัวแปร (Variable) คือ ชื่อที่ตั้งขึ้นเพื่อเก็บข้อมูลในหน่วยความจำ สามารถเก็บข้อมูลชนิดใดก็ ได้ ลักษณะที่สำคัญ ค่าที่จัดเก็บ เมื่อปิดโปรแกรมข้อมูลจะหายไป.
Debug #2 โครงสร้างคอมพิวเตอร์ และภาษาแอสเซมบลี้
เซกเมนต์ (Segment) โครงสร้างคอมพิวเตอร์ และภาษาแอสเซมบลี้
อินเทอร์รัพท์ (Interrupt)
โครงสร้างข้อมูลแบบคิว
แถวลำดับ (array) ง40202 การเขียนโปรแกรมด้วยภาษาคอมพิวเตอร์
ปฏิบัติการแบบแยก Branch Operation.
การวิเคราะห์และออกแบบระบบฐานข้อมูล
ตัวแปรกับชนิดของข้อมูล
เสรี ชิโนดม ฟังก์ชัน เสรี ชิโนดม
วิทยา กรระสี (วท.บ. วิทยาการคอมพิวเตอร์)
การกระโดดและการวนรอบ
ฟังก์ชัน.
วิชา COSC2202 โครงสร้างข้อมูล (Data Structure)
หลักการเขียนโปรแกรม ( )
หลักการเขียนโปรแกรม ( )
กองซ้อน ยอดกองซ้อน (stack).
Computer Programming การเขียนโปรแกรมคอมพิวเตอร์
บทที่ 9 พอยเตอร์. สื่อชุดนี้เป็นลิขสิทธิ์ของสำนักพิมพ์วังอักษรใช้เพื่อ การศึกษาเท่านั้น พอยเตอร์ (Pointer) พอยเตอร์คือต้นฉบับของชนิดข้อมูล เป็นชนิด ข้อมูลที่สร้างจากข้อมูลมาตรฐานชนิดหนึ่ง.
Chapter 3 - Stack, - Queue,- Infix Prefix Postfix
หลักการเขียนโปรแกรม ( )
stack #2 ผู้สอน อาจารย์ ยืนยง กันทะเนตร
หลักการเขียนโปรแกรม ( )
โครงสร้าง ภาษาซี.
บทที่ 2 โครงสร้างของภาษา C.
stack #1 ผู้สอน อาจารย์ ยืนยง กันทะเนตร
โครงสร้างข้อมูลแบบ สแตก (stack)
บทที่ 6 ตัวแปรชุดและ สตริง รายวิชา ง การเขียนโปรแกรมเชิง วัตถุ Reading: ใบความรู้ บทที่ 6.
Programming assignments ชื่องาน (subject) : program เขียนด้วยภาษา C หรือ C++ มีทั้งหมด 7 ข้อ กำหนดส่ง 29 กรกฎาคม 2554.
ใบสำเนางานนำเสนอ:

บทที่ 15 โปรแกรมย่อยและแสต็ก โปรแกรมย่อยที่ส่งพารามิเตอร์ผ่านทางแสต็ก ตัวแปรภายใน (Local variable) 204221 องค์ประกอบคอมพิวเตอร์และภาษาแอสเซมบลี้ ภาควิชาวิศวกรรมคอมพิวเตอร์ มหาวิทยาลัยเกษตรศาสตร์ สัณฑิติ พัชรรุ่งเรือง จิตร์ทัศน์ ฝักเจริญผล

แสต็ก แสต็ก คือหน่วยความจำที่มีลักษณะการเก็บข้อมูลแบบเก็บทีหลังอ่านออกไปก่อน (Last In First Out) รีจิสเตอร์ SS : SP เก็บตำแหน่งบนสุดของแสต็ก. การเก็บข้อมูลเพิ่มลงในแสต็กจะทำให้แสต็กมีทิศทางในการขยายขนาดไปทางลบ. (ค่าของรีจิส เตอร์ SP มีค่าลดลงครั้งละ 2 ไบต์) SS:SP 100 102 104 106 108 10A หมายเหตุ : ในการเขียนแสต็กเรานิยมเขียนข้อมูลหน่วยละ 1 เวิรด์ เพราะการเก็บข้อมูลในแสต็กจะมีขนาด 1 เวิร์ดเสมอ 204221 องค์ประกอบคอมพิวเตอร์และภาษาแอสเซมบลี้ ภาควิชาวิศวกรรมคอมพิวเตอร์ มหาวิทยาลัยเกษตรศาสตร์ สัณฑิติ พัชรรุ่งเรือง จิตร์ทัศน์ ฝักเจริญผล

แสต็ก การอ้างข้อมูลในแสต็ก ใช้การอ้างแบบสัมพัทธ์กับฐาน โดยคิดอ้างอิงกับค่าในรีจิสเตอร์ BP push bx push dx mov bp,sp mov ax,[bp] ;ax=dx mov si,[bp+2] ;si=bx DX SS:SP BX ? เราสามารถใช้แสต็กในการเก็บค่าพารามิเตอร์ที่ส่งให้โปรแกรมย่อยได้ 204221 องค์ประกอบคอมพิวเตอร์และภาษาแอสเซมบลี้ ภาควิชาวิศวกรรมคอมพิวเตอร์ มหาวิทยาลัยเกษตรศาสตร์ สัณฑิติ พัชรรุ่งเรือง จิตร์ทัศน์ ฝักเจริญผล

แสต็กหลังการเรียกโปรแกรมย่อย โปรแกรมหลัก push ax call testproc โปรแกรมย่อย IP AX testproc proc near SS:SP เราจะอ้างถึงข้อมูลในแสต็กโดยผ่าน BP ต้องเก็บค่าเดิมของ BP ไว้ด้วย BP IP AX push bp mov bp,sp SS:SP, BP อ้างถึง AX ที่ผ่านค่ามาทางแสต็ก mov dx,[bp+4] เมื่อจบโปรแกรมโปรแกรมย่อยของเราจะต้องคืนค่าให้ BP pop bp ระบุให้ลดค่าในแสต็กไป 2 ไบต์หลังการกระโดดกลับ และล้างข้อมูลที่ส่งมาทางแสต็กด้วย ret 2 204221 องค์ประกอบคอมพิวเตอร์และภาษาแอสเซมบลี้ ภาควิชาวิศวกรรมคอมพิวเตอร์ มหาวิทยาลัยเกษตรศาสตร์ สัณฑิติ พัชรรุ่งเรือง จิตร์ทัศน์ ฝักเจริญผล

โครงสร้างทั่วไปของโปรแกรมย่อยที่ส่งค่าผ่านทางแสต็ก proc1 proc near push bp mov bp,sp ... pop bp ret XXX proc1 endp EX เขียนโปรแกรมย่อยแสดงข้อความบนหน้าจอรับพารามิเตอร์ผ่านทางแสต็ก. พารามิเตอร์มีสองค่า. พารามิเตอร์แรกคือออฟเซ็ตของข้อความมีขนาด 1 เวิรด์. พารามิเตอร์ที่สองคือความยาวของข้อความมีขนาด 1 เวิร์ดเช่นเดียวกัน. การ PUSH พารามิเตอร์ลงในแสต็กจะ PUSH พารามิเตอร์แรก ตามด้วยพารามิเตอร์ที่สอง. ลักษณะของแสต็กหลังการเรียกใช้โปรแกรมย่อย และเก็บค่า BP ลงแสต็กเรียบร้อยแล้ว SS:SP,BP BP [BP+2] IP [BP+4] LEN [BP+6] OFFSET 204221 องค์ประกอบคอมพิวเตอร์และภาษาแอสเซมบลี้ ภาควิชาวิศวกรรมคอมพิวเตอร์ มหาวิทยาลัยเกษตรศาสตร์ สัณฑิติ พัชรรุ่งเรือง จิตร์ทัศน์ ฝักเจริญผล

? ตัวอย่าง BP IP LEN OFFSET SS:SP,BP [BP+2] [BP+4] [BP+6] dispstr proc near push bp mov bp,sp push ax push bx push cx push dx mov bx,[bp+6] mov cx,[bp+4] mov ah,2 jcxz endloop printloop: mov dl,[bx] int 21h inc bx loop printloop endloop: pop dx pop cx pop bx pop ax pop bp ret 4 dispstr endp BP IP LEN OFFSET SS:SP,BP [BP+2] [BP+4] [BP+6] แสต็กที่เวลานี้ ? ทำไมเราจึง PUSH BP ก่อนที่จะเก็บค่าของ รีจิสเตอร์ต่าง ๆ 204221 องค์ประกอบคอมพิวเตอร์และภาษาแอสเซมบลี้ ภาควิชาวิศวกรรมคอมพิวเตอร์ มหาวิทยาลัยเกษตรศาสตร์ สัณฑิติ พัชรรุ่งเรือง จิตร์ทัศน์ ฝักเจริญผล

ตัวอย่าง EX BP [BP+2] IP [BP+4] LEN [BP+6] OFFSET เขียนโปรแกรมย่อยคำนวณค่า CHECKSUM ที่ได้จากการนำข้อมูลทั้งหมดมา XOR กัน โดยรับพารามิเตอร์ที่จะถูก PUSH ลงมาใน แสต็กเรียงตามลำดับกันดังนี้ : พารามิเตอร์ตัวแรกคือ ออฟเซ็ตเริ่มต้นของข้อมูล พารามิเตอร์ตัวที่สองคือ จำนวนข้อมูล ข้อมูลมีขนาดค่าละ 1 เวิร์ด. พารามิเตอร์ทั้งสองมีขนาด 1 เวิร์ดทั้งคู่. ให้โปรแกรมย่อยคืนค่า CHECKSUM ผ่านทางรีจิสเตอร์ AX. EX calchecksum proc near push bp mov bp,sp push bx push cx push dx mov bx,[bp+6] mov cx,[bp+4] mov ax,0 jcxz endloop xorloop: xor ax,[bx] inc bx loop xorloop endloop: pop dx pop cx pop bx pop bp ret 4 calchecksum endp BP IP LEN OFFSET SS:SP,BP [BP+2] [BP+4] [BP+6] 204221 องค์ประกอบคอมพิวเตอร์และภาษาแอสเซมบลี้ ภาควิชาวิศวกรรมคอมพิวเตอร์ มหาวิทยาลัยเกษตรศาสตร์ สัณฑิติ พัชรรุ่งเรือง จิตร์ทัศน์ ฝักเจริญผล

ตัวแปรภายใน เราสามารถใช้แสต็กสำหรับการเก็บข้อมูลชั่วคราวในโปรแกรมย่อยได้. โดยเราจะต้องจัดการกันเนื้อที่สำหรับเก็บข้อมูลเอง. testproc proc near push bp mov bp,sp sub sp,4 กันเนื้อที่ไว้ 4 ไบต์ [BP-4] BP IP ?? SS:BP SS:SP ลักษณะของแสต็ก [BP-2] [BP+2] [BP+4] [BP+6] EX เขียนโปรแกรมย่อยหาค่าของข้อมูลที่มีความถี่มากที่สุดจากกลุ่มของข้อมูลที่ผู้ใช้ระบุมาให้. ข้อมูลแต่ละตัวจะมีค่าระหว่าง 1 ถึง 20 และมีขนาด 1 ไบต์. ผู้ใช้จะ PUSH พารามิเตอร์ให้ตามลำดับดังนี้ : ออฟเซ็ตเริ่มต้นของกลุ่มข้อมูล และ จำนวนข้อมูล. (มีขนาด 1 เวิร์ดทั้งคู่) โปรแกรมจะคืนค่าของข้อมูลที่มีความถี่มากที่สุดใน รีจิสเตอร์ AL. ความถี่สูงสุดของข้อมูลจะไม่เกิน 255. 204221 องค์ประกอบคอมพิวเตอร์และภาษาแอสเซมบลี้ ภาควิชาวิศวกรรมคอมพิวเตอร์ มหาวิทยาลัยเกษตรศาสตร์ สัณฑิติ พัชรรุ่งเรือง จิตร์ทัศน์ ฝักเจริญผล

ตัวอย่าง ขั้นตอน จะนับความถี่อย่างไร? โปรแกรมจะต้องนับความถี่ของข้อมูลค่าต่าง ๆ หาข้อมูลที่มีความถี่มากที่สุด จะนับความถี่อย่างไร? ข้อมูลมีขอบเขตระหว่าง 1-20 เก็บความถี่ของข้อมูลในตารางในหน่วยความจำ โปรแกรมย่อย -> ประกาศใช้ข้อมูลในแสต็ก ใช้ข้อมูลขนาด 20 ไบต์ findmost proc near push bp mov bp,sp sub sp,20 ... add sp,20 pop bp ret 4 findmost endp OFFSET LEN IP BP TABLE [20 bytes] SS:SP [BP-1] [BP] [BP-2] [BP+2] [BP+4] [BP+6] 204221 องค์ประกอบคอมพิวเตอร์และภาษาแอสเซมบลี้ ภาควิชาวิศวกรรมคอมพิวเตอร์ มหาวิทยาลัยเกษตรศาสตร์ สัณฑิติ พัชรรุ่งเรือง จิตร์ทัศน์ ฝักเจริญผล