Bài giảng Kiến trúc máy tính - Chương 5: Lập trình hợp ngữ
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Kiến trúc máy tính - Chương 5: Lập trình hợp ngữ", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên
Tài liệu đính kèm:
bai_giang_kien_truc_may_tinh_chuong_5_lap_trinh_hop_ngu.pdf
Nội dung text: Bài giảng Kiến trúc máy tính - Chương 5: Lập trình hợp ngữ
- Lập trình Hợp ngữ Assembly Language
- Tổng quan Ngôn ngữ cấp thấp Macro Assembler ( MASM) - CPU 8086. Tập tin hợp ngữ nguồn (.ASM) Các phát biểu lệnh hợp ngữ (assembly statement) Assembly Language Instruction . Xác định hành động CPU thực hiện . Dịch sang một lệnh mã máy tương ứng Assembler directive . Khai báo hướng dẫn biên dịch
- Tổng quan (tt) Các thành phần Bộ ký tự: 26 chữ cái thường và hoa a-z, A-Z 10 kí tự số 0-9 Các kí tự dấu: ? @ _ $ : . [ ] ( ) { } + - * / & % ! ‘ ~ “ | \ = # ^ ; , Kí tự ngăn cách Khoảng trắng Tab Kí tự xuống dòng : kết thúc một lệnh Không phân biệt hoa thường
- Tổng quan (tt) Từ vựng: Tên: A-Z a-z 0-9 . ? @ _ $ Duy nhất Qui tắc đặt tên?? Từ khóa Bắt buộc Kiểu số liệu: Số: Thập phân 110d (mặc định) Nhị phân 01111b Hexa 0FF01h Kí tự: Giữa hai dấu ngoặc đơn hoặc kép Mã ASCII ‘A’ == 41h
- Cấu trúc lệnh Name: Operation Operand(s) ;Comment [Nhãn] Tên gợi nhớ Toán hạng(s) Ghi chú Kí tự ngăn cách: khoảng trắng, TAB START: MOV CX,5 ;khởi tạo thanh ghi CX MAIN PROC ; tạo thủ tục tên là MAIN Name: tên thay thế địa chỉ câu lệnh Operation: hành động (2-7 kí tự) Operand: dữ liệu để xử lý Hằng, thanh ghi, biểu thức, tên tượng trưng Các dạng định địa chỉ??? Comment: người lập trình hiểu Assembler bỏ qua
- Khai báo dữ liệu Khai báo hằng Chỉ dẫn EQU hoặc = Gán giá trị hằng cho tên name EQU name = Khai báo biến Loại dữ liệu riêng Số, ký tự, chuỗi, biểu thức có trị xác định Vùng nhớ xác định Tạo ra khi biên dịch chương trình Truy xuất vùng nhớ qua tên biến
- Chỉ dẫn khai báo kiểu số liệu DB define byte DW define word (doublebyte) DD define doubeword (2 từ liên tiếp) DQ define quadword (4 từ liên tiếp) DT define tenbytes (10 bytes liên tiếp) Ví dụ: alpha DB 4 ; khai báo biến alpha chiều dài 1 byte có giá trị khởi tạo 4 beta DW ? ; khai báo biến beta chiều dài 2 byte không khởi tạo giá trị
- Mảng (ARRAY) Thực chất là một loạt các byte hay từ nhớ liên tiếp nhau truy xuất địa chỉ thông qua tên biến Còn gọi là vùng nhớ có tên và tổng số byte chiều dài Ví dụ: vùng nhớ B_ARRAY chiều dài 3 byte b_array DB 10h,20h,30h b_array là tên gán cho byte đầu tiên b_array+1 là tên của byte thứ hai b_array+2 là tên của byte thứ ba
- Mảng (ARRAY) Nếu ASM gán địa chỉ offset 0200h cho mảng B_ARRAY thì nội dung bộ nhớ như sau : SYMBOL ADDRESS CONTENTS b_array 200h 10h b_array+1 201h 20h b_array+2 202h 30h
- Mảng (ARRAY) Ví dụ mảng W_ARRAY 4 phần tử W_ARRAY DW 1000,40,29887,329 Giả sử mảng bắt đầu tại 0300h: SYMBOL ADDRESS CONTENTS W_ARRAY 300h 1000d W_ARRAY+2 302h 40d W_ARRAY+4 304h 29887d W_ARRAY+6 306h 329d
- Khai báo dữ liệu Chuỗi kí tự Mảng các giá trị mã ASCII msg DB ‘HELLO’, 0AH, 0DH, ‘$’ tương đương msg DB 48H,45H,4CH,4Ch,4FH,0AH,0DH,24H Toán tử DUP Lặp lại số lần giá trị dữ liệu cần khởi tạo result DB 100 DUP (‘?’) ; chuỗi 100 dấu ? Có thể lồng nhau
- Cấu trúc chương trình ASM Cú pháp khai báo toàn phần: Chỉ dẫn SEGMENT ENDS Tự tham khảo Chương trình ASM gồm 3 phần 3 đoạn CODE DATA STACK Chỉ dẫn kiểu bộ nhớ: xác định kích thước đoạn .model memory_type SMALL, MEDIUM, COMPACT, LARGE
- Đoạn dữ liệu – DATA Segment Cú pháp .DATA ;khai báo tên hằng, biến, mảng Ví dụ .DATA WORD1 DW 2 WORD2 DW 5 MSG DB ‘THIS IS A MESSAGE ’ MASK EQU 10010010B
- Đoạn ngăn xếp – Stack Segment Cú pháp: .STACK size Mặc định 1KB Ví dụ: .STACK 100h ;dành 256 bytes cho stack
- Đoạn mã- Code segment Đoạn chứa mã lệnh chương trình Bắt đầu bằng .CODE, bên trong chứa mã lệnh của thủ tục Cú pháp khai báo thủ tục name PROC ; body of the procedure name ENDP Kết thúc chương trình bằng cú pháp END
- Ví dụ: .MODEL SMALL ;1 đoạn code và 1 đoạn dữ liệu .STACK 100h ; dành 256 byte cho stack .DATA ; định nghĩa dữ liệu tại đây .CODE MAIN PROC ; thân thủ tục MAIN MAIN ENDP ; các thủ tục khác nếu có END MAIN ; kết thúc chương trình bắt đầu bằng thủ tục MAIN
- Các lệnh cơ bản MOV, XCHG ADD, SUB, INC , DEC,NEG Chuyển ngôn ngữ cấp cao sang hợp ngữ Mệnh đề B=A MOV AX,A ; đưa A vào AX MOV B,AX ; đưa AX vào B Mệnh đề A=B-2*A MOV AX,B ;Ax=B SUB AX,A ;AX=B-A SUB AX,A ;AX=B-2*A MOV A,AX ;A=B-2*A
- Các lệnh vào ra CPU thông tin với cổng ngoại vi I/O bằng lệnh IN và OUT Không dùng trực tiếp. Tại sao??? Dùng chương trình phục vụ I/O BIOS ( Basic Input Output System) Do hệ điều hành cung cấp Trình phục vụ ngắt INT INT interrupt_number Thực hiện các ngắt thông qua số hiệu hàm
- INT 21h function number routine 9 String input Input : DX= địa chỉ chuỗi ký tự kết thúc bằng $ Output: chuỗi kí tự xuất hiện trên màn hình function number routine 2 Single character output Input : AH=2 DL=ASCII code of the the display character or control character Output: AL= ASCII code of the the display character or control character
- Chương trình đầu tiên Đọc một ký tự in ra dòng mới .MODEL SMALL .STACK 100H .CODE MAIN PROC ; hiện dấu nhắc MOV AH,2 MOV DL,’?’ INT 21H
- Chương trình đầu tiên ; nhập một ký tự MOV AH,1 ; hàm nhập ký tự INT 21H ; ký tự nhập vào AL MOV BL,AL ; cất ký tự vào BL ; chuyển xuống dòng mới bằng cách xuất kí tự ; xuống hàng và kí tự về đầu hàng. MOV AH,2 ; hàm xuất ký tự MOV DL,0DH ; ký tự carriage return INT 21H ; thực hiện xuất kí tự carriage return MOV DL,0AH ; kí tự line feed INT 21H ; thực hiện xuất kí tự line feed
- Chương trình đầu tiên ; xuất kí tự nhập cất ở BL MOV DL,BL ; đưa dữ liệu cất ở BL vào DL INT 21H ; thực hiện xuất kí tự ; trở về DOS MOV AH,4CH ; hàm thoát về DOS INT 21H ; thực hiện exit to DOS MAIN ENDP END MAIN