Tài liệu tham khảo Lập trình ASM cho 8051
Lập trình ASM cho 8051TẬP LỆNH ASM THƯỜNG DÙNG CHO 8051Người báo cáo: Mai Thành PhươngEmail:maigiapy@yahoo.com1.MOV Rn, DIRECT2.MOV @Rn,#DATA3.MOV Rn,#DATA4.CLR 5.SETB 6.RET7.RETI8.JMP9.JB BIT,REL10.JNB BIT,REL11.INC12.DEC13.CJNE Rn,#Data,REL14.ADD A,Rn15.SUBB A,Rn16.MULL A,B 17.DIV A,B18.RLCChú giải:Rn: Viết tắt cho các thanh ghi từ R0R7DIRECT: địa chỉ của ô nhớ dữ liệu1.Lấy dữ liệu cất ở DIRECT bỏ vào trong thanh ghi Rn. VD Mov r1,21h21h là địa chỉ Ram trên Chíp.Địa chỉ thường viết dưới dạng số Hex, chữ h ở sau chỉ số Hex, chữ B chỉ số nhị phân, không có chữ theo sau là số nguyên. 2.Nhập 1 số nguyên vào địa chỉ mà Rn đang nắm giữ.Vd: mov r0,#21hMov @R0,#552 lệnh trên sẽ nhập số 55 vào địa chỉ 21h, lệnh thay thế 2 lệnh trên: Mov 21h,#553.Nhập 1 số nguyên vào RnHoặc có thể viết Mov r7,#11111111b. 255 ở hệ thập phân tương đương với 1111111b ở hệ nhị phân4.Xóa 1 bít, xóa 1 ô nhớVD1: mov 21h,#11111111bClr 21h.0Mov a,21hVới 3 lệnh trên thì thanh ghi A sẽ chứa số 11111110B VD2.CLR P1.0 lệnh này làm cho điện áp trên chân số 1 của chíp AT89C51 xuống 0 vôn5.Ngược lại với ClrVD Setb p1.0, kết quả làm điện áp trên chân số 1 lên 5 vôn6.Quay lại chỗ mà chương trình rẽ nhánhNếu không gặp các lệnh rẽ nhánh thì chương trình sẽ thực hiện theo thứ tự từ trên xuống dưới.7.quay lại chỗ mà chương trình bị ngắtVD gia chủ đang kể câu chuyện về đứa con gái của ông ta, tới đoạn “Con tôi khóc nhiều nên mắt đã bị mù” bỗng chuông điện thoại reo. Sau khi nghe xong điện thoại quay lại câu chuyện, thay vì phải hỏi “tôi kể tới đâu rồi” RETI là câu trả lời.8. lệnh nhảy, lệnh rẽ nhánh không điều kiện.lệnh cùng chức năng SJMP9.Lệnh kiểm tra 1 bít, Nếu bít đó bằng 1 thì rẽ nhánhVD Jb p0.0,xuong0Setb p1.0Xuong0:Clr p1.0RetCác lệnh trên sẽ kiểm tra 1 nút nhấn nối Mass, nếu nhấn xuống thì đèn sáng, nếu thả thì đèn tắt10. Lệnh kiểm tra bít, nếu bít =0 thì rẽ nhánh11.Lệnh tăng ô nhớ lên 1 đơn vịVD mov r2,#1Inc r2 Lúc này trong thanh ghi r2 sẽ chứa số 212. Lệnh giảm 1 đơn vị13.Lệnh kiểm tra thanh ghi Rn , nếu khác Data thì rẽ nhánhVD chương trình đếm số người đi qua cổng, đủ 5 người thì đổ chuông, cảm biến gắn vào chân số 1 của chípMov r0,#0Jnb p1.0,tang_so_nguoiRetTang_so_nguoi:Inc r0 ;tăng biến đếm lên 1 ĐV Cjne r0,#5,quaylai ; nếu khác 5 thì quay lại đếm ngườiCall do_chuong ; gọi hàm đổ chuôngQuaylai:RetDo_chuong:Setb p1.1 ; chuông nối với chân số 2 của chípRet14. Lệnh cộng, kết quả lưu vào AVD mov A,#1 Mov R3,#4Add a,r3Kết quả: A=415. Lệnh trừ16. nhân17.chia18. lệnh quay dịchVD mov r1,#01110011BSetb CFRLC r1 Kết quả: r1=11100111B, CF=0Nếu thêm 1 lệnh RLC r1 nữa thì Kq: r1=11001110, CF=1II: TẬP LỆNH ĐẦY ĐỦ 1. NHÓM LỆNH DI CHUYỂN DỮ LiỆU: 1. Lệnh di chuyển dữ liệu trực tiếp: Cú pháp: MOV <ĐÍCH>, Trong đó: . <ĐÍCH>: có thể là thanh ghi, địa chỉ ô nhớ trong vùng RAM nội . : có thể là thanh ghi, địa chỉ ô nhớ trong vùng RAM nội hoặc # Thực hiện: di chuyển nội dung vào <ĐÍCH> Ví dụ: MOV A, 120 MOV B, #24 MOV 120,#10110010B MOV R3, A MOV P3,#3EH 2. Nhóm lệnh di chuyển dữ liệu gián tiếp: a. Liên quan đến vùng nhớ RAM nội: + Lệnh đọc bộ nhớ: Cú pháp: MOV <ĐÍCH>, @Rp Trong đó: . <ĐÍCH>: thanh ghi, ô nhớ . Rp: là thanh ghi R0 hoặc R1 Thực hiện: lấy nội dung ô nhớ trong vùng RAM nội có địa chỉ là nội dung thanh ghi Rp đặt vào <ĐÍCH> Ví dụ: MOV 120,#47 MOV R1,#120 MOV A,@R1 ; sau khi thực hiện xong đoạn lệnh nội dung thanh ghi A chứa giá trị 47 + Lệnh ghi bộ nhớ: Cú pháp: MOV @Rp, Trong đó: . : thanh ghi, ô nhớ hoặc # . Rp: là thanh ghi R0 hoặc R1 Thực hiện: đặt nội dung vào ô nhớ trong vùng RAM nội có địa chỉ là nội dung thanh ghi Rp. Ví dụ 1: MOV R0,#100 MOV @R0, #0E3H ; sau khi thực hiện xong đoạn lệnh nội dung ô nhớ 100 chứa giá trị E3H Ví dụ 2: MOV A, #49 MOV R1,#127 MOV @R1, A ; (127) = 49 b. Liên quan đến vùng nhớ dữ liệu ngoài: + Lệnh đọc bộ nhớ: Cú pháp: MOVX A, @DPTR Thực hiện: lấy nội dung ô nhớ trong vùng dữ liệu ngoài có địa chỉ là nội dung thanh ghi DPTR đặt vào thanh ghi A Ví dụ: MOV DPTR,#1000 MOVX A, @DPTR ; A ⇓ (1000) + Lệnh đọc bộ nhớ: Cú pháp: MOVX @DPTR, A Thực hiện: lấy nội dung A đặt vào ô nhớ trong vùng dữ liệu ngoài có địa chỉ là nội dung thanh ghi DPTR. Ví dụ: MOV DPTR,#1000 MOV A, #4EH MOVX @DPTR, A ; ghi giá trị 4EH vào ô nhớ ngoài có địa chỉ 1000 c. Lệnh liên quan đến vùng nhớ chương trình (đọc mã lệnh): Cú pháp: MOVC A,@A+DPTR Thực hiện: lấy nội dung ô nhớ trong vùng nhớ chương trình có địa chỉ là nội dung thanh ghi A + DPTR đặt vào thanh ghi A. Ví dụ 1: MOV A,#2 MOV DPTR,#500 MOVC A,@A+DPTR ; A ⇓ (502) Ví dụ 2: MOV A, #4 MOV DPTR,#TABLE MOVC A, @A+DPTR TABLE: DB 12H, 4EH, 0C7H, 084H, 055H,…… 3. Nhóm lệnh liên quan đến ngăn xếp: + Ghi vào ngăn xếp: Cú pháp: PUSH Thanh ghi/ địa chỉ Thực hiện: cất nội dung thanh ghi hoặc ô nhớ vào đỉnh ngăn xếp + Đọc ngăn xếp: Cú pháp: POP Thanh ghi/ địa chỉ Thực hiện: lấy nội dung ở đỉnh ngăn xếp gán vào thanh ghi, ô nhớ + ví dụ: MOV A,#100 MOV 100,#3EH PUSH ACC PUSH 100 MOV A, #21H MOV 100, #40 POP 100 POP ACC 4. Lệnh trao đổi dữ liệu: Cú pháp: XCH A, Trong đó: có thể là thanh ghi, ô nhớ hoặc @Rp Thực hiện: trao đổi nội dung thanh ghi A và II. NHÓM LỆNH SỐ HỌC 1. Lệnh cộng: a. Cộng không nhớ: Cú pháp: ADD A, Trong đó: có thể là thanh ghi, ô nhớ, # hoặc @Rp Thực hiện: A ⇓ A + b. Cộng có nhớ: Cú pháp: ADDC A, Trong đó: có thể là thanh ghi, ô nhớ, # hoặc @Rp Thực hiện: A ⇓ A + + C 2. Lênh trư:̣ ̀ Cú pháp: SUBB A, Trong đó: có thể là thanh ghi, ô nhớ, # hoặc @Rp Thực hiện: A ⇓ A C (carry bit) 3. Lênh nhân:̣ Cú pháp: MUL AB Thực hiện: A * B = BA (B: byte cao cua kêt qua; A: byte thâp cua kêt qua)̉ ́ ̉ ́ ̉ ́ ̉ 4. Lênh chia:̣ Cú pháp: DIV AB Thực hiện: A : B = A dư B (A: chưa phân nguyên; B: chưa phân dư)́ ̀ ́ ̀ 5. Lênh tăng môt đơn vi:̣ ̣ ̣ Cu phap: INC <ĐICH>́ ́ ́ Trong đo: <ĐICH> co thê la thanh ghi, ô nhớ ́ ́ ̉ ̀ ́ Thưc hiên: <ĐICH> = <ĐICH> + 1 ̣ ̣ ́ ́6. Lênh giam môt đơn vi:̣ ̉ ̣ ̣ Cu phap: DEC <ĐICH>́ ́ ́ Trong đo: <ĐICH> co thê la thanh ghi, ô nhớ ́ ́ ̉ ̀ ́ Thưc hiên: <ĐICH> = <ĐICH> 1̣ ̣ ́ ́ III. NHOM LÊNH NHAY:́ ̣ ̉ 1. Lênh nhay không điêu kiên:̣ ̉ ̀ ̣ a. Nhay gân:̉ ̀ Cu phap: SJMP ́ ́Trong đo:́ la môt tư, hay nhom tư viêt liên nhau, theo sau băng dâu ”:” dung đê đanh dâu vi trì ̣ ̀ ́ ̀ ́ ̀ ̀ ́ ̀ ̉ ́ ́ ̣ ́ chương trinh.̀ Thưc hiên: nhay không điêu kiên đên vi tri chương trinh đươc chi đinh bơị ̣ ̀ ̀ ̣ ́ ̣ ́ ̀ ̣ ̉ ̣ ̉ , khoang cach tư lênh̉ ́ ̀ ̣ đêń không vươt qua 128 byte ma lênh.̣ ́ ̃ ̣ b. Nhay xa:̉ Cu phap: LJMP ́ ́ Thưc hiên: nhay đên vi tri đươc chi đinh bơị ̣ ̉ ́ ̣ ́ ̣ ̉ ̣ ̉ , co thê năm ơ bât ki vi tri nao trong chương trinh.́ ̉ ̀ ̉ ́ ̀ ̣ ́ ̀ ̀ 2. Lênh nhay co điêu kiên:̣ ̉ ́ ̀ ̣ a. Lênh so sanh va nhay nêu không băng (compare and jump if not equal)̣ ́ ̀ ̉ ́ ̀ Cu phap:́ ́ CJNE A, , Trong đó co thê la thanh ghi, ô nhơ hoăc #́ ̉ ̀ ́ ̣ Thưc hiên: So sanh A vạ ̣ ́ ̀ , nêu:́ + A ≠ : nhay đên̉ ́ va nêu:̀ ́ . A > : bit C = 0 . A < : bit C = 1 + A = : thưc hiên lênh kê tiêp̣ ̣ ̣ ́ ́ Môt dang khac cua lênh:̣ ̣ ́ ̉ ̣ CJNE Ri/@Rp, #, b. Lênh giam nôi dung Ri môt đơn vi va nhay nêu băng zero (decrement Ri by 1 and jump if noṭ ̉ ̣ ̣ ̣ ̀ ̉ ́ ̀ zero): Cu phap: DJNZ Ri,́ ́ Thưc hiên: Ri = Ri 1, nêu:̣ ̣ ́ + Ri > 0: nhay đên̉ ́ + Ri =0: thưc hiên lênh kê tiêp̣ ̣ ̣ ́ ́ c. Lênh nhay phu thuôc vao trang thai bit kiêm tra:̣ ̉ ̣ ̣ ̀ ̣ ́ ̉ Cu phap: JB/ JNB BIT,́ ́ Trong đo: BIT co thê la cac bit cua môt thanh ghi hoăc cac chân I/O cua vi điêu khiêń ́ ̉ ̀ ́ ̉ ̣ ̣ ́ ̉ ̀ ̉ Thưc hiên: nhay đên vi tri chương trinh đươc chi đinh bơị ̣ ̉ ́ ̣ ́ ̀ ̣ ̉ ̣ ̉ nêu BIT băng 1 hoăc băng 0́ ̀ ̣ ̀ d. Lênh nhay thông qua viêc kiêm tra cơ CARRY:̣ ̉ ̣ ̉ ̀ Cu phap: JC/ JNC ́ ́ Thưc hiên: nhay đên vi tri chương trinh đươc chi đinh bơị ̣ ̉ ́ ̣ ́ ̀ ̣ ̉ ̣ ̉ nêu C băng 1 hoăc băng 0́ ̀ ̣ ̀e. Lênh nhay thông qua viêc kiêm tra cơ ZERO:̣ ̉ ̣ ̉ ̀ Cu phap: JZ/ JNZ ́ ́ Thưc hiên: nhay đên vi tri chương trinh đươc chi đinh bơị ̣ ̉ ́ ̣ ́ ̀ ̣ ̉ ̣ ̉ nêu Z băng 1 hoăc băng 0́ ̀ ̣ ̀IV. NHOM LÊNH LOGIC:́ ̣ 1. ANL A, 2. ORL A, 3. XRL A, 4. CLR A ; xoa nôi dung thanh ghi Á ̣ 5. CPL A ; đao cac BIT trong thanh ghi Ả ́ 6. NOP ; lênh không thưc hiên, bo qua khi găp lênh naỵ ̣ ̣ ̉ ̣ ̣ ̀ 7. SWAP A ; đao vi tri 4 bit cao va 4 bit thâp trong thanh ghi Ả ̣ ́ ̀ ́ 8 Nhom lênh quay vong:́ ̣ ̀ a. Quay phai thanh ghi Ả Cu phap: RR Á ́ . Lập trình ASM cho 8051TẬP LỆNH ASM THƯỜNG DÙNG CHO 8051Người báo cáo: Mai Thành PhươngEmail:maigiapy@yahoo.com1.MOV Rn, DIRECT2.MOV @Rn,#DATA3.MOV Rn,#DATA4.CLR 5.SETB 6.RET7.RETI8.JMP9.JB BIT,REL10.JNB BIT,REL11.INC12.DEC13.CJNE Rn,#Data,REL14.ADD A,Rn15.SUBB A,Rn16.MULL A,B 17.DIV A,B18.RLCChú giải:Rn: Viết tắt cho các thanh ghi từ R0R7DIRECT: địa chỉ của ô nhớ dữ liệu1.Lấy dữ liệu cất ở DIRECT bỏ vào trong thanh ghi Rn. VD Mov r1,21h21h là địa chỉ Ram trên Chíp.Địa chỉ thường viết dưới dạng số Hex, chữ h ở sau chỉ số Hex, chữ B chỉ số nhị phân, không có chữ theo sau là số nguyên. 2.Nhập 1 số nguyên vào địa chỉ mà Rn đang nắm giữ.Vd: mov r0,#21hMov @R0,#552 lệnh trên sẽ nhập số 55 vào địa chỉ 21h, lệnh thay thế 2 lệnh trên: Mov 21h,#553.Nhập 1 số nguyên vào RnHoặc có thể viết Mov r7,#11111111b. 255 ở hệ thập phân tương đương với 1111111b ở hệ nhị phân4.Xóa 1 bít, xóa 1 ô nhớVD1: mov 21h,#11111111bClr 21h.0Mov a,21hVới 3 lệnh trên thì thanh ghi A sẽ chứa số 11111110B VD2.CLR P1.0 lệnh này làm cho điện áp trên chân số 1 của chíp AT89C51 xuống 0 vôn5.Ngược lại với ClrVD Setb p1.0, kết quả làm điện áp trên chân số 1 lên 5 vôn6.Quay lại chỗ mà chương trình rẽ nhánhNếu không gặp các lệnh rẽ nhánh thì chương trình sẽ thực hiện theo thứ tự từ trên xuống dưới.7.quay lại chỗ mà chương trình bị ngắtVD gia chủ đang kể câu chuyện về đứa con gái của ông ta, tới đoạn “Con tôi khóc nhiều nên mắt đã bị mù” bỗng chuông điện thoại reo. Sau khi nghe xong điện thoại quay lại câu chuyện, thay vì phải hỏi “tôi kể tới đâu rồi” RETI là câu trả lời.8. lệnh nhảy, lệnh rẽ nhánh không điều kiện.lệnh cùng chức năng SJMP9.Lệnh kiểm tra 1 bít, Nếu bít đó bằng 1 thì rẽ nhánhVD Jb p0.0,xuong0Setb p1.0Xuong0:Clr p1.0RetCác lệnh trên sẽ kiểm tra 1 nút nhấn nối Mass, nếu nhấn xuống thì đèn sáng, nếu thả thì đèn tắt10. Lệnh kiểm tra bít, nếu bít =0 thì rẽ nhánh11.Lệnh tăng ô nhớ lên 1 đơn vịVD mov r2,#1Inc r2 Lúc này trong thanh ghi r2 sẽ chứa số 212. Lệnh giảm 1 đơn vị13.Lệnh kiểm tra thanh ghi Rn , nếu khác Data thì rẽ nhánhVD chương trình đếm số người đi qua cổng, đủ 5 người thì đổ chuông, cảm biến gắn vào chân số 1 của chípMov r0,#0Jnb p1.0,tang_so_nguoiRetTang_so_nguoi:Inc r0 ;tăng biến đếm lên 1 ĐV Cjne r0,#5,quaylai ; nếu khác 5 thì quay lại đếm ngườiCall do_chuong ; gọi hàm đổ chuôngQuaylai:RetDo_chuong:Setb p1.1 ; chuông nối với chân số 2 của chípRet14. Lệnh cộng, kết quả lưu vào AVD mov A,#1 Mov R3,#4Add a,r3Kết quả: A=415. Lệnh trừ16. nhân17.chia18. lệnh quay dịchVD mov r1,#01110011BSetb CFRLC r1 Kết quả: r1=11100111B, CF=0Nếu thêm 1 lệnh RLC r1 nữa thì Kq: r1=11001110, CF=1II: TẬP LỆNH ĐẦY ĐỦ 1. NHÓM LỆNH DI CHUYỂN DỮ LiỆU: 1. Lệnh di chuyển dữ liệu trực tiếp: Cú pháp: MOV <ĐÍCH>, Trong đó: . <ĐÍCH>: có thể là thanh ghi, địa chỉ ô nhớ trong vùng RAM nội . : có thể là thanh ghi, địa chỉ ô nhớ trong vùng RAM nội hoặc # Thực hiện: di chuyển nội dung vào <ĐÍCH> Ví dụ: MOV A, 120 MOV B, #24 MOV 120,#10110010B MOV R3, A MOV P3,#3EH 2. Nhóm lệnh di chuyển dữ liệu gián tiếp: a. Liên quan đến vùng nhớ RAM nội: + Lệnh đọc bộ nhớ: Cú pháp: MOV <ĐÍCH>, @Rp Trong đó: . <ĐÍCH>: thanh ghi, ô nhớ . Rp: là thanh ghi R0 hoặc R1 Thực hiện: lấy nội dung ô nhớ trong vùng RAM nội có địa chỉ là nội dung thanh ghi Rp đặt vào <ĐÍCH> Ví dụ: MOV 120,#47 MOV R1,#120 MOV A,@R1 ; sau khi thực hiện xong đoạn lệnh nội dung thanh ghi A chứa giá trị 47 + Lệnh ghi bộ nhớ: Cú pháp: MOV @Rp, Trong đó: . : thanh ghi, ô nhớ hoặc # . Rp: là thanh ghi R0 hoặc R1 Thực hiện: đặt nội dung vào ô nhớ trong vùng RAM nội có địa chỉ là nội dung thanh ghi Rp. Ví dụ 1: MOV R0,#100 MOV @R0, #0E3H ; sau khi thực hiện xong đoạn lệnh nội dung ô nhớ 100 chứa giá trị E3H Ví dụ 2: MOV A, #49 MOV R1,#127 MOV @R1, A ; (127) = 49 b. Liên quan đến vùng nhớ dữ liệu ngoài: + Lệnh đọc bộ nhớ: Cú pháp: MOVX A, @DPTR Thực hiện: lấy nội dung ô nhớ trong vùng dữ liệu ngoài có địa chỉ là nội dung thanh ghi DPTR đặt vào thanh ghi A Ví dụ: MOV DPTR,#1000 MOVX A, @DPTR ; A ⇓. Lập trình ASM cho 8051TẬP LỆNH ASM THƯỜNG DÙNG CHO 8051Người báo cáo: Mai Thành PhươngEmail:maigiapy@yahoo.com1.MOV Rn, DIRECT2.MOV @Rn,#DATA3.MOV Rn,#DATA4.CLR 5.SETB 6.RET7.RETI8.JMP9.JB BIT,REL10.JNB BIT,REL11.INC12.DEC13.CJNE Rn,#Data,REL14.ADD A,Rn15.SUBB A,Rn16.MULL A,B 17.DIV A,B18.RLCChú giải:Rn: Viết tắt cho các thanh ghi từ R0R7DIRECT: địa chỉ của ô nhớ dữ liệu1.Lấy dữ liệu cất ở DIRECT bỏ vào trong thanh ghi Rn. VD Mov r1,21h21h là địa chỉ Ram trên Chíp.Địa chỉ thường viết dưới dạng số Hex, chữ h ở sau chỉ số Hex, chữ B chỉ số nhị phân, không có chữ theo sau là số nguyên. 2.Nhập 1 số nguyên vào địa chỉ mà Rn đang nắm giữ.Vd: mov r0,#21hMov @R0,#552 lệnh trên sẽ nhập số 55 vào địa chỉ 21h, lệnh thay thế 2 lệnh trên: Mov 21h,#553.Nhập 1 số nguyên vào RnHoặc có thể viết Mov r7,#11111111b. 255 ở hệ thập phân tương đương với 1111111b ở hệ nhị phân4.Xóa 1 bít, xóa 1 ô nhớVD1: mov 21h,#11111111bClr 21h.0Mov a,21hVới 3 lệnh trên thì thanh ghi A sẽ chứa số 11111110B VD2.CLR P1.0 lệnh này làm cho điện áp trên chân số 1 của chíp AT89C51 xuống 0 vôn5.Ngược lại với ClrVD Setb p1.0, kết quả làm điện áp trên chân số 1 lên 5 vôn6.Quay lại chỗ mà chương trình rẽ nhánhNếu không gặp các lệnh rẽ nhánh thì chương trình sẽ thực hiện theo thứ tự từ trên xuống dưới.7.quay lại chỗ mà chương trình bị ngắtVD gia chủ đang kể câu chuyện về đứa con gái của ông ta, tới đoạn “Con tôi khóc nhiều nên mắt đã bị mù” bỗng chuông điện thoại reo. Sau khi nghe xong điện thoại quay lại câu chuyện, thay vì phải hỏi “tôi kể tới đâu rồi” RETI là câu trả lời.8. lệnh nhảy, lệnh rẽ nhánh không điều kiện.lệnh cùng chức năng SJMP9.Lệnh kiểm tra 1 bít, Nếu bít đó bằng 1 thì rẽ nhánhVD Jb p0.0,xuong0Setb p1.0Xuong0:Clr p1.0RetCác lệnh trên sẽ kiểm tra 1 nút nhấn nối Mass, nếu nhấn xuống thì đèn sáng, nếu thả thì đèn tắt10. Lệnh kiểm tra bít, nếu bít =0 thì rẽ nhánh11.Lệnh tăng ô nhớ lên 1 đơn vịVD mov r2,#1Inc r2 Lúc này trong thanh ghi r2 sẽ chứa số 212. Lệnh giảm 1 đơn vị13.Lệnh kiểm tra thanh ghi Rn , nếu khác Data thì rẽ nhánhVD chương trình đếm số người đi qua cổng, đủ 5 người thì đổ chuông, cảm biến gắn vào chân số 1 của chípMov r0,#0Jnb p1.0,tang_so_nguoiRetTang_so_nguoi:Inc r0 ;tăng biến đếm lên 1 ĐV Cjne r0,#5,quaylai ; nếu khác 5 thì quay lại đếm ngườiCall do_chuong ; gọi hàm đổ chuôngQuaylai:RetDo_chuong:Setb p1.1 ; chuông nối với chân số 2 của chípRet14. Lệnh cộng, kết quả lưu vào AVD mov A,#1 Mov R3,#4Add a,r3Kết quả: A=415. Lệnh trừ16. nhân17.chia18. lệnh quay dịchVD mov r1,#01110011BSetb CFRLC r1 Kết quả: r1=11100111B, CF=0Nếu thêm 1 lệnh RLC r1 nữa thì Kq: r1=11001110, CF=1II: TẬP LỆNH ĐẦY ĐỦ 1. NHÓM LỆNH DI CHUYỂN DỮ LiỆU: 1. Lệnh di chuyển dữ liệu trực tiếp: Cú pháp: MOV <ĐÍCH>, Trong đó: . <ĐÍCH>: có thể là thanh ghi, địa chỉ ô nhớ trong vùng RAM nội . : có thể là thanh ghi, địa chỉ ô nhớ trong vùng RAM nội hoặc # Thực hiện: di chuyển nội dung vào <ĐÍCH> Ví dụ: MOV A, 120 MOV B, #24 MOV 120,#10110010B MOV R3, A MOV P3,#3EH 2. Nhóm lệnh di chuyển dữ liệu gián tiếp: a. Liên quan đến vùng nhớ RAM nội: + Lệnh đọc bộ nhớ: Cú pháp: MOV <ĐÍCH>, @Rp Trong đó: . <ĐÍCH>: thanh ghi, ô nhớ . Rp: là thanh ghi R0 hoặc R1 Thực hiện: lấy nội dung ô nhớ trong vùng RAM nội có địa chỉ là nội dung thanh ghi Rp đặt vào <ĐÍCH> Ví dụ: MOV 120,#47 MOV R1,#120 MOV A,@R1 ; sau khi thực hiện xong đoạn lệnh nội dung thanh ghi A chứa giá trị 47 + Lệnh ghi bộ nhớ: Cú pháp: MOV @Rp, Trong đó: . : thanh ghi, ô nhớ hoặc # . Rp: là thanh ghi R0 hoặc R1 Thực hiện: đặt nội dung vào ô nhớ trong vùng RAM nội có địa chỉ là nội dung thanh ghi Rp. Ví dụ 1: MOV R0,#100 MOV @R0, #0E3H ; sau khi thực hiện xong đoạn lệnh nội dung ô nhớ 100 chứa giá trị E3H Ví dụ 2: MOV A, #49 MOV R1,#127 MOV @R1, A ; (127) = 49 b. Liên quan đến vùng nhớ dữ liệu ngoài: + Lệnh đọc bộ nhớ: Cú pháp: MOVX A, @DPTR Thực hiện: lấy nội dung ô nhớ trong vùng dữ liệu ngoài có địa chỉ là nội dung thanh ghi DPTR đặt vào thanh ghi A Ví dụ: MOV DPTR,#1000 MOVX A, @DPTR ; A ⇓