intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

BÁO CÁO MÔN HỌC NGÔN NGỮ LẬP TRÌNH ASSEMBLY

Chia sẻ: Nguyễn Ngọc Tiến | Ngày: | Loại File: DOCX | Số trang:17

399
lượt xem
100
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

ASSEMBLY Là ngôn ngữ lập trình cấp thấp gần với ngôn ngữ máy, chương trình sau khi viết bằng ASSEMBLY cần được chuyển qua mã lệnh hay còn gọi là mã máy của vi điều khiển, quá trình chuyển đổi được thực hiện bằng chương trình dịch ASSEMBLY. Các mã lệnh sau đó được nạp vào room của vi điều khiển để thực hiện chương trình. Có nhiều chương trình biên dịch nhưng thông dụng nhất hiện nay là MACRO ASSEMBLY của hãng microsoft và turbo của hãng borland....

Chủ đề:
Lưu

Nội dung Text: BÁO CÁO MÔN HỌC NGÔN NGỮ LẬP TRÌNH ASSEMBLY

  1. ĐẠI HỌC QUỐC GIA TP. HCM TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN BÁO CÁO MÔN HỌC NGÔN NGỮ LẬP TRÌNH ASSEMBLY GIÁO VIÊN GIẢNG DẠY: PHAN NGUYỆT MINH SINH VIÊN THỰC HIỆN: NGUYỄN ĐỨC VIỄN – MSSV: 09520351 NGUYỄN NGỌC TIẾN – MSSV: 09520441 KHOA : CNPM04 TP. HCM, ngày 19 tháng 09 năm 2011. LỜI MỞ ĐẦU Sau khi tìm hiểu sơ qua về ngôn ngữ Assembly, chúng em nhận thấy ngôn ngữ lập trình này khá dể hiểu, có nhiều ưu điểm vượt trội cũng như ứng dụng của ngôn ngữ này khá phổ biến trong cuộc sống nên chúng em đã chọn đề tài về ngôn ngữ lập trình Assembly để tìm hiểu và làm bài báo cáo này. Trong bài, chúng em đã đưa ra những khái quát về ngôn ngữ Assembly, cấu trúc một chương trình viết bằng ngôn ngữ assembly, các hàm cơ bản, cấu trúc cơ bản trong ngôn ngữ
  2. Assembly… qua những tìm hiểu về Assembly trên lí thuyết, chúng em hy vọng có thể triển khai một đồ án về lập trình cho một vi điều khiển họ 80x86. TP. HCM, ngày 19 tháng 09 năm 2011. NHẬN XÉT CỦA GIÁO VIÊN ……………………………………………………………………………………… ………………………………………………………………………………………… ………………………………………………………………………………………… ………………………………………………………………………………………… ………………………………………………………………………………………… … ………………………………………………………………………………………… ………………………………………………………………………………………… ………………………………………………………………………………………… ………………………………………………………………………………………… ………………………………………………………………………………………… ………………………………………………………………………………………… ………………………………………………………………………………………… …………………………………………………………………………………………
  3. ………………………………………………………………………………………… ………………………………………………………………………………………… ………………………………………………………………………………………… ………………………………………………………………………………………… ………………………………………………………………………………………… ………………………………………………………………………………………… ………………………………………………………………………………………… ………………………………………………………………………………………… ………………………………………………………………………………………… ………………………………………………………………………………………… ………………………………………………………………………………………… ………………………………………………………………………………………… ………………………………………………………………………………………… …………………………………………………… TP. HCM, ngày 19 tháng 09 năm 2011. MỤC LỤC KHÁI QUÁT VỀ NGÔN NGỮ ASSEMBLY. NHỮNG KHÁI NIỆM CHUNG CỦA NGÔN NGỮ ASSEMBLY. • Bộ ký tự của Assembly • Từ khóa • Tên tự đặt • Cấu trúc một lệnh Assembly • Các dạng hằng dùng trong Assembly KHAI BÁO BIẾN VÀ HẰNG • Khai báo biến • Khai báo hằng KHUNG CỦA MỘT CHƯƠNG TRÌNH ASSEMBLY • Khai báo quy mô sử dụng bộ nhớ • Khai báo đoạn ngăn xếp • Khai báo đoạn dữ liệu • Khai báo đoạn mã • Khung chương trình Assembly để dịch ra chương trình .EXE • Khung chương trình Assembly để dịch ra chương trình .COM BIÊN SOẠN VÀ DỊCH CHƯƠNG TRÌNH ASSEMBLY CÁC NHÓM LỆNH TRONG ASSEMBLY • Nhóm lệnh di chuyển • Nhóm lệnh số học • Nhóm lệnh logic • Nhóm lệnh rẽ nhánh • Nhóm lệnh xử lí bit
  4. CÁC CẤU TRÚC ĐIỀU KHIỂN TRONG ASSEMBLY • Cấu trúc rẽ nhánh IF-THEN • Cấu trúc lựa chọn CASE • Cấu trúc lặp với số lần xác định FOR-DO • Cấu trúc lặp với số lần không xác định TÀI LIỆU THAM KHẢO TP. HCM, ngày 19 tháng 09 năm 2011. I. KHÁI QUÁT VỀ NGÔN NGỮ ASSEMBLY. Assembly là một ngôn ngữ lập trình cấp thấp gần với ngôn ngữ máy, chương trình sau khi viết bằng assembly cần được chuyển qua mã lệnh (hay còn gọi là mã máy) của vi điều khiển, quá trình chuyển đổi được thực hiện bằng chương trình dịch Assembler. Các mã lệnh sau đó được nạp vào Rom của vi điều khiển để thực hiện chương trình. Có nhiều chương trình biên dịch nhưng thông dụng nhất hiện nay là Macro Assembler của hãng Microsoft và Turbo của hãng Borland. Chúng ta sẽ sử dụng Macro Assembler 6.0 để biên dịch các chương trình Assembly. Chương trình biên dịch MASM 6.0 có rất nhiều file nhưng tối thiểu cần những file sau : - MASM.EXE để biên dịch chương trình sang ngôn ngữ máy. - LINK.EXE để liên kết các chương trình và tạo ra một chương trình chạy được có đuôi exe. - EXE2BIN để chuyển chương trình đuôi exe sang đuôi com. Ngôn ngữ lập trình Assembly thường để viết phần mềm cho các h ệ vi x ử li ( họ vi xử lí 80x86 nói chung) vì nó có các ưu điểm sau : - Sử dụng trực tiếp tập lệnh của bộ vi xử lí nên quá trình đi ều hành ch ức năng rất sát với cấu trúc phần cứng của máy tính, t ận d ụng tri ệt đ ể kh ả năng của phần cứng mà không một ngôn ngữ lập trình bậc cao nào làm được. - Có tốc độ thực hiện nhanh hơn nhiều so với các ngôn ngữ bậc cao. Do v ậy nó rất thích hợp với các chức năng yêu cầu thời gian thực chẳng hạn như thao tác với với các tín hiệu biến đổi nhanh. II. NHỮNG QUI ƯỚC CHUNG TRONG NGÔN NGỮ ASSEMBLY. 1. Bộ ký tự của Assembly Một ngôn ngữ bất kỳ từ ngôn ngữ giao ti ếp c ủa con người t ới ngôn ng ữ máy tính đều xây dựng trên một bộ ký tự. Các ký tự ghép lại thành các t ừ có nghĩa gọi là từ vựng. Các từ lại được viết thành các câu tuân theo cú pháp và ngữ pháp của ngôn ngữ để diễn tả hành động sựviệc cần thực hiện. Bộ ký tự của Assembly gồm có: - Các chữ cái latinh : 26 chữ hoa A-Z, 26 chữ thường a-z. - Các chữ số thập phân : ‘0’ - ‘9’
  5. - Các ký hiệu phép toán, các dấu chấm câu và các ký hi ệu đ ặc bi ệt: + - * / @ ? $,.:[]() < > { } & % ! \ # v.v... - Các ký tự ngăn cách: space và tab. 2. Từ khóa Từ khóa là các từ của riêng Assembly như tên các thanh ghi, tên l ệnh d ạng gợi nhớ của bộvi xử lý, tên toán tử... Các từ khóa này đòi h ỏi người lập trình phải dùng đúng như Assembly quy định. Các từ khóa có thể vi ết bằng ch ữ hoa hoặc chữ thường đều được. 3. Tên tự đặt Tên là một dãy ký tự dùng để biểu thị tên hằng, tên bi ến, tên nhãn, tên chương trình con, tên đoạn nhớ... Tên do người lập trình tự đặt nhưng ph ải tuân theo quy tắc sau: Quy tắc đặt tên: Tên chỉ gồm chữ cái, chữ s ố và m ột s ố ký t ́ ự đ ặc bi ệt như ? @ _ $ Chữ đầu của tên bắt buộc phải là chữ cái. Trong tên không có d ấu cách. Tên có thể dài từ 1 đến 35 ký tự. 4. Cấu trúc một lệnh Assembly Một chương trình Assembly bao gồm các dòng lệnh, một dòng l ệnh có th ể là một lệnh thật dưới dạng gợi nhớ của bộ vi xử lý hoặc một hướng dẫn cho chương trình dịch (assembler directive, đôi khi gọi là lệnh gi ả). L ệnh th ật s ẽ được dịch ra mã máy còn lệnh giả thì không được dịch, vì nó chỉ có tác dụng chỉ dẫn cho chương trình dịch thực hiện công việc. Ta có thể vi ết các dòng lệnh bằng chữ hoa hoặc chữ thường đều được vì chúng được coi là tương đương nhau. Một dòng lệnh của Assembly có thể có những tr ường sau (không nhất thiết phải có đủ các trường): Mã lệnh Các toán hạng Chú giải Tên Ví dụ: LAP: MOV AH,[BX] ; Copy nội dung của ô nhớ có địa chỉ DS:BX vào A • Trường tên Trường tên có thể là tên nhãn, tên biến hoặc tên thủ tục (chương trình con). Các tên và nhãn này sẽ được trình biên dịch gán bằng các đ ịa ch ỉ c ụ th ể c ủa ô nhớ. Một nhãn kết thúc bằng dấu hai chấm (:). • Trường mã lệnh Chứa các lệnh thật hoặc lệnh giả • Trường toán hạng Đối với các lệnh thật thì trường này chứa các toán h ạng c ủa l ệnh. Tùy t ừng loại lệnh mà có thể không có, có 1 hoặc 2 toán hạng trong m ột l ệnh. Đ ối v ới các lệnh giả thì trường này chứa các thông tin khác liên quan đến lệnh giả. • Trường chú giải Lời giải thích phải được bắt đầu bằng dấu chấm phẩy. Trường chú gi ải dành cho người lập trình để ghi các lời giải thích cho các lệnh của chương trình, giúp cho người đọc chương trình dễ hiểu các thao tác của ch ương trình l ớn. Khi đọc thấy dấu chấm phẩy, chương trình dịch bỏ qua không dịch từ sau dấu chấm phẩy đến hết dòng. Người lập trình có thể lợi dụng đặc đi ểm này để loại bỏ một dòng lệnh nào đó trong chương trình.
  6. 5. Các dạng hằng dùng trong Assembly - Hằng số nhị phân: gồm một dãy các chữ số 0 và 1, k ết thúc b ằng ch ữ B. Ví dụ: 10011101B - Hằng số hex: gồm một dãy các số từ 0 đến 9 và các chữ cái từ A đến F (a đến f), kết thúc bằng chữ H. Đối với các số bắt đầu bằng chữ thì ph ải thêm 0 đằng trước để báo cho chương trình dịch biết đó là số không phải là tên. Ví dụ: 7AC5H, 0ABH - Hằng số thập phân: gồm một dãy các số từ 0 đến 9, có hoặc không có ch ữ D theo sau. Ví dụ: 34 hoặc 34D. - Hằng ký tự: là một ký tự bất kỳ đặt giữa hai dấu phẩy trên. Ví dụ: ‘A’ - Hằng xâu ký tự: là một dãy ký tự bất kỳ đặt gi ữa hai d ấu phẩy trên. Ví d ụ: ‘Nhap’ III. KHAI BÁO BIẾN VÀ HẰNG 1. Khai báo biến • Khai báo biến kiểu byte Tên biến Giá trị khởi đầu DB Ví dụ: B1 DB 4 Nếu không muốn biến chứa giá trị khởi đầu ta có thể dùng toán t ử ? vào v ị trí giá trị khởi đầu. Ví dụ: B2 DB ? • Khai báo biến kiểu từ Tên biến Giá trị khởi đầu DW Ví dụ: W1 DW 42 Muốn biến không chứa giá trị khởi đầu ta dùng toán tử ? và vị trí giá tr ị kh ởi đầu. Ví dụ: W2 DW ? • Khai báo biến kiểu từ kép Tên biến Giá trị khởi đầu DD Ví dụ: DW1 DD 1000 • Khai báo biến mảng Biến mảng là biến hình thành từ một dãy liên tiếp các phần tử (ô nh ớ) có cùng kiểu byte từ hoặc từ kép. Khai báo biến mảng là đặt tên cho một dãy liên ti ếp các byte từ hoặc từ kép trong bộ nhớ đồng thời cung c ấp các giá tr ị ban đ ầu tương ứng. Số phần tử của mảng được xác định qua số giá trị khởi đầu. Tên biến mảng Các giá trị khởi đầu DB/DW/DD Ví dụ: M1 DB 4,5,6,7,8,9 Khi chúng ta muốn khởi đầu các phần tử của mảng với cùng m ột giá tr ị chúng ta có thể dùng thêm toán tử DUP. Toán tử DUP dùng để lặp lại các dữ li ệu với
  7. số lần quy định. Cú pháp: Count DUP(Các dữ li ệu) -> lặp l ại các d ữ li ệu v ới số lần Count. Ví dụ: M2 DB 20 DUP(0) M3 DB 20 DUP(?) Chú ý: + Toán tử DUP có thể dùng lồng nhau để định nghĩa 1 mảng Ví dụ: M4 DB 4,3,2,2 DUP(1,2 DUP(5),6) Khai báo này tương đương với khai báo sau: M4 DB 4,3,2,1,5,5,6,1,5,5,6 + Đối với các bộ vi xử lý của Intel, khi ta lưu trữ m ột từ trong b ộ nh ớ thì byte thấp của nó sẽ được để ở ô nhớ có địa chỉ thấp, byte cao để ở ô nh ớ có đ ịa ch ỉ cao. Ví dụ: W1 DW 0FFACH • Khai báo biến kiểu xâu ký tự Biến kiểu xâu ký tự là trường hợp đặc biệt của biến mảng ki ểu byte, trong đó các phần tửcủa mảng là các ký tự. Một xâu ký tự có thể định nghĩa bằng các ký tự hoặc bằng mã ASCII của các ký tự đó. Ví dụ: Xaukt DB ‘ABCDE’ hoặc Xaukt DB 41h,42h,43h,44h,45h hoặc Xaukt DB 41h,42h,’C’,’D’,45h 2. Khai báo hằng Các hằng trong chương trình Assembly được gán tên để làm cho chương trình dễ đọc hơn. Hằng có thể là kiểu số hoặc ki ểu ký tự. Vi ệc gán tên cho hằng được thực hiện bằng lệnh giả EQU như sau: Tên hằng Giá trị của hằng EQU Ví dụ: CR EQU 0Dh LF EQU 0Ah CHAO EQU ‘Hello’ Vì lệnh giả EQU không dành chỗ của bộ nhớ cho tên hằng nên ta có th ể khai báo hằng ở bất kỳ đâu trong chương trình. Tuy nhiên người ta th ường đ ặt các khai báo hằng trong đoạn dữ liệu. IV. KHUNG CỦA MỘT CHƯƠNG TRÌNH ASSEMBLY 1. Khai báo quy mô sử dụng bộ nhớ Kích thước bộ nhớ dành cho đoạn mã và đoạn dữ liệu trong m ột chương trình được xác định bằng lệnh giả .MODEL. Lệnh này ph ải đ ược đặt trước các lệnh khác trong chương trình nhưng đặt sau lệnh giả khai báo lo ại CPU. Cú pháp:
  8. .MODEL Kiểu_kích_thước_bộ_nhớ Kiểu kích thước bộ nhớ Mô tả Mã lệnh và dữ liệu gói gọn trong một đoạn 64 KB TINY Mã lệnh gói gọn trong một đoạn 64 KB. Dữ liệu gói gọn trong một đoạn 64 KB SMALL Mã lệnh không gói gọn trong một đoạn 64 KB Dữ liệu gói gọn trong một đoạn 64 KB MEDIUM Mã lệnh gói gọn trong một đoạn 64 KB Dữ liệu không gói gọn trong một đoạn 64 K COMPAC Mã lệnh không gói gọn trong một đoạn 64 KB Dữ liệu không gói gọn trong một đoạn 64 KB LARGE Không có mảng nào lớn hơn 64 K Mã lệnh không gói gọn trong một đoạn 64 KB Dữ liệu không gói gọn trong một đoạn 64 KB HUGE Các mảng có thể lớn hơn 64 K 2. Khai báo đoạn ngăn xếp Việc khai báo đoạn ngăn xếp là để dành ra một vùng nhớ đủ l ớn dùng làm ngăn xếp phục vụ cho hoạt động của chương trình. Cú pháp: .STACK Kích_thước Kích_thước quyết định số byte dành cho ngăn xếp. Thông thường với 100 - 256 byte là đủ để làm ngăn xếp và ta có thể khai báo kích thước cho ngăn x ếp như sau: .STACK 100 hoặc .STACK 100H 3. Khai báo đoạn dữ liệu Đoạn dữ liệu chứa toàn bộ các khai báo biến và hằng c ủa chương trình. Các khai báo trong đoạn dữ liệu đặt sau lệnh giả .DATA Ví dụ: .DATA MSG DB ‘Hello!$’ B1 DB 100 CR EQU 0DH LF EQU 0A 4. Khai báo đoạn mã .CODE Tên_CTChính PROC ;Các lệnh của chương trình chính . .
  9. CALL Tên_CTCon ;Gọi chương trình con . . Tên_CTChính ENDP ;Khai báo các chương trình con ở đây Tên_CTCon PROC ;Các lệnh của chương trình con RET ;Trở về Tên_CTCon ENDP 5. Khung chương trình Assembly để dịch ra chương trình .EXE .MODEL SMALL .STACK 100H .DATA ;Các khai báo biến và hằng để tại đây .CODE MAIN PROC ;Khởi đầu cho đoạn DS MOV AX,@DATA MOV DS,AX ;Các lệnh của chương trình để tại đây ...... ;Trở về DOS dùng hàm 4CH của INT 21H MOV AH,4CH INT 21H MAIN ENDP ;Các chương trình con (nếu có) khai báo tại đây END MAIN ;Kết thúc toàn bộ chương trình 6. Khung chương trình Assembly để dịch ra chương trình .COM .MODEL TINY .CODE ORG 100H START: JMP CONTINUE ;Các khai báo biến và hằng để tại đây CONTINUE: MAIN PROC ;Các lệnh của chương trình chính để tại đây ;Trở về DOS INT 20H MAIN ENDP ;Các chương trình con (nếu có) khai báo ở đây END STAR V. BIÊN SOẠN VÀ DỊCH CHƯƠNG TRÌNH ASSEMBLY Để viết và dịch các chương trình Assembly ta theo các bước sau: Bước 1: Soạn thảo chương trình
  10. Dùng các phần mềm soạn thảo văn bản dạng TEXT (như NC, PASCAL, C) đ ể tạo ra tệp văn bản chương trình Assembly. Sau đó ghi t ệp ch ương trình Assembly ra đĩa với đuôi .ASM Bước 2: Dịch chương trình sang ngôn ngữ máy Dùng chương trình dịch MASM để dịch tệp chương trình đuôi .ASM sang mã máy dưới dạng tệp đuôi .OBJ. Nếu trong bước này chương trình có l ỗi v ề cú pháp thì chương trình dịch sẽ báo lỗi và ta phải quay lại Bước 1 để sửa. Cách làm như sau: giả sử chương trình MASM nằm trên thư mục gốc ổ C, d ấu nhắc của DOS là C:\>, khi đó từ dấu nhắc của DOS gõ MASM Tên tệp chương trình; ↵ Dấu chấm phẩy sau tên tệp chương trình để báo cho MASM chỉ tạo tệp .OBJ, không tạo ra các tệp khác. Tên tệp chương trình có thể gõ đ ủ c ả đuôi .ASM ho ặc không gõ cũng được. Bước 3: Liên kết các tệp đuôi .OBJ để tạo thành một tệp ch ương trình chạy được đuôi .EXE Cách làm như sau: giả sử chương trình liên kết LINK nằm trên th ư mục g ốc ổ C, dấu nhắc của DOS là C:\>, khi đó từ dấu nhắc của DOS ta gõ lệnh LINK Têntệp1 + Têntệp2 + …;↵ Chương trình liên kết sẽ lấy tên tệp đầu tiên (Têntệp1) để đặt tên cho tệp đuôi .EXE cuối cùng. Dấu chấm phẩy sau cùng để báo cho chương trình LINK không hỏi tên các tệp. Bước 4: Nếu chương trình viết để dịch ra đuôi .COM thì ta phải dùng ch ương trình EXE2BIN của DOS để dịch tiếp tệp .EXE ra tệp chương trình chạy đ ược đuôi .COM Cách làm như sau: giả sử chương trình EXE2BIN nằm trên thư mục gốc ổ C, dấu nhắc của DOS là C:\>, khi đó từ dấu nhắc của DOS ta gõ lệnh EXE2BIN Têntệp.EXE Têntệp.COM Chú ý: Với trình biên dịch MASM phiên bản 6.x tr ở lên, nếu chỉ biên dịch và liên kết một tệp chương trình thì ta có thể gộp Bước 2, 3, 4 thành một b ước b ằng cách dùng chương trình kết hợp cả biên dịch và liên kết ML. Tại dấu nhắc c ủa DOS gõ vào như sau: ML Têntệp1.ASM ↵ VI. CÁC NHÓM LỆNH 1. Nhóm lệnh di chuyển a. Lệnh chuyển dữ liệu từ một thanh ghi Rn vào thanh ghi A Cú pháp: Mov A,Rn b. Lệnh chuyển dữ liệu từ ô nhớ có địa chỉ direct vào thanh ghi A Cú pháp: Mov A,direct c. Lệnh chuyển dữ liệu từ ô nhớ có địa chỉ gián tiếp vào thanh ghi A Cú pháp: Mov A,@Ri d. Lệnh đưa dữ liệu vào thanh ghi A Cú pháp: Mov A,#data e. Lệnh chuyển dữ liệu từ A vào thanh ghi Rn Cú pháp: Mov Rn,A f. Lệnh chuyển dữ liệu từ ô nhớ có địa chỉ direct vào thanh ghi Rn
  11. Cú pháp: Mov Rn,direct Thiết đặt dữ liệu cho thanh ghi Rn g. Cú pháp: Mov Rn,#data Lệnh chuyển dữ liệu từ thanh ghi A vào ô nhớ có địa chỉ direct h. Cú pháp: Mov direct,A Lệnh chuyển dữ liệu từ thanh ghi Rn vào ô nhớ có địa chỉ direct i. Cú pháp: Mov direct,Rn Lệnh chuyển dữ liệu từ ô nhớ có địa chỉ direct này vào m ột ô nhớ có địa chỉ j. direct khác Cú pháp: Mov direct,direct Lệnh đưa dữ liệu vào ô nhớ có địa chỉ direct k. Cú pháp: Mov direct,#data Lệnh chuyển dữ liệu từ ô nhớ có địa chỉ gián ti ếp vào ô nhớ có địa chỉ l. direct Cú pháp: Mov direct,@Ri Lệnh chuyển dữ liệu từ thanh ghi A vào ô nhớ có địa chỉ gián tiếp m. Cú pháp: Mov @Ri,A Lệnh chuyển dữ liệu từ ô nhớ có địa chỉ direct vào ô nh ớ có đ ịa ch ỉ gián n. tiếp Cú pháp: Mov @Ri,direct Lệnh đưa dữ liệu vào ô nhớ có địa chỉ gián tiếp o. Cú pháp: Mov @Ri,#data Lệnh đưa dữ liệu vào con trỏ dữ liệu DPTR p. Cú pháp: Mov DPTR,#data16 Lệnh trao đổi dữ liệu giữa ô nhớ có địa chỉ direct với thanh ghi A q. Cú pháp: XCH A,direct Lệnh trao đổi dữ liệu giữa thanh ghi Rn và thanh ghi A r. Cú pháp: XCH A,Rn Lệnh trao đổi dữ liệu giữa thanh ghi có địa chỉ gián tiếp và thanh ghi A s. Cú pháp: XCH A,@Ri Lệnh trao đổi dữ liệu 4 bit giữa thanh ghi có địa chỉ gián tiếp và thanh ghi A t. Cú pháp: XCHD A,@Ri Lệnh xuất dữ liệu từ ROM nội u. Cú pháp: MovC A,@A+DPTR Các lệnh còn lại trong nhóm lệnh di chuyển MovC A,@A+PC MovC A,@i MovX A,@DPTR MovX A,@Ri MovX @DPTR,A PUSH direct POP direct 2. Nhóm lệnh số học a. Lệnh cộng dữ liệu trên thanh ghi A với dữ liệu trên thanh ghi Rn Cú pháp: Add A,Rn
  12. b. Lệnh cộng dữ liệu trên thanh ghi A với dữ liệu ở ô nhớ có địa chỉ direct Cú pháp: Add A,direct c. Lệnh cộng dữ liệu trên thanh ghi A với dữ liệu của ô nhớ có địa chỉ gián tiếp Cú pháp: Add A,@Ri d. Lệnh cộng dữ liệu trên thanh ghi A với dữ liệu xác định Cú pháp: Add A,#data e. Lệnh cộng dữ liệu trên thanh ghi A với dữ liệu trên thanh ghi Rn có s ố nh ớ ở cờ C Cú pháp: AddC A,Rn f. Lệnh cộng dữ liệu trên thanh ghi A với dữ liệu ở ô nhớ có địa chỉ direct và giá trị số nhớ ở cờ C Cú pháp: AddC A,direct g. Lệnh cộng dữ liệu trên thanh ghi A với dữ liệu của ô nhớ có địa chỉ gián tiếp và số nhớ ở cờ C Cú pháp: AddC A,@Ri h. Lệnh cộng dữ liệu trên thanh ghi A với dữ liệu xác định và số nhớ ở cờ C Cú pháp: AddC A,#data i. Lệnh trừ dữ liệu trên thanh ghi A với dữ liệu trên thanh ghi Rn và s ố nh ớ ở cờ C Cú pháp: SubB A,Rn j. Lệnh trừ dữ liệu trên thanh ghi A với dữ liệu ở ô nhớ có đ ịa ch ỉ direct và s ố n hớ ở c ờ C Cú pháp: SubB A,direct k. Lệnh trừ dữ liệu trên thanh ghi A với dữ liệu ở ô nhớ có địa chỉ gián ti ếp và s ố n hớ ở c ờ C Cú pháp: SubB A,@Ri l. Lệnh trừ dữ liệu trên thanh ghi A với dữ liệu xác định và số nhớ ở cờ C Cú pháp: SubB A,#data m. Lệnh tăng giá trị dữ liệu trên thanh ghi A lên 1 đơn vị Cú pháp: Inc A n. Lệnh tăng giá trị dữ liệu trên thanh ghi Rn lên 1 đơn vị Cú pháp: Inc Rn o. Lệnh tăng giá trị dữ liệu ở ô nhớ có địa chỉ direct lên 1 đơn vị Cú pháp: Inc direct p. Lệnh tăng giá trị dữ liệu ở ô nhớ có địa chỉ gián tiếp lên 1 đơn vị Cú pháp: Inc @Ri q. Lệnh tăng giá trị của con trỏ dữ liệu DPTR lên 1 đơn vị Cú pháp: Inc DPTR r. Lệnh giảm giá trị dữ liệu trên thanh ghi A xuống 1 đơn vị Cú pháp: Dec A s. Lệnh giảm giá trị dữ liệu trên thanh ghi Rn xuống 1 đơn vị Cú pháp: Dec Rn t. Lệnh giảm giá trị dữ liệu ở ô nhớ có địa chỉ direct xuống 1 đơn vị Cú pháp: Dec direct u. Lệnh giảm giá trị dữ liệu ở ô nhớ có địa chỉ gián tiếp xuống 1 đơn vị
  13. Cú pháp: Dec @Ri v. Lệnh nhân thanh ghi A với thanh ghi B Cú pháp: Mul AB w. Lệnh chia thanh ghi A với thanh ghi B Cú pháp: Div AB x. Lệnh hiệu chỉnh thập phân của thanh ghi A đối với phép cộng Cú pháp: DA A 3. Nhóm lệnh logic a. Lệnh And dữ liệu ở thanh ghi A với dữ liệu ở thanh ghi Rn Cú pháp: ANL A,Rn b. Lệnh And dữ liệu ở thanh ghi A với dữ liệu của ô nhớ có địa chỉ direct Cú pháp: ANL A,direct c. Lệnh And dữ liệu ở thanh ghi A với dữ liệu của ô nhớ có địa chỉ gián tiếp Cú pháp: ANL A,@Ri d. Lệnh And dữ liệu ở thanh ghi A với dữ liệu xác định Cú pháp: ANL A,#data e. Lệnh And dữ liệu của ô nhớ có địa chỉ direct với dữ liệu trên thanh ghi A Cú pháp: ANL direct,A f. Lệnh And dữ liệu của ô nhớ có địa chỉ direct với dữ liệu xác định Cú pháp: ANL direct,#data g. Lệnh Or dữ liệu trên thanh ghi A với dữ liệu ở thanh ghi Rn Cú pháp: ORL A,Rn h. Lệnh Or dữ liệu trên thanh ghi A với dữ liệu của ô nhớ có địa chỉ direct Cú pháp: ORL A,direct i. Lệnh Or dữ liệu trên thanh ghi A với dữ liệu của ô nhớ có địa chỉ gián tiếp Cú pháp: ORL A,@Ri j. Lệnh Or dữ liệu trên thanh ghi A với dữ liệu xác định Cú pháp: ORL A,#data k. Lệnh Or dữ liệu của ô nhớ có địa chỉ direct với dữ liệu trên thanh ghi A Cú pháp: ORL direct,A l. Lệnh Or dữ liệu của ô nhớ có địa chỉ direct với dữ liệu xác định Cú pháp: ORL direct,#data m. Lệnh EX-OR dữ liệu trên thanh ghi A với dữ liệu ở thanh ghi Rn Cú pháp: XRL A,Rn n. Lệnh EX-OR dữ liệu trên thanh ghi A với dữ liệu của ô nhớ có địa chỉ direct Cú pháp: XRL A,direct o. Lệnh EX-OR dữ liệu trên thanh ghi A với dữ liệu của ô nhớ có địa chỉ gián tiếp Cú pháp: XRL A,@Ri p. Lệnh EX-OR dữ liệu trên thanh ghi A với dữ liệu xác định Cú pháp: XRL A,#data q. Lệnh EX-OR dữ liệu của ô nhớ có địa chỉ direct với d ữ li ệu trên thanh ghi A Cú pháp: XRL direct,A r. Lệnh EX-OR dữ liệu của ô nhớ có địa chỉ direct với dữ liệu xác định Cú pháp: XRL direct,#data
  14. s. Lệnh bù giá trị dữ liệu trên thanh ghi A Cú pháp: CPL A t. Lệnh xóa dữ liệu trên thanh ghi A Cú pháp: CLR A u. Lệnh xoay trái dữ liệu trên thanh ghi A Cú pháp: RL A v. Lệnh xoay trái dữ liệu trên thanh ghi A cùng với cờ nhớ C Cú pháp: RLC A w. Lệnh xoay phải dữ liệu trên thanh ghi A Cú pháp: RR A x. Lệnh xoay phải dữ liệu trên thanh ghi A cùng với cờ nhớ C Cú pháp: RRC A y. Lệnh xoay 4 bit trên thanh ghi A Cú pháp: SWAP A 4. Nhóm lệnh rẽ nhánh a. Lệnh gọi chương trình con dùng địa chỉ tuyệt đối Cú pháp: ACall addr11 b. Lệnh gọi chương trình con dùng địa chỉ tuyệt đối Cú pháp: ACall addr16 c. Lệnh kết thúc chương trình con Cú pháp: Ret d. Lệnh kết thúc chương trình con phục vụ ngắt Cú pháp: Reti e. Lệnh nhảy ngắn đến địa chỉ tuyệt đối Cú pháp: AJMP addr11 f. Lệnh nhảy dài đến địa chỉ tuyệt đối Cú pháp: LJMP addr16 g. Lệnh nhảy tương đối Cú pháp: SJMP rel h. Lệnh nhảy gián tiếp Cú pháp: JMP @A+DPTR i. Lệnh nhảy thuận với cờ Zero Cú pháp: JZ rel j. Lệnh nhảy nghịch với cờ Zero Cú pháp: JNZ rel k. Lệnh nhảy thuận với cờ C Cú pháp: JC rel l. Lệnh nhảy nghịch với cờ C Cú pháp: JNC rel m. Lệnh nhảy thuận với giá trị của bit nhớ Cú pháp: JB bit,rel n. Lệnh nhảy nghịch với giá trị của bit nhớ Cú pháp: JNC bit,rel o. Lệnh nhảy thuận với giá trị của bit nhớ và xóa bit Cú pháp: JBC bit,rel p. Lệnh nhảy có điều kiện (so sánh giá trị của thanh ghi A và Rn)
  15. Cú pháp: CJNE A,direct,rel q. Lệnh nhảy có điều kiện (so sánh giá trị của thanh ghi A và d ữ li ệu cho trước) Cú pháp: CJNE A,#data,rel r. Lệnh nhảy có điều kiện (so sánh giá trị c ủa thanh ghi Rn và d ữ li ệu cho trước) Cú pháp: CJNE Rn,#data,rel s. Lệnh nhảy có điều kiện (so sánh giá trị của có địa chỉ gián ti ếp và d ữ li ệu cho trước) Cú pháp: CJNE @Ri,#data,rel t. Lệnh nhảy có điều kiện kết hợp với lệnh giảm trên thanh ghi Rn Cú pháp: DJNZ Rn,rel u. Lệnh nhảy có điều kiện kết hợp với lệnh giảm trên ô nhớ có địa chỉ direct Cú pháp: DJNZ direct,rel v. Lệnh delay một chu kì máy Cú pháp: NOP 5. Nhóm lệnh xử lí bit a. Lệnh xóa cờ nhớ Cú pháp: CLR C b. Lệnh xóa bit Cú pháp: CLR bit c. Lệnh thiết đặt cờ nhớ C Cú pháp: SetB C d. Lệnh thiết đặt giá trị cho bit nhớ Cú pháp: SetB bit e. Lệnh bù cờ nhớ C Cú pháp: CPL C f. Lệnh bù bit Cú pháp: CPL bit g. Lệnh And cờ nhớ C với bit Cú pháp: ANL C,bit h. Lệnh And cờ nhớ C với bit đã được lấy bù Cú pháp: ANL C,/bit i. Lệnh OR cờ nhớ C với bit Cú pháp: ORL C,bit j. Lệnh OR cờ nhớ C với bit đã được lấy bù Cú pháp: ORL C,/bit k. Lệnh chuyển giá trị bit có địa chỉ xác định vào cờ nhớ C Cú pháp: Mov C,bit l. Lệnh chuyển giá cờ nhớ C vào bit có địa chỉ xác định Cú pháp: Mov bit,C CÁC CẤU TRÚC ĐIỀU KHIỂN VII. 1. Cấu trúc rẽ nhánh IF-THEN Có hai dạng: - IF THEN - IF THEN ELSE
  16. 2. Cấu trúc lựa chọn CASE Khác với cấu trúc rẽ nhánh IF-THEN chỉ rẽ được hai nhánh, cấu trúc lựa chọn có thể rẽ nhiều nhánh. Dạng tổng quát như sau: CASE OF Giá_trị_1: Công_việc_1 Giá_trị_2: Công_việc_2 ... Giá_trị_N: Công_việc_N END_CASE 3. Cấu trúc lặp với số lần xác định FOR-DO Dạng tổng quát: FOR DO ENDFO 4. Cấu trúc lặp với số lần không xác định REPEAT-UNTIL và WHILE-DO a) Kiểm tra điều kiện trước Dạng tổng quát WHILE DO ve Kt2,2ckm
  17. Ret ; ket thuc chuong trinh con Delay ; End ; ket thuc chuong trinh TÀI LIỆU THAM KHẢO IX. http://fita.hua.edu.vn/ntthuy/courses/Ch_Assembly.pdf - http://huongnghiepviet.com/codientu/ki_thuat_cdt/dien_tu/vidieukhien/hocvd - k/bai02/2vdk001.htm
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
2=>2