Tài liệu tham khảo TH. Vi xử lý                                GVHD: Trần Hoài Tâm           CHƯƠNG III: LẬP TRÌNH HỢP NGỮ...
Tài liệu tham khảo TH. Vi xử lý                               GVHD: Trần Hoài Tâmtheo phải là các ký tự chữ, các số, dấu "...
Tài liệu tham khảo TH. Vi xử lý                                 GVHD: Trần Hoài Tâm           Trực tiếp (direct)         ...
Tài liệu tham khảo TH. Vi xử lý                               GVHD: Trần Hoài Tâm                     CJNE R0, #80H, LOOP ...
Tài liệu tham khảo TH. Vi xử lý                              GVHD: Trần Hoài Tâmkhông gian nhớ chương trình 64K, nhưng lại...
Tài liệu tham khảo TH. Vi xử lý                              GVHD: Trần Hoài Tâm2.1. CÁC LỆNH SỐ HỌC:       ADD A, source ...
Tài liệu tham khảo TH. Vi xử lý                                GVHD: Trần Hoài Tâm       RLC A                : quay trái ...
Tài liệu tham khảo TH. Vi xử lý                                 GVHD: Trần Hoài Tâm       ORL C, bit           : OR bit vớ...
Tài liệu tham khảo TH. Vi xử lý                              GVHD: Trần Hoài Tâm           Các lệnh khởi động (thiết lập ...
Tài liệu tham khảo TH. Vi xử lý                                GVHD: Trần Hoài Tâm           DB : chỉ dẫn DB dùng để gán ...
Tài liệu tham khảo TH. Vi xử lý                           GVHD: Trần Hoài Tâm       Ex: Hãy viết một chương trình xóa các ...
Upcoming SlideShare
Loading in...5
×

Chuong3 lập trình hợp ngữ

6,070

Published on

Chuong3 lập trình hợp ngữ

Published in: Education
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
6,070
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
232
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Chuong3 lập trình hợp ngữ

  1. 1. Tài liệu tham khảo TH. 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ỆNHI. LẬP TRÌNH HỢP NGỮ: Hợp ngữ (assembly language) là ngôn ngữ của máy tính có vị trí ở giữangôn ngữ máy và ngôn ngữ cấp cao. Các ngôn ngữ cấp cao như Pascal, C sử dụngcác từ và các phát biểu dễ hiểu hơn. Ngôn ngữ máy (machine language) là ngônngữ ở dạng số nhị phân của máy tính. Một chương trình viết bằng ngôn ngữ máy làmột chuỗi các byte nhị phân biểu diễn các lệnh mà máy tính thực thi được. Hợp ngữ thay thế các mã nhị phân của ngôn ngữ máy bằng các mã gợi nhớgiúp ta dễ nhớ và dễ lập trình hơn. Ex : lệnh cộng có mã nhị phân là "10110011" được hợp ngữ thay thế bằngmã gợi nhớ ADD Một chương trình viết bằng hợp ngữ không thể được thực thi trực tiếp. Saukhi được viết xong chương trình này phải được dịch thành ngôn ngữ máy. Một chương trình viết bằng hợp ngữ là chương trình viết dưới dạng các kýhiệu, các mã gợi nhớ … trong đó mỗi phát biểu tương ứng với một lệnh của ngônngữ máy. Mỗi dòng lệnh được chia thành các trường cách biệt nhau bởi khoảng trắnghoặc Tab. Khuôn dạng tổng quát của mỗi dòng lệnh như sau: [ label: ] mnemonic [ operand ][,operand ][, … ] [;comment] Label: nhãn Mnemonic: mã gợi nhớ Operand: toán hạng Comment: chú thích a. Trường nhãn: Nhãn là một loại ký hiệu và được nhận dạng bằng dấu ":" ( kết thúc nhãn).Nhãn phải được bắt đầu bằng một ký tự chữ, dấu hỏi "?", dấu nối dưới "_" và tiếp 15
  2. 2. Tài liệu tham khảo TH. Vi xử lý GVHD: Trần Hoài Tâmtheo phải là các ký tự chữ, các số, dấu "?", dấu "_". Nhãn có thể dài tối đa là 31 kýtự ở dạng chữ thường hoặc chữ in. Nhãn không được trùng với các từ khóa (các mãgợi nhớ, các chỉ dẫn, các toán tử hoặc các ký hiệu tiền định nghĩa). b. Trường mã gợi nhớ: Mã gợi nhớ là các ký hiệu biểu diễn cho các lệnh. Trường mã gợi nhớ củalệnh theo sau trường nhãn. 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 này chứa địa chỉ hoặcdữ liệu mà lệnh sẽ sử dụng. Một nhãn có thể được dùng để biểu thị địa chỉ của dữliệu. Các khả năng của trường toán hạng phụ thuộc vào thao tác. Có thao tác khôngcó toán hạng (ex: lệnh RET, NOP...) trong khi các thao tác khác cho phép nhiềutoán hạng cách nhau bởi dấu phẩy. d. Trường chú thích: Các ghi chú dùng để làm rõ chương trình được đặt trong trường chú thích ởcuối dòng lệnh. Các chú thích được bắt đầu bằng dấu ";". Các chú thích có thểchiếm nhiều dòng riêng và cũng phải bắt đầu bằng dấu ";". Các chương trình convà các phần có kích thước lớn của chương trình thường bắt đầu bởi một khối chúthích bao gồm nhiều dòng chú thích để giải thích các đặt trưng của chương trình.II. TÓM TẮT TẬP LỆNH: Cũng như các bộ vi xử lý 8 bit các lệnh của 8051 có các opcode 8 bit, do vậysố lệnh có thể lên đến 256 lệnh (thực tế có 255 lệnh, 1 lệnh không được định nghĩa).Ngoài opcode một số lệnh còn có thêm 1 hoặc 2 byte nữa cho dữ liệu hoặc địa chỉ.Tập lệnh có 139 lệnh 1 byte, 92 lệnh 2 byte và 24 lệnh 3 byte .1. CÁC KIỂU ĐỊNH ĐỊA CHỈ: Các kiểu định địa chỉ là phần cần thiết cho toàn bộ tập lệnh của mỗi một bộvi xử lý, bộ vi điều khiển. Các kiểu định địa chỉ cho phép ta xác định rõ nguồn vàđích của dữ liệu theo nhiều cách khác nhau phụ thuộc vào tình huống lập trình, có8 kiểu định địa chỉ:  Thanh ghi (register) 16
  3. 3. Tài liệu tham khảo TH. Vi xử lý GVHD: Trần Hoài Tâm  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 chỉ thanh ghi được ký hiệu là Rn, trong đó n có giá trị từ 0-7,A, DPTR, PC, C và cặp thanh ghi AB. Ex: ADD A, R7 Có 4 dãy thanh ghi nhưng ở một thời điểm chỉ có một dãy tích cực. Các dãythanh ghi chiếm 32 byte đầu tiên của RAM dữ liệu trên chip (00H-1FH). Để chọndãy thanh ghi tích cực ta tác động lên các bit RS1, RS0 của từ trạng thái chươngtrình PSW. Khi hệ thống được reset thì dãy thanh ghi 0 mặc định được tích cực.1.2. ĐỊNH ĐỊA CHỈ TRỰC TIẾP: Kiểu định địa chỉ trực tiếp được sử dụng để truy xuất các biến nhớ hoặc cácthanh ghi trên chip. Ex: MOV A, 55H MOV P1, A (P1 có địa chỉ 90H)1.3. ĐỊNH ĐỊA CHỈ GIÁN TIẾP: Kiểu định địa chỉ gián tiếp được nhận biết nhờ vào ký tự @ đặt trước R0hoặc R1. Các thanh ghi R0 và R1 có thể hoạt động như là các con trỏ và nội dungcủa chúng chỉ ra địa chỉ trong RAM nơi mà dữ liệu được đọc hay ghi. Ta cần đếnkiểu định địa chỉ gián tiếp khi ta duyệt các vị trí liên tiếp trong bộ nhớ. Ex: Thực hiện việc xóa tuần tự RAM nội từ địa chỉ 60H-7FH MOV R0,#60H LOOP: MOV @R0,#0 INC R0 17
  4. 4. Tài liệu tham khảo TH. Vi xử lý GVHD: Trần Hoài Tâm CJNE R0, #80H, LOOP (tiếp tục)1.4. ĐỊNH ĐỊA CHỈ TỨC THỜI: Khi toán hạng nguồn là một hằng số thay vì là một biến, hằng số này có thểđưa vào lệnh và đây là byte dữ liệu tức thời. Các toán hạng tức thời được nhận biếtnhờ vào ký tự # đặt trước chúng. Toán hạng này có thể là một hằng số học, một biếnhoặc một biểu thức số học sử dụng các hằng số. Ex : MOV A, #12 MOV DPTR, #8000H1.5. ĐỊNH ĐỊA CHỈ TƯƠNG ĐỐI: Kiểu định địa chỉ tương đối chỉ được sử dụng cho các lệnh nhảy. Một địachỉ tương đối (còn được gọi là offset) là một giá trị 8 bit có dấu. Giá trị này đượccộng với bộ đếm chương trình để tạo ra địa chỉ của lệnh tiếp theo cần được thựcthi. Ex : SJMP THERE DJNE … CJNE … Định địa chỉ tương đối có ưu điểm là cung cấp cho chúng ta mã không phụthuộc vào vị trí, nhưng lại có điểm bất lợi là các đích nhảy bị giới hạn trong phạm vitừ -128 byte đến 127 byte.1.6. ĐỊNH ĐỊA CHỈ TUYỆT ĐỐI: Kiểu định địa chỉ tuyệt đối chỉ được sử dụng với các lệnh ACALL và AJMP.Đây là các lệnh 2 byte cho phép rẽ nhánh chương trình trong không gian 2K hiệnhành của bộ nhớ chương trình. Để không bị giới hạn ta có thể sử dụng lệnh LCALL,LJMP. Ex : LOOP: LCALL GIAI_MA LJMP LOOP1.7. ĐỊNH ĐỊA CHỈ DÀI: Kiểu định địa chỉ dài chỉ được dùng cho các lệnh LCALL và LJMP các lệnh3 byte này chứa địa chỉ đích 16 bit. Lợi ích của lệnh này là sử dụng hết toàn bộ 18
  5. 5. Tài liệu tham khảo TH. Vi xử lý GVHD: Trần Hoài Tâmkhông gian nhớ chương trình 64K, nhưng lại có điểm bất lợi là lệnh dài đến 3 byte.1.8. ĐỊNH ĐỊA CHỈ CHỈ SỐ: Kiểu định địa chỉ chỉ số sử dụng một thanh ghi nền (hoặc bộ đếm chươngtrình hoặc con trỏ dữ liệu) và một offset (thanh chứa A) tạo thành dạng địa chỉ hiệudụng cho lệnh JMP hoặc lệnh MOVC. Ex: MOVC A, @A+<base reg> JMP @A+DPTR2. CÁC LOẠI LỆNH: Các lệnh của 8051 được chia làm 5 nhóm:  Nhóm lệnh số học  Nhóm lệnh logic  Nhóm lệnh di chuyển dữ liệu  Nhóm lệnh xử lý bit  Nhóm lệnh rẽ nhánh Ghi chú : Rn: địa chỉ thanh ghi R0-R7 direct: địa chỉ 8 bit trong RAM nội (00H-0FH) @Ri: địa chỉ gián tiếp sử dụng thanh ghi R0 hoặc R1 source: toán hạng nguồn - có thể là Rn, direct hoặc @Ri destination: toán hạng đích - có thể là Rn, direct hoặc @Ri #data: hằng số 8 bit ( Binary, Decimal, Hexa) #data 16: hằng số 16 bit bit: địa chỉ trực tiếp của một bit rel: địa chỉ tương đối (offset) 8 bit ex: nhãn addr11: địa chỉ 11 bit trong trang hiện hành addr16: địa chỉ 16 bit 19
  6. 6. Tài liệu tham khảo TH. Vi xử lý GVHD: Trần Hoài Tâm2.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 và cờ nhớ ADDC A, #data SUBB A, source : trừ bớt A bởi toán hạng nguồn và số mượn (cờ nhớ) SUBB A, #data INC A : tăng thanh ghi A một đơn vị INC source DEC A : giảm thanh ghi A một đơn vị INC DPTR : tăng thanh ghi DPTR một đơn vị MUL AB : nhân A với B DIV AB : chia A bởi B (A chứa thương số, B chứa số dư) DA A : hiệu chỉnh thập phân thanh ghi A2.2. CÁC LỆNH LOGIC: ANL A, source : AND ANL A, #data ANL direct, A ANL direct, #data ORL A, source : OR 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 thanh ghi A CPL A : lấy bù A RL A : quay trái A (MSB=>LSB) 20
  7. 7. Tài liệu tham khảo TH. Vi xử lý GVHD: Trần Hoài Tâm 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 4 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ừ bộ nhớ chương trình MOVC A, @A+PC MOVX A, @Ri : di chuyển từ bộ nhớ dữ liệu MOVX A, @DPTR MOVX @Ri, A MOVX @DPTR, A PUSH direct : cất vào stack POP direct : lấy ra từ stack XCH A, source : trao đổi các byte XCHD A, @Ri : trao đổi các digit thấp2.4. CÁC LỆNH THAO TÁC TRÊN BIT : CLR C : xóa bit CLR bit SETB C : set bit bằng 1 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 21
  8. 8. Tài liệu tham khảo TH. Vi xử lý GVHD: Trần Hoài Tâm 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 nếu C bằng 1 JNC rel : nhảy nếu C bằng 0 JB bit, rel : nhảy nếu bit bằng 1 JNB bit, rel : nhảy nếu bit bằng 0 JBC bit, rel : nhảy nếu bit bằng 1 rồi xóa bit2.5. CÁC LỆNH RẼ NHÁNH: ACALL addr11 : gọi chương trình con LCALL addr16 RET : quay về từ chương trình con RETI : quay về từ trình phục vụ ngắt AJMP addr11 : nhảy LJMP addr16 SJMP rel JMP @A+DPTR JZ rel : nhảy nếu A bằng 0 JNZ rel : nhảy nếu A khác 0 CJNE A, direct, rel : so sánh và nhảy nếu không bằng CJNE A,#data, rel CJNE Rn,#data, rel DJNZ Rn, rel : giảm và nhảy nếu khác không DJNZ direct, rel NOP : không làm gìIII. CẤU TRÚC CHƯƠNG TRÌNH:1. TỔ CHỨC CHƯƠNG TRÌNH: Các phần của chương trình được sắp xếp theo trình tự sau :  Các phép gán 22
  9. 9. Tài liệu tham khảo TH. Vi xử lý GVHD: Trần Hoài Tâm  Các lệnh khởi động (thiết lập timer, ngắt, nạp các giá trị ban đầu …)  Thân chính của chương trình  Các chương trình con  Các định nghĩa hằng dữ liệu (DB và DW) Gán: Việc định nghĩa các hằng số bằng phát biểu gán làm cho chương trình dễ đọcvà bảo trì hơn. Các hằng số được dùng trong suốt chương trình bằng cách thay thếcác giá trị bằng các ký hiệu đã được gán. Khi chương trình được dịch thì các giá trịtương ứng được thay thế cho các ký hiệu. Chương trình con: Khi các chương trình trở nên lớn, ta phải chia nhỏ các thao tác lớn và phứctạp thành các thao nhỏ và đơn giản. Các thao tác nhỏ và đơn giản này được lập trìnhthành các chương trình con. Các chương trình con được bắt đầu bằng một nhãn vàkết thúc bằng lệnh RET hoặc RETI. Các chỉ dẫn: Các chỉ dẫn là các lệnh đối với trình dịch hợp ngữ.  ORG: chỉ dẫn ORG dùng để thiết lập một gốc mới của chương trình cho các phát biểu theo sau. Ex : ORG 0000H ORG 0030H  END: là chỉ 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 là phát biểu cuối cùng của chương trình.  EQU (equate): chỉ dẫn EQU gán giá trị số cho tên của ký hiệu được định nghĩa. Ex : N27 EQU 27 HERE EQU $ DATA EQU 50H  BIT : chỉ dẫn BIT gán giá trị bit vào tên của ký hiệu. Ex : MOTOR BIT P0.0 23
  10. 10. Tài liệu tham khảo TH. Vi xử lý GVHD: Trần Hoài Tâm  DB : chỉ dẫn DB dùng để gán một hằng số vào bộ nhớ chương trình, các biểu thức theo sau có thể là một chuỗi của một hay nhiều giá trị byte. Chỉ dẫn DB cho phép chuỗi ký tự (đặt trong hai dấu nháy đơn) dài hơn hai ký tự, mỗi ký tự trong chuỗi được biến đổi thành mã ASCII. Nếu có một nhãn được dùng, nhãn được gán địa chỉ của byte đầu tiên. Ex : SQUARES: DB 0, 1, 4, 9, 16, 25 MESSAGE: LAC HONG UNIVERSITY , 0 ; chuỗi ký tự kết thúc bởi 02. LƯU ĐỒ THUẬT GIẢI: Lưu đồ thuật giải là các cộng cụ thường dùng cho các giai đoạn khởi đầucủa lập trình hợp ngữ. Lưu đồ thuật giải là công cụ trực quan giúp ta dễ dàng trìnhbày và hiểu chương trình hợp ngữ một cách hệ thống. Lưu đồ thuật giải cho phépmột yêu cầu được mô tả dưới dạng "điều gì phải được thực hiện" hơn là "thực hiệnđiều đó bằng cách nào". Các ký hiệu thường dùng nhất cho việc lập lưu đồ baogồm: : khối quyết định, khối này thường đặt ra các câu hỏi cho các câu trả lời có (Yes) hay không (No). : mũi tên chỉ đường đi của chương trình : khối xử lý : khối xuất/nhập : điểm bắt đầu hoặc kết thúc chương trình : chương trình con : kết nối qua trang 24
  11. 11. Tài liệu tham khảo TH. Vi xử lý GVHD: Trần Hoài Tâm Ex: Hãy viết một chương trình xóa các thanh ghi trong RAM nội từ địa chỉ50H-60H. 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 25

×