Bài giảng Kỹ thuật vi xử lý - Chương 3: Lập trình hợp ngữ cho 8086

Giới thiệu khung của chương trình hợp ngữ

Cách tạo và chạy một chương trình hợp ngữ trên máy IBM PC

Các cấu trúc lập trình cơ bản thực hiện bằng hợp ngữ

Một số chương trình cụ thể

 

ppt35 trang | Chuyên mục: Kiến Trúc Máy Tính | Chia sẻ: dkS00TYs | Lượt xem: 3418 | Lượt tải: 1download
Tóm tắt nội dung Bài giảng Kỹ thuật vi xử lý - Chương 3: Lập trình hợp ngữ cho 8086, để xem tài liệu hoàn chỉnh bạn click vào nút "TẢI VỀ" ở trên
 trình hợp ngữ trên máy IBM PC Các cấu trúc lập trình cơ bản thực hiện bằng hợp ngữ Một số chương trình cụ thể Chương 3 Lập trình hợp ngữ với 8086 Giới thiệu khung của chương trình hợp ngữ Cú pháp của chương trình hợp ngữ Dữ liệu cho chương trình Biến và hằng Khung của một chương trình hợp ngữ Cách tạo và chạy một chương trình hợp ngữ trên máy IBM PC Các cấu trúc lập trình cơ bản thực hiện bằng hợp ngữ Một số chương trình cụ thể Cú pháp của chương trình hợp ngữ .Model Small .Stack 100 .Data 	Tbao DB ‘Chuoi da sap xep:’, 10, 13 	MGB DB ‘a’, ‘Y’, ‘G’, ‘T’, ‘y’, ‘Z’, ‘U’, ‘B’, ‘D’, ‘E’, 	 DB ‘$’ .Code MAIN Proc 	MOV AX, @Data	;khoi dau DS 	MOV DS, AX 	MOV BX, 10	;BX: so phan tu cua mang 	LEA	DX, MGB	;DX chi vao dau mang byte 	DEC	BX	;so vong so sanh phai lam LAP: MOV SI, DX	; SI chi vao dau mang 	MOV	CX, BX	; CX so lan so cua vong so 	MOV	DI, SI	;gia su ptu dau la max 	MOV	AL, [DI]	;AL chua phan tu max TIMMAX: 	INC SI	;chi vao phan tu ben canh 	CMP	[SI], AL	; phan tu moi > max? 	JNG	TIEP	;khong, tim max 	MOV	DI, SI	; dung, DI chi vao max MOV	AL, [DI]	;AL chua phan tu max TIEP: LOOP TIMMAX	;tim max cua mot vong so 	CALL DOICHO	;doi cho max voi so moi 	DEC 	BX	;so vong so con lai 	JNZ 	LAP	;lam tiep vong so moi 	MOV AH, 9	; hien thi chuoi da sap xep 	MOV	DX, Tbao 	INT	21H 	MOV 	AH, 4CH	;ve DOS 	INT	21H MAIN	Endp DOICHO Proc 	PUSH AX 	MOV	AL, [SI] 	XCHG	AL, [DI] 	MOV	[SI], AL 	POP	AX 	RET DOICHO Endp 	END MAIN Cú pháp của chương trình hợp ngữ Tên	Mã lệnh	Các toán hạng	; chú giải Chương trình dịch không phân biệt chữ hoa, chữ thường Trường tên: chứa các nhãn, tên biến, tên thủ tục độ dài: 1 đến 31 ký tự tên không được có dấu cách, không bắt đầu bằng số được dùng các ký tự đặc biệt: ? . @ _ $ % dấu . phải được đặt ở vị trí đầu tiên nếu sử dụng Nhãn kết thúc bằng dấu : TWO_WORD ?1 two-word .@? 1word Let’s_go Chương 3 Lập trình hợp ngữ với 8086 Giới thiệu khung của chương trình hợp ngữ Cú pháp của chương trình hợp ngữ Dữ liệu cho chương trình Biến và hằng Khung của một chương trình hợp ngữ Cách tạo và chạy một chương trình hợp ngữ trên máy IBM PC Các cấu trúc lập trình cơ bản thực hiện bằng hợp ngữ Một số chương trình cụ thể Dữ liệu cho chương trình Dữ liệu: các số hệ số 2: 0011B hệ số 10: 1234 hệ số 16: 1EF1H, 0ABBAH Ký tự, chuỗi ký tự: ‘A’, ‘abcd’ Chương 3 Lập trình hợp ngữ với 8086 Giới thiệu khung của chương trình hợp ngữ Cú pháp của chương trình hợp ngữ Dữ liệu cho chương trình Biến và hằng Khung của một chương trình hợp ngữ Cách tạo và chạy một chương trình hợp ngữ trên máy IBM PC Các cấu trúc lập trình cơ bản thực hiện bằng hợp ngữ Một số chương trình cụ thể Biến và hằng DB	(define byte): định nghĩa biến kiểu byte DW (define word): định nghĩa biến kiểu từ DD (define double word): định nghĩa biến kiểu từ kép Biến byte: Tên 	DB 	gia_trị_khởi đầu Ví dụ: B1 	DB 	4 B1	DB	? C1	DB	‘$’ C1 	DB	34 MOV AL, B1 LEA BX, B1 MOV AL, [BX] Biến và hằng Biến từ: Tên 	DW 	gia_trị_khởi đầu Ví dụ: W1 	DW 	4 W2	DW	? Biến mảng: M1 DB	4, 5, 6, 7, 8, 9 M2 DB	100 DUP(0) M3 DB	100 DUP(?) M4 DB	4, 3, 2, 2 DUP (1, 2 DUP(5), 6) M4 DB	4, 3, 2, 1, 5, 5, 6, 1, 5, 5, 6 Biến và hằng Biến mảng 2 chiều: M1 DB	1, 6, 3 DB	4, 2, 5 M2 DB	1, 4 DB	6, 2 13000 13001 13002 13003 13004 13005 13006 13007 13008 13009 1300A 4 3 6 1 2 5 M1 1 6 3 4 2 5 DB	3, 5 MOV AL, M1 ; copy 1 vao AL MOV AH, M1[2] MOV BX, 1 MOV SI, 1 MOV CL, M1[BX+SI] MOV AX, Word Ptr M1[BX+SI+2] MOV DL, M1[BX][SI] Biến và hằng Biến kiểu xâu ký tự STR1 DB	‘string’ STR2 DB	73h, 74h, 72h, 69h, 6Eh, 67h STR3 DB	73h, 74h, ‘r’, ‘i’, 6Eh, 67h Hằng có tên Có thể khai báo hằng ở trong chương trình Thường được khai báo ở đoạn dữ liệu Ví dụ: CR 	EQU	0Dh ;CR là carriage return LF	EQU	0Ah ; LF là line feed CHAO	EQU	‘Hello’ MSG	DB 	CHAO, ‘$’ Chương 3 Lập trình hợp ngữ với 8086 Giới thiệu khung của chương trình hợp ngữ Cú pháp của chương trình hợp ngữ Dữ liệu cho chương trình Biến và hằng Khung của một chương trình hợp ngữ Cách tạo và chạy một chương trình hợp ngữ trên máy IBM PC Các cấu trúc lập trình cơ bản thực hiện bằng hợp ngữ Một số chương trình cụ thể Khung của chương trình hợp ngữ Khai báo quy mô sử dụng bộ nhớ .MODEL	Kiểu kích thuớc bộ nhớ Ví dụ: .Model Small Khung của chương trình hợp ngữ Khai báo đoạn ngăn xếp .Stack	kích thuớc (bytes) Ví dụ: .Stack	100 ; khai báo stack có kích thước 100 bytes Giá trị ngầm định 128 bytes Khai báo đoạn dữ liệu: .Data Khai báo các biến và hằng Khai báo đoạn mã .Code Khung của chương trình hợp ngữ Khung của chương trình hợp ngữ để dịch ra file .EXE .Model	Small .Stack	100 .Data 	;các định nghĩa cho biến và hằng .Code MAIN	Proc 	;khới đầu cho DS 	MOV	AX, @data 	MOV	DS, AX 	;các lệnh của chương trình 	;trở về DOS dùng hàm 4CH của INT 21H 	MOV	AH, 4CH 	INT	21H MAIN	Endp 	;các chương trình con nếu có END MAIN Khung của chương trình hợp ngữ Chương trình Hello.EXE .Model	Small .Stack	100 .Data 	CRLF	DB	13,10,’$’ 	MSG	DB	‘Hello! $’ .Code MAIN	Proc 	;khới đầu cho DS 	MOV	AX, @data 	MOV	DS, AX 	;về đầu dòng mới dùng hàm 9 của INT 21H 	MOV	AH,9 	LEA	DX, CRLF 	INT	21H 	;Hiển thị lời chào dùng hàm 9 của INT 21H 	MOV 	AH,9 	LEA	DX, MSG 	INT 	21H 	;về đầu dòng mới dùng hàm 9 của INT 21H 	MOV	AH,9 	LEA	DX, CRLF 	INT	21H 	;trở về DOS dùng hàm 4CH của INT 21H 	MOV	AH, 4CH 	INT	21H MAIN	Endp 	END MAIN Khung của chương trình hợp ngữ Khung của chương trình hợp ngữ để dịch ra file .COM .Model	Tiny .Code 	ORG	100h START: JMP	CONTINUE 	;các định nghĩa cho biến và hằng CONTINUE: MAIN	Proc 	;các lệnh của chương trình 	INT	20H 	;trở về DOS MAIN	Endp 	;các chương trình con nếu có END START Khung của chương trình hợp ngữ 0000H FFFFH Đoạn đầu chương trình Program segment prefix 0100H JMP CONTINUE Dữ liệu CONTINUE: SP IP Chiều tiến của ngăn xếp Chiều tiến của mã và dữ liệu Khung của chương trình hợp ngữ Chương trình Hello.COM .Model	Tiny .Code 	ORG	100H START: JMP CONTINUE 	CRLF	DB	13,10,’$’ 	MSG	DB	‘Hello! $’ CONTINUE: MAIN	Proc 	;về đầu dòng mới dùng hàm 9 của INT 21H 	MOV	AH,9 	LEA	DX, CRLF 	INT	21H 	;Hiển thị lời chào dùng hàm 9 của INT 21H 	MOV 	AH,9 	LEA	DX, MSG 	INT 	21H 	;về đầu dòng mới dùng hàm 9 của INT 21H 	MOV	AH,9 	LEA	DX, CRLF 	INT	21H 	;trở về DOS 	INT	20H MAIN	Endp 	END START Khung của chương trình hợp ngữ PSP PSP 100h chương trình chương trình Stack 100h SS CS DS ES .COM . EXE Chương 3 Lập trình hợp ngữ với 8086 Giới thiệu khung của chương trình hợp ngữ Cách tạo và chạy một chương trình hợp ngữ trên máy IBM PC Các cấu trúc lập trình cơ bản thực hiện bằng hợp ngữ Một số chương trình cụ thể Cách tạo một chương trình hợp ngữ Tạo ra tệp văn bản của chương trình *.asm Dùng MASM để dịch ra mã máy *.obj Dùng LINK để nối tệp . obj thành *.exe Dùng exe2bin để dịch *.exe thành *.com chạy chương trình Dịch được ra .com? không Chương 3 Lập trình hợp ngữ với 8086 Giới thiệu khung của chương trình hợp ngữ Cách tạo và chạy một chương trình hợp ngữ trên máy IBM PC Các cấu trúc lập trình cơ bản thực hiện bằng hợp ngữ Cấu trúc lựa chọn Cấu trúc lặp Một số chương trình cụ thể Cấu trúc lựa chọn If-then If điều_kiện then công_việc Ví dụ: Gán cho BX giá trị tuyệt đối của AX ; If AX0 AM: MOV	CX, -1 JMP	End_case Khong: MOV	CX, 0 JMP	End_case DUONG: MOV	CX, 1 End_case: Nếu AX0 thì CX=1 Cấu trúc lặp FOR-DO For số lần lặp Do công việc MOV CX, 80	;số lần lặp MOV AH,2	;hàm hiển thị MOV DL,’$’	;DL chứa ký tự cần hiển thị HIEN: INT 21H	; Hiển thị LOOP HIEN End_for khởi tạo bộ đếm công việc giảm bộ đếm đi 1 bộ đếm=0? S Đ ví dụ: Hiển thị một dòng ký tự $ trên màn hình Cấu trúc lặp While-DO While điều kiện Do công việc XOR CX, CX	;CX=0 MOV AH,1	;hàm đọc ký tự từ bàn phím TIEP: 	INT 21H	; đọc một ký tự vào AL CMP AL, 13 ; đọc CR? JE End_while	; đúng, thoát INC CX	; sai, thêm 1 ký tự vào tổng JMP TIEP	; đọc tiếp End_while: công việc Điều kiện S Đ ví dụ: đếm số ký tự đọc được từ bàn phím, khi gặp ký tự CR thì thôi Cấu trúc lặp Repeat-until Repeat công việc until điều kiện MOV AH,1	;hàm đọc ký tự từ bàn phím TIEP: 	INT 21H	; đọc một ký tự vào AL CMP AL, 13 ; đọc CR? JNE TIEP	; chưa, đọc tiếp End_: công việc Điều kiện S Đ ví dụ: đọc từ bàn phím cho tới khi gặp ký tự CR thì thôi Chương 3 Lập trình hợp ngữ với 8086 Giới thiệu khung của chương trình hợp ngữ Cách tạo và chạy một chương trình hợp ngữ trên máy IBM PC Các cấu trúc lập trình cơ bản thực hiện bằng hợp ngữ Một số chương trình cụ thể Xuất nhập dữ liệu 2 cách: Dùng lệnh IN, OUT để trao đổi với các thiết bị ngoại vi phức tạp vì phải biết địa chỉ cổng ghép nối thiết bị Các hệ thống khác nhau có địa chỉ khác nhau Dùng các chương trình con phục vụ ngắt của DOS và BIOS đơn giản, dễ sử dụng không phụ thuộc vào hệ thống Ngắt 21h của DOS: Hàm 1: đọc 1 ký tự từ bàn phím Vào: AH=1 Ra: AL=mã ASCII của ký tự, AL=0 khi ký tự là phím chức năng Hàm 2: hiện 1 ký tự lên màn hình Vào: AH=2 	DL=mã ASCII của ký tự cần hiển thị Hàm 9: hiện chuỗi ký tự với $ ở cuối lên màn hình Vào: AH=9 	DX=địa chỉ lệch của chuỗi ký tự cần hiẻn thị Hàm 4CH: kết thúc chương trình loại .exe Vào: AH=4CH Một số chương trình cụ thể Ví dụ 1: Lập chương trình yêu cầu người sử dụng gõ vào một chữ cái thường và hiển thị dạng chữ hoa và mã ASCII dưới dạng nhị phân của chữ cái đó lên màn hình Ví dụ: Hay nhap vao mot chu cai thuong: a Mã ASCII dưới dạng nhị phân của a la: 11000001 Dang chu hoa cua a la: A Giải: Ví dụ 2: Đọc từ bàn phím một số hệ hai (dài nhất là 16 bit), kết quả đọc được để tại thanh ghi BX. Sau đó hiện nội dung thanh ghi BX ra màn hình. Giải: Ví dụ 3: Nhập một dãy số 8 bit ở dạng thập phân, các số cách nhau bằng 1 dấu cách và kết thúc bằng phím Enter. Sắp xếp dãy số theo thứ tự tăng dần và in dãy số đã sắp xếp ra màn hình. Giải: Một số chương trình cụ thể Ví dụ 4: Viết chương trình cho phép nhập vào kích thước M*N và các phần tử của một mảng 2 chiều gồm các số thập phân 8 bit. Tìm số lớn nhất và nhỏ nhất của mảng, in ra màn hình Tính tổng các phần tử của mảng và in ra màn hình Chuyển thành mảng N*M và in mảng mới ra màn hình Giải: Hãy nhập giá trị M= Hãy nhập giá trị N= Nhập phần tử [1,1]= Nhập phần tử [1,2] ...... Số lớn nhất là phần tử [3,4]=15 Số nhỏ nhất là phần tử [1,2]=2 Tổng=256 ... 

File đính kèm:

  • pptBài giảng Kỹ thuật vi xử lý - Chương 3 Lập trình hợp ngữ cho 8086.ppt