Upload
arthur-dickson
View
15
Download
0
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
โปรแกรมย่�อย่
ธนาวิ�นท์� รักธรัรัมานนท์�[email protected]
2
หัวิข้�อในวินน��โปรัแกรัมย่�อย่
• การัเรั�ย่กใช้�งานโปรัแกรัมย่�อย่• การัท์�างานข้องแสต็�กซ์�ข้ณะเรั�ย่กใช้�งาน
โปรัแกรัมย่�อย่
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
โปรัแกรัมย่�อย่ข้�นต็�น การประกาศ
procname PROC NEAR … ;program RET
procname ENDP
การัเรั�ย่กใช้� CALL procname
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
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
โจิท์ย่�เก�(ย่วิกบโปรัแกรัมย่�อย่1. จิงเข้�ย่นโปรัแกรัมย่�อย่เพื่&(อรับคื�าอกษรั 1 ต็วิจิากผู้*�
ใช้�แลัะเก�บเป1นต็วิเลัข้ไวิ�ใน AX แลัะถู�าอกษรัท์�(ผู้*�ใช้�รัะบ2ไม�ใช้�ต็วิเลัข้ใหั� AX=-1
call readInt ; ผู้*�ใช้�ใส� ‘5’ แลั�วิ AX = 5h
2. จิงเข้�ย่นโปรัแกรัมย่�อย่เพื่&(อแสดงคื�าข้องต็วิเลัข้ท์�(เก�บไวิ�ใน DX (ไม�เก�น 255)
mov dx , C8h
call printInt ; แสดงเลัข้ 200 บนหัน�าจิอ
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
9
การัใช้�งานแสต็�กซ์� คื�าส(งเก�(ย่วิกบแสต็�กซ์�
• PUSH reg : ใส�คื�าลังใน stack
• POP reg : อ�านคื�าข้3�นมาจิาก stack โดย่ปกต็�รั�จิ�สเต็อรั� SS:SP จิะเก�บต็�าแหัน�งบน
ส2ดข้องแสต็�ก . เม&(อเรัาส(ง PUSH หัรั&อ POPกบสแต็�กซ์�หัน�วิย่ปรัะมวิลัผู้ลัจิะปรับคื�าข้องรั�จิ�สเต็อรั� SP ใหั�ม�คื�าช้��ต็�าแหัน�งบนส2ดข้องแสต็�กอ�กคืรั�ง
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
;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
12
การัเปลั�(ย่นไปข้องแสต็�กซ์�กบโปรัแกรัมย่�อย่
?
call printhexdigit
IP?
กรัะโดดไปท์�างานท์�(โปรัแกรัมย่�อย่push axpush dx
DXAXIP?
pop dxpop ax
DXAXIP?ret
กรัะโดดกลับไป โปรัแกรัมหัลัก
IP?
13
โจิท์ย่�เก�(ย่วิกบโปรัแกรัมย่�อย่5. จิงเข้�ย่นโปรัแกรัมเพื่&(อแสดงจิ�านวินเฉพื่าะท์�(อย่*�รัะหัวิ�าง 1 ถู3ง 999
โดย่แสดงผู้ลัลัพื่ธ�ท์างหัน�าจิอคื�าแนะน�า : ใช้�โปรัแกรัมย่�อย่ช้�วิย่จิะง�าย่ข้3�นมาก
- โปรัแกรัมย่�อย่แสดงต็วิเลัข้- โปรัแกรัมย่�อย่ในการัต็รัวิจิสอบจิ�านวินเฉพื่าะ
14
โจิท์ย่�เก�(ย่วิกบโปรัแกรัมย่�อย่ (การับ�าน)
จิงเข้�ย่นโปรัแกรัมย่�อย่เพื่&(อท์�างานแท์นแสต็�ก โดย่ใหั�เข้�ย่น 2โปรัแกรัมย่�อย่
ได�แก� myPush แลัะ myPop
ก�าหนดให� หัน�วิย่คืวิามจิ�าต็�าแหัน�ง 100 เก�บจิ�านวินข้�อม*ลัท์�(ม�ในแสต็�กแลัะหัน�วิย่คืวิามจิ�าต็�าแหัน�ง 101 เป1นต็�นไปเก�บคื�าท์�(ต็�องการั
myPush – เป1นโปรัแกรัมย่�อย่ท์�(ใช้�ในการัเก�บข้�อม*ลัใน AX ลังแสต็�กท์�(เรัาก�าหันดmyPop – ใช้�ส�าหัรับน�าข้�อม*ลัออกจิาก stack แลัะน�ามาเก�บใน AX
15
Question ?