CS344-321 Assembly Language Programming Period 34
ในกรณีการผ่านพารามิเตอร์ทาง stack ควรสร้าง macro สองตัว คือ enter_proc macro total_local_size push bp mov bp,sp sub sp,total_local_size endm และ
exit_proc macro total_para_size mov sp,bp pop bp ret total_para_size เช่น proc swap สามารถ เรียกใช้ดังนี้
swap proc enter_proc 2 . . . … exit_proc 4 swap endp
Macro Call within Macro Definition ในส่วน body ของ macro definition สามารถมีการ call macro ได้ เช่น dos21 macro dosfunc mov ah,dosfunc int 21h endm disp macro char mov dl,char dos21 02 macro call within macro definition นอกจากนี้ยังมี directive อื่น ๆ เช่น local หรือ conditional ต่าง ๆ ได้ แต่จะไม่กล่าวถึงในที่นี้
เช่น การ call disp ดังนี้ disp ‘x’ จะถูก expand เป็น mov dl,’x’ mov ah,02 int 21h
Macro V.S. Subroutine macro มีความแตกต่างจาก subroutine คือ การ call macro กระทำในช่วงการแปล (assemble หรือ compile time) โดยการ expansion ในขณะที่ทำ expansion จะมีการแทน dummy parameter ด้วย actual parameter (ถ้ามี) ส่วน การ call subroutine กระทำในช่วงกระทำการ (execution time) เป็นการจำตำแหน่งของคำสั่งถัดไป และกระโดดไปยัง subroutine ที่ต้องการ การส่งผ่าน parameter ทำได้หลายแบบ เช่น pass by value หรือ pass by reference เป็นต้น ทุกครั้งที่มีการ call macro ส่วน body ของ macro definition จะถูก expand ทุกครั้งและกินเนื้อที่เพิ่มขึ้นเท่ากับจำนวนครั้งที่มีการ call แต่การ call subroutine จะกินเนื้อที่เท่ากับคำสั่ง call เท่านั้น subroutine ที่ถูก call ยังคงกินเนื้อที่เท่าเดิม