Orcad-1
Chia sẻ bởi Vũ Bá Mừng |
Ngày 18/03/2024 |
10
Chia sẻ tài liệu: orcad-1 thuộc Nghệ thuật
Nội dung tài liệu:
1/Chapter3
Nội dung môn học
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ế
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ể
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ể
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ể
5/Chapter3
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
LEA 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
khai báo kiểu kích thước bộ nhớ
khai báo đoạn ngăn xếp
khai báo đoạn dữ liệu
khai báo đoạn mã lệnh
bắt đầu chương trình chính
kết thúc chương trình chính
bắt đầu chương trình con
kết thúc đoạn mã
chú thích bắt đầu
bằng dấu ;
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 :
Ví dụ:
TWO_WORD
?1
two-word
.@?
1word
Let’s_go
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ể
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”
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ể
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
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
11/Chapter3
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
13000
13001
13002
13003
13004
13005
13006
13007
13008
13009
1300A
7
6
5
4
8
9
M1
12/Chapter3
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
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, ‘$’
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ể
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
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 1 KB
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
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
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
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
Chỉ có 1 đoạn cho Code,Data,Stack
Trở về DOS bằng INT 20H
.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
20/Chapter3
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
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
22/Chapter3
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
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ể
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
Dùng exe2bin để dịch *.exe thành
*.com
chạy chương trình
Dịch được ra .com?
không
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ể
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
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
; if AXCMP AX, BX ; AXJL Then_ ; đúng, CX=0
;else
MOV CX, 1 ; sai, CX=1
JMP End_if
Then_: MOV CX, 0;
End_if:
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
Ví dụ:
CMP AX, 0 ;
JL AM ; AX<0
JE Khong ; AX=0
JG DUONG; AX>1
AM: MOV CX, -1
JMP End_case
Khong: MOV CX, 0
JMP End_case
DUONG: MOV CX, 1
End_case:
Nếu AX<0 thì cx=-1
Nếu AX=0 thì CX=0
Nếu AX>0 thì CX=1
29/Chapter3
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
30/Chapter3
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
31/Chapter3
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
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ể
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
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
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.
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.
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
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
...
Nội dung môn học
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ế
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ể
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ể
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ể
5/Chapter3
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
LEA 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
khai báo kiểu kích thước bộ nhớ
khai báo đoạn ngăn xếp
khai báo đoạn dữ liệu
khai báo đoạn mã lệnh
bắt đầu chương trình chính
kết thúc chương trình chính
bắt đầu chương trình con
kết thúc đoạn mã
chú thích bắt đầu
bằng dấu ;
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 :
Ví dụ:
TWO_WORD
?1
two-word
.@?
1word
Let’s_go
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ể
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”
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ể
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
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
11/Chapter3
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
13000
13001
13002
13003
13004
13005
13006
13007
13008
13009
1300A
7
6
5
4
8
9
M1
12/Chapter3
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
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, ‘$’
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ể
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
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 1 KB
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
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
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
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
Chỉ có 1 đoạn cho Code,Data,Stack
Trở về DOS bằng INT 20H
.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
20/Chapter3
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
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
22/Chapter3
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
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ể
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
Dùng exe2bin để dịch *.exe thành
*.com
chạy chương trình
Dịch được ra .com?
không
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ể
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
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
; if AX
;else
MOV CX, 1 ; sai, CX=1
JMP End_if
Then_: MOV CX, 0;
End_if:
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
Ví dụ:
CMP AX, 0 ;
JL AM ; AX<0
JE Khong ; AX=0
JG DUONG; AX>1
AM: MOV CX, -1
JMP End_case
Khong: MOV CX, 0
JMP End_case
DUONG: MOV CX, 1
End_case:
Nếu AX<0 thì cx=-1
Nếu AX=0 thì CX=0
Nếu AX>0 thì CX=1
29/Chapter3
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
30/Chapter3
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
31/Chapter3
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
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ể
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
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
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.
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.
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
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
...
* Một số tài liệu cũ có thể bị lỗi font khi hiển thị do dùng bộ mã không phải Unikey ...
Người chia sẻ: Vũ Bá Mừng
Dung lượng: |
Lượt tài: 0
Loại file:
Nguồn : Chưa rõ
(Tài liệu chưa được thẩm định)