Bài giảng Kỹ thuật vi xử lý (Microprocessors) - Chương 3 Lập trình hợp ngữ với 8086
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Kỹ thuật vi xử lý (Microprocessors) - Chương 3 Lập trình hợp ngữ với 8086", để 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_ky_thuat_vi_xu_ly_microprocessors_chuong_3_lap_tri.ppt
Nội dung text: Bài giảng Kỹ thuật vi xử lý (Microprocessors) - Chương 3 Lập trình hợp ngữ với 8086
- © DHBK 2005 1/Chapter3 Nội dung môn học 1. Giới thiệu chung về hệ vi xử lý 2. Bộ vi xử lý Intel 8088/8086 3. Lập trình hợp ngữ cho 8086 4. Tổ chức vào ra dữ liệu 5. Ngắt và xử lý ngắt 6. Truy cập bộ nhớ trực tiếp DMA 7. Các bộ vi xử lý trên thực tế
- © DHBK 2005 2/Chapter3 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ể
- © DHBK 2005 3/Chapter3 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ể
- © DHBK 2005 4/Chapter3 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ể
- © DHBK 2005 5/Chapter3 Cú pháp của chương trình hợp ngữ 1. .Model Small khai báo kiểu kích thước bộ nhớ 2. .Stack 100 khai báo đoạn ngăn xếp 3. .Data 4. Tbao DB ‘Chuoi da sap xep:’, 10, 13 5. MGB DB ‘a’, ‘Y’, ‘G’, ‘T’, ‘y’, ‘Z’, ‘U’, ‘B’, ‘D’, ‘E’, khai báo đoạn dữ liệu 6. DB ‘$’ 7. .Code 8. MAIN Proc khai báo đoạn mã lệnh 9. MOV AX, @Data ;khoi dau DS 10. MOV DS, AX 11. MOV BX, 10 ;BX: so phan tu cua mang bắt đầu chương trình chính 12. LEA DX, MGB ;DX chi vao dau mang byte 13. DEC BX ;so vong so sanh phai lam 14. LAP: MOV SI, DX ; SI chi vao dau mang 15. MOV CX, BX ; CX so lan so cua vong so 16. MOV DI, SI ;gia su ptu dau la max 17. MOV AL, [DI] ;AL chua phan tu max 18. TIMMAX: chú thích bắt đầu 19. INC SI ;chi vao phan tu ben canh 20. CMP [SI], AL ; phan tu moi > max? bằng dấu ; 21. JNG TIEP ;khong, tim max 22. MOV DI, SI ; dung, DI chi vao max 23. MOV AL, [DI] ;AL chua phan tu max 24. TIEP: LOOP TIMMAX ;tim max cua mot vong so 25. CALL DOICHO ;doi cho max voi so moi 26. DEC BX ;so vong so con lai 27. JNZ LAP ;lam tiep vong so moi 28. MOV AH, 9 ; hien thi chuoi da sap xep 29. MOV DX, Tbao 30. INT 21H 31. MOV AH, 4CH ;ve DOS 32. INT 21H 33. MAIN Endp 34. DOICHO Proc 35. PUSH AX kết thúc chương trình chính 36. MOV AL, [SI] 37. XCHG AL, [DI] 38. MOV [SI], AL 39. POP AX bắt đầu chương trình con 40. RET 41. DOICHO Endp 42. END MAIN kết thúc đoạn mã
- © DHBK 2005 6/Chapter3 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
- © DHBK 2005 7/Chapter3 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ể
- © DHBK 2005 8/Chapter3 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’
- © DHBK 2005 9/Chapter3 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ể
- © DHBK 2005 10/Chapter3 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ụ: MOV AL, B1 B1 DB 4 B1 DB ? LEA BX, B1 C1 DB ‘$’ MOV AL, [BX] C1 DB 34
- © DHBK 2005 11/Chapter3 Biến và hằng • Biến từ: ❑ Tên DW gia_trị_khởi đầu 1300A ❑ Ví dụ: 13009 13008 9 W1 DW 4 13007 8 W2 DW ? 13006 7 • Biến mảng: 13005 6 ❑ M1 DB 4, 5, 6, 7, 8, 9 13004 5 13003 4 M1 13002 ❑ M2 DB 100 DUP(0) 13001 ❑ M3 DB 100 DUP(?) 13000 ❑ 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
- © DHBK 2005 12/Chapter3 Biến và hằng • Biến mảng 2 chiều: 1300A 1 6 3 13009 4 2 5 13008 5 13007 2 13006 4 13005 ❑ M1 DB 1, 6, 3 3 13004 6 DB 4, 2, 5 13003 1 M1 13002 13001 13000 ❑ M2 DB 1, 4 DB 6, 2 MOV AL, M1 ; copy 1 vao AL MOV AH, M1[2] DB 3, 5 MOV BX, 1 MOV SI, 1 MOV CL, M1[BX+SI] MOV AX, Word Ptr M1[BX+SI+2] MOV DL, M1[BX][SI]
- © DHBK 2005 13/Chapter3 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, ‘$’
- © DHBK 2005 14/Chapter3 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ể
- © DHBK 2005 15/Chapter3 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 Kiểu Mô tả Tiny (hẹp) mã lệnh và dữ liệu gói gọn trong một đoạn Small (nhỏ) mã lệnh nằm trong 1 đoạn, dữ liệu 1 đoạn Medium (tB) mã lệnh nằm trong nhiều đoạn, dữ liệu 1 đoạn Compact (gọn) mã lệnh nằm trong 1 đoạn, dữ liệu trong nhiểu đoạn Large (lớn) mã lệnh nằm trong nhiều đoạn, dữ liệu trong nhiều đoạn, không có mảng nào lớn hơn 64 K Huge (đồ sộ) mã lệnh nằm trong nhiều đoạn, dữ liệu trong nhiều đoạn, các mảng có thể lớn hơn 64 K
- © DHBK 2005 16/Chapter3 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
- © DHBK 2005 17/Chapter3 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
- © DHBK 2005 18/Chapter3 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
- © DHBK 2005 19/Chapter3 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
- © DHBK 2005 20/Chapter3 Khung của chương trình hợp ngữ FFFFH SP Chiều tiến của ngăn xếp Chiều tiến của mã và dữ liệu CONTINUE: Dữ liệu 0100H JMP CONTINUE IP Đoạn đầu chương trình 0000H Program segment prefix
- © DHBK 2005 21/Chapter3 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
- © DHBK 2005 22/Chapter3 Khung của chương trình hợp ngữ Stack SS chương trình chương trình CS DS 100h ES 100h PSP PSP .COM . EXE
- © DHBK 2005 23/Chapter3 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ể
- © DHBK 2005 24/Chapter3 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 không Dịch được ra .com? Dùng exe2bin để dịch *.exe thành *.com chạy chương trình
- © DHBK 2005 25/Chapter3 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ể
- © DHBK 2005 26/Chapter3 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 AX<0 CMP AX, 0 ; AX<0 ? JNL End_if ; không, thoát ra ; then NEG AX ; đúng, đảo dấu End_if: MOV BX, AX ;gán
- © DHBK 2005 27/Chapter3 Cấu trúc lựa chọn If-then-else • If điều_kiện then công_việc1 else công_việc2 • Ví dụ: if AX<BX then CX=0 else CX=1 ; if AX<BX CMP AX, BX ; AX<BX ? JL Then_ ; đúng, CX=0 ;else MOV CX, 1 ; sai, CX=1 JMP End_if Then_: MOV CX, 0; End_if:
- © DHBK 2005 28/Chapter3 Cấu trúc lựa chọn case • Case Biểu thức Giá trị 1: công việc 1 Giá trị 2: công việc 2 Giá trị N: công việc N END CASE CMP AX, 0 ; • Ví dụ: JL AM ; AX 0 Nếu AX=0 thì CX=0 AM: MOV CX, -1 Nếu AX>0 thì CX=1 JMP End_case Khong: MOV CX, 0 JMP End_case DUONG: MOV CX, 1 End_case:
- © DHBK 2005 29/Chapter3 Cấu trúc lặp FOR-DO • For số lần lặp Do công việc khởi tạo bộ đếm ví dụ: Hiển thị một dòng ký tự $ trên màn hình công việc MOV CX, 80 ;số lần lặp MOV AH,2 ;hàm hiển thị giảm bộ đếm đi 1 MOV DL,’$’;DL chứa ký tự cần hiển thị HIEN: INT 21H ; Hiển thị LOOP HIEN End_for S bộ đếm=0? Đ
- © DHBK 2005 30/Chapter3 Cấu trúc lặp While-DO • While điều kiện Do công việc ví dụ: đếm số ký tự đọc được từ bàn phím, S khi gặp ký tự CR thì thôi Điều kiện 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? công việc 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:
- © DHBK 2005 31/Chapter3 Cấu trúc lặp Repeat-until • Repeat công việc until điều kiện ví dụ: đọc từ bàn phím cho tới khi gặp ký tự CR thì thôi công việc 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? Điều kiện JNE TIEP ; chưa, đọc tiếp End_: Đ S
- © DHBK 2005 32/Chapter3 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ể
- © DHBK 2005 33/Chapter3 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
- © DHBK 2005 34/Chapter3 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:
- © DHBK 2005 35/Chapter3 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 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] ❑ Giải: 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