งานนำเสนอกำลังจะดาวน์โหลด โปรดรอ

งานนำเสนอกำลังจะดาวน์โหลด โปรดรอ

โปรแกรมย่อย ธนาวินท์ รักธรรมานนท์

งานนำเสนอที่คล้ายกัน


งานนำเสนอเรื่อง: "โปรแกรมย่อย ธนาวินท์ รักธรรมานนท์"— ใบสำเนางานนำเสนอ:

1 โปรแกรมย่อย ธนาวินท์ รักธรรมานนท์

2 2 หัวข้อในวันนี้ โปรแกรมย่อย การเรียกใช้งานโปรแกรมย่อย การทำงานของแสต็กซ์ขณะเรียกใช้งาน โปรแกรมย่อย

3 3 Procedure Operation (Pascal) Program draw(input, output); Var I:integer; Procedure writeBox; Begin writeln(‘ ’); writeln(‘- -’); writeln(‘ ’); End; Begin { main program} writeln(‘Hello…..’); for I:= 1 to 10 do writeBox; writeln(‘Bye’); End.

4 4 โปรแกรมย่อยขั้นต้น การประกาศ procname PROC NEAR … ;program RET procname ENDP การเรียกใช้ CALL procname

5 5 ตัวอย่างโปรแกรมย่อย - การประกาศ ;print Hex digit ;input al<-digit ;affect : dl,ah printhexdigit proc near mov ah, 2 mov dl, al cmp al, 10 add dl, ’0’ jb printit add dl, ’A’-’0’-10 printit: int 21h ret printhexdigit endp

6 6 ตัวอย่างโปรแกรมย่อย - การเรียกใช้ ; print a 2-digit hex number ; the digits is stored in bh,bl... mov al,bh call printhexdigit mov al,bl call printhexdigit... ข้อเสียหลักคือรีจิสเตอร์ที่ถูกใช้งานใน โปรแกรมย่อยทั้งหมดจะถูกเปลี่ยนค่าไปด้วย แก้โดยใช้สแต็กซ์มาเก็บค่าของรีจิสเตอร์แต่ ละตัวไว้ก่อนการทำงาน

7 7 โจทย์เกี่ยวกับโปรแกรม ย่อย 1. จงเขียนโปรแกรมย่อยเพื่อรับค่าอักษร 1 ตัวจาก ผู้ใช้และเก็บเป็นตัวเลขไว้ใน AX และถ้าอักษรที่ ผู้ใช้ระบุไม่ใช่ตัวเลขให้ AX=-1 callreadInt ; ผู้ใช้ใส่ ‘5’ แล้ว AX = 5h 2. จงเขียนโปรแกรมย่อยเพื่อแสดงค่าของตัวเลขที่ เก็บไว้ใน DX ( ไม่เกิน 255) movdx, C8h callprintInt ; แสดงเลข 200 บน หน้าจอ

8 8 โจทย์เกี่ยวกับโปรแกรม ย่อย 3. จงเขียนโปรแกรมย่อยเพื่อคำนวณผลรวมตั้งแต่ AX และเก็บคำตอบสุดท้ายไว้ใน AX movax,10 callsigma; ax = จงเขียนโปรแกรมย่อยเพื่อหาหรม. ของ BX และ CX โดยเก็บค่าไว้ใน AX movbx, 100 movcx, 225 callgcd; ax = 25

9 9 การใช้งานแสต็กซ์ คำสั่งเกี่ยวกับแสต็กซ์ PUSH reg : ใส่ค่าลงใน stack POP reg : อ่านค่าขึ้นมาจาก stack โดยปกติรีจิสเตอร์ SS:SP จะเก็บตำแหน่ง บนสุดของแสต็ก. เมื่อเราสั่ง PUSH หรือ POP กับสแต็กซ์หน่วยประมวลผลจะปรับค่า ของรีจิสเตอร์ SP ให้มีค่าชี้ตำแหน่งบนสุดของ แสต็กอีกครั้ง

10 10 ตัวอย่างการใช้งานแสต็กซ์ ??? SS : SP AX = 1234 PUSH AX 1234 ??? SS : SP DX = 034A PUSH DX 034A 1234 ??? SS : SP POP BX 034A 1234 ??? SS : SP BX = 034A Mov AX,1234h Mov DX,034Ah Push AX Push DX Pop BX

11 ;print Hex digit ;input al<-digit printhexdigit proc near mov ah,2 mov dl,al add dl,’0’ cmp al,10 jb printit add dl,’A’-’0’-10 printit: int 21h ret printhexdigit endp pop dx pop ax push ax push dx

12 12 การเปลี่ยนไปของแสต็กซ์กับ โปรแกรมย่อย ? call printhexdigit IP ? กระโดดไปทำงานที่โปรแกรมย่อย push ax push dx DX AX IP ? pop dx pop ax DX AX IP ? ret กระโดดกลับไป โปรแกรมหลัก IP ?

13 13 โจทย์เกี่ยวกับโปรแกรม ย่อย 5. จงเขียนโปรแกรมเพื่อแสดงจำนวน เฉพาะที่อยู่ระหว่าง 1 ถึง 999 โดย แสดงผลลัพธ์ทางหน้าจอ คำแนะนำ : ใช้โปรแกรมย่อยช่วยจะง่ายขึ้น มาก - โปรแกรมย่อยแสดงตัวเลข - โปรแกรมย่อยในการตรวจสอบจำนวน เฉพาะ

14 14 โจทย์เกี่ยวกับโปรแกรม ย่อย ( การบ้าน ) จงเขียนโปรแกรมย่อยเพื่อทำงานแทนแสต็ก โดย ให้เขียน 2 โปรแกรมย่อย ได้แก่ myPush และ myPop กำหนดให้ หน่วยความจำตำแหน่ง 100 เก็บ จำนวนข้อมูลที่มีในแสต็ก และหน่วยความจำตำแหน่ง 101 เป็นต้นไปเก็บ ค่าที่ต้องการ myPush – เป็นโปรแกรมย่อยที่ใช้ในการเก็บข้อมูลใน AX ลงแสต็กที่เรากำหนด myPop – ใช้สำหรับนำข้อมูลออกจาก stack และนำมา เก็บใน AX

15 15 Question ?


ดาวน์โหลด ppt โปรแกรมย่อย ธนาวินท์ รักธรรมานนท์

งานนำเสนอที่คล้ายกัน


Ads by Google