ข้ามไปที่เนื้อหาหลัก

รวมชุดคำสั่ง Assembly ของ AVR

บทความนี้ได้รวบรวมชุดคำสั่งภาษา assembly ของไมโคคอนโทรลเลอร์ตระกูล AVR และสรุปการใช้งานเป็นภาษาไทยอย่างง่ายหากมีข้อผิดพลาด ขออภัยด้วยครับ
ชุดคำสั่งทางคณิตศาสตร์และลอจิก
add Rd, Rr   :   Rd + Rr เก็บผลลัพธ์ไว้ใน Rd
adc Rd, Rr   :   Rd + Rr + Carry flag  เก็บผลลัพธ์ไว้ใน Rd
mul Rd, Rr   :   Rd x Rr ได้ผลลัพธ์เป็น 16 bit เก็บไว้ใน R0, R1
sub Rd, Rr   :   Rd - Rr เก็บผลลัพธ์ไว้ใน Rd
sbc Rd, Rr   :   Rd - Rr - Carry flag  เก็บผลลัพธ์ไว้ใน Rd
and Rd, Rr   :   Rd and Rr แบบ bit ต่อ bit
or Rd, Rr   :   Rd or Rr แบบ bit ต่อ bit
eor Rd, Rr   :    Rd exclusive or Rr แบบ bit ต่อ bit
com Rd   :   complement (กลับบิต) Rd
neg Rd   :   2'complement (ติดลบ) Rd
inc Rd   :   Rd++
dec Rd   :   Rd--
clr Rd   :   เคลียร์ bit Rd เป็น 0
ชุดคำสั่งเคลื่อนย้ายข้อมูล
mov Rd, Rr   :   copy ข้อมูลขนาด 1 byte จาก Rr ไว้ใน Rd
movw Rd, Rr   :   copy ข้อมูลขนาด 2 bytes จาก Rr, Rr+1 ไว้ใน Rd, Rd+1
ldi   Rd, k   :   โหลดค่าใส่ register , k มีค่า 0 - 255
ld Rd, X   :   อ่านค่าตำแหน่งที่ X ชี้อยู่เก็บไว้ใน Rd
ld Rd, Y   :   อ่านค่าตำแหน่งที่ Y ชี้อยู่เก็บไว้ใน Rd
ld Rd, Z   :   อ่านค่าตำแหน่งที่ Z ชี้อยู่เก็บไว้ใน Rd
ld Rd, -X   :   อ่านค่าตำแหน่งที่ X-1 ชี้อยู่เก็บไว้ใน Rd
ld Rd, -Y   :   อ่านค่าตำแหน่งที่ Y-1 ชี้อยู่เก็บไว้ใน Rd
ld Rd, -Z   :   อ่านค่าตำแหน่งที่ Z-1 ชี้อยู่เก็บไว้ใน Rd
ld Rd, X+   :   อ่านค่าตำแหน่งที่ X ชี้อยู่เก็บไว้ใน Rd จากนั้น X เลื่อนไป 1 ตำแหน่ง
ld Rd, Y+   :   อ่านค่าตำแหน่งที่ Y ชี้อยู่เก็บไว้ใน Rd จากนั้น Y เลื่อนไป 1 ตำแหน่ง 
ld Rd, Z+   :   อ่านค่าตำแหน่งที่ Z ชี้อยู่เก็บไว้ใน Rd จากนั้น Z เลื่อนไป 1 ตำแหน่ง
st X, Rd   :   เขียนข้อมูลจาก Rd ลงไปใน SRAM ตำแหน่งที่ X ชี้อยู่
st Y, Rd   :   เขียนข้อมูลจาก Rd ลงไปใน SRAM ตำแหน่งที่ Y ชี้อยู่
st Z, Rd   :   เขียนข้อมูลจาก Rd ลงไปใน SRAM ตำแหน่งที่ Z ชี้อยู่
st -X, Rd   :   เขียนข้อมูลจาก Rd ลงไปใน SRAM ตำแหน่งที่ X-1 ชี้อยู่
st -Y, Rd   :   เขียนข้อมูลจาก Rd ลงไปใน SRAM ตำแหน่งที่ Y-1 ชี้อยู่
st -Z, Rd   :   เขียนข้อมูลจาก Rd ลงไปใน SRAM ตำแหน่งที่ Z-1 ชี้อยู่
st X+, Rd   :   เขียนข้อมูลจาก Rd ลงไปใน SRAM ตำแหน่งที่ X ชี้อยู่จากนั้น X เลื่อนไป 1 ตำแหน่ง
st Y+, Rd   :   เขียนข้อมูลจาก Rd ลงไปใน SRAM ตำแหน่งที่ Y ชี้อยู่จากนั้น Y เลื่อนไป 1 ตำแหน่ง
st Z+, Rd   :   เขียนข้อมูลจาก Rd ลงไปใน SRAM ตำแหน่งที่ Z ชี้อยู่จากนั้น Z เลื่อนไป 1 ตำแหน่ง
lpm   :   อ่านค่าจาก SRAM ตำแหน่งที่ Z ชี้อยู่เก็บไว้ใน R0
in  Rd, A   :   อ่านค่าจาก Input Address A ไปเก็บใน Rd (Input Address เช่น PINB, PINC, PIND)
out A, Rr   :   ส่งค่าข้อมูลจาก Rr ไปยัง Output Address A (Output Address เช่น PORTB, PORTC, PORTD)
push Rr   :   เก็บค่า Rr ไว้ใน Stack
pop Rd   :   นำค่าบนสุดของ Stack มาเก็บไว้ใน Rd
ชุดคำสั่งควบคุมการทำงานของ CPU
nop   :   No Operand คือไม่ทำอะไรเลย 1 clk
sleep   :   เข้าสู่โหมดประหยัดพลังงาน
wdr   :   รีเซ็ต watch dog timer
ชุดคำสั่งควบคุมการทำงานของโปรแกรม
call   SUB_ROUTINE   : เรียกใช้ sub-rutine ที่ประกาศไว้
ret   :   กลับไปทำงานโปรแกรมจากตำแหน่งที่เรียกใช้ sub-rutine จะใช้ใน sub-rutine
rjmp ROUTINE   :   กระโดดไปทำงานตำแหน่งที่ประกาศไว้ กระโดดได้ไม่เกิน +- 2K ตำแหน่งจากตำแหน่งปัจจุบัน
jmp ROUTINE   :   กระโดดไปทำงานตำแหน่งที่ประกาศไว้ กระโดดได้ทั่วทุกตำแหน่งของหน่วยความจำ
cp Rd, Rr   :   เปรียบเทียบ Rd และ Rr ใช้คู่กับ Branch
brlt ROUTINE   :   กระโดดไปทำงานตำแหน่งที่ประกาศไว้หากผลการเปรียบเทียบ Rd < Rr แบบคิดเครื่องหมาย
brlo ROUTINE   :   กระโดดไปทำงานตำแหน่งที่ประกาศไว้หากผลการเปรียบเทียบ Rd < Rr แบบไม่คิดเครื่องหมาย
brge ROUTINE   :   กระโดดไปทำงานตำแหน่งที่ประกาศไว้หากผลการเปรียบเทียบ Rd >= Rr
brcs ROUTINE   :   กระโดดไปทำงานตำแหน่งที่ประกาศไว้หาก carry flag เท่ากับ 1
brcc ROUTINE   :   กระโดดไปทำงานตำแหน่งที่ประกาศไว้หาก carry flag เท่ากับ 0
brhs ROUTINE   :   กระโดดไปทำงานตำแหน่งที่ประกาศไว้หาก half carry flag เท่ากับ 1
brhc ROUTINE   :   กระโดดไปทำงานตำแหน่งที่ประกาศไว้หาก half carry flag เท่ากับ 0
brvs ROUTINE   :   กระโดดไปทำงานตำแหน่งที่ประกาศไว้หาก overflow flag เท่ากับ 1
brvc ROUTINE   :   กระโดดไปทำงานตำแหน่งที่ประกาศไว้หาก overflow flag เท่ากับ 0
cpi Rd, k   :   เปรียบเทียบ Rd กับ k ใช้คู่กับ Branch โดย k เป็นค่าคงที่ เช่น 1, 2, 3
breq ROUTINE   :   กระโดดไปทำงานตำแหน่งที่ประกาศไว้หากผลการเปรียบเทียบเท่ากัน
brne ROUTINE   :   กระโดดไปทำงานตำแหน่งที่ประกาศไว้หากผลการเปรียบเทียบไม่เท่ากัน
ชุดคำสั่งจัดการข้อมูลระดับ bit
lsl Rd   :   ชิพบิตไปทางซ้าย 1 ครั้ง เก็บบิตซ้ายสุดไว้ที่ carry flag
lsr Rd   :    ชิพบิตไปทางขวา 1 ครั้ง เก็บบิตขวาสุดไว้ที่ carry flag
rol Rd   :    ชิพบิตไปทางซ้าย 1 ครั้ง เก็บบิตซ้ายสุดไว้ที่ carry flag แทนที่บิตขวาสุดด้วย carry flag ที่เก็บจากบิตซ้ายสุด
ror Rd   :   ชิพบิตไปทางขวา 1 ครั้ง เก็บบิตขวาสุดไว้ที่ carry flag แทนที่บิตซ้ายสุดด้วย carry flag ที่เก็บจากบิตขวาสุด
asr Rd   :    ชิพบิตไปทางขวา 1 ครั้ง เก็บบิตขวาสุดไว้ที่ carry flag บิตซ้ายสุดคงค่าเดิม
swap Rd   :   สลับ 4 bits ล่างกับ 4 bits บนของ Rd
sec   :   เซ็ทค่า carry flag เท่ากับ 1
clc   :   เซ็ทค่า carry flag เท่ากับ 0
sen   :   เซ็ทค่า negative flag เท่ากับ 1
cln   :   เซ็ทค่า negative flag เท่ากับ 0
sez   :   เซ็ทค่า zero flag เท่ากับ 1
clz   :   เซ็ทค่า zero flag เท่ากับ 0
sev   :   เซ็ทค่า overflow flag เท่ากับ 1
clv   :   เซ็ทค่า overflow flag เท่ากับ 0
seh   :   เซ็ทค่า half carry flag เท่ากับ 1
clh   :   เซ็ทค่า half carry flag เท่ากับ 0
สามารถศึกษาเพิ่มเติมได้ที่ : http://academy.cba.mit.edu/classes/embedded_programming/doc1022.pdf

ความคิดเห็น

โพสต์ยอดนิยมจากบล็อกนี้

การทำ Performance Testing ด้วย Postman

Performance Test คืออะไร? Performance Test คือการทดสอบซอฟต์แวร์หรือระบบ เพื่อประเมินความสามารถในการทำงานเมื่อมีภาระหรือโหลดต่างๆ เข้ามาในระบบ เช่น จำนวนผู้ใช้ที่เพิ่มขึ้น, ปริมาณข้อมูลที่ถูกประมวลผล หรือความซับซ้อนในการทำงานของระบบ เหตุผลที่ต้องทำ Performance Test วัดความเร็วของระบบ (Speed) ช่วยให้ทราบว่าระบบสามารถตอบสนองต่อการร้องขอ (request) ได้เร็วเพียงใดในสภาวะการใช้งานที่หลากหลาย ไม่ว่าจะเป็นเมื่อมีผู้ใช้จำนวนน้อยหรือมาก ประเมินความเสถียร (Stability) ตรวจสอบว่าระบบสามารถทำงานได้ต่อเนื่องภายใต้การทำงานหนักหรือโหลดที่สูง เช่นในช่วงที่มีจำนวนผู้ใช้เพิ่มขึ้นอย่างมาก หรือในสถานการณ์ที่ต้องประมวลผลข้อมูลจำนวนมาก ปรับปรุงประสิทธิภาพ (Optimization) ช่วยให้ระบุจุดอ่อนของระบบ เช่น API ที่ทำงานช้า หรือการใช้ทรัพยากรมากเกินไปในบางส่วน ซึ่งสามารถปรับปรุงได้เพื่อเพิ่มประสิทธิภาพ เตรียมพร้อมสำหรับการใช้งานจริง (Real-World Readiness) การทดสอบช่วยให้เราทราบถึงการตอบสนองของระบบในสภาวะที่ใกล้เคียงกับการใช้งานจริง เพื่อให้มั่นใจว่าเมื่อปล่อยระบบให้ผู้ใช้ใช้งาน จะไม่เกิดปัญหาการโหลด...

Python: Chat bot &Text to Speech ภาษาไทย ด้วย gTTS

วันนี้จะมาแนะนำทุกๆ คนเกี่ยวกับ การเขียนโปรแกรมง่าย ๆ เพื่อให้คอมพิวเตอร์อ่านออกเสียงตามที่เราได้พิมพ์ให้ โดย ใช้ library คือ gTTS และ play sound จะมีวิธีการเขียนอย่างไร มาดูกันเลย เริ่มจากติดตั้ง package gTTS และ play sound ก่อน                                                                          pip install gTTS                                                                                pip install playsound                                                    ...