15
โโโโโโโโโโโ ธธธธธธธธ ธธธธธธธธธธธธ [email protected]

โปรแกรมย่อย

Embed Size (px)

DESCRIPTION

โปรแกรมย่อย. ธนาวินท์ รักธรรมานนท์ [email protected]. หัวข้อในวันนี้. โปรแกรมย่อย การเรียกใช้งานโปรแกรมย่อย การทำงานของแสต็กซ์ขณะเรียกใช้งานโปรแกรมย่อย. Procedure Operation (Pascal). Program draw(input, output); Var I:integer; Procedure writeBox; Begin writeln(‘------------’); - PowerPoint PPT Presentation

Citation preview

Page 1: โปรแกรมย่อย

โปรแกรมย่�อย่

ธนาวิ�นท์� รักธรัรัมานนท์�[email protected]

Page 2: โปรแกรมย่อย

2

หัวิข้�อในวินน��โปรัแกรัมย่�อย่

• การัเรั�ย่กใช้�งานโปรัแกรัมย่�อย่• การัท์�างานข้องแสต็�กซ์�ข้ณะเรั�ย่กใช้�งาน

โปรัแกรัมย่�อย่

Page 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.

Page 4: โปรแกรมย่อย

4

โปรัแกรัมย่�อย่ข้�นต็�น การประกาศ

procname PROC NEAR … ;program RET

procname ENDP

การัเรั�ย่กใช้� CALL procname

Page 5: โปรแกรมย่อย

5

ต็วิอย่�างโปรัแกรัมย่�อย่ - การัปรัะกาศ

;print Hex digit;input al<-digit;affect : dl,ahprinthexdigit proc near mov ah , 2 mov dl , al cmp al , 10 add dl , ’0’ jb printit add dl , ’A’-’0’-10 printit: int 21h retprinthexdigit endp

Page 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 ...

ข้�อเส�ย่หัลักคื&อรั�จิ�สเต็อรั�ท์�(ถู*กใช้�งานในโปรัแกรัมย่�อย่ท์�งหัมดจิะถู*กเปลั�(ย่นคื�าไปด�วิย่

แก�โดย่ใช้�สแต็�กซ์�มาเก�บคื�าข้องรั�จิ�สเต็อรั�แต็�ลัะต็วิไวิ�ก�อนการัท์�างาน

Page 7: โปรแกรมย่อย

7

โจิท์ย่�เก�(ย่วิกบโปรัแกรัมย่�อย่1. จิงเข้�ย่นโปรัแกรัมย่�อย่เพื่&(อรับคื�าอกษรั 1 ต็วิจิากผู้*�

ใช้�แลัะเก�บเป1นต็วิเลัข้ไวิ�ใน AX แลัะถู�าอกษรัท์�(ผู้*�ใช้�รัะบ2ไม�ใช้�ต็วิเลัข้ใหั� AX=-1

call readInt ; ผู้*�ใช้�ใส� ‘5’ แลั�วิ AX = 5h

2. จิงเข้�ย่นโปรัแกรัมย่�อย่เพื่&(อแสดงคื�าข้องต็วิเลัข้ท์�(เก�บไวิ�ใน DX (ไม�เก�น 255)

mov dx , C8h

call printInt ; แสดงเลัข้ 200 บนหัน�าจิอ

Page 8: โปรแกรมย่อย

8

โจิท์ย่�เก�(ย่วิกบโปรัแกรัมย่�อย่3. จิงเข้�ย่นโปรัแกรัมย่�อย่เพื่&(อคื�านวิณผู้ลัรัวิมต็�งแต็� 123+ + +..+AX แลัะเก�บคื�าต็อบส2ดท์�าย่ไวิ�ใน AXmov ax,10

call sigma ; ax = 55

4. จิงเข้�ย่นโปรัแกรัมย่�อย่เพื่&(อหัาหัรัม.ข้อง BX แลัะ CX โดย่เก�บคื�าไวิ�ใน AXmov bx , 100

mov cx , 225

call gcd ; ax = 25

Page 9: โปรแกรมย่อย

9

การัใช้�งานแสต็�กซ์� คื�าส(งเก�(ย่วิกบแสต็�กซ์�

• PUSH reg : ใส�คื�าลังใน stack

• POP reg : อ�านคื�าข้3�นมาจิาก stack โดย่ปกต็�รั�จิ�สเต็อรั� SS:SP จิะเก�บต็�าแหัน�งบน

ส2ดข้องแสต็�ก . เม&(อเรัาส(ง PUSH หัรั&อ POPกบสแต็�กซ์�หัน�วิย่ปรัะมวิลัผู้ลัจิะปรับคื�าข้องรั�จิ�สเต็อรั� SP ใหั�ม�คื�าช้��ต็�าแหัน�งบนส2ดข้องแสต็�กอ�กคืรั�ง

Page 10: โปรแกรมย่อย

10

ต็วิอย่�างการัใช้�งานแสต็�กซ์�

???SS : SP

AX = 1234

PUSH AX

1234???

SS : SP

DX = 034APUSH 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

Page 11: โปรแกรมย่อย

;print Hex digit;input al<-digitprinthexdigit proc near

mov ah,2 mov dl,al add dl,’0’ cmp al,10 jb printit add dl,’A’-’0’-10printit: int 21h

retprinthexdigit endp

pop dx pop ax

push axpush dx

Page 12: โปรแกรมย่อย

12

การัเปลั�(ย่นไปข้องแสต็�กซ์�กบโปรัแกรัมย่�อย่

?

call printhexdigit

IP?

กรัะโดดไปท์�างานท์�(โปรัแกรัมย่�อย่push axpush dx

DXAXIP?

pop dxpop ax

DXAXIP?ret

กรัะโดดกลับไป โปรัแกรัมหัลัก

IP?

Page 13: โปรแกรมย่อย

13

โจิท์ย่�เก�(ย่วิกบโปรัแกรัมย่�อย่5. จิงเข้�ย่นโปรัแกรัมเพื่&(อแสดงจิ�านวินเฉพื่าะท์�(อย่*�รัะหัวิ�าง 1 ถู3ง 999

โดย่แสดงผู้ลัลัพื่ธ�ท์างหัน�าจิอคื�าแนะน�า : ใช้�โปรัแกรัมย่�อย่ช้�วิย่จิะง�าย่ข้3�นมาก

- โปรัแกรัมย่�อย่แสดงต็วิเลัข้- โปรัแกรัมย่�อย่ในการัต็รัวิจิสอบจิ�านวินเฉพื่าะ

Page 14: โปรแกรมย่อย

14

โจิท์ย่�เก�(ย่วิกบโปรัแกรัมย่�อย่ (การับ�าน)

จิงเข้�ย่นโปรัแกรัมย่�อย่เพื่&(อท์�างานแท์นแสต็�ก โดย่ใหั�เข้�ย่น 2โปรัแกรัมย่�อย่

ได�แก� myPush แลัะ myPop

ก�าหนดให� หัน�วิย่คืวิามจิ�าต็�าแหัน�ง 100 เก�บจิ�านวินข้�อม*ลัท์�(ม�ในแสต็�กแลัะหัน�วิย่คืวิามจิ�าต็�าแหัน�ง 101 เป1นต็�นไปเก�บคื�าท์�(ต็�องการั

myPush – เป1นโปรัแกรัมย่�อย่ท์�(ใช้�ในการัเก�บข้�อม*ลัใน AX ลังแสต็�กท์�(เรัาก�าหันดmyPop – ใช้�ส�าหัรับน�าข้�อม*ลัออกจิาก stack แลัะน�ามาเก�บใน AX

Page 15: โปรแกรมย่อย

15

Question ?