Tài liệu tham khảo Kỹ thuật Vi xử lý GVHD: Trần Hoài Tâm CHƯƠNG III: LẬP TRÌNH HỢP NGỮ VÀ TÓM TẮT TẬP LỆNH I LẬP TRÌNH HỢP NGỮ: Hợp ngữ (assembly language) ngôn ngữ máy tính có vị trí ngôn ngữ máy ngôn ngữ cấp cao Các ngôn ngữ cấp cao Pascal, C sử dụng từ phát biểu dễ hiểu Ngôn ngữ máy (machine language) ngôn ngữ dạng số nhị phân máy tính Một chương trình viết ngôn ngữ máy chuỗi byte nhị phân biểu diễn lệnh mà máy tính thực thi Hợp ngữ thay mã nhị phân ngôn ngữ máy mã gợi nhớ giúp ta dễ nhớ dễ lập trình Ex : lệnh cộng có mã nhị phân "10110011" hợp ngữ thay mã gợi nhớ ADD Một chương trình viết hợp ngữ thực thi trực tiếp Sau viết xong chương trình phải dịch thành ngôn ngữ máy Một chương trình viết hợp ngữ chương trình viết dạng ký hiệu, mã gợi nhớ … phát biểu tương ứng với lệnh ngôn ngữ máy Mỗi dòng lệnh chia thành trường cách biệt khoảng trắng Tab Khuôn dạng tổng quát dòng lệnh sau: [ label: ] mnemonic [ operand ][,operand ][, … ] [;comment] Label: nhãn Mnemonic: mã gợi nhớ Operand: toán hạng Comment: thích a Trường nhãn: Nhãn loại ký hiệu nhận dạng dấu ":" ( kết thúc nhãn) Nhãn phải bắt đầu ký tự chữ, dấu hỏi "?", dấu nối "_" phải ký tự chữ, số, dấu "?", dấu "_" Nhãn dài tối đa 31 ký tự dạng chữ thường chữ in Nhãn không trùng với từ khóa (các mã gợi nhớ, dẫn, toán tử ký hiệu tiền định nghĩa) b Trường mã gợi nhớ: Mã gợi nhớ ký hiệu biểu diễn cho lệnh Trường mã gợi nhớ lệnh theo sau 14 Tài liệu tham khảo Kỹ thuật Vi xử lý trường nhãn GVHD: Trần Hoài Tâm Ex : MOV, ANL, SETB … c Trường toán hạng: Trường toán hạng theo sau trường mã gợi nhớ Trường chứa địa liệu mà lệnh sử dụng Một nhãn dùng để biểu thị địa liệu Các khả trường toán hạng phụ thuộc vào thao tác Có thao tác toán hạng (ex: lệnh RET, NOP ) thao tác khác cho phép nhiều toán hạng cách dấu phẩy d Trường thích: Các ghi dùng để làm rõ chương trình đặt trường thích cuối dòng lệnh Các thích bắt đầu dấu ";" Các thích chiếm nhiều dòng riêng phải bắt đầu dấu ";" Các chương trình phần có kích thước lớn chương trình thường bắt đầu khối thích bao gồm nhiều dòng thích để giải thích đặt trưng chương trình II TÓM TẮT TẬP LỆNH: Cũng vi xử lý bit lệnh 8051 có opcode bit, số lệnh lên đến 256 lệnh (thực tế có 255 lệnh, lệnh không định nghĩa) Ngoài opcode số lệnh có thêm byte cho liệu địa Tập lệnh có 139 lệnh byte, 92 lệnh byte 24 lệnh byte CÁC KIỂU ĐỊNH ĐỊA CHỈ: Các kiểu định địa phần cần thiết cho toàn tập lệnh vi xử lý, vi điều khiển Các kiểu định địa cho phép ta xác định rõ nguồn đích liệu theo nhiều cách khác phụ thuộc vào tình lập trình, có kiểu định địa chỉ: Thanh ghi (register) Trực tiếp (direct) Gián tiếp (indirect) Tức thời (immediate) Tương đối (relative) Tuyệt đối (absolute) Dài (long) Chỉ số (index) 1.1 ĐỊNH ĐỊA CHỈ THANH GHI: Kiểu định địa ghi ký hiệu Rn, n có giá trị từ 0-7, A, DPTR, 15 Tài liệu tham khảo Kỹ thuật Vi xử lý PC, C cặp ghi AB Ex: GVHD: Trần Hoài Tâm ADD A, R7 Có dãy ghi thời điểm có dãy tích cực Các dãy ghi chiếm 32 byte RAM liệu chip (00H-1FH) Để chọn dãy ghi tích cực ta tác động lên bit RS1, RS0 từ trạng thái chương trình PSW Khi hệ thống reset dãy ghi mặc định tích cực 1.2 ĐỊNH ĐỊA CHỈ TRỰC TIẾP: Kiểu định địa trực tiếp sử dụng để truy xuất biến nhớ ghi chip Ex: MOV A, 55H MOV P1, A (P1 có địa 90H) 1.3 ĐỊNH ĐỊA CHỈ GIÁN TIẾP: Kiểu định địa gián tiếp nhận biết nhờ vào ký tự @ đặt trước R0 R1 Các ghi R0 R1 hoạt động trỏ nội dung chúng địa RAM nơi mà liệu đọc hay ghi Ta cần đến kiểu định địa gián tiếp ta duyệt vị trí liên tiếp nhớ Ex: Thực việc xóa RAM nội từ địa 60H-7FH MOV R0,#60H LOOP: MOV @R0,#0 INC R0 CJNE R0, #80H, LOOP (tiếp tục) 1.4 ĐỊNH ĐỊA CHỈ TỨC THỜI: Khi toán hạng nguồn số thay biến, số đưa vào lệnh byte liệu tức thời Các toán hạng tức thời nhận biết nhờ vào ký tự # đặt trước chúng Toán hạng số học, biến biểu thức số học sử dụng số Ex : MOV A, #12 MOV DPTR, #8000H 1.5 ĐỊNH ĐỊA CHỈ TƯƠNG ĐỐI: Kiểu định địa tương đối sử dụng cho lệnh nhảy Một địa tương đối (còn gọi offset) giá trị bit có dấu Giá trị cộng với đếm chương trình để tạo địa lệnh cần thực thi 16 Tài liệu tham khảo Kỹ thuật Vi xử lý Ex : SJMP THERE GVHD: Trần Hoài Tâm DJNE … CJNE … Định địa tương đối có ưu điểm cung cấp cho mã không phụ thuộc vào vị trí, lại có điểm bất lợi đích nhảy bị giới hạn phạm vi từ -128 byte đến 127 byte 1.6 ĐỊNH ĐỊA CHỈ TUYỆT ĐỐI: Kiểu định địa tuyệt đối sử dụng với lệnh ACALL AJMP Đây lệnh byte cho phép rẽ nhánh chương trình không gian 2K hành nhớ chương trình Để không bị giới hạn ta sử dụng lệnh LCALL, LJMP Ex : LOOP: LCALL GIAI_MA LJMP LOOP 1.7 ĐỊNH ĐỊA CHỈ DÀI: Kiểu định địa dài dùng cho lệnh LCALL LJMP lệnh byte chứa địa đích 16 bit Lợi ích lệnh sử dụng hết toàn không gian nhớ chương trình 64K, lại có điểm bất lợi lệnh dài đến byte 1.8 ĐỊNH ĐỊA CHỈ CHỈ SỐ: Kiểu định địa chỉ số sử dụng ghi (hoặc đếm chương trình trỏ liệu) offset (thanh chứa A) tạo thành dạng địa hiệu dụng cho lệnh JMP lệnh MOVC Ex: MOVC A, @A+ JMP @A+DPTR CÁC LOẠI LỆNH: Các lệnh 8051 chia làm nhóm: Nhóm lệnh số học Nhóm lệnh logic Nhóm lệnh di chuyển liệu Nhóm lệnh xử lý bit Nhóm lệnh rẽ nhánh 17 Tài liệu tham khảo Kỹ thuật Vi xử lý Ghi : GVHD: Trần Hoài Tâm Rn: địa ghi R0-R7 direct: địa bit RAM nội (00H-0FH) @Ri: địa gián tiếp sử dụng ghi R0 R1 source: toán hạng nguồn - Rn, direct @Ri destination: toán hạng đích - Rn, direct @Ri #data: số bit ( Binary, Decimal, Hexa) #data 16: số 16 bit bit: địa trực tiếp bit rel: địa tương đối (offset) bit ex: nhãn addr11: địa 11 bit trang hành addr16: địa 16 bit 2.1 CÁC LỆNH SỐ HỌC: ADD A, source : cộng toán hạng nguồn với A ADD A, #data ADDC A, source : cộng toán hạng nguồn với A cờ nhớ ADDC A, #data SUBB A, source : trừ bớt A toán hạng nguồn số mượn (cờ nhớ) SUBB A, #data INC A : tăng ghi A đơn vị INC source DEC A : giảm ghi A đơn vị INC DPTR : tăng ghi DPTR đơn vị MUL AB : nhân A với B DIV AB : chia A B (A chứa thương số, B chứa số dư) DA A : hiệu chỉnh thập phân ghi A 2.2 CÁC LỆNH LOGIC: ANL A, source : AND ANL A, #data ANL direct, A ANL direct, #data 18 Tài liệu tham khảo Kỹ thuật Vi xử lý ORL A, source : OR GVHD: Trần Hoài Tâm ORL A, #data ORL direct, A ORL direct, #data XRL A, source : XOR XRL A, #data XRL direct, A XRL direct, #data CLR A : xóa ghi A CPL A : lấy bù A RL A : quay trái A (MSB=>LSB) RLC A : quay trái A với cờ C RR A : quay phải A ( LSB=>MSB) RRC A : quay phải A với cờ C SWAP A : hoán đổi hai nibble (hai nửa bit) 2.3 CÁC LỆNH DI CHUYỂN DỮ LIỆU : MOV A, source : di chuyển toán hạng nguồn đến toán hạng đích MOV A, #data MOV dest, A MOV dest, source MOV dest, #data MOV DPTR, #data16 MOVC A, @A+DPTR : di chuyển từ nhớ chương trình MOVC A, @A+PC MOVX A, @Ri : di chuyển từ nhớ liệu MOVX A, @DPTR MOVX @Ri, A MOVX @DPTR, A PUSH direct : cất vào stack POP direct : lấy từ stack XCH A, source : trao đổi byte XCHD A, @Ri : trao đổi digit thấp 19 Tài liệu tham khảo Kỹ thuật Vi xử lý 2.4 CÁC LỆNH THAO TÁC TRÊN BIT : CLR C GVHD: Trần Hoài Tâm : xóa bit CLR bit SETB C : set bit SETB bit CPL C : lấy bù bit CPL bit ANL C, bit : AND bit với C ANL C, /bit : AND (NOT bit) với C ORL C, bit : OR bit với C ORL C, /bit : OR (NOT bit) với C MOV C, bit : di chuyển bit đến bit MOV bit, C JC rel : nhảy C JNC rel : nhảy C JB bit, rel : nhảy bit JNB bit, rel : nhảy bit JBC bit, rel : nhảy bit xóa bit 2.5 CÁC LỆNH RẼ NHÁNH: ACALL addr11 : gọi chương trình LCALL addr16 RET : quay từ chương trình RETI : quay từ trình phục vụ ngắt AJMP addr11 : nhảy LJMP addr16 SJMP rel JMP @A+DPTR JZ rel : nhảy A JNZ rel : nhảy A khác CJNE A, direct, rel : so sánh nhảy không CJNE A,#data, rel CJNE Rn,#data, rel 20 Tài liệu tham khảo Kỹ thuật Vi xử lý DJNZ Rn, rel : giảm nhảy khác không GVHD: Trần Hoài Tâm DJNZ direct, rel NOP : không làm III CẤU TRÚC CHƯƠNG TRÌNH: TỔ CHỨC CHƯƠNG TRÌNH: Các phần chương trình xếp theo trình tự sau : Các phép gán Các lệnh khởi động (thiết lập timer, ngắt, nạp giá trị ban đầu …) Thân chương trình Các chương trình Các định nghĩa liệu (DB DW) Gán: Việc định nghĩa số phát biểu gán làm cho chương trình dễ đọc bảo trì Các số dùng suốt chương trình cách thay giá trị ký hiệu gán Khi chương trình dịch giá trị tương ứng thay cho ký hiệu Chương trình con: Khi chương trình trở nên lớn, ta phải chia nhỏ thao tác lớn phức tạp thành thao nhỏ đơn giản Các thao tác nhỏ đơn giản lập trình thành chương trình Các chương trình bắt đầu nhãn kết thúc lệnh RET RETI Các dẫn: Các dẫn lệnh trình dịch hợp ngữ ORG: dẫn ORG dùng để thiết lập gốc chương trình cho phát biểu theo sau Ex : ORG 0000H ORG 0030H END: dẫn thông báo cho trình dịch hợp ngữ biết kết thúc chương trình nguồn END phát biểu cuối chương trình EQU (equate): dẫn EQU gán giá trị số cho tên ký hiệu định nghĩa Ex : N27 EQU 27 HERE EQU $ DATA EQU 50H 21 Tài liệu tham khảo Kỹ thuật Vi xử lý BIT : dẫn BIT gán giá trị bit vào tên ký hiệu Ex : MOTOR BIT GVHD: Trần Hoài Tâm P0.0 DB : dẫn DB dùng để gán số vào nhớ chương trình, biểu thức theo sau chuỗi hay nhiều giá trị byte Chỉ dẫn DB cho phép chuỗi ký tự (đặt hai dấu nháy đơn) dài hai ký tự, ký tự chuỗi biến đổi thành mã ASCII Nếu có nhãn dùng, nhãn gán địa byte Ex : SQUARES: DB 0, 1, 4, 9, 16, 25 MESSAGE: ' LAC HONG UNIVERSITY ', ; chuỗi ký tự kết thúc LƯU ĐỒ THUẬT GIẢI: Lưu đồ thuật giải cộng cụ thường dùng cho giai đoạn khởi đầu lập trình hợp ngữ Lưu đồ thuật giải công cụ trực quan giúp ta dễ dàng trình bày hiểu chương trình hợp ngữ cách hệ thống Lưu đồ thuật giải cho phép yêu cầu mô tả dạng "điều phải thực hiện" "thực điều cách nào" Các ký hiệu thường dùng cho việc lập lưu đồ bao gồm: : khối định, khối thường đặt câu hỏi cho câu trả lời có (Yes) hay không (No) : mũi tên đường chương trình : khối xử lý : khối xuất/nhập : điểm bắt đầu kết thúc chương trình : chương trình : kết nối qua trang Ex: Hãy viết chương trình xóa ghi RAM nội từ địa 50H-60H 22 Tài liệu tham khảo Kỹ thuật Vi xử lý GVHD: Trần Hoài Tâm Hình 3.1 Lưu đồ giải thuật Chương trình: MOV R0, #50H MOV A, #0 LOOP: MOV @R0, A INC R0 CJNE R0, #61H, LOOP END 23 ... nhỏ đơn giản lập trình thành chương trình Các chương trình bắt đầu nhãn kết thúc lệnh RET RETI Các dẫn: Các dẫn lệnh trình dịch hợp ngữ ORG: dẫn ORG dùng để thiết lập gốc chương trình cho phát... ";" Các chương trình phần có kích thước lớn chương trình thường bắt đầu khối thích bao gồm nhiều dòng thích để giải thích đặt trưng chương trình II TÓM TẮT TẬP LỆNH: Cũng vi xử lý bit lệnh 8051... thúc LƯU ĐỒ THUẬT GIẢI: Lưu đồ thuật giải cộng cụ thường dùng cho giai đoạn khởi đầu lập trình hợp ngữ Lưu đồ thuật giải công cụ trực quan giúp ta dễ dàng trình bày hiểu chương trình hợp ngữ cách