Giáo trình Kiến trúc máy tính - Chương 5: Lập trình hợp ngữ

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

pdf22 trang | Chia sẻ: thuongdt324 | Lượt xem: 552 | Lượt tải: 0download
Bạn đang xem trước 20 trang tài liệu Giáo trình Kiến trúc máy tính - Chương 5: Lập trình hợp ngữ, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
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