แนะนำการใช้คำสั่ง MCS- 51
1. ACALL addr11
ฟังชั่นก์ : การเรียกโปรแกรมย่อย ที่มีการอ้างอิงแอดเดรสแบบสัมบูรณ์
รายละเอียด : ACALL ใช้เรียกโปรแกรมยอ่ยในตำแหน่งแอดเดรสที่กำหนดแบบไม่มีเงื่อนไขคำสั่งนี้ จะเพิ่มค่าใน PC ขึ้นจากเดิม2 ค่าเพื่อให้สอดคล้องกับค่าแอดเดรสของโปรแกรมย่อยจากไบท์ที่ตามหลังมาสองไบท์ แล้วพุชผลลัพธ์ซึ่งมีขนาด 16 บิทเก็บไว้ที่สแต็กและเพิ่มค่าตัวชี้สแต็ก 2 ค่า จากนั้นนำเอาค่าแอด เดรสของโปรแกรมย่อยถูกเรียกวางลงใน PC ค่านี้ได้จากระหัสคำสั่งบิท 7-5 และไบท์ที่สองของคำสั่งเรียก ฉะนั้นตำแหน่งแอดเดรสของโปรแกรมย่อยจะอยู่ภายในขอบเขต 2กิโลไบท์ของหน่วยความจำที่ใช้โปรแกรม
ตัวอย่าง : กำหนดค่า SP เริ่มต้นมีค่า 07H, SUBRTN เป็นชื่อของโปรแกรมย่อยที่ตำแหน่ง 0345H จะถูกเรียกหลังจากกระทำคำสั่ง
2.ACALL SUBRTN
ที่ตำแหน่งแอดเดรส 0 123H RAM ภายในที่ตำแหน่ง 08H และ 09H จะเก็บค่า 25H และ 01H ตามลำดับ
ค่าใน SP จะเป็น 09H และ ค่าใน PC จะเป็น 0345H
จำนวนไบท์ : 2
วงรอบแมซีน : 2
การกระทำ: ACALL
(PC) < -- (PC) + 2
(SP) < -- (SP) + 1
((SP)) < -- (PC 7–0)
(SP) < -- (SP) + 1
((SP)) < -- (PC 15–8)
(PC 10-0) < -- page address
3.ADD A,<src-byte>
ฟังชั่นก์ : บวกข้อมูล
รายละเอียด : เป็นการบวกค่าตัวแปรจากไบท์ข้อมูลที่ถูกกำหนดกัยค่าในแอกคิวมูเลเตอร์แล้วเก็บผล ลัพธ์ไว้ที่ได้ไว้ในแอกคิวมูเลเตอร์ ถ้ามีตัวทดจากบิท 7 หรือบิท 3 แฟลกตัวทดหรือแฟลกออกซิเลียรีจะเซ็ทตาม ลำดับ ถ้าบวกกันโดยไม่ใช้เครื่องหมายแฟลกตัวทดจะหมายถึงการเกิด โอเวอร์โฟล์ว
OV จะเซ็ท เมื่อมีตัวทดจาก บิท 6 แตไม่มีตัวทดออกจาก บิท 7 หรือ เมื่อมีตัวทดจาก บิท 7 แต่ไม่มีตัวทดออกจาก บิท 6 ถ้าไม่เป็นไปตามนี้ OV จะเคลียร์ เมื่อมีการบวกค่าตัวเลขอินทีเจอร์ที่มีเครื่องหมาย
OV จะแสดงถึงจำนวนลบจากผลรวมของโอเปอร์แรนด์สองตัวที่เป็นบวก หรือจะแสดงถึงผลบวกของโอเปอร์แนด์ที่ลบ
ตัวอย่าง : แอกคิวมูเลเตอร์มีค่า 0C3H (1100001B), รีจิสเตอร์0 มีค่า 0AAH(10101010B) เมื่อทำคำสั่ง
4.ADD A,RO
มีผลที่ได้เป็น 6DH (01101101B) ถูกเก็บไว้ในแอกคิวมูเลเตอร์,แฟลกAC จะถูกเคลียร์แฟลกตัวทด กับ แฟลกโอเวอร์โฟล์ว จะถูกเซ็ท เป็น 1
กลุ่มคำสั่งที่ใช้เกี่ยวกับการบวกข้อมูลจะประกอบด้วย
5.ADD A,Rn
จำนวนไบท์ : 1
วงรอบแมซีน : 1
|
0 0 1 0 |
|
1 r r r |
การเข้าระหัส :
การกระทำ: ADD
(A) < -- (A) + (Rn)
6.ADD A,direct
จำนวนไบท์ : 2
วงรอบแมซีน : 1
|
0 0 1 0 |
|
0 1 0 1 |
การกระทำ: ADD
(A) < -- (A) + (direct)
7.ADD A,@RI
จำนวนไบท์ : 1
วงรอบแมซีน : 1
การเข้าระหัส :
การกระทำ: ADD
(A) < -- (A) + ((Ri))
8.ADD A,#data
จำนวนไบท์ : 2
วงรอบแมซีน : 1
|
0 0 1 0 |
|
0 1 0 0 |
การเข้าระหัส :
การกระทำ: ADD
(A) < -- (A) + #data
9.ADDC A,<src-byte>
ฟังชั่นก์ : บวกตัวแปรและแฟลกตัวทดเข้าด้วยกันทั้งหมด
รายละเอียด : คำสั่ง ADDC เป็นการบวกตัว แปรที่กำหนดเข้ากับข้อมูลในแอกคิวมูเลเตอร์พร้อมทั้งแฟลกตัวทดแล้วเก็บผลที่ได้ไว้ในแอกคิวมูเลเตอร์ แฟลกตัวทด และแฟลกออกซิเลียรี จะเซ็ทตามลำดับ ถ้ามีการทดจากบิท 7 หรือ บิท 3 แต่ถ้าไม่มีจะเคลียร์ เมื่อมีการบวกตัวเลขอินทีเจอร์ที่ไม่มีเครื่องหมาย การเซ็ทค่าใน แฟลกตัวทดจะ หมายถึงผลลัพธ์ที่ได้มีค่ามากเกินที่จะเก็บไว้ในแอกคิวมูเลเตอร์ได้หมด
OV จะเซ็ท เมื่อมีตัวทดจาก บิท 6 แต่ไม่มีตัวทดออกจาก บิท 7 หรือ เมื่อมีตัวทดจากบิท 7 แต่ไม่มีตัวอย่างออกจาก บิท 6 ถ้าไม่เป็นไปตามนี้ OV จะเคลียร์ เมื่อมีการบวกค่าตัวเลขอินทีเจอร์ที่มีเครื่องหมาย
OV จะแสดงถึงจำนวนลบจากผลรวมของโอเปอร์แรนด์สวองตัวที่เป็นบวกหรือจะแสดงถึงผลบวกของโอเปอร์แรนด์ที่เป็นลบ
ตัวอย่าง : กำหนดให้ แอกคิวมูเลเตอร์ มีค่า 0C3H (11000011B) และรีจิสเตอร์ 0 มีค่า 0AAH(10101010B) โดยที่แฟลกตัวทดถูก เซ็ท ไว้แล้ว เมื่อกระทำคำสั่ง
10.ADDC A,RO
มีผลที่ได้เป็น 6EH (01101110B) ถูกเก็บไว้ในแอกคิวมูเลเตอร์แฟลกออกซิเลียรีจะเคลียร์และ แฟลกตัวทด กับ แฟลกโอเวอร์โฟล์วจะเซ็ท เป็น 1