Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 20 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
20
Dung lượng
431,43 KB
Nội dung
Hiệu đính từ slide thầy Hồ Trung Mỹ Bộ môn Điện tử - DH BK TPHCM CHƯƠNG HỌ VI ĐIỀU KHIỂN 8051 3.4 Tập lệnh 8051 Nội dung 3.4.1 Các lệnh số học 3.4.2 Các lệnh luận lý 3.4.3 Các lệnh chuyển liệu 3.4.4 Các lệnh với biến Boole 3.4.5 Các lệnh rẽ nhánh chương trình 3.4.6 Một số thí dụ Ý nghĩa ký hiệu viết tắt tập lệnh Các lệnh ảnh hưởng đến ghi trạng thái PSW (CY, OV, AC) Tóm tắt lệnh số học (giả sử 8051 với thạch anh 12 MHz) Detecting Overflow • No overflow when adding a positive and a negative number • No overflow when signs are the same for subtraction • Overflow occurs when the value affects the sign: – – – – overflow when adding two positives yields a negative or, adding two negatives gives a positive or, subtract a negative from a positive and get a negative or, subtract a positive from a negative and get a positive • Consider the operations A + B, and A – B – Can overflow occur if B is ? – Can overflow occur if A is ? Overflow Detection • Overflow: the result is too large (or too small) to represent properly – Example: - < = 4-bit binary number FF AC = có nhớ bit OV = có nhớ từ bit mà khơng từ bit ngược lại Lệnh ADD SUBB ;A=A+SOURCE ADDA, Source ADDA,#6 ;A=A+6 ADDA,R6 ;A=A+R6 ADD A,6 ;A=A+[6] or A=A+R6 ADD A,0F3H ;A=A+[0F3H] SUBB A, Source ;A=A-SOURCE-C SUBB A,#6 ;A=A-6-(CY) SUBB A,R6 ;A=A-R6-(CY) 10 Subtract SUBB A, byte subtract with borrow Example: SUBB A, #0x4F ;A A – 4F – C Notice that There is no subtraction WITHOUT borrow Therefore, if a subtraction without borrow is desired, it is necessary to clear the C flag Example: Clr c SUBB A, #0x4F ;A A – 4F 11 Thí dụ với ADD • Cho biết giá trị cờ C, AC OV sau lệnh thứ hai thực thi? mov a, #3FH add a, #0D3H 0011 1111 1101 0011 0001 0010 C = AC = OV = 12 Cộng có dấu tràn (OV) 2’s 0000 … 0111 1000 … 1111 complement: 0000 00 1111 0000 7F 127 80 -128 1111 FF -1 0111 1111 (positive 127) 0111 0011 (positive 115) 1111 0010 (overflow cannot represent 242 in bits 2’s complement) 1000 1111 1101 0011 0110 0010 (negative 113) (negative 45) (overflow) 0011 1111 (positive) 1101 0011 (negative) 0001 0010 (never overflows) 13 Decimal Adjust DA a ; decimal adjust a Used to facilitate BCD addition Adds “6” to either high or low nibble after an addition to create a valid BCD number Example: mov a, #23h mov b, #29h add a, b ; a 23h + 29h = 4Ch (wanted DA a ; a a + = 52 52) 14 Thí dụ: Cộng số BCD (mỗi số có ký số) MOV A, 43H ; num1 ô nhớ 40, 41H ADD DA MOV MOV ADDC DA MOV A, 41H ; num2 ô nhớ 42, 43H A ; kết đặt ô nhớ 40, 41H 41H, A C A, 42H 40H, 41H 1234 A, 40H + 5678 42H, 43H A (AC) 40H,A 112 6912 15 Tính Z = X + Y Thí dụ: Tính Z = X + Y với Z, X, Y số byte RAM nội Giả sử X cất 40H, Y 41H, Z 42H Cách 1: MOV A, 40h ADD A, 41h MOV 42h, A Cách 2: X Y Z EQU EQU EQU 40h 41h 42h MOV A, X ADD A, Y MOV Z, A 16 Cộng số 16 bit Thí dụ: Cộng số 16 bit VarX VarY (có địa RAM nội) Cất kết vào VarX ; Các số 16 bit cất VarX VarX+1, VarY VarY+1 MOV A, VarX ; lấy byte thấp ADD A, VarY ; cộng byte thấp MOV VarX, A ; cất byte thấp MOV A, VarX+1 ; lấy byte cao ADDC A, VarY+1 ; cộng có nhớ phép cộng trước MOV VarX+1, A ; cất kết 17 Increment and Decrement INC A increment A INC byte increment byte in memory INC DPTR increment data pointer DEC A decrement accumulator DEC byte decrement byte • The increment and decrement instructions NOT affect the C flag • Notice we can only INCREMENT the data pointer, not decrement 18 Lệnh INC DEC DEC INC byte byte ;byte=byte-1 ;byte=byte+1 INC DEC DEC R7 A 40H ; [40]=[40]-1 19 Lệnh DEC Chú ý với DPTR có lệnh INC cịn lệnh DEC khơng có Do muốn thực việc giảm DPTR ta phải sử dụng chuỗi lệnh sau DEC DPL ; Giảm byte thấp DPTR MOV R7, DPL ; chép vào R7 CJNE R7, #0FFH, SKIP ; Nếu tràn thành FF phải mượn DEC DPH ; phải giảm byte cao SKIP: (tiếp tục) Ta phải giảm riêng cho byte cao byte thấp DPTR; nhiên byte cao (DPH) bị giảm byte thấp (DPL) tràn từ 00H sang FFH 20 .. .3. 4 Tập lệnh 8051 Nội dung 3. 4. 1 Các lệnh số học 3. 4. 2 Các lệnh luận lý 3. 4 .3 Các lệnh chuyển liệu 3. 4. 4 Các lệnh với biến Boole 3. 4. 5 Các lệnh rẽ nhánh chương trình 3. 4. 6 Một số thí... ADD DA MOV MOV ADDC DA MOV A, 41 H ; num2 ô nhớ 42 , 43 H A ; kết đặt ô nhớ 40 , 41 H 41 H, A C A, 42 H 40 H, 41 H 1 2 34 A, 40 H + 5678 42 H, 43 H A (AC) 40 H,A 112 6912 15 Tính Z = X + Y Thí dụ: Tính... mov a, #23h mov b, #29h add a, b ; a 23h + 29h = 4Ch (wanted DA a ; a a + = 52 52) 14 Thí dụ: Cộng số BCD (mỗi số có ký số) MOV A, 43 H ; num1 ô nhớ 40 , 41 H ADD DA MOV MOV ADDC DA MOV A, 41 H ; num2