Kĩ thuật viễn thông - Lập trình hợp ngữ cho 8086

Giới thiệu chung về hệ vi xử lý

Bộ vi xử lý Intel 8088/8086

Lập trình hợp ngữ cho 8086

Tổ chức vào ra dữ liệu

Ngắt và xử lý ngắt

Truy cập bộ nhớ trực tiếp DMA

Các bộ vi xử lý trên thực tế

 

ppt35 trang | Chia sẻ: Mr Hưng | Lượt xem: 827 | Lượt tải: 0download
Bạn đang xem trước 20 trang nội dung tài liệu Kĩ thuật viễn thông - 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 DOWNLOAD ở trên
Nội dung môn họcGiới thiệu chung về hệ vi xử lýBộ vi xử lý Intel 8088/8086Lập trình hợp ngữ cho 8086Tổ chức vào ra dữ liệuNgắt và xử lý ngắtTruy cập bộ nhớ trực tiếp DMACác bộ vi xử lý trên thực tế1Chương 3 Lập trình hợp ngữ với 8086Giớ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 PCCá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ể2Chương 3 Lập trình hợp ngữ với 8086Giớ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ìnhBiến và hằngKhung 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 PCCá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ể3Chương 3 Lập trình hợp ngữ với 8086Giớ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ìnhBiến và hằngKhung 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 PCCá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ể4Cú 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 ‘$’.CodeMAIN 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 lamLAP: 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 maxTIMMAX: 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 maxTIEP: 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 21HMAIN EndpDOICHO Proc PUSH AX MOV AL, [SI] XCHG AL, [DI] MOV [SI], AL POP AX RETDOICHO Endp END MAINkhai báo kiểu kích thước bộ nhớkhai báo đoạn ngăn xếpkhai báo đoạn dữ liệukhai báo đoạn mã lệnhbắt đầu chương trình chínhkết thúc chương trình chínhbắt đầu chương trình conkết thúc đoạn mãchú thích bắt đầu bằng dấu ;5Cú pháp của chương trình hợp ngữTên Mã lệnh Các toán hạng ; chú giảiChương trình dịch không phân biệt chữ hoa, chữ thườngTrườ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ụngNhãn kết thúc bằng dấu :TWO_WORD?1two-word.@?1wordLet’s_go6Chương 3 Lập trình hợp ngữ với 8086Giớ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ìnhBiến và hằngKhung 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 PCCá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ể7Dữ liệu cho chương trìnhDữ liệu:các số hệ số 2: 0011Bhệ số 10: 1234hệ số 16: 1EF1H, 0ABBAHKý tự, chuỗi ký tự: ‘A’, ‘abcd’8Chương 3 Lập trình hợp ngữ với 8086Giớ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ìnhBiến và hằngKhung 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 PCCá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ể9Biến và hằngDB (define byte): định nghĩa biến kiểu byteDW (define word): định nghĩa biến kiểu từDD (define double word): định nghĩa biến kiểu từ képBiến byte: Tên DB gia_trị_khởi đầuVí dụ: B1 DB 4B1 DB ?C1 DB ‘$’C1 DB 34MOV AL, B1LEA BX, B1MOV AL, [BX]10Biến và hằngBiến từ: Tên DW gia_trị_khởi đầuVí dụ: W1 DW 4W2 DW ?Biến mảng:M1 DB 4, 5, 6, 7, 8, 9M2 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, 6130001300113002130031300413005130061300713008130091300A765489M111Biến và hằngBiến mảng 2 chiều:M1 DB 1, 6, 3 DB 4, 2, 5M2 DB 1, 4 DB 6, 2130001300113002130031300413005130061300713008130091300A436125M1163425DB 3, 5MOV AL, M1 ; copy 1 vao ALMOV AH, M1[2]MOV BX, 1MOV SI, 1MOV CL, M1[BX+SI]MOV AX, Word Ptr M1[BX+SI+2]MOV DL, M1[BX][SI]12Biến và hằngBiến kiểu xâu ký tựSTR1 DB ‘string’STR2 DB 73h, 74h, 72h, 69h, 6Eh, 67hSTR3 DB 73h, 74h, ‘r’, ‘i’, 6Eh, 67hHằng có tênCó thể khai báo hằng ở trong chương trìnhThường được khai báo ở đoạn dữ liệuVí dụ:CR EQU 0Dh ;CR là carriage returnLF EQU 0Ah ; LF là line feedCHAO EQU ‘Hello’MSG DB CHAO, ‘$’13Chương 3 Lập trình hợp ngữ với 8086Giớ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ìnhBiến và hằngKhung 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 PCCá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ể14Khung 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 SmallKiểuMô tảTiny (hẹp)mã lệnh và dữ liệu gói gọn trong một đoạnSmall (nhỏ)mã lệnh nằm trong 1 đoạn, dữ liệu 1 đoạnMedium (tB)mã lệnh nằm trong nhiều đoạn, dữ liệu 1 đoạnCompact (gọn)mã lệnh nằm trong 1 đoạn, dữ liệu trong nhiểu đoạnLarge (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 KHuge (đồ 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 K15Khung 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 bytesGiá trị ngầm định 128 bytesKhai báo đoạn dữ liệu:.DataKhai báo các biến và hằngKhai báo đoạn mã.Code16Khung 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.CodeMAIN 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 21HMAIN Endp ;các chương trình con nếu cóEND MAIN17Khung 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! $’.CodeMAIN 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 21HMAIN Endp END MAIN18Khung 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 100hSTART: JMP CONTINUE ;các định nghĩa cho biến và hằngCONTINUE:MAIN Proc ;các lệnh của chương trình INT 20H ;trở về DOSMAIN Endp ;các chương trình con nếu cóEND START19Khung của chương trình hợp ngữ0000HFFFFHĐoạn đầu chương trìnhProgram segment prefix0100HJMP CONTINUEDữ liệuCONTINUE:SPIPChiều tiến của ngăn xếpChiều tiến của mã và dữ liệu20Khung của chương trình hợp ngữChương trình Hello.COM.Model Tiny.Code ORG 100HSTART: 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 20HMAIN Endp END START21Khung của chương trình hợp ngữPSPPSP100hchương trìnhchương trìnhStack100hSSCSDSES.COM. EXE22Chương 3 Lập trình hợp ngữ với 8086Giớ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 PCCá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ể23Cá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*.asmDùng MASM để dịch ra mã máy*.objDùng LINK để nối tệp . obj thành*.exeDùng exe2bin để dịch *.exe thành*.comchạy chương trìnhDịch được ra .com?không24Chương 3 Lập trình hợp ngữ với 8086Giớ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 PCCá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ọnCấu trúc lặpMột số chương trình cụ thể25Cấu trúc lựa chọn If-thenIf điều_kiện then công_việcVí dụ: Gán cho BX giá trị tuyệt đối của AX; If AX0AM: MOV CX, -1 JMP End_caseKhong: MOV CX, 0 JMP End_caseDUONG: MOV CX, 1End_case:Nếu AX0 thì CX=128Cấu trúc lặp FOR-DOFor số lần lặp Do công việcMOV CX, 80 ;số lần lặpMOV 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_forkhởi tạo bộ đếmcông việcgiảm bộ đếm đi 1bộ đếm=0?SĐví dụ: Hiển thị một dòng ký tự $ trên màn hình29Cấu trúc lặp While-DOWhile điều kiện Do công việcXOR CX, CX ;CX=0MOV AH,1 ;hàm đọc ký tự từ bàn phímTIEP: 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ếpEnd_while:công việcĐiều kiệnSĐví dụ: đếm số ký tự đọc được từ bàn phím, khi gặp ký tự CR thì thôi30Cấu trúc lặp Repeat-untilRepeat công việc until điều kiệnMOV AH,1 ;hàm đọc ký tự từ bàn phímTIEP: INT 21H ; đọc một ký tự vào AL CMP AL, 13 ; đọc CR? JNE TIEP ; chưa, đọc tiếpEnd_:công việcĐiều kiệnSĐví dụ: đọc từ bàn phím cho tới khi gặp ký tự CR thì thôi31Chương 3 Lập trình hợp ngữ với 8086Giớ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 PCCá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ể32Xuất nhập dữ liệu2 cách:Dùng lệnh IN, OUT để trao đổi với các thiết bị ngoại viphứ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 nhauDùng các chương trình con phục vụ ngắt của DOS và BIOSđơn giản, dễ sử dụngkhông phụ thuộc vào hệ thốngNgắt 21h của DOS:Hàm 1: đọc 1 ký tự từ bàn phímVào: AH=1Ra: AL=mã ASCII của ký tự, AL=0 khi ký tự là phím chức năngHàm 2: hiện 1 ký tự lên màn hìnhVà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ìnhVà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 .exeVào: AH=4CH 33Mộ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ìnhVí dụ:Hay nhap vao mot chu cai thuong: aMã ASCII dưới dạng nhị phân của a la: 11000001Dang chu hoa cua a la: AGiả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:34Mộ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ìnhTính tổng các phần tử của mảng và in ra màn hìnhChuyển thành mảng N*M và in mảng mới ra màn hìnhGiả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]=15Số nhỏ nhất là phần tử [1,2]=2Tổng=256...35

Các file đính kèm theo tài liệu này:

  • pptmicroprocessor_final_ver1_part3_6636.ppt