Nhóm lệnh số học 8051 Võ Thị Thu Hồng Nhóm lệnh số học 8051 Cộng khơng cờ nhớ (ADD) Cộng qua cờ nhớ (ADDC) Trừ (SUBB) Tăng (INC) / giảm (DEC) Nhân (MUL) Chia (DIV) Hiệu chỉnh BCD (DA) Võ Thị Thu Hồng Các lệnh ảnh hưởng cờ Lệnh C Cờ OV AC ADD ADDC SUBB MUL DIV DA Võ Thị Thu Hồng Các lệnh cộng Cộng không cờ nhớ (ADD) Opcode (binary) ADD A, Rn ADD A, direct ADD A, @Ri ADD A, #data Diễn giải Số MC D7 D6 D5 D4 D3 D2 D1 D0 Opcode (HEX) 0 1 n2 n1 n0 28 ÷ 2F A A + Rn a7 0 a6 a5 a4 0 a3 a2 a1 1 a0 i 25 Byte 26 ÷ 27 A A+(direct) A A + (Ri) d7 d6 d5 d4 d3 d2 d1 d0 24 Byte A A + data Diễn giải Số MC A A + Rn + CY A A + (direct) + CY A A + (Ri) + CY A A + data + CY Mnemonic Cộng qua cờ nhớ ADDC Opcode (binary) D7 D6 D5 D4 D3 D2 D1 D0 Opcode (HEX) 0 1 n2 n1 n0 38 ÷ 3F a7 0 a6 a5 1 a4 a3 a2 a1 1 a0 i 35 Byte 36 ÷ 37 d7 d6 d5 d4 d3 d2 d1 d0 34 Byte Mnemonic ADDC A, Rn ADDC A, direct ADDC A, @Ri ADDC A, #data Võ Thị Thu Hồng 1 Các lệnh cộng (Ví dụ) Lệnh ADD MOV A,#25H; A=25H ADD A,#8BH; A= 25H + 8BH= B0H (Opcode 24H 8BH) C=0 AC=1 AC=1 C=0 OV=0 AC=1 25H + 8BH B0H 0010 0101 + 1000 1011 1011 0000 Võ Thị Thu Hồng (+37) (-117) (-80) Các lệnh cộng (Ví dụ) Lệnh ADD MOV A,# 8CH; A=8CH MOV 6,#0A4H; (06H)= A4H ADD A,R6 ; A=30H (Opcode 2EH) C=1 AC=1 AC=1 C=1 OV=1 Mặc định ghi Rn Bank C=1 1000 1100 + 1010 0100 0011 0000 AC=1 8CH + A4H 30 H Võ Thị Thu Hồng (-116) (-92) (+48) Sai Các lệnh cộng (Ví dụ) Lệnh ADDC MOV A,# 12H; A=12H MOV 4,#0F5H; (04H)= F5H SETB C ; đặt C=1 ADDC A, 4; A=08H (Opcode 35H 04H) C=1 AC=0 AC=0 C=1 OV=0 0001 0010 + 1111 0101 (C) 0000 1000 Võ Thị Thu Hồng 12H + F5H (C) H Các lệnh cộng (Ví dụ) Cộng số nhị phân 16 bits C=1 (4) MOV A, R1 R1 X1 C9H 53H + + R3 R5 D0H 41H (5) ADDC A, R3 (6) MOV R5, A R0 (1) MOV A, R0 X2 R2 (2) ADD A, R2 (3) MOV R4, A 99H 95H Võ Thị Thu Hồng Kết R4 Các lệnh trừ Opcode (binary) D7 D6 D5 D4 D3 D2 D1 D0 Opcode (HEX) 0 1 n2 n1 n0 98 ÷ 9F a7 a6 0 a5 a4 a3 a2 a1 1 a0 i 95 Byte 96 ÷ 97 d7 d6 d5 d4 d3 d2 d1 d0 94 Byte Mnemonic SUBB A, Rn SUBB A, direct SUBB A, @Ri SUBB A, #data SUBB A, Src ; Diễn giải Số MC A A - Rn CY A A - (direct) - CY A A - (Ri) CY A A - data CY 1 1 A A – Src – C Chú ý: Nếu muốn trừ khơng qua cờ C, xóa cờ C trước thực lệnh trừ Võ Thị Thu Hồng Lệnh trừ SUBB (ví dụ) MOV A,# 25H; A=25H CLR C ; cho C=0 SUBB A, #60H; A=C5H (Opcode 94H 60H) SUBB A, #0B5H; A=0FH (Opcode 94H B5H) C=1 ( số mượn) – AC=0 C=1 OV=0 – – AC=1 C=0 OV=0 Võ Thị Thu Hồng 25H (+37) 60H (+96) C5H (- 59) B5H (- 75) 10H (+16) 0FH (C) (+15) 10 Lệnh tăng 1/ giảm Lệnh tăng (INC) Opcode (binary) Mnemonic D7 D6 D5 D4 D3 D2 D1 INC A 0 0 0 INC Rn 0 0 n2 n1 n0 a7 0 a6 0 a5 0 a4 0 a3 a2 a1 1 0 INC direct INC @Ri INC DPTR D0 Opcode (HEX) Diễn giải Số MC A←A+1 08 ÷ 0F Rn ← Rn + 1 a0 i 05 Byte 06 ÷ 07 (direct) ← (direct) + (Ri) ← (Ri) + 1 A3 DPTR ← DPTR + 1 04 Lệnh giảm (DEC) Opcode (binary) Mnemonic D7 D6 D5 D4 D3 D2 D1 DEC A 0 1 0 DEC Rn 0 1 n2 n1 n0 a7 0 a6 0 a5 a4 a3 a2 a1 DEC direct DEC @Ri Võ Thị Thu Hồng D0 a0 i Opcode (HEX) Diễn giải Số MC A←A-1 18 ÷ 1F Rn ← Rn - 1 15 Byte 16 ÷ 17 (direct) ← (direct) - (Ri) ← (Ri) - 1 14 11 Lệnh tăng 1/ giảm (Ví dụ) MOV DPTR ,#10FFH INC DPTR ; DPTR =1100H ( DPH= 11H DPL=00H) (Opcode A3H) Chú ý: DEC DPTR để giảm cho DPTR ,giả sử DPTR =1100H: DEC DPL ; DPL=00H-1=FFH MOV A,DPL ; cất DPL vào A ( A=FFH) CJNE A, #0FFH, SKIP ; so sánh A FFH DEC DPH ; khơng nhảy đến SKIP ; A=FFH giảm tiếp DPH -> DPH=10H Võ Thị Thu Hồng 12 Lệnh tăng 1/ giảm (Ví dụ) Ví dụ: Xóa nhớ Ram nội từ địa 30H đến 40H Org 0000H MOV R0, #30H MOV A,#0 LOOP: MOV @R0,A INC R0 CJNE R0,# 41H, LOOP END Ghi Chú: đoạn chương trình có 17 vịng lặp Gợi ý: thử viết lại chương trình dùng lệnh DEC Võ Thị Thu Hồng 13 Lệnh nhân MUL Opcode (binary) Mnemonic MUL AB D7 D6 D5 D4 D3 D2 D1 1 0 D0 Opcode (HEX) Diễn giải Số MC A4 A ← (A x B) ÷ B ← (A x B) 15 ÷ Kết A*B gồm bytes , A