ดาวน์โหลดงานนำเสนอ
งานนำเสนอกำลังจะดาวน์โหลด โปรดรอ
1
บทที่ 11 โปรแกรมย่อยขั้นต้น
การประกาศ procname PROC NEAR … ;program RET procname ENDP การเรียกใช้ CALL procname ;print Hex digit ;input al<-digit ;affect : dl,ah 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 องค์ประกอบคอมพิวเตอร์และภาษาแอสเซมบลี้ ภาควิชาวิศวกรรมคอมพิวเตอร์ มหาวิทยาลัยเกษตรศาสตร์ สัณฑิติ พัชรรุ่งเรือง จิตร์ทัศน์ ฝักเจริญผล
2
โปรแกรมย่อยขั้นต้น ผลกระทบข้างเคียง คำสั่งเกี่ยวกับ stack
; print a 2-digit hex number ; the digits is stored in bh,bl ... mov al,bh call printhexdigit mov al,bl ผลกระทบข้างเคียง การทำงานของโปรแกรมย่อยอาจมีผลกระทบข้างเคียงกับ รีจิสเตอร์อื่น ๆ ได้ เราควรป้องกันการเกิดผลกระทบนี้ เก็บรักษาค่าเดิมของรีจิสเตอร์ -> ใช้ stack คำสั่งเกี่ยวกับ stack PUSH reg : ใส่ค่าลงใน stack POP reg : อ่านค่าขึ้นมาจาก stack องค์ประกอบคอมพิวเตอร์และภาษาแอสเซมบลี้ ภาควิชาวิศวกรรมคอมพิวเตอร์ มหาวิทยาลัยเกษตรศาสตร์ สัณฑิติ พัชรรุ่งเรือง จิตร์ทัศน์ ฝักเจริญผล
3
การทำงานของคำสั่ง PUSH และ POP
โดยปกติรีจิสเตอร์ SS:SP จะเก็บตำแหน่งบนสุดของแสต็ก. เมื่อเราสั่ง PUSH หรือ POP กับแสต็กหน่วยประมวลผลจะปรับค่าของรีจิสเตอร์ SP ให้มีค่าชี้ตำแหน่งบนสุดของแสต็กอีกครั้ง. AX = 1234 PUSH AX SS : SP 1234 SS : SP DX = 034A PUSH DX SS : SP 034A POP BX 034A 1234 SS : SP 1234 BX = 034A องค์ประกอบคอมพิวเตอร์และภาษาแอสเซมบลี้ ภาควิชาวิศวกรรมคอมพิวเตอร์ มหาวิทยาลัยเกษตรศาสตร์ สัณฑิติ พัชรรุ่งเรือง จิตร์ทัศน์ ฝักเจริญผล
4
โปรแกรมย่อยขั้นต้น ;print Hex digit ;input al<-digit
printhexdigit proc near push ax push dx mov ah,2 mov dl,al add dl,’0’ cmp al,10 jb printit add dl,’A’-’0’-10 printit: int 21h pop dx pop ax ret printhexdigit endp องค์ประกอบคอมพิวเตอร์และภาษาแอสเซมบลี้ ภาควิชาวิศวกรรมคอมพิวเตอร์ มหาวิทยาลัยเกษตรศาสตร์ สัณฑิติ พัชรรุ่งเรือง จิตร์ทัศน์ ฝักเจริญผล
5
โปรแกรมย่อยขั้นต้น การเปลี่ยนแปลงของ stack เมื่อมีการเรียกโปรแกรมย่อย
call printhexdigit กระโดดไปทำงานที่โปรแกรมย่อย ? IP ? DX push ax push dx AX ปรับค่าโดยอัตโนมัติ หลักการสั่ง CALL และ RET IP ? DX pop dx pop ax AX IP ? ret IP กระโดดกลับไป โปรแกรมหลัก ? การผ่านค่า parameter ให้กับโปรแกรมย่อยจากตัวอย่างใช้การผ่านค่าผ่านทางรีจิสเตอร์. ในบทถัด ๆ ไปเราจะได้เรียนรู้การผ่านค่าผ่านทาง stack ซึ่งเป็นแบบนิยมใช้ในภาษาระดับสูง. องค์ประกอบคอมพิวเตอร์และภาษาแอสเซมบลี้ ภาควิชาวิศวกรรมคอมพิวเตอร์ มหาวิทยาลัยเกษตรศาสตร์ สัณฑิติ พัชรรุ่งเรือง จิตร์ทัศน์ ฝักเจริญผล
งานนำเสนอที่คล้ายกัน
© 2024 SlidePlayer.in.th Inc.
All rights reserved.