Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 92 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
92
Dung lượng
1,07 MB
Nội dung
Bộ mơn Cơng nghệ điều khiển tự động Giáo trình hợp ngữ Chương NGÔN NGỮ ASM VÀ CÁCH LẬP TRÌNH (25 tiết) 1.1 Mở đầu Giới thiệu Ngơn ngữ Asembler ngôn ngữ bậc thấp Ưu điểm : Vì ngơn ngữ Assembler gần gũi với ngơn ngữ máy nên chương trình + Chạy nhanh + Tiết kiệm nhớ + Có thể lập trình truy cập qua giao diện vào ngôn ngữ bậc cao làm Nhược điểm + Khó viết u cầu người lập trình am hiểu phần cứng + Khó tìm sai: bao gồm sai cú pháp (syntax) sai thuật tốn (Algorithm) Chương trình dịch thơng báo sai ta dùng debug DOS để kiểm tra + Khơng chuyển chương trình Assembler cho máy tính có cấu trúc khác Ứng dụng + Viết lõi hệ điều hành + Các chương trình trò chơi ( ngày trước) + Tạo virus + Các chương trình đo điều khiển sử dụng cơng nghiệp, ngày vi điều khiển sử dụng cách rộng rãi 1.2 Cài đặt chương trình dịch TASM Hiện có hai chương trình dịch phổ biến MASM (của hãng Microsoft) TASM (của hãng Borland) hai chương dịch giống khác chỗ: viết lệnh push Nếu viết : push ax push bx push cx hai chương trình biên dịch ( cách viết theo MASM) Còn TASM cho phép viết push ax bx cx Cài đặt chương trình dịch TASM: Cách 1: Mua đĩa quyền đĩa mềm có đĩa đĩa CD Run cmd A:\ install Bộ môn Công nghệ điều khiển tự động Giáo trình hợp ngữ Cách 2: + Tạo thư mục: C:\TASM + Copy tệp lõi từ máy khác cài đặt theo cách thư mục tạo trước 1.3 Các bước thực chương trình Assember máy PC : (soạn thảo chương trình, dịch chương trình, liên kết, chạy thử cách tìm sai DEBUG DOS TD (Turbo Debug) Borland) Bao gồm bước: + Bước 1: Dùng chương trình soạn thảo (Edit, NC, TC, ….) để soạn thảo chương trình Sau soạn thảo xong phải cất tệp có ASM + Bước 2: Dịch chương trình gốc có ASM thành tệp có OBJ Cú pháp: C:\BT> tasm ten tep[.ASM] ten tep.OBJ Chú ý: chương trình dịch có lỗi khơng sinh tệp có OBJ Cách khai báo sai ** Error**ten tep.asm[10] Illegal Instruction dòng thứ lỗi + Bước 3: Liên kết để chuyển tên tệp có OBJ sang tệp EXE hay COM Cú pháp: C:\BT> tlink ten tep[.OBJ] ten tep.EXE hay ten tep.COM + Bước 4: Chạy thử chương trình Khi chạy có lỗi dùng debug để kiểm tra 1.4 Sự hỗ trợ hệ thống cho việc lập trình Assember 1.4.1 Cấu trúc ghi a) Thanh ghi gì? Thanh ghi vùng nhớ đặc biệt dạng RAM nằm CPU, việc thâm nhập ghi thực tên huý (tên ghi) + Người lập trình ASM hay dùng ghi làm toán hạng thay cho biến nhớ Bộ mơn Cơng nghệ điều khiển tự động Giáo trình hợp ngữ làm cho chương trình chạy nhanh + Giải thích: ghi nằm CPU nên liệu lấy nhanh + Vùng nhớ cache vùng nhớ nằm CPU b) Phân loại ghi + Máy tính 16 bit có 14 ghi + Máy tính 32 bit có 16 ghi Cấu trúc ghi máy tính 16 bit + Nhóm 1: Thanh ghi cờ Người lập trình ASM hay dùng trạng thái bit cờ làm điều kiện cho lệnh nhảy có điều kiện x x x x O D I T S Z x A x P x C + x: không định nghĩa bit cờ trạng thái thể trạng thái khác kết sau thao tác đó, bit cờ đầu thuộc byte thấp cờ cờ giống vi xử lý bit 8085 Intel + C CT (Carry flag): cờ nhớ CF = có nhớ mượn từ MSB + P PF (Parity flag): cờ parity PF phản ánh tính chẵn lẻ (parity) tổng số bit có kết PF = tổng số bit kết chẵn + A AF (Auxiliary carry flag): cờ nhớ phụ, có ý nghĩa ta làm việc với số BCD AF = có nhớ mượn từ số BCD thấp (4 bit thấp) sang số BCD cao (4 bit cao) + Z ZF ( Zero flag): cờ rỗng, ZF = kết + S SF (Sign flag): cờ dấu, SF = kết âm + O OF (Overflow flag): cờ tràn, OF = kết số bù hai vượt ngồi giới hạn biểu diễn dành cho Ngồi vi xử lí 8088 có cờ điều khiển sau đây: + T TF (Trap flag): cờ bẫy, TF = CPU làm việc chế độ chạy lệnh( chế độ cần dùng cần tìm lỗi chương trình) + I IF (Interrupt enable flag): cờ cho phép ngắt, IF = CPU cho phép yêu cầu ngắt tác động + D DF (Direction flag): cờ hướng, DF = CPU làm việc với chuỗi kí tự theo thứ tự từ trái sang phải (hay gọi D cờ lùi) + Nhóm 2: Thanh ghi đa năng: gồm ghi 16 bits AX AH AL BX BH BL CX CH CL DX DH DL SI DI BP SP + Trong H(high) thể bit cao, L(low) thể bit thấp + Trong ghi AX, BX, CX DX có cách truy cập: truy cập theo bit cao theo bit thấp theo 16 bit Các ghi lại có cách truy cập Bộ môn Công nghệ điều khiển tự động Giáo trình hợp ngữ + AX (Accumulator, Acc): chứa Các kết thao tác thường chứa (kết phép nhân, chia) Nếu kết bit ghi AL coi Acc + BX (Base): ghi sở, thường chứa địa cở sở bảng dùng lệnh XLAT(XLAT/XLATB Table Look-up Translation) + CX (Count): đếm, CX thường dùng để chứa số lần lặp trường hợp lệnh LOOP, CL thường chứa số lần dịch quay lệnh dịch hay quay ghi + DX (Data): ghi liệu, DX AX tham gia vào thao tác phép nhân chia số 16 bit DX dùng để chứa địa cổng lệnh vào trực tiếp (IN/OUT) + SI (Source index): số gốc hay nguồn, SI vào liệu đoạn liệu DS mà địa cụ thể đầy đủ tương ứng với DS : SI + DI (Destination index): số đích, DI vào liệu đoạn liệu DS mà địa cụ thể đầy đủ tương ứng với DS : DI + BP (Base pointer) : trỏ sở, BP trỏ vào liệu nằm đoạn ngăn xếp SS Địa đầy đủ phần tử đoạn ngăn xếp ứng với SS : BP + SP (Stack pointer): trỏ ngăn xếp, SP trỏ vào đỉnh thời ngăn xếp SS Địa đầy đủ đỉnh ngăn xếp ứng với SS:SP Người lập trình dùng ghi sau: AX, BX, CX, DX, SI, DI, BP + Nhóm 3: Thanh ghi trỏ lệnh IP (Instruction pointer) hay PC(ProgRAM pointer) IP (Instruction pointer) 15 Nội dung ghi IP cho biết địa offset vùng nhớ chứa mã lệnh + Nhóm 4: Thanh ghi Segmnet ( phân đoạn): ghi 16 bits 15 CS DS ES SS Các ghi segment cho biết địa segment + CS (Code segment): mã máy + DS, ES: liệu + SS: ngăn xếp Cấu trúc ghi máy tính 32 bit + Nhóm 1+ nhóm + nhóm ghi 32 bit với chữ E đầu (ví dụ: EAX hay EBX) EAX 31 15 AX + Nhóm ghi 16 bit thêm hai ghi GS FS Bộ môn Công nghệ điều khiển tự động Giáo trình hợp ngữ 1.4.2 Cách thể địa nhớ (ROM RAM): dạng lơgíc dạng vật lý Một ghi 16 bit trỏ 64k vùng nhớ máy tính lớn phải dùng ghi để thể địa ô nhớ Và vùng nhớ chia thành nhiều phần, phần 64k a) Dạng Logic Địa ô nhớ = segment : offset + Thanh ghi thứ cho biết nhớ nằm 64k thứ (địa segment) + Thanh ghi thứ hai cho biết khoảng cách từ đầu segment đến vị trí nhớ (địa offset) Ví dụ: 2: 100 tức địa ô nhớ nằm vị trí 100 tính từ đỉnh segment thứ hai b) Dạng vật lý Địa ô nhớ = seg*16 + offset + Cách đánh địa hay dùng 1.4.3 Các ngắt hay dùng hỗ trợ cho lập trình Assembler + Hàm 1: Chờ kí tự( từ bàn phím) mov ah,1 ; gán ah = al chứa mã ASCII ; al = kí tự gõ vào phím chức năng( lệnh) int 21h + Hàm 2: Hiện ký tự lên hình từ vị trí trỏ đứng Cách 1: mov al, mã ASCII mov ah,0ch int 10h Cách 2: mov dl, mã ASCII ; dl = mã ASCII kí tự cần hiển thị mov ah,2 int 21h + Hàm 3: Hiện xâu kí tự kết thúc „$‟ lên hình lea dx, tên biến xâu ; mov dx,offset tên biến xâu mov ah,9 int 21h + Hàm 4: Trở DOS mov ah,4ch int 21h 1.5 Hệ lệnh Assembler + Tập lệnh MNEMONIC sinh mã máy để chạy chương trình + Các DIRECTIVE điều khiển dịch chương trình 1.5.1 Cú pháp dòng lệnh ASM + Mỗi dòng viết lệnh + [Label] [Directive/Mnemonic] [Nhãn] [Loại lệnh] [Operands] [;Commnet] [Toán hạng] [Ghi chú] Bộ môn Công nghệ điều khiển tự động Giáo trình hợp ngữ Từ ; hết dòng ghi có hiệu lực dòng Ví dụ: 1) X1 EQU 10 ; gán 10 cho X1 [Nhãn] [Lệnh Directive] 2) L1: 3) mov ax,bx [Toán hạng] [Ghi chú] [Lệnh Mnemonic][Toán hạng] 1.5.2 Tập lệnh Mnemonic - Tập lệnh Mnemonic gì? Đó lệnh ASM thể viết tắt tiếng Anh cho dễ hiểu Tiếng Anh Lệnh dạng Mnemonic Move mov Addition add Multiplication mul - Các quy ước toán hạng + SRC: Toán hạng nguồn + DST: Tốn hạng đích + REG(reg8/reg16: Tốn hạng ghi + Data: Toán hạng số + Mem: Toán hạng biến nhớ + Segreg: Toán hạng ghi segment - Tập lệnh MNEMONIC gồm có nhóm + Nhóm 1: Các lệnh di chuyển liệu + Nhóm 2: Các lệnh số học + Nhóm 3: Các lệnh thao tác bit + Nhóm 4: Các lệnh thao tác xâu ký tự + Nhóm 5: Các lệnh rẽ nhánh + Nhóm 6: Các hệ thống cờ a) Nhóm 1: Các lệnh di chuyển liệu Tất lệnh nhóm thực khơng làm thay đổi trạng thái bit cờ - Lệnh mov Chức năng: Đưa nội dung từ SRC đến DST Cú pháp: mov DST, SRC reg1 reg2 mov ax, bx reg data mov cx,100 reg mem mov dx,value mem reg mov value,dx mem data mov value,100 segreg reg16 mov ds,ax reg16 segreg mov bx,cs segreg mem16 mov cs,value mem16 segreg mov value,cs Chú ý: + Không di chuyển hai biến nhớ (mov mem1,mem2) Bộ môn Công nghệ điều khiển tự động - - Giáo trình hợp ngữ Thực gián tiếp: mov reg,mem2 mov mem1,reg + Không đưa trực tiếp liệu vào ghi segment (mov seg,data) Thực gián tiếp: mov reg16,data mov segreg,reg16 + Sự khác sử dụng chế độ địa ( mov ax,bx khác với mov ax,[bx] ; đưa nội dung mà bx trỏ đến vào ax) mov ax,[bx] tương đương với mov ax, ds:[bx] (SI,DI hay BP) Lệnh push Chức năng: cất byte SRC vào đỉnh ngăn xếp(stack) Cú pháp: PUSH SRC reg16 mem16 Ví dụ: push ax Tốn hạng gốc tìm theo chế độ địa khác nhau: ghi đa năng, ghi đoạn ô nhớ Lệnh thường dùng với lệnh POP cặp đỗi ngẫu để xử lý liệu trạng thái chương trình chính(CTC) vào chương trình con(ctc) Lệnh POP Chức năng: lấy byte (1 từ) đỉnh ngăn xếp (stack) vào toán hạng đích Cú pháp: POP DST reg16 mem16 Ví dụ: push ax push bx push cx Đoạn Chương trình pop cx pop bx pop ax Chú ý: - Cơ chế PUSH/POP LIPO( last in first out) - Cách viết sử dụng MASM TASM viết sau: push ax bx cx - Lệnh PUSHF Chức năng; cất giá trị ghi cờ vào đỉnh ngăn xếp Cú pháp: PUSHF Dữ liệu ngăn xếp không thay đổi, SS không thay đổi - Lệnh POPF Chức năng: Lấy byte từ đỉnh ngăn xếp đưa vào ghi cờ Bộ môn Công nghệ điều khiển tự động - - - - Giáo trình hợp ngữ Cú pháp: POPF Sau lệnh liệu ngăn xếp không thay đổi, SS không thay đổi Lệnh XCHG (Exchange Operands) Tráo nội dung toán hạng Chức năng: Tráo nội dung toán hạng DST SRC Cú pháp XCHG DST SRC reg1 reg2 reg mem Trong tốn hạng đích tìm theo chế độ địa khác phải chứa liệu có độ dài khơng phép đồng thời ô nhớ không ghi đoạn Sau lệnh XCHG toán hạng chứa nội dung cũ toán hạng ngược lại Lệnh không tác động đến cờ Lệnh IN Chức năng: đọc liệu từ cổng vào ghi AL/AX Cú pháp: IN AL/AX, địa cổng Chú ý: + Nếu địa cổng (direct) (PC) (PC) + Relative Address (A) < (direct) C = (A) > (direct) C = (A) = (direct) Thực hành lệnh : Tương tự lệnh CJNE A, direct, rel : Tương tự lệnh CJNE A, direct, rel : Tương tự lệnh CJNE A, direct, rel : Giảm Rn nhảy Rn (PC) (PC) + (Rn) (Rn) -1 (Rn) < > (PC) (PC) + byte : Tương tự lệnh DJNZ Rn, rel Các lệnh dịch chuyển liệu Các lệnh dịch chuyển liệu vùng nhớ nội thực thi chu kỳ máy Mẫu lệnh MOV , cho phép di chuyển liệu vựng nhớ RAM nội vùng nhớ ghi chức đặc biệt mà không thông qua ghi A Vùng Ngăn xếp 8951 chứa 128 byte RAM nội, trỏ ngăn xếp SP tăng địa 7FH byte PUSH vào byte POP khơng biết rõ Các lệnh dịch chuyển nhớ nội nhớ ngoại dùng định vị gián tiếp Địa gián tiếp dùng địa byte (@ Ri) địa byte (@ DPTR) Tất lệnh dịch chuyển hoạt động toàn nhớ thực thi chu kỳ máy dùng ghi A làm toán hạng DESTINATION Việc đọc ghi RAM (RD WR) tích cực suốt q trình thực thi lệnh MOVX, bình thường RD WR khơng tích cực (mức 1) Tất lệnh dịch chuyển không ảnh hưởng đến cờ Hoạt động lệnh tóm tắt sau: PUSH direct : Cất liệu vào ngăn xếp (SP) (SP) + (SP) (Drirect) POP direct : Lấy từ ngăn xếp direct (direct) ((SP)) (SP) (SP) - XCH A, Rn : Đổi chổ nội dung A với Rn (A) (Rn) XCH A, direct : (A) (direct) 90 Bộ môn Công nghệ thiết bị tự động hóa XCH A, @ Ri XCHD A, @ Ri Giáo trình hợp ngữ : (A) ((Ri)) : Đổi chổ bit thấp (A) với ((Ri)) (A3A0) ((Ri3Ri0)) Các lệnh xen vào (MiCSellamous Intstruction): NOP : Khơng hoạt động cả, tốn byte chu kỳ máy Ta dùng để delay khoảng thời gian nhỏ 91