project

แนะนำการใช้คำสั่ง 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