Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 20 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
20
Dung lượng
371,87 KB
Nội dung
KHOA CÔNG NGHỆ THÔNG TIN Bộ môn Công nghệ điều khiển tự động ĐỖ VĂN TOÀN DƯƠNG CHÍNH CƯƠNG Giáo trình LẬP TRÌNH HỢP NGỮ THÁI NGUYÊN, 2007 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 yê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 toá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 : Mua đĩa quyền đĩa mềm có đĩa đĩa CD Run → cmd A:\ install ¾ 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 l: 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ó đuôi ASM + Bước 2: Dịch chương trình gốc có đuôi ASM thành tệp có đuôi OBJ Cú pháp: C:\BT> tasm ren tệp[.ASM] ↵ → ten tep.OBJ Chú ý: chương trình dịch có lỗi không sinh tệp có đuôi OBJ Cách khai báo sai * * Error** len tệp.asm[ 10] lllegal Instruction dòng thứ lỗi + Bước 3: Liên kết để chuyển tên tệp có đuôi OBJ sang tệp EXE hay COM Cú pháp: C:\BT> trinh ren tệp[.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ớ 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 bít + Nhóm 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ố bịt có kết PF = tổng số bịt 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 bịt cao) + Z ZF ( Zero flag): cờ rỗng, ZF = kết + S SF (Sum flag): cờ dấu, SF = kết âm + O OF (Overnow flag): cờ tràn, OF = kết số bù hai vượt giới hạn biểu diễn dành cho Ngoài vi xử lí 8088 có cờ điều khiển sau đây: + T TF thấp nao): 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 Thanh ghi đa năng: gồm ghi 16 bits + 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 + 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 + 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 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 l + nhóm + nhóm ghi 32 bit với chữ E đầu (ví dụ: EAX hay EBX) EAX 31 15 AX 1.4.2 Cách thể địa ô nhớ (ROM RAM): dạng 1ô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 2thanh 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ụ: : 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 l: Chờ kí tự Mov ah,1 ; gán ah = chứa mã ASCII ; al = kí tự gõ vào phím chức Int 21h + Hàm 2: Hiện ký tự lên hình từ vị trí trỏ đứng Cách : Mov al, mã ASCII Mov ah,0eh 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ú] Từ ; hết dòng ghi có hiệu lực dòng 1.5.2 Tập lệnh Mnemonic - Tập lệnh Mnẹmonic gì? Đó lệnh ASM thể viết tắt tiếng Anh cho dễ hiểu Tiếng Anh Move Lệnh dang Mnemonic mov Addition add Multiplication mul - Các quy ước vê toán hạng + SRC: Toán hạng nguồn + DST: Toán hạng đích + REG(reg8/reg 16 : Toá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 : 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 : 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 Regreg Reg16 Reg16 → mov value, 100 → mov ds, ax Segreg → mov bx,cs Regreg Mem16 → mov cs, value Mem16 Regreg → mov value, cs Chú ý: + Không di chuyển hai biến nhớ (mov mem ,mem2) Thực gián tiếp: mov reg,mem2 mov mem 1,regs + Không đưa trực tiếp liệu vào ghi segment (mov seg,data) Thực gián tiếp: mov reg 16,data mov segreg,reg 16 + 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 Toá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 ( từ) đỉnh ngăn xếp (stack) vào toán hạn đí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 10 Chú ý: - Cơ chế PUSH/POP Lipo(last infirst 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ờ 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 toá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 [...]... address) Chức năng: lấy phần địa chỉ offset của biến đưa vào thanh ghi 16 bit Cú pháp: lea reg16, mem Ví dụ: lea bx, Value hay mov bx, OFFSET Value Đích thường là các thanh ghi: BX, CX, DX, BP, SI, DI Ngu n là tên biến trong đoạn DS được chỉ rõ trong lệnh hay ô nhớ cụ thể Ví dụ: lea dx, msg; Nạp địa chỉ offset của bản tin msl vào dx - Lệnh LES (Load register and ES with words from memory) Chức năng:... 1111 1111 1001 1100 Hầu hết các lệnh trong nhóm này khi thực hiện có thể làm thay đổi các kí tự - Lệnh ADD (addition) Chức năng: DST ← DST + SRC Cộng hai toán hạng: lấy toán hạng đích cộng với toán hạng ngu n rồi đưa vào toán hạng đích Cú pháp:TR11 add DST, reg 1 reg reg mem mem SRC reg2 → add data → add mem → add reg → add data → add ax, bx cx, 100 dx,value value,dx value, 100 Tác động đến cờ: C, P,... 0000 and al, 10h = 000x 0000 Khi dùng phép AND để che đi/ giữ lại một vài bit nào đó của một toán hạng thì bằng cách nhân logic toán hạng đó với toán hạng tức thì có các bit0/1 ở các chỗ cần che/ giữ nguyên tương ứng + Dựng cờ and DST,DST Ví dụ: and ax, ax Nếu ax < 0 thì SF = 1 Nếu ax ≥ 0 thì SF = 0 Nếu ax = 0 thì ZF = 1 Nếu ax ≠ 0 thì ZF = 0 - Lệnh OR Chức năng: thực hiện phép hoặc logic, Bit của... lần dịch mong muốn Nếu dịch một lần thì ta có thể viết trực tiếp VD: shl ax,l Nếu số lần dịch ≥ 2 thì phải nhờ đến CL/CX shl ax 4 shl ≡ mov cl/cx, 4 ax, cl/cx Ý nghĩa: Dịch trái 1 lần là nhân 2 với số nguyên dương - Lệnh SHR (shift Right) Chức năng: dịch phải logic các bit của toán hạng đích đi một số lần nào đó (số lần dịch được cất trong thanh ghi CL) 19 Cú pháp: SHR DST, CL (reg, mem) Tác động đến... Nếu dịch một lần thì ta có thể viết trực tiếp VD: sai ax,1 Nếu số lần dịch ≥ 2thì phải nhờ đến CL/CX Shr ax,4 shr ≡ mov cl/cx, 4 ax, cl/cx Ý nghĩa: Dịch phải 1 lần là chia đôi và làm tròn dưới với số nguyên dương - Lệnh SAR ( Shift Arithmetically Right) Chức năng: dịch phải số học các bit của toán hạng đích đi một số lần nào đó (số lần dịch được cất trong thanh ghi CL) Cú pháp: SAR DST, CL (reg, mem) ... 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 yêu cầu người lập trình am hiểu phần... thứ lỗi + Bước 3: Liên kết để chuyển tên tệp có đuôi OBJ sang tệp EXE hay COM Cú pháp: C:BT> trinh ren tệp[.OBJ] ↵ →ten tep.EXE hay ten tep.COM + Bước 4: Chạy thử chương trình Khi chạy có lỗi... 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 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):