Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 18 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
18
Dung lượng
354,26 KB
Nội dung
Chương : Lập trình hợp ngữ Giá trình Vi xử lý Chương LẬP TRÌNH HỢP NGỮ 3.1 TỔNG QUAN VỀ TRÌNH DỊCH HỢP NGỮ 3.1.1 Giới thiệu : Ngôn ngữ assembly ngôn ngữ máy ngôn ngữ cấp cao Ngôn ngữ cấp cao đặc trưng như: Pascal, C Cịn chương trình ngơn ngữ máy chuỗi byte nhị phân đặc trưng lệnh mà máy tính thực thi Ngôn ngữ assembly thay mã nhị phân ngôn ngữ máy để sử dụng “thuật nhớ“ dễ dàng q trình lập trình Ví dụ lệnh cộng ngôn ngữ máy đặc trưng mã nhị phân “10110011” ngôn ngữ assembly “ADD“ Một chương trình ngơn ngữ assembly khơng thể thực thi máy tính mà phải dịch sang mã nhị phân ngơn ngữ máy Một linker chương trình mà kết hợp chương trình đặc trưng Relocatable (modul) thiết kế chương trình đặc trưng tuyệt đối thực thi máy tính Segment phần nhớ mã liệu, tái định vị (Relocatable) tuyệt đối (Absolute ) Segment Relocatable có tên, kiểu kết nối với Segment cục khác Segment Absolute khơng có tên đựơc kết nối Segment khác Modul chứa nhiều segment hay segment cục Một modul “file” nhiều trường hợp cá biệt Một chương trình Modul Absolute đơn hịa vào tồn Segment Absolute Segment Relocatable từ tất mode nhập Chương trình chứa mã nhị phân thay cho lệnh (với địa liệu ) hiểu máy tính 3.1.2 Hoạt động trình biên dịch (Assembler Opera tion) Có nhiều trình biên dịch với mục đích khác có tác dụng dễ hiểu ứng dụng vi điều khiển ASM51 tiêu biểu chuẩn biên dịch họ MSC-51 ASM51 trình biên dịch mạnh có tác dụng hữu hiệu hệ thống phát triển INTEL họ IBM PC máy vi tính ASM51 gọi lên từ dẫn hệ thống bởi: ASM51 Source file (Assembly Control) Trình biên dịch nhận file nguồn với tư cách ngõ nhập (PROGRAM.SCR) họ phát file đối tượng (PROGRAM.OBJ) file listing (PROGRAM.LST) Canquynhon.blogtiengviet.net Đại học Quy Nhơn Chương : Lập trình hợp ngữ Giá trình Vi xử lý Hình 3.1: Hợp dịch chương trình nguồn Vì hầu hết biên dịch xem xét chương trình nguồn lần lúc thi hành dịch ngôn ngữ máy, nên chúng mô tả qua Pass biên dịch Pass1 Pass2 Trong pass1, file nguồn xem xét dòng bảng ký hiệu xây dựng Bộ đếm Location chọn đặt thị ORG (đặt Origin) Cũng file xem xét, đếm Location tăng lên độ dài lệnh Chỉ thị data định nghĩa (đặc biệt DW) tăng đếm Location với số byte định rõ, thị nhớ lưu trữ (DSO tăng đếm Location số byte dự trữ) Mỗi lần nhãn tìm thấy bắt đầu đường, đặc bảng ký hiệu theo giá trị hành đếm Location Các ký hiệu định nghĩa dùng thị tương đương (EQU) đặc bảng ký hiệu, cất giữ sau dùng pass2 Trong Pass2, file Object file Listing tạo ra, thuật nhớ biến đổi thành Opcode đặt file output Các toán hạng xác định giá trị đặt phía sau Opcode lệnh Ở nơi ký hiệu xuất toán hạng, ký hiệu chúng lấy lại từ bảng ký hiệu (được tạo suốt Pass1 dùng xếp liệu địa lệnh) Bởi Pass2 thực thi nên chương trình nguồn dùng “sự tham khảo trước “ dùng ký hiệu trước định nghĩa File Object tuyệt đối chứa byte nhị phân (00H - FFH) chương trình ngơn ngữ máy File Object Relocatable chứa bảng ký hiệu thông tin khác yêu cầu kết hợp xác định vị trí File Listing chứa mã nguyên bảng ASCII (20H – 7FH) cho hai chương trình nguồn byte Hexadecimal chương trình ngơn ngữ máy 3.1.3 Sự đặt trình dịch ngữ Chương trình ngơn ngữ Asembly bao gồm: Các lệnh máy, lời chị trình biên dịch, điều khiển biên dịch thích Canquynhon.blogtiengviet.net Đại học Quy Nhơn Chương : Lập trình hợp ngữ Giá trình Vi xử lý Các lệnh máy kỹ xảo lệnh thực thi (ví dụ ANL) Các thị trình biên dịch lệnh để trình biên dịch định cấu trúc chương trình, liệu, ký hiệu, hằng, … (ví dụ Org ) Các điều khiển trình biên dịch set mode trình biên dịch điều khiển chạy chương trình Assembly (ví dụ STILLE ) Các thích hoạt động lệnh Các lệnh phải ghi theo nguyên tắc rõ ràng để trình biên dịch hiểu Sự xếp chúng sau: (Label:) mnemonic [operand][:operand][ ][:comment] 3.1.3.1 Vùng nhãn (label Field ): Một nhãn tượng trưng cho địa lệnh (hoặc liệu ) theo sau nhãn Khi rẽ nhánh đến lệnh này, nhãn dùng vùng toán hạng nhánh (hoặc lệnh nhảy) Các “nhãn“ kiểu ký hiệu, sau nhãn phải có dấu hai chấm (:) cịn sau ký hiệu khơng Các kiểu ký hiệu quy cho giá trị quy cho việc dùng thị như: EQU, SEGMENT, BIT, DATA, … Các ký hiệu địa chỉ, hằng, data, tên segment xây dựng khác hiểu người lập trình Sau ví dụ để phân biệt nhãn ký hiệu: PRA EQU 500 : PRA ký hiệu tượng trưng giá trị 500 START :MOV A , #0FFH :START nhãn tương trưng địa lệnh MOV Một ký hiệu nhãn phải bắt đầu chữ dấu “?”, dấu “-“; phải theo sau chữ cái, số, dấu “?” hay “-“, chứa tới 31 ký tự 3.1.3.2 Vùng thuật nhớ (Mnemonic Field ): Các thuật nhớ hay chị biên dịch vào vùng thuật nhớ theo sau vùng nhãn Ví dụ thuật nhớ lệnh như: ADD, MOV, DIV, INC, … ; thị biên dịch : ORG , EQU 3.1.3.3 Vùng toán hạng (Operand Field): Vùng toán hạng theo sau vùng thuật nhớ Vùng chứa địa hay liệu dùng lệnh Một nhãn dùng để tượng trưng cho liệu Các khả cho phép vùng toán hạng phụ thuộc lớn vào hoạt động Một vài hoạt động khơng có tốn hạng : RET, NOP hoạt động khác cho phép nhiều toán hạng phân dấu phẩy Canquynhon.blogtiengviet.net Đại học Quy Nhơn Chương : Lập trình hợp ngữ Giá trình Vi xử lý 3.1.3.4 Vùng thích (Comment Field ): Các thích phải dễ hiểu đặt để giải thích lệnh, có dấu chấm phẩy đầu Khối thích khung để giải thích tính chất chung phần chương trình cắt bên 3.1.3.5 Các ký hiệu biên dịch đặc biệt ( Special Assembler Symbol ): Các ký hiệu biên dịch đặc biệt dùng mode định vị ghi cụ thể chúng bao gồm ghi A, R0 – R7, DPTR, PC,C, AB, hay ký hiệu $ dùng để quy vào giá trị hành đếm Location Ví dụ : lệnh JNZ TI , $ tương đương với lệnh sau : HERE : JNZ T1, HERE 3.1.3.6 Địa gián tiếp (Indirect Address): Đối với số lệnh dùng tốn hạng xác định ghi mà chứa địa gián tiếp dùng với R0, R1 , DPTR Ví dụ lệnh MOV A, @R0 khơi phục lại byte liệu từ RAM nội địa định rõ R0 Lệnh MOVC, @A + PC khôi phục lại byte liệu từ nhớ liệu địa tạo thành việc cộng nội dung ghi tích lũy A đếm chương trình 1.3.7 Dữ liệu tức thời (Immediate Data ): Các lệnh dùng định vị tức thời cung cấp liệu vào vùng toán hạng, ký hiệu # đặt trước liệu tức thời Ví dụ: CONSTANT EQU 100 MOV A, 0FFH ORL 40H, # CONSTANT Các liệu tức thời (ngoại trừ lệnh MOV DPTR, #data) yêu cầu liệu bit Dữ liệu tức thời đánh số 16 bit sau byte thấp sử dụng Tất bit byte cao giống (00H FFH) thông báo lỗi “ giá trị không lấp đầy byte” tạo Ví dụ: MOV A, #0FF00H MOV A, #00FFH Lỗi : MOV A, #0FE00H MOV A, #01FFH Các số thập phân có dấu -256 đến + 256 như: MOV A, #-256 ; đặt giá trị 00H vào A MOV A, 0FF00H ; đặt giá trị 00H vào A Canquynhon.blogtiengviet.net Đại học Quy Nhơn Chương : Lập trình hợp ngữ Giá trình Vi xử lý 3.1.3.8 Địa liệu (Data Address): Nhiều lệnh truy xuất vùng nhớ dùng định vị trực tiếp đòi hỏi địa nhớ liệu chip (00 – FFH) hay địa SFR (80H – FFH) vùng toán hạng Các ký hiệu định nghĩa dùng cho địa SFR Ví dụ: MOV A, 45H hay MOV A, SBUF ;tương đương lệnh MOV A, 99H 3.1.3.9 Địa Bit (Bit Address): Một điểm mạnh 8951 khả truy xuất bit riêng lẻ, không cần hoạt động trang bị byte Các lệnh truy xuất bit định vị phải cung cấp địa nhớ liệu nội (00H – 7FH) địa bit SFR (80H - FFH) Có cách để xác định địa bit ô nhớ liệu: Dùng địa bit trực tiếp, dùng hoạt động điểm địa byte địa bit, dùng ký hiệu biên dịch định nghĩa Ví dụ: SETB 0E7H : Dùng địa trực tiếp SETB ACC, :Dùng hoạt động điểm JNZ TI ,$ : Dùng ký hiệu định nghĩa “TI” 3.1.3.10 Địa mã (Code Address): Địa mã dùng toán hạng cho lệnh nhảy, bao gồm nhảy tương đối (như SJMP lệnh nhảy có điều kiện), nhảy gọi tuyệt đối (ACALL , AJMP), lệnh nhảy gọi dài (LJMP, LCALL) Địa mã thường cho dạng nhãn sau: HERE: … SJMP HERE ASM51 xác định địa mã lồng vào Offset ký hiệu bit lệnh, địa trang 11 bit địa dài 16 bit cho thích hợp 3.1.3.11 Các nhảy gọi chung ( generi c Jump and Calls): ASM51 cho phép người lập trình dùng thuật nhớ JMP chung hay CALL chung Lệnh “JMP “có thể dùng thay cho “SJMP, AJMP, LJMP“ “CALL” thay cho ACALL hay LCALL Sự biên dịch biến đổi thuật nhớ chung đếm lệnh “thực tế“ sau vài qui luật đơn giản, thuật nhớ chung biến đổi thành dạng tuyệt đối nhảy hay gọi trang 2k Nếu dạng ngắn tuyệt đối khơng dùng chuyển thành dạng dài Canquynhon.blogtiengviet.net Đại học Quy Nhơn Chương : Lập trình hợp ngữ Giá trình Vi xử lý 3.2 TÍNH TỐN BIỂU THỨC TRONG ASSEMBLE TIME (Assemble Time Expression Evaluat ion): Khi biểu thức dùng dạng tường minh (0EFH), tiền định nghĩa (ACC), biểu thức (2+3) Trình dịch hợp ngữ biên dịch tính tốn giá trị lồng vào lệnh Ví dụ: MOV DPTR, #04FFH+3 MOV DPTR, #0502H ; kết 16 bit sử dụng Tuy nhiên, biểu thức sử dụng cho lệnh MOV A, #data, “ thông báo lỗi” giá trị lấp đầy byte tạo ASM51 3.2.1 Các sở số (Number Basses): Cơ sở số phải theo sau số nhị phân “B”, theo sau số Octal “O”, “Q”, theo sau số thập phân “D” hay , theo số Hexa “H” Ví dụ: MOV A, # 15 : Thập phân MOV A , 1111B : Nhị phân MOV A , 30H : Hex MOV A , 315D : Thập phân MOV A , 317Q : Octal 3.2.2 Các chuỗi ký tự (Charact er String): Chuỗi dùng hay ký tự dùng toán hạng biểu thức Các mã ASSCII biến đổi thành nhị phân tương đương biên dịch Các kèm theo sau dấu ngoặc kép (‘) Ví dụ : CJNZ A , # ‘Q’, AGAIN 3.2.3 Các ký hiệu số học (Arithmetic Operations): + : Cộng _ : Trừ : Nhân / : Chia MOD : Phép lấy dư Ví dụ: lệnh MOV A, # 10 + 10H lệnh MOV A, # 1AH tương tự lệnh MOV A, # 25 MOD MOV A, # giống Canquynhon.blogtiengviet.net Đại học Quy Nhơn Chương : Lập trình hợp ngữ Giá trình Vi xử lý 3.2.4 Các hoạt động logic (Logic Operations): Các hoạt động logic OR, AND, XOR, NOT Hoạt động áp dụng bit tương ứng toán hạng Sự hoạt động phải phân từ toán hạng khoảng cách ký tự nhiều khoảng ký tự Ví dụ lệnh MOV sau giống nhau: THERE EQU MINUS _THERE EQU- MOV A, #(NOT THERE) + MOV A, MINUS _ THERE MOV A, #11111101B 3.2.5 Các toán tử đặc biệt (sp ecial Operation): Các hoạt động đặc biệt là: SHR (dịch phải), SHL (dịch trái), HIGH (byte cao), LOW (byte thấp) Ví dụ: lệnh MOV A, # HIGH 1234H lệnh MOV A, 12H tương đương 3.2.6 Các toán tử quan hệ: Khi hoạt động có liên quan dùng hai tốn hạng kết qủa sai (0000h) (FFFFH) Các hoạt động là: EQ = : Equals (bằng) NE : Not equals (không bằng) LT < : Less than (nhỏ hơn) LE : Greater than (lớn hơn) GE >= : Greater than or equal (lớn bằng) Ví dụ: MOV A, #5=5 MOV A, 100 GE 50 MOV A, NE Cả ba lệnh nên ba tương đương với lệnh sau: MOV A,# 0FFH 3.3 CÁC CHỈ THỊ BIÊN DỊCH ASM51 cung cấp thị sau: Sự điều khiển trạng thái biên dịch (ORG, AND, USING) Canquynhon.blogtiengviet.net Đại học Quy Nhơn Chương : Lập trình hợp ngữ Giá trình Vi xử lý Sự xác định ký hiệu (SEGMENT, EQU, SET, DATA, NDATA, BIT, CODE) Sự khởi gán lưu trữ hay để dành trước lưu trữ (DS, DBIT, DB, DW) Sự kết nối chương trình (PUBLIC, EXTRN, NAME) Sự chọn segment (PSEG, CSEG, DSEG, ISEG, BSEG, XSEG) 3.3.1 Sự điều khiển trạng thái biên dịch: - Chỉ thị ORG thay đổi đếm vùng nhớ để đặt khởi đầu chương trình trạng thái theo sau đó, dạng thị ORG là: ORG Ví dụ : Expression (biểu thức) ORG 100H ; đếm thiết lập 100H ORG ($+1000H) AND 0F000H ; thiết lập đến 4K kế - Chỉ thị END đặt cuối file nguồn Dạng END - Chỉ thị USING cung cấp cho ASM51 dãy ghi tích cực hành Dạng thị là: USING Expression (biểu thức) Việc dùng địa ghi ký hiệu định nghĩa trước AR0-AR7 biến thành địa trực tiếp phù hợp dãy ghi tích cực Ví dụ : USING : Dùng Bank dãy ghi PUSH AR7 : Push R7 (R7=1FH) PUSH AR7 : Push R7 (R7=0FH) 3.3.2 Định nghĩa ký hiệu (Sym bol Definition): - Dạng dẫn segment sau: symbol SEGMENT segmenttype (loại segment) Trong symbol tên segment đổi chỗ Các kiểu segment CODE (segment mã), XDATA (vùng liệu ngoài), DATA (vùng liệu nội) truy xuất định vị trực tiếp từ (00H-7FH), IDATA (toàn vùng liệu nội), BIT (vùng BIT từ 20H-2FH liệu nội) - Chỉ lẫn EQU gán giá trrị số cho tên ký hiêu định nghĩa Symbol EQU Expression (biểu thức) Ví dụ : EPROM SEGMENT CODE cho biết EPROM segment kiểu code Dạng thị EQU : symbol EQU Expression MESSAGE Dạng thị BIT DB ‘hello’ : symbol BITExpression Lưu ý ta dùng thị BIT FLAGS BIT 05H ta SETB FLAGS mà không dùng lệnh MOV Canquynhon.blogtiengviet.net Đại học Quy Nhơn Chương : Lập trình hợp ngữ Giá trình Vi xử lý Ví dụ khảo sát dẫn lệnh sau: FLAG1 EQU 05H FLAG2 BIT 05H SETB FLAG1 SETB FLAG2 MOV FLAG1, #0 MOV FLAG2, #0 Việc sử dụng FLAG2 lệnh sau chuỗi lệnh tạo thông báo sai từ ASM51 FLAG2 định nghĩa địa Bit (chỉ dẫn BIT) Mặc dù, FLAG1 có giá trị 05H, FLAG1 định nghĩa EQU khơng có khơng gian địa kết hợp 3.3.3 Sự khởi gán/dành lưu trữ vùng nhớ trước (Storage Initilization/Res ervation) Các thị Storage Initilization khởi gán Storage Reservation để dành vùng nhớ từ, byte đơn vị bit Vùng dành trước bắt đầu vùng nhớ rõ giá trị hành đếm vùng nhớ segment tích cực hành Các thị đứng trước nhãn Khai báo lưu trữ DS (Define Storage) Dạng phát biểu DS : [label:] DS Expression Phát biểu DS dành vùng nhớ đơn vị byte Nó dùng phát biểu segment ngoại trừ BIT Khi phát biểu DS bắt gặp chương trình đếm vị trí location segment hành tăng lên khoảng giá trị biểu thức Tổng đếm location biểu thức định rõ không vược hạn chế vùng hành Phát biểu sau tạo vùng đệm 40 byte segment liệu nội DSEG AT 30H ; Đặt vào segment data nội LENGTH: EQU 40 BEFFER : DS LENGTH ; 40 byte dành trước Nhãn BUFFER tượng trưng cho địa location vùng nhớ lưu trữ Trong ví dụ buffer đắt đầu địa 30H từ “AT 30H” định rõ DSEG Vùng đệm xố sau: MOV R7, #LENGTH ; R7 chứa số LENGTH 40 MOV R0, #BUFFER ; R0 chứa địa buffer 30H Canquynhon.blogtiengviet.net Đại học Quy Nhơn Chương : Lập trình hợp ngữ LOOP : DJNZ MOV @R0, #0 10 Giá trình Vi xử lý ; Lần lượt xố R7,LOOP (continue) Để tạo vùng đệm 1000 byte RAM ngoại bắt đầu địa 4000H, thị sau dùng dẫn sau: XSTART EQU 4000H XLENGTH EQU 1000 XSEG AT XSTART ; Phân đoạn data bắt đầu 4000H XBUFFER: DS XLENGTH ; Tạo vùng đệm có độ dài 1000byte Các lệnh sau dùng để xố vùng đệm : MOV LOOP : DPTR, #XBUFFER ; Đưa địa 4000H DPTR CLR A MOVX @DPTR, A ; Xoá nội dụng từ địa 4000H trở INC DPTR ; Tăng thêm ( trường hợp đầu trở thành 4001H) MOV A, DPL CJNZ A, #LOW (XBUFFER+XLENGTH+1), LOOP MOV A, DPH CJNZ A,HIGH (XBUFFER+XLENGTH+1),LOOP (Continue) Nếu so sánh hai cách dùng dành cho byte thấp byte cao DPTR, Vì lệnh CJNZ làm nhiệm vụ ghi A ghi Rn, byte thấp byte cao đếm liệu phải MOV vào A trước đến lệnh CJNZ Vòng lặp kết thúc đếm liệu đọc địa XBUFFER+XLENGTH+1 Khai báo DBIT (Define Bit) Sự thành lập : [label:] DBIT expression Chỉ thị DBIT dành trước vùng nhớ đơn vị bit, dùng segment bit Khi phát biểu bắt gặp chương trình đếm vị trí segment hành cộng thêm giá trị biểu thức Lưu ý segment BIT, đơn vị đếm đơn vị bit thay byte Các dẫn sau tạo cờ segment bit tuyệt đối: BSEG ; segment bit truyệt đối KBFLAG DBIT ; trạng thái bàn phím PRFLAG DBIT ; trạng thái máy in Canquynhon.blogtiengviet.net Đại học Quy Nhơn Chương : Lập trình hợp ngữ DKFLAG DBIT 11 Giá trình Vi xử lý ; trạng thái đĩa Khai báo byte DB (Define Byte) Sự thành lập dẫn DB : [label:] DB Expression, [Expression], [ ] Chỉ dẫn DB khởi gán mã nên segment CODE phải tích cực Danh sách biểu thức chuỗi hay nhiều giá trị byte (mỗi cách biểu thức) phân dấu phẩy Chỉ thị DB cho phép chuỗi ký tự (được kèm dấu ngoặc kép đơn) dài ký tự Mỗi ký tự chuỗi biến thành mã ASCII tương ứng Nếu nhãn dùng nhãn ấn định địa byte Ví dụ : CSEG AT 0100H SQUARES: DB 0,1,4,9,16,25 MESSAGE: DB ‘login’, ;Bình phương từ 0-5 ; chuỗi ký tự kết thúc Kết phân chia nhớ hexa nhớ mã sau : Address Content Note 0100H 00H Cửa số 0101H 01H Cửa số 0102H 04H Cửa số 0103H 9H Cửa số 0104H 10H Cửa số 16 0105H 19H Cửa số 25 Khai báo từ DW (Define Word) Sự thành lập : [label:] DW Expression [,Expression], [ ] Chỉ thị giống dẫn DW tương tự DB ngoại trừ hai vị trí nhớ 16 bit chia làm khoảng liệu Ví dụ : CSEG AT DW 200H $, ‘A’, 1234H, ‘BC’ Address Content Note 0200H 12H Byte cao 1234H 0201H 34H Byte thấp 1234H 0202H 00H Byte cao 0203H 02H Byte thấp Canquynhon.blogtiengviet.net Đại học Quy Nhơn Chương : Lập trình hợp ngữ 12 Giá trình Vi xử lý 3.3.4 Liên Kết chương trình Liên kết chương trình cho phép môdul hợp dịch riêng rẽ truyền thông với cách cho phép tham chiếu liên modul đặt tên cho modul Chỉ dẫn PUBLIC Dạng dẫn PUBLIC symbol [, symbol]… Cho phép danh sách ký hiệu xác định biết sử dụng bên modul hợp dịch hành Như ký hiệu khai báo PUBLIC phải định nghĩa modul hành tham chiếu modul khác ví dụ: PUBLIC INCHAR, OUTCHR, INLINE, OUTSTR Chỉ dẫn EXTRIN Dạng dẫn EXTRIN segment_type (symbol [, symbol]…) Liệt kê ký hiệu tham chiếu modul hành ký hiệu định nghĩa modul khác 3.4 CẤU TRÚC CHƯƠNG TRÌNH Mục đích việc lập trình có cấu trúc áp dụng cho lập trình hợp ngữ Mặc dù ngơn ngư cấp cao (như Pascal, C, ) đẩy mạnh việc lập trình có cấu trúc thơng qua phát biểu chúng (WHILE, FOR ) quy ước ký hiệu hợp ngữ khơng có đặc trưng vốn có Việc sử dụng cấu trúc mang lại hiệu lớn Thông thường sử dụng phương pháp Lưu đồ (flowchart) Giải mã (pseudo code) Hợp ngữ (assembly languare) Ta xem giải mã ngơn ngữ máy tính Ý tưởng sử dụng khơn thức Lợi ích việc sử dụng giải mã tạo tôn triệt để cấu trúc đồng thời kết hợ với ngôn ngữ không thức ví dụ : IF [condition í true] THEN [do statement 1] ELSE BEGIN [do statement 2] [do statement 3] END Canquynhon.blogtiengviet.net Đại học Quy Nhơn Chương : Lập trình hợp ngữ 13 Giá trình Vi xử lý Mọi vấn đề lập trình thể cấu trúc: phát biểu (statement), vòng lặp (loop), lựa chọn (choice) 3.4.1 Các phát biểu Các phát biểu cho ta chế để thực điều Khả bao gồm việc gán giá trị cho biến chẳn hạn như: Ccunt = Hoặc gọi chương trình con: PRINT_STRING (“SLECT OPTIN:”) Ta đặt thành nhóm hay khối phát biểu nằm từ khóa BEGIN END: BEGIN [statement 1] … END 3.4.2 Cấu trúc vòng lặp 3.4.2.1 Phát biểu WHILE/DO WHILE [condition] DO [statement] Hình 3.2: Lưu đồ cấu trúc WHILE/DO Canquynhon.blogtiengviet.net Đại học Quy Nhơn Chương : Lập trình hợp ngữ 14 Giá trình Vi xử lý Ví dụ: chương trình tính tổng chuỗi số tham số truyền tới chương tình bao gồm chiều dài chuỗi số chứa R7 địa bắt đầu R0, kết cất chứa A sử dụng : WHILE [C==1] DO SUM: CLR A LOOP: CJNE R7, #0, STATEMENT JMP EXIT STATEMENT: ADD A, @R0 DEC R7 JMP LOOP EXIT: RET Hoặc cách 2: SUM: CLR A INC R7 MORE: CJNE R7, SKIP RET SKIP: ADD A, @R0 INC R0 SJMP MORE 3.4.2.2 Phát biểu REPEAT/UNTIL REPEAT [statement] UNTIL [condition] Hình 3.3: Lưu đồ cấu trúc REPEAT/UNTIL Canquynhon.blogtiengviet.net Đại học Quy Nhơn Chương : Lập trình hợp ngữ 15 Giá trình Vi xử lý Ví dụ: Viết chương trình tìm kiếm chuỗi kết thúc NULL (trỏ R0) xác định phải z diện tong chuỗi không? STATEMENT: MOV A, @R0 INC R0 JZ EXIT CJNE A, #’Z’, STATEMENT EXIT: RET 3.4.2.3 Cấu trúc lựa chọn IF IF [condition] THEN [statement 1] ELSE [statement 2] Hình 3.4: Lưu đồ cấu trúc IF/ THEN/ELSE Ví dụ: viết chương trình nhập kiểm tra ký tự từ port nối tiếp, ký tự mã ASCII (hiển thị được) cho hiển thị ngược lại hiển thị (.) ENTER: INCH ACALL ISGRPH JNC STMENT2 ACALL OUTCH JMP STMENT1: ACALL EXIT Canquynhon.blogtiengviet.net Đại học Quy Nhơn Chương : Lập trình hợp ngữ 16 Giá trình Vi xử lý STMENT2: MOV A, #’.’ ACALL EXIT: OUTCH (continue) 3.4.2.4 Cấu trúc lựa chọn CASE CASE [expression] OF 0: [statement 0] 1: [statement 1] 2: [statement 2] … END_CASE Hình 3.5: Lưu đồ cấu trúc CASE /OF Ví dụ: Viết chương trình nhập ký tự từ bàn phím nhảy đến ACT0, ACT1, ACT2, ACT3 CALL INCH CJNE A, #’0’, SKIP1 ACT0: … JMP SKIP1: EXIT CJNE A, #’1’, SKIP2 ACT1: … JMP SKIP2: EXIT CJNE A, #’2’, SKIP3 Canquynhon.blogtiengviet.net Đại học Quy Nhơn Chương : Lập trình hợp ngữ 17 Giá trình Vi xử lý ACT2: … JMP SKIP3: EXIT CJNE A, #’3’, EXIT ACT3: … EXIT: (continue) 3.5 QUY TẮC HỢP NGỮ 3.5.1 Nhãn chương trình Sử dụng nhãn từ gợi nhớ dễ hiểu SKIP, WAIT trang sử dụng từ khóa chương trình END, R0… đứng sau nhãn dấu : sau thực xong lệnh yêu cần kết thúc lênh RET ví dụ : EXIT : MOV @R0, #0 POP ACC ; phục hồi ghi POP07H ; từ stack POP 00H RET 3.5.2 Chú thích Các thích bắt đầu dấu ‘;’ dòng Canquynhon.blogtiengviet.net Đại học Quy Nhơn Chương : Lập trình hợp ngữ 18 Giá trình Vi xử lý PHỤ LỤC BT1: Sáng tắt bit p1 xen kẻ ORG BACK: MOV A,#55H ; A = 55h MOV P1,A ; P1 = 55h LCALL DELAY ; MOV A,#0AAH ; A = AAh MOV P1,A ; P1 = AAh LCALL DELAY SJMP BACK ;this is the delay subroutine ORG 300H DELAY: PUSH ; PUSH R4 ; cat vao ngan xep R4 PUSH ; PUSH R5 MOV R4,#0FFH ; R4=FFH NEXT: MOV R5,#0FFH ; R5=255 AGAIN: DJNZ R5,AGAIN ; nhay taij cho cho den R5=0 DJNZ R4,NEXT POP ; POP INTO R5 lay tu ngan xep R5 POP ; POP INTO R4 RET ; END Canquynhon.blogtiengviet.net Đại học Quy Nhơn .. .Chương : Lập trình hợp ngữ Giá trình Vi xử lý Hình 3. 1: Hợp dịch chương trình nguồn Vì hầu hết biên dịch xem xét chương trình nguồn lần lúc thi hành dịch ngôn ngữ máy, nên chúng... Canquynhon.blogtiengviet.net Đại học Quy Nhơn Chương : Lập trình hợp ngữ 12 Giá trình Vi xử lý 3. 3.4 Liên Kết chương trình Liên kết chương trình cho phép môdul hợp dịch riêng rẽ truyền thông với cách... ACT 0: … JMP SKIP 1: EXIT CJNE A, #’1’, SKIP2 ACT 1: … JMP SKIP 2: EXIT CJNE A, #’2’, SKIP3 Canquynhon.blogtiengviet.net Đại học Quy Nhơn Chương : Lập trình hợp ngữ 17 Giá trình Vi xử lý ACT 2: …