SlideShare a Scribd company logo
3
Most read
5
Most read
6
Most read
HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG
LẬP TRÌNH HỆ THỐNG
VÀ ĐIỀU KHIỂN THIẾT BỊ
(Dùng cho sinh viên hệ đào tạo đại học từ xa)
Lưu hành nội bộ
HÀ NỘI - 2006
HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG
LẬP TRÌNH HỆ THỐNG
VÀ ĐIỀU KHIỂN THIẾT BỊ
Biên soạn : THS. PHẠM VĂN CƯỜNG
LỜI NÓI ĐẦU
Cuốn giáo trình Lập trình hợp ngữ và điều khiển thiết bị được chia thành 4 chương. Mỗi
chương bao gồm các nội dung cơ bản, tóm tắt chương, các câu hỏi và bài tập cho mỗi chương.
Chương 1: trình bày về vấn đề liên quan đến bộ vi xử lý 8088 : kiến trúc, chức năng các
thành phần và tập lệnh. Ngoài ra, 1 trong các ngắt được sử dụng phổ biến trong lập trình hệ
thống- ngắt 21h của hệ điều hành DOS cũng được giới thiệu trong chương này.
Chương 2: trình bày về các vấn đề liên quan đến lập trình hợp ngữ: cách thức viết và thực
hiện một chương trình, cách thức cài đặt các cấu trúc lập trình trong hợp ngữ và các vấn đề liên
quan đến chương trình con và macro.
Chương 3: giới thiệu về công cụ gỡ rối debug, chương trình mô phỏng Emu 8086. Liên
kết chương trình viết bằng hợp ngữ với chương trình được viết bằng các ngôn ngữ bậc cao như C
và Pascal cũng được đề cập ở chương này. Ngoài ra, chương này cò giới thiệu về một số ngắt của
BIOS phục vụ thiết bị ngoại vi, chương trình thường trú và chương trình con ngắt.
Chương 4: Trình bày về lập trình phối ghép: lập trình modem, bàn phím và màn hình. Đồng
thời chương này cũng giới thiệu về một môi trường RadASM để phát triển các ứng dụng viết
bằng hợp ngữ trên Windows.
Do thời gian có hạn và kinh nghiệm còn hạn chế, cuốn giáo trình sẽ không tránh khỏi các
sai sót. Tác giả biên soạn rất mong nhận được ý kiến đóng góp từ các độc giả.
Mọi ý kiến góp ý xin gửi về email : pcuongcntt@yahoo.com
Xin chân thành cảm ơn!
Hà Nội, tháng 11/2006
Tác giả
Đề tài giáo trình: Lập trình hệ thống và điều khiển thiết bị từ xa
Chương 1: Giới thiệu
3
CHƯƠNG 1: GIỚI THIỆU
1.1 CẤU TRÚC BỘ VI XỬ LÝ
Phần này trình bày kiến trúc bên trong của bộ Vi xử lý 8088 và bộ Vi xử lý Pentium IV
1.1.1 Sơ đồ kiến trúc bộ Vi xử lý 8088
Bộ vi xử lý 8088 được chia làm 2 khối chính: Khối giao diện bus (BIU) và khối thực hiện
lệnh (EU).
Các thành phần bên trong của CPU giao tiếp với nhau thông qua các bus trong. Giữa khối
giao diện bus và khối thực hiện lệnh được liên hệ với nhau thông qua hàng đợi dữ liệu và hệ thống
bus trong.
Hình 1.1: Kiến trúc bên trong của bộ Vi xử lý 8088
Chương 1: Giới thiệu
4
1.1.2 Chức năng các thành phần
1. Thành phần điều khiển Bus (Bus Control Logic)
Điều khiển các loại tín hiệu trên các bus bao gồm: các tín hiệu trên bus địa chỉ (20 bit), các
tín hiệu trên bus dữ liệu (8 bit) và các tín hiệu trên bus điều khiển. Ngoài ra, thành phần này còn
làm nhiệm vụ hỗ trợ giao tiếp giữa hệ thống bus trong và bus ngoài. Hệ thống bus ngoài là hệ
thống bus kết nối giữa các thành phần của hệ vi xử lý với nhau: CPU, Bộ nhớ trong và Thiết bị
vào/ra.
2. Hàng đợi lệnh (Prefetch Queue)
Chứa mã lệnh chờ được xử lý. Hàng đợi lệnh có kích thước 4 byte đối với 8088 và 6 byte
đối với 8086. Sở dĩ có điều này là vì hàng đợi lệnh phải có kích thước có thể chứa được ít nhất
một lệnh có độ dài bất kỳ (dài nhất) của bộ vi xử lý. Mà tập lệnh của 8086 chứa các lệnh có độ dài
từ 1-6 byte.
Hàng đợi lệnh làm việc theo cơ chế FIFO (First In First Out), nghĩa là lệnh nào được đưa
vào hàng đợi lệnh trước sẽ được xử lý trước
3. Khối điều khiển (Control Unit)
Khối điều khiển có hai chức năng chính: giải mã lệnh và tạo xung điều khiển . Đầu vào của
khối điều khiển là mã lệnh được đọc từ hàng đợi lệnh và đầu ra là các xung điều khiển gửi đến
các bộ phận khác nhau bên trong bộ vi xử lý. Quá trình này được thực hiện nhờ hai mạch giải mã
lệnh và mạch tạo xung.
4. Khối số học và logic (Arithmetic Logic Unit)
Khối số học và logic có chức năng thực hiện các phép tính toán như phép cộng, trừ… hay
các phép logic như AND, OR, NOT. Đầu vào ALU là hai thanh ghi tạm thời chứa dữ liệu của cho
phép tính được lấy từ bus dữ liệu. Kết quả đầu ra của ALU được đưa trở lại bus dữ liệu và phản
ánh vào thanh ghi cờ (flag register).
5. Các thanh ghi đoạn (Segment registers)
Ta hãy thử xem đoạn chương trình được viết bằng ngôn ngữ C sau:
int Cong(int a, int b)
{
Return (a+b);
}
void main()
{
int x=3; int y=4;
printf(“Tong: %d”, Cong(x,y));
}
Trong chương trình trên có 2 phần: phần khai báo và phần lệnh của chương trình. Trong
phần lệnh có thể có lời gọi chương trình con.
Như vậy để thực hiện được một chương trình (dạng .EXE) thì người ta cần ít nhất 3 đoạn bộ
nhớ (segment). Đoạn dành chứa dữ liệu được khai báo, đoạn chứa mã chương trình, đoạn ngăn
Chương 1: Giới thiệu
5
xếp phục vụ cho các lời gọi chương trình con. Mỗi đoạn có kích thước 64KB. Khi chương trình
được thực hiện, mỗi đoạn bộ nhớ này được trỏ bởi các thanh ghi đoạn. Đó là:
- Thanh ghi đoạn mã CS (Code Segment): trỏ đến đoạn bộ nhớ chứa mã của chương
trình.
- Thanh ghi đoạn dữ liệu DS (Data Segment): trỏ đến đoạn bộ nhớ chứa các khai báo
của chương trình.
- Thanh ghi đoạn ngăn xếp SS (Stack Segment): trỏ đến đoạn bộ nhớ dành cho stack.
- Ngoài ra, trong nhiều trường hợp người ta sử dụng thêm một đoạn dữ liệu phụ dùng
trong trường hợp các dữ liệu cần khai báo vượt quá kích thước cho phép của 1 đoạn
(các khai báo mảng, file…). Khi đó thanh ghi đoạn dữ liệu phụ ES (Extra Segment) sẽ
trỏ đến đoạn này
6. Các thanh ghi con trỏ và chỉ số (pointers and index registers)
Các thanh ghi con trỏ và chỉ số là các thanh ghi 16 bit. Chúng thường được lưu địa chỉ lệch
(offset) và kết hợp với thanh ghi đoạn tương ứng tạo thành cặp thanh ghi chứa địa chỉ xác định
của mã lệnh, mục dữ liệu, hoặc mục dữ liệu lưu trong stack. Nhờ vào cặp thanh ghi này, người ta
có thể tính đia chỉ vật lý cụ thể theo công thức sau:
Địa chỉ vật lý = địa chỉ đoạn * 16 + địa chỉ lệch
Dưới đây là các thanh ghi con trỏ và chỉ số:
- Thanh ghi con trỏ lệnh IP (Instruction Pointer): trỏ vào lệnh kế tiếp sẽ được thực hiện
nằm trong đoạn mã do con trỏ CS trỏ tới. Địa chỉ đầy đủ của lệnh là CS:IP.
- Thanh ghi con trỏ cơ sở BP (Base Pointer): trỏ vào một mục dữ liệu nằm trong đoạn
ngăn xếp SS. Địa chỉ đầy đủ của mục dữ liệu là CS:IP.
- Thanh ghi con trỏ ngăn xếp SP (Stack Pointer): trỏ vào đỉnh hiện thời ngăn xếp nằm
trong đoạn ngăn xếp SS. Địa chỉ đầy đủ của đỉnh ngăn xếp là SS:SP.
- Thanh ghi chỉ số nguồn SI (Source Index): trỏ vào một mục dữ liệu trong đoạn DS.
Địa chỉ đầy đủ của mục dữ liệu là DS:SI.
- Thanh ghi chỉ số đích DI (Destination Index): trỏ vào một mục dữ liệu trong đoạn
DS. Địa chỉ đầy đủ của mục dữ liệu là DS:DI.
7. Các thanh ghi đa năng (Multi-purposed registers)
Bộ xử lý 8088 có 4 thanh ghi đa năng 16 bit đó là: AX, BX, CX và DX. Các thanh ghi này
cũng có thể được tách ra thành 2 nửa gồm 8 bít cao (nửa cao) gồm bít thứ 8 đến bít thứ 15 và 8
bít thấp (nửa thấp) gồm các bít thứ 0 đến 7. Các nửa thanh ghi này có thể được sử dụng một cách
độc lập để chứa các dữ liệu 8 bít. Đó là các nửa thanh ghi: AH và AL, BH và BL, CH và CL, và
DH và DL. Trong đó AH, BH, CH, DH la các nửa cao còn AL,BL, CL, DL là các nửa thấp.
Ngoài chức năng “đa năng”, mỗi thanh ghi 16 bít thường được sử dụng trong các tác vụ đặc
biệt, giống như tên của chúng:
- AX (Accumulator) thanh chứa: các kết quả của các phép toán thường được lưu vào
thanh ghi này. Ngoài ra, AX còn là toán hạng ẩn cho 1 số phép toán như nhân (AX là
thừa số) hoặc chia (AX là số bị chia).
Chương 1: Giới thiệu
6
- BX (Base) thanh ghi cơ sở: thường được dùng để chứa các địa chỉ cơ sở.
- CX (Count) bộ đếm: CX thường dung để chứa số lần lặp trong trường hợp dùng lệnh
LOOP. Ngoài ra, CL còn chứa số lần dịch chuyển, quay trái, quay phải của các toán
hạng.
- DX (Data) thanh ghi dữ liệu: DX thường được chứa địa chỉ offset của xâu kí tự khi có
các thao tác nhập vào xâu hoặc in xâu. DX (cùng với AX) còn tham gia chứa kết quả
của phép nhân các số 16 bit hoặc làm số bị chia cho phép chia các số 16 bit. Ngoài ra,
DX còn dùng để chứa địa chỉ của các cổng vào/ra trong trường hợp thực hiện các lệnh
IN hoặc OUT.
8. Thanh ghi cờ (flag register)
Thanh ghi cờ là thanh ghi lưu trữ trạng thái của CPU tại mỗi thời điểm. Thanh ghi cờ có 16
bít, trong đó có 7 bít dự trữ cho tương lai (CPU 8088 chưa dùng đến các bít này). Còn lại 9 bít và
mỗi bít tương ứng là một cờ. Kết hợp các lệnh nhảy có điều kiện (conditional jump) với các cờ
này, người lập trình dễ dàng hơn
Hình 1.2: Cấu trúc của thanh ghi cờ của CPU 8088.
Các bit được đánh dấu x là các cờ chưa được dùng đến.
- Cờ CF (Carry Flag): cờ nhớ CF=1 khi có nhớ hoặc trừ có mượn từ bít có trọng số cao
nhất (Most Significant Bit). Ngoài ra, cờ CF=1 trong trường hợp khi thao tác với file
hoặc thư mục gây ra lỗi như các lỗi tạo, xóa file và thư mục.
- Cờ PF (Parity Flag): cờ chẵn lẻ PF=1 khi tổng số các bít bằng 1 trong kết quả của
phép tính là một số chẵn.
- Cờ AF (Auxiliary Carry Flag): cờ nhớ phụ AF =1 khi có nhớ từ bít thứ 4 sang bít thứ
5 hoặc có mượn từ bít 5 sang bít thứ 4 trong biểu diễn BCD của 1 số.
- Cờ ZF (Zero Flag): cờ Zero ZF=1 khi kết quả tính toán bằng 0.
- Cờ SF (Sign Flag): cờ dấu SF=1 khi kết quả tính toán là một số âm.
- Cờ TF (Trap Flag): cờ bẫy TF=1 khi CPU đang làm việc ở chế độ chạy từng lệnh. Chế
độ này được sử dụng cần thiết khi tìm lỗi (defect) và gỡ lỗi (debug) chương trình.
- Cờ IF (Interrupt enable Flag): cờ cho phép ngắt IF=1, cho phép tác động đến yêu cầu
ngắt che được (maskable interrupts).
- Cờ DF (Direction Flag): cờ hướng DF=1 khi CPU xử lý chuỗi kí tự theo thứ tự từ phải
sang trái.
- Cờ OF (Overflow Flag): cờ tràn OF=1 khi kết quả là một số bù hai vượt ra ngoài giới
hạn biểu diễn dành cho nó.
9. Hệ thống bus trong (Internal bus system)
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
x x x x OF DF IF TF SF ZF x AF x PF x CF
Chương 1: Giới thiệu
7
Hệ thống bus bên trong của CPU 8088 bao gồm 3 loại:
- Bus dữ liệu: 16 bít, cho phép di chuyển 2 byte dữ liệu tại một thời điểm
- Bus địa chỉ: 20 bít, có thể địa chỉ hóa được 220
bytes và vì thế không gian địa chỉ nhớ
của CPU 8088 là 1MB.
- Bus điều khiển: truyền tải các tín hiệu điều khiển như RD, WR …
1.2 MỘT SỐ CHỨC NĂNG CỦA NGẮT 21H
Phần này trình bày các hàm thông dụng của ngắt 21h. Đó là các hàm thao tác vào/ra đối với
kí tự, chuỗi ký tự, file, thư mục, kết thúc chương trình và trả lại quyền điều khiển cho Hệ điều
hành DOS.
Hàm 01: đọc 1 kí tự (có hiện) từ bàn phím
Input: AH=01
Output: AL= mã ASCII của ký tự
AL=0 nếu gõ vào phím chức năng.
Hàm 02: hiện 1 kí tự lên màn hình
Input: AH=02
DL= mã ASCII của ký tự cần hiển thị
Output:
Hàm 08: đọc 1 kí tự (không hiện) từ bàn phím
Input: AH=08
Output: AL= mã ASCII của ký tự
AL=0 nếu gõ vào phím chức năng.
Hàm 09: hiện xâu kí tự kết thúc bởi ‘$’ lên màn hình
Input: AH = 09
DX = địa chỉ offset của xâu kí tự
Hàm 0Ah: đọc xâu kí tự từ bàn phím
Input: AH = 09
DX = địa chỉ offset của vùng đệm chứa xâu kí tự
Output:DX = địa chỉ offset của xâu kí tự
Hàm 39h: tạo thư mục
Input: AH = 39h
DX = địa chỉ offset của tên thư mục
Output:
Nếu thành công, thư mục được tạo ra
Nếu không thành công, CF=1 và AX= mã lỗi.
Hàm 3Ah: xóa thư mục
Input: AH = 3Ah
DX = địa chỉ offset của tên thư mục
Chương 1: Giới thiệu
8
Output:
Nếu thành công, thư mục được xóa
Nếu không thành công, CF=1 và AX=mã lỗi.
Hàm 3Ch: tạo file
Input: AH = 3Ch
DX = địa chỉ offset của tên file
CX = thuộc tính file
Output:
Nếu thành công, file được tạo ra, CF=0 và AX= thẻ file (file handle)
Nếu không thành công, CF=1 và AX= mã lỗi.
Thuộc tính file được định nghĩa như sau:
00h: file bình thường (plain old file)
01h: file chỉ đọc (Read Only)
02h: file ẩn (Hidden from searches)
04h: file hệ thống (system)
08h: thuộc tính cho nhãn đĩa.
10h: thuộc tính cho thư mục con.
Hàm 3Dh: mở file
Input: AH = 3Dh
AL = mode
Output:
Nếu thành công, file được tạo ra, CF=0 và AX= thẻ file (file handle)
Nếu không thành công, CF=1 và AX= mã lỗi.
Hàm 3Eh: đóng file
Input: AH = 3Eh
BX = thẻ file
Output:
Nếu thành công, file được đóng lại và CF=0
Nếu không thành công, CF=1 và AX= mã lỗi.
Hàm 3Fh: đọc từ file
Input: AH = 3Fh
DS:DX = địa chỉ offset của vùng đệm
CX = số byte cần đọc
BX = thẻ file
Output:
Nếu thành công, CF=0 và AX= số byte đã đọc được
Nếu không thành công, CF=1 và AX= mã lỗi.
Chương 1: Giới thiệu
9
Hàm 40h: ghi vào file
Input: AH = 40h
DS:DX = địa chỉ offset của vùng đệm
CX = số byte cần ghi
BX = thẻ file
Output:
Nếu thành công, file được ghi và CF=0.
Nếu không thành công, CF=1 và AX= mã lỗi.
Hàm 41h: xóa file
Input: AH = 41h
DX = địa chỉ offset của tên file
Output:
Nếu thành công, file bị xóa
Nếu không thành công, CF=1 và AX=mã lỗi.
Hàm 4Ch: kết thúc chương trình
Input: AH = 4Ch
Output:
Kết thúc chương trình, trả lại quyền điều khiển cho hệ điều hành.
1.3 GIỚI THIỆU VỀ TẬP LỆNH CỦA 8088
Phần này giới thiệu về một số lệnh thông dụng của bộ vi xử lý 8088. Để tiện dụng cho
người học lập trình, các lệnh được chia thành các nhóm lệnh.
1.3.1 Nhóm lệnh di chuyển dữ liệu
1. Lệnh: MOV
Chức năng: chuyển giá trị từ toán hạng nguồn vào toán hạng đích
Cú pháp:
MOV Dst,src Ví dụ
Reg1,reg2 Mov AX,BX
Reg, data Mov AH,9Fh
Mem,reg Mov [BX],AL
Reg,mem
Mem,data
Mov CL,[3456h]
Mov PTR [BX], FFh
Chú ý: Data chỉ nằm ở phía toán hạng nguồn
Hai toán hạng dst và src không thể đồng thời là hai ô nhớ.
2. Lệnh: PUSH
Chức năng: chuyển giá trị của toán hạng nguồn vào đỉnh ngăn xếp
Chương 1: Giới thiệu
10
Cú pháp:
PUSH Src Ví dụ
Reg16 push AX
Mem16 push x
Segreg push DS
Chú ý: Toán hạng nguồn luôn có kích thước 16 bít
Toán hạng nguồn không thể là data (hằng số)
3. Lệnh: POP
Chức năng: Lấy giá trị của đỉnh ngăn xếp đưa vào toán hạng đích
Cú pháp:
POP Dst Ví dụ
Reg16 Pop AX
Mem16 Pop x
Segreg Pop DS
Chú ý: Toán hạng nguồn luôn có kích thước 16 bít
Toán hạng đích không thể là data (hằng số)
4. Lệnh: PUSHF
Chức năng: chuyển giá trị của thanh ghi cờ vào đỉnh ngăn xếp
Cú pháp:
PUSHF
5. Lệnh: POPF
Chức năng: lấy giá trị đỉnh ngăn xếp lưu vào thanh ghi cờ.
Cú pháp:
POPF
Chú ý: hai lệnh PUSHF và POPF được hệ thống tự động gọi khi chương trình có lệnh gọi
ngắt hoặc gọi chương trình con.
6. Lệnh: XCHG
Chức năng: Hoán vị giá trị giữa toán hạng nguồn và đích
Chương 1: Giới thiệu
11
Cú pháp:
XCHG Dst,src Ví dụ
Reg,Reg XCHG AX,BX
Reg,Mem XCHG AL,[BX]
Mem,Reg XCHG [BX],AH
7. Lệnh: IN
Chức năng: Đọc giá trị từ 1 cổng vào thanh ghi AL hoặc AX.
Cú pháp:
IN AL, địa chỉ cổng (8 bít) VD: IN AL,2Eh
IN AX, địa chỉ cổng (16 bít) VD: IN AX,2EBEh
8. Lệnh: OUT
Chức năng: Chuyển giá trị 1 byte hoặc 1 từ từ thanh ghi AL hoặc AX ra cổng.
Cú pháp:
OUT địa chỉ cổng (8 bít), AL VD: OUT 2Eh,AL
IN địa chỉ cổng (16 bít),AX VD: OUT 2EBEh,AX
1.3.2 Nhóm các lệnh tính toán số học
Phần này giới thiệu về các lệnh lien quan đến tính toán số học như các lệnh: cộng, trừ, nhân,
chia, so sánh. Đồng thời, cũng giải thích sự tác động của các lệnh này lên các bit của thanh ghi cờ.
1. Lệnh: ADD
Chức năng: cộng toán hạng nguồn và toán hạng đích, lưu kết quả vào toán hạng đích.
Cú pháp:
ADD Dst,src Ví dụ
Reg1,reg2 Add AX,BX
Reg, data Add AH,19h
Mem,reg Add [BX],AL
Reg,mem
Mem,data
Add CL,[3456h]
Add [BX], 1Fh
Chú ý:
- Không cộng trực tiếp 2 biến ô nhớ với nhau
- Toán hạng đích không thể là hằng số
- Kết quả có thể tác động đến các cờ: OF, SF, ZF, AF, PF, CF.
Chương 1: Giới thiệu
12
2. Lệnh: INC
Chức năng: Tăng giá trị của toán hạng đích lên 1.
Cú pháp:
INC Dst Ví dụ
Reg Inc CX
Mem Inc x
Chú ý:
- Toán hạng đích không thể là hằng số
- Kết quả có thể tác động đến các cờ: OF, SF, ZF, AF, PF, CF.
3. Lệnh: SUB
Chức năng: Trừ toán hạng đích cho toán hạng nguồn, lưu kết quả vào toán hạng đích.
Cú pháp:
SUB Dst,src Ví dụ
Reg1,reg2 Sub AX,BX
Reg, data Sub AH,19h
Mem,reg Sub [BX],AL
Reg,mem
Mem,data
Sub CL,[3456h]
Sub [BX], 1Fh
Chú ý:
- Không trừ trực tiếp 2 biến ô nhớ với nhau
- Toán hạng đích không thể là hằng số
- Kết quả có thể tác động đến các cờ: OF, SF, ZF, AF, PF, CF.
4. Lệnh: DEC
Chức năng: Giảm giá trị của toán hạng đích đi 1.
Cú pháp:
DEC Dst Ví dụ
Reg DEC CX
Mem DEC [BX]
Chú ý:
- Toán hạng đích không thể là hằng số
- Kết quả có thể tác động đến các cờ: OF, SF, ZF, AF, PF, CF.
5. Lệnh: MUL
Chương 1: Giới thiệu
13
Chức năng: Nhân nội dung của toán hạng AX hoặc AL với nội dung của toán hạng nguồn.
Giá trị của hai toán hạng đều là dạng không dấu. Kết quả sẽ được cất như sau:
• Nếu là phép nhân hai toán hạng 8 bít thì kết quả sẽ được đặt trong thanh ghi AX.
• Nếu là phép nhân hai toán hạng 16 bít thì kết quả sẽ được đặt trong thanh nghi DX:AX.
Cú pháp:
MUL Src Ví dụ
Reg MUL CL
Mem MUL x
Chú ý:
- Toán hạng nguồn không thể là hằng số
- Kết quả có thể tác động đến các cờ: OF, ZF,CF.
6. Lệnh: DIV
Chức năng: Chia giá trị của thanh ghi AX hoặc DX:AX cho nội dung của toán hạng nguồn.
Giá trị của hai toán hạng đều là dạng không dấu. Kết quả sẽ được cất như sau:
• Nếu số bị chia là toán hạng 16 bít thì phần thương sẽ được đặt trong thanh ghi AL và
phần dư sẽ được đặt trong thanh ghi AH.
• Nếu số bị chia là toán hạng 32 bít thì phần thương sẽ được đặt trong thanh ghi AX và
phần dư sẽ được đặt trong thanh ghi DX.
Cú pháp:
DIV Src Ví dụ
Reg DIV CL
Mem DIV [BX]
Chú ý:
- Toán hạng nguồn không thể là hằng số
- Kết quả có thể tác động đến các cờ: OF, CF.
7. Lệnh: CMP
Chức năng: So sánh giá trị của toán hạng đích và toán hạng nguồn. Nội dung của hai toán
hạng đều không thay đổi sau lệnh này. Thực chất, lệnh này thực hiện bằng cách lấy toán hạng đích
trừ đi toán hạng nguồn. Kết quả phản ánh lên thanh ghi cờ mà không được lưu lại.
Cú pháp:
CMP Dst,src Ví dụ
Reg1,reg2 Cmp AX,BX
Reg, data Cmp AH,9Fh
Mem,reg Cmp [BX],AL
DOWNLOAD ĐỂ XEM ĐẦY ĐỦ NỘI DUNG
MÃ TÀI LIỆU: 51914
DOWNLOAD: + Link tải: tailieumau.vn
Hoặc : + ZALO: 0932091562

More Related Content

PPTX
Segmentación Memoria Virtual
PPTX
01 simulacion de sistemas semana1 - elvis del aguila lopez
PDF
IBM Integeration Bus(IIB) Fundamentals
PPT
Họ vi xử lí 8086 intel
PDF
Assembly
PDF
Vi si ly
PDF
ghsx.pdf
PDF
KIN_TRUC_MAY_TINH_and_HPhadshjhqFSIA_NG.pdf
Segmentación Memoria Virtual
01 simulacion de sistemas semana1 - elvis del aguila lopez
IBM Integeration Bus(IIB) Fundamentals
Họ vi xử lí 8086 intel
Assembly
Vi si ly
ghsx.pdf
KIN_TRUC_MAY_TINH_and_HPhadshjhqFSIA_NG.pdf

Similar to Đề tài giáo trình: Lập trình hệ thống và điều khiển thiết bị từ xa (20)

DOC
Giao Trinh Vi Xu Ly (20 12 2008)
PPT
Microprocessor final ver1_part2
PPTX
KTMT-Chuong 6 - Phối ghép và Lập trình Điều khiển (1).pptx
PDF
Kiến trúc máy tính và hợp ngữ bài 07
DOC
Chuong2 cấu trúc phần cứng 8051
PPT
Chuong2
DOC
Chuong3 lập trình hợp ngữ
PPT
ky thuat vi xu lychuong4.ppt
PPT
Cấu tạo và nguyên lý hoạt động cpu
PPT
Chương 2 CPU và tập lệnh máy tính.ppt
PPS
vxl.vdk.TranThanhPhong
PPT
Cau truc may tinh
PDF
KTMT Lý Thuyết Tổng Quát
PDF
Kiến trúc máy tính và hợp ngữ bài 08
PDF
Ktmt chuong 3
PPT
2 kien truc phan mem
PDF
CHUONG-3-LẬP-TRÌNH-CHO-HỌ-VI-ĐIỀU-KHIỂN-8051.pdf
PDF
Bai giang-ktvxl-2012
PDF
Ky_thuat_VXL.v1.4.pdf,,,,,,,,,,,,,,,,,,,,,,,,,,,,
PPTX
Vi xử lý cấu trúc máy tính
Giao Trinh Vi Xu Ly (20 12 2008)
Microprocessor final ver1_part2
KTMT-Chuong 6 - Phối ghép và Lập trình Điều khiển (1).pptx
Kiến trúc máy tính và hợp ngữ bài 07
Chuong2 cấu trúc phần cứng 8051
Chuong2
Chuong3 lập trình hợp ngữ
ky thuat vi xu lychuong4.ppt
Cấu tạo và nguyên lý hoạt động cpu
Chương 2 CPU và tập lệnh máy tính.ppt
vxl.vdk.TranThanhPhong
Cau truc may tinh
KTMT Lý Thuyết Tổng Quát
Kiến trúc máy tính và hợp ngữ bài 08
Ktmt chuong 3
2 kien truc phan mem
CHUONG-3-LẬP-TRÌNH-CHO-HỌ-VI-ĐIỀU-KHIỂN-8051.pdf
Bai giang-ktvxl-2012
Ky_thuat_VXL.v1.4.pdf,,,,,,,,,,,,,,,,,,,,,,,,,,,,
Vi xử lý cấu trúc máy tính
Ad

More from Viết thuê trọn gói ZALO 0934573149 (20)

DOCX
Trọn Gói 200 Đề Tài Tiểu Luận Môn Đạo Đức Kinh Doanh, Mới Nhất
DOCX
Trọn Bộ Hơn 200 Đề Tài Tiểu Luận Môn Sinh Học Tổng Hợp Từ Nhiều Trường Đại Học
DOCX
Trọn Bộ Hơn 199 Đề Tài Tiểu Luận Quản Lý Nhà Nước Chuyên Viên Chính Từ Khóa T...
DOCX
Trọn Bộ Gồm 200 Đề Tài Tiểu Luận Môn Dự Án Đầu Tư, Làm Điểm Cao
DOCX
Trọn Bộ Gần 250 Đề Tài Tiểu Luận Môn Văn Hóa Dân Gian Từ Sinh Viên Xuất Sắc
DOCX
Trọn Bộ Gần 200 Đề Tài Tiểu Luận Môn Quan Hệ Quốc Tế Từ Nhiều Sinh Viên Giỏi
DOCX
Trọn Bộ Các Đề Tài Tiểu Luận Môn Pháp Luật Đại Cương Từ Các Trường Đại Học
DOCX
Trọn Bộ Các Đề Tài Tiểu Luận Chuyên Viên Quản Lý Nhà Nước, Điểm 9, 10 Mới Nhất
DOCX
Trọn Bộ 311 Đề Tài Tiểu Luận Môn Xã Hội Học Pháp Luật, Từ Sinh Viên Khóa Trước
DOCX
Trọn Bộ 211 Đề Tài Tiểu Luận Môn Cơ Sở Tự Nhiên và Xã Hội, Điểm Cao
DOCX
Trọn Bộ 210 Đề Tài Tiểu Luận Môn Chính Trị Học Trong Quản Lý Công
DOCX
Trọn Bộ 200 Đề Tài Tiểu Luận Nhập Môn Quản Trị Kinh Doanh, Điểm Cao
DOCX
Trọn Bộ 200 Đề Tài Tiểu Luận Môn Văn Học Anh Mỹ Từ Sinh Viên
DOCX
Trọn Bộ 200 Đề Tài Tiểu Luận Môn Tâm Lý Học Đại Cương Làm Đạt 9 Điểm
DOCX
Trọn Bộ 200 Đề Tài Tiểu Luận Môn Sử Dụng Trang Thiết Bị Văn Phòng, 9 Điểm
DOCX
Trọn Bộ 200 Đề Tài Tiểu Luận Môn Phương Pháp Nghiên Cứu Trong Kinh Doanh
DOCX
Trọn Bộ 200 Đề Tài Tiểu Luận Môn Phương Pháp Điều Tra Xã Hội Học, 9 Điểm
DOCX
Trọn Bộ 200 Đề Tài Tiểu Luận Môn Lý Thuyết Truyền Thông Từ Sinh Viên Giỏi
DOCX
Trọn Bộ 200 Đề Tài Tiểu Luận Môn Luật Thương Mại Từ Sinh Viên Khá Giỏi
DOCX
Trọn Bộ 200 Đề Tài Tiểu Luận Môn Logistics Từ Sinh Viên Khá Giỏi
Trọn Gói 200 Đề Tài Tiểu Luận Môn Đạo Đức Kinh Doanh, Mới Nhất
Trọn Bộ Hơn 200 Đề Tài Tiểu Luận Môn Sinh Học Tổng Hợp Từ Nhiều Trường Đại Học
Trọn Bộ Hơn 199 Đề Tài Tiểu Luận Quản Lý Nhà Nước Chuyên Viên Chính Từ Khóa T...
Trọn Bộ Gồm 200 Đề Tài Tiểu Luận Môn Dự Án Đầu Tư, Làm Điểm Cao
Trọn Bộ Gần 250 Đề Tài Tiểu Luận Môn Văn Hóa Dân Gian Từ Sinh Viên Xuất Sắc
Trọn Bộ Gần 200 Đề Tài Tiểu Luận Môn Quan Hệ Quốc Tế Từ Nhiều Sinh Viên Giỏi
Trọn Bộ Các Đề Tài Tiểu Luận Môn Pháp Luật Đại Cương Từ Các Trường Đại Học
Trọn Bộ Các Đề Tài Tiểu Luận Chuyên Viên Quản Lý Nhà Nước, Điểm 9, 10 Mới Nhất
Trọn Bộ 311 Đề Tài Tiểu Luận Môn Xã Hội Học Pháp Luật, Từ Sinh Viên Khóa Trước
Trọn Bộ 211 Đề Tài Tiểu Luận Môn Cơ Sở Tự Nhiên và Xã Hội, Điểm Cao
Trọn Bộ 210 Đề Tài Tiểu Luận Môn Chính Trị Học Trong Quản Lý Công
Trọn Bộ 200 Đề Tài Tiểu Luận Nhập Môn Quản Trị Kinh Doanh, Điểm Cao
Trọn Bộ 200 Đề Tài Tiểu Luận Môn Văn Học Anh Mỹ Từ Sinh Viên
Trọn Bộ 200 Đề Tài Tiểu Luận Môn Tâm Lý Học Đại Cương Làm Đạt 9 Điểm
Trọn Bộ 200 Đề Tài Tiểu Luận Môn Sử Dụng Trang Thiết Bị Văn Phòng, 9 Điểm
Trọn Bộ 200 Đề Tài Tiểu Luận Môn Phương Pháp Nghiên Cứu Trong Kinh Doanh
Trọn Bộ 200 Đề Tài Tiểu Luận Môn Phương Pháp Điều Tra Xã Hội Học, 9 Điểm
Trọn Bộ 200 Đề Tài Tiểu Luận Môn Lý Thuyết Truyền Thông Từ Sinh Viên Giỏi
Trọn Bộ 200 Đề Tài Tiểu Luận Môn Luật Thương Mại Từ Sinh Viên Khá Giỏi
Trọn Bộ 200 Đề Tài Tiểu Luận Môn Logistics Từ Sinh Viên Khá Giỏi
Ad

Recently uploaded (20)

PPTX
SLIDE BV CHÍNH THỨC LATSKH - note.pptx
DOCX
Set menu 3 món rất hay và hiện đại dành cho người
PDF
Public economy và vai trò trong phân bổ nguồn lực, cung cấp hàng hóa công, đi...
PDF
GIẢI PHÁP NÂNG CAO CÔNG TÁC CHỦ NHIỆM QUA CÁC TIẾT SINH HOẠT THEO CHỦ ĐỀ NHẰ...
PDF
BÀI TẬP TEST FOR UNIT TIẾNG ANH LỚP 6 GLOBAL SUCCESS CẢ NĂM THEO TỪNG ĐƠN VỊ ...
PPTX
Direct Marketing- chieu thi truyen thong
PPT
SINH 8 TUYẾN YÊN TUYẾN GIÁP CÂU TẠO VÀ CHỨC NĂNG
PPTX
Triet hoc con nguoi va triet hoc thac si
PDF
CHUYÊN ĐỀ DẠY THÊM HÓA HỌC LỚP 11 CẢ NĂM THEO FORM THI MỚI BGD - CÓ ÔN TẬP + ...
PPTX
14. thoát vị bẹn nghẹt bệnh học ngoại khoa.pptx
PDF
bo-trac-nghiem-toan-11 dành cho cả năm học
PPTX
TIẾT 11. BÀI 32 DINH DƯỠNG VÀ TIÊU HÓA Ở NGƯỜI.pptx
PDF
BÀI TẬP TEST FOR UNIT TIẾNG ANH LỚP 8 GLOBAL SUCCESS CẢ NĂM THEO TỪNG ĐƠN VỊ ...
PPTX
Flashcard giải pháp đơn giản – trực quan – hiệu quả, giúp học từ vựng theo t...
PPTX
24. 9cqbq2reu57m5igbsz-signature-40d40b8bd600bcde0d0584523c684ec4933c280de74a...
PDF
12894-44864-1-CE-1037-1038_Văn bản của bài báo.pdf
PDF
CHUYÊN ĐỀ DẠY THÊM HÓA HỌC LỚP 12 CẢ NĂM THEO FORM THI MỚI BGD - CÓ ÔN TẬP + ...
PDF
BÀI HỌC ÔN TẬP CHO THI NỘI DUNG MÔN HOẠCH ĐỊNH
PDF
bai thao luan triet hoc mac lennin hayyy
PDF
CHUYÊN ĐỀ DẠY THÊM HÓA HỌC LỚP 12 CẢ NĂM THEO FORM THI MỚI BGD - CÓ ÔN TẬP + ...
SLIDE BV CHÍNH THỨC LATSKH - note.pptx
Set menu 3 món rất hay và hiện đại dành cho người
Public economy và vai trò trong phân bổ nguồn lực, cung cấp hàng hóa công, đi...
GIẢI PHÁP NÂNG CAO CÔNG TÁC CHỦ NHIỆM QUA CÁC TIẾT SINH HOẠT THEO CHỦ ĐỀ NHẰ...
BÀI TẬP TEST FOR UNIT TIẾNG ANH LỚP 6 GLOBAL SUCCESS CẢ NĂM THEO TỪNG ĐƠN VỊ ...
Direct Marketing- chieu thi truyen thong
SINH 8 TUYẾN YÊN TUYẾN GIÁP CÂU TẠO VÀ CHỨC NĂNG
Triet hoc con nguoi va triet hoc thac si
CHUYÊN ĐỀ DẠY THÊM HÓA HỌC LỚP 11 CẢ NĂM THEO FORM THI MỚI BGD - CÓ ÔN TẬP + ...
14. thoát vị bẹn nghẹt bệnh học ngoại khoa.pptx
bo-trac-nghiem-toan-11 dành cho cả năm học
TIẾT 11. BÀI 32 DINH DƯỠNG VÀ TIÊU HÓA Ở NGƯỜI.pptx
BÀI TẬP TEST FOR UNIT TIẾNG ANH LỚP 8 GLOBAL SUCCESS CẢ NĂM THEO TỪNG ĐƠN VỊ ...
Flashcard giải pháp đơn giản – trực quan – hiệu quả, giúp học từ vựng theo t...
24. 9cqbq2reu57m5igbsz-signature-40d40b8bd600bcde0d0584523c684ec4933c280de74a...
12894-44864-1-CE-1037-1038_Văn bản của bài báo.pdf
CHUYÊN ĐỀ DẠY THÊM HÓA HỌC LỚP 12 CẢ NĂM THEO FORM THI MỚI BGD - CÓ ÔN TẬP + ...
BÀI HỌC ÔN TẬP CHO THI NỘI DUNG MÔN HOẠCH ĐỊNH
bai thao luan triet hoc mac lennin hayyy
CHUYÊN ĐỀ DẠY THÊM HÓA HỌC LỚP 12 CẢ NĂM THEO FORM THI MỚI BGD - CÓ ÔN TẬP + ...

Đề tài giáo trình: Lập trình hệ thống và điều khiển thiết bị từ xa

  • 1. HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG LẬP TRÌNH HỆ THỐNG VÀ ĐIỀU KHIỂN THIẾT BỊ (Dùng cho sinh viên hệ đào tạo đại học từ xa) Lưu hành nội bộ HÀ NỘI - 2006
  • 2. HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG LẬP TRÌNH HỆ THỐNG VÀ ĐIỀU KHIỂN THIẾT BỊ Biên soạn : THS. PHẠM VĂN CƯỜNG
  • 3. LỜI NÓI ĐẦU Cuốn giáo trình Lập trình hợp ngữ và điều khiển thiết bị được chia thành 4 chương. Mỗi chương bao gồm các nội dung cơ bản, tóm tắt chương, các câu hỏi và bài tập cho mỗi chương. Chương 1: trình bày về vấn đề liên quan đến bộ vi xử lý 8088 : kiến trúc, chức năng các thành phần và tập lệnh. Ngoài ra, 1 trong các ngắt được sử dụng phổ biến trong lập trình hệ thống- ngắt 21h của hệ điều hành DOS cũng được giới thiệu trong chương này. Chương 2: trình bày về các vấn đề liên quan đến lập trình hợp ngữ: cách thức viết và thực hiện một chương trình, cách thức cài đặt các cấu trúc lập trình trong hợp ngữ và các vấn đề liên quan đến chương trình con và macro. Chương 3: giới thiệu về công cụ gỡ rối debug, chương trình mô phỏng Emu 8086. Liên kết chương trình viết bằng hợp ngữ với chương trình được viết bằng các ngôn ngữ bậc cao như C và Pascal cũng được đề cập ở chương này. Ngoài ra, chương này cò giới thiệu về một số ngắt của BIOS phục vụ thiết bị ngoại vi, chương trình thường trú và chương trình con ngắt. Chương 4: Trình bày về lập trình phối ghép: lập trình modem, bàn phím và màn hình. Đồng thời chương này cũng giới thiệu về một môi trường RadASM để phát triển các ứng dụng viết bằng hợp ngữ trên Windows. Do thời gian có hạn và kinh nghiệm còn hạn chế, cuốn giáo trình sẽ không tránh khỏi các sai sót. Tác giả biên soạn rất mong nhận được ý kiến đóng góp từ các độc giả. Mọi ý kiến góp ý xin gửi về email : pcuongcntt@yahoo.com Xin chân thành cảm ơn! Hà Nội, tháng 11/2006 Tác giả
  • 5. Chương 1: Giới thiệu 3 CHƯƠNG 1: GIỚI THIỆU 1.1 CẤU TRÚC BỘ VI XỬ LÝ Phần này trình bày kiến trúc bên trong của bộ Vi xử lý 8088 và bộ Vi xử lý Pentium IV 1.1.1 Sơ đồ kiến trúc bộ Vi xử lý 8088 Bộ vi xử lý 8088 được chia làm 2 khối chính: Khối giao diện bus (BIU) và khối thực hiện lệnh (EU). Các thành phần bên trong của CPU giao tiếp với nhau thông qua các bus trong. Giữa khối giao diện bus và khối thực hiện lệnh được liên hệ với nhau thông qua hàng đợi dữ liệu và hệ thống bus trong. Hình 1.1: Kiến trúc bên trong của bộ Vi xử lý 8088
  • 6. Chương 1: Giới thiệu 4 1.1.2 Chức năng các thành phần 1. Thành phần điều khiển Bus (Bus Control Logic) Điều khiển các loại tín hiệu trên các bus bao gồm: các tín hiệu trên bus địa chỉ (20 bit), các tín hiệu trên bus dữ liệu (8 bit) và các tín hiệu trên bus điều khiển. Ngoài ra, thành phần này còn làm nhiệm vụ hỗ trợ giao tiếp giữa hệ thống bus trong và bus ngoài. Hệ thống bus ngoài là hệ thống bus kết nối giữa các thành phần của hệ vi xử lý với nhau: CPU, Bộ nhớ trong và Thiết bị vào/ra. 2. Hàng đợi lệnh (Prefetch Queue) Chứa mã lệnh chờ được xử lý. Hàng đợi lệnh có kích thước 4 byte đối với 8088 và 6 byte đối với 8086. Sở dĩ có điều này là vì hàng đợi lệnh phải có kích thước có thể chứa được ít nhất một lệnh có độ dài bất kỳ (dài nhất) của bộ vi xử lý. Mà tập lệnh của 8086 chứa các lệnh có độ dài từ 1-6 byte. Hàng đợi lệnh làm việc theo cơ chế FIFO (First In First Out), nghĩa là lệnh nào được đưa vào hàng đợi lệnh trước sẽ được xử lý trước 3. Khối điều khiển (Control Unit) Khối điều khiển có hai chức năng chính: giải mã lệnh và tạo xung điều khiển . Đầu vào của khối điều khiển là mã lệnh được đọc từ hàng đợi lệnh và đầu ra là các xung điều khiển gửi đến các bộ phận khác nhau bên trong bộ vi xử lý. Quá trình này được thực hiện nhờ hai mạch giải mã lệnh và mạch tạo xung. 4. Khối số học và logic (Arithmetic Logic Unit) Khối số học và logic có chức năng thực hiện các phép tính toán như phép cộng, trừ… hay các phép logic như AND, OR, NOT. Đầu vào ALU là hai thanh ghi tạm thời chứa dữ liệu của cho phép tính được lấy từ bus dữ liệu. Kết quả đầu ra của ALU được đưa trở lại bus dữ liệu và phản ánh vào thanh ghi cờ (flag register). 5. Các thanh ghi đoạn (Segment registers) Ta hãy thử xem đoạn chương trình được viết bằng ngôn ngữ C sau: int Cong(int a, int b) { Return (a+b); } void main() { int x=3; int y=4; printf(“Tong: %d”, Cong(x,y)); } Trong chương trình trên có 2 phần: phần khai báo và phần lệnh của chương trình. Trong phần lệnh có thể có lời gọi chương trình con. Như vậy để thực hiện được một chương trình (dạng .EXE) thì người ta cần ít nhất 3 đoạn bộ nhớ (segment). Đoạn dành chứa dữ liệu được khai báo, đoạn chứa mã chương trình, đoạn ngăn
  • 7. Chương 1: Giới thiệu 5 xếp phục vụ cho các lời gọi chương trình con. Mỗi đoạn có kích thước 64KB. Khi chương trình được thực hiện, mỗi đoạn bộ nhớ này được trỏ bởi các thanh ghi đoạn. Đó là: - Thanh ghi đoạn mã CS (Code Segment): trỏ đến đoạn bộ nhớ chứa mã của chương trình. - Thanh ghi đoạn dữ liệu DS (Data Segment): trỏ đến đoạn bộ nhớ chứa các khai báo của chương trình. - Thanh ghi đoạn ngăn xếp SS (Stack Segment): trỏ đến đoạn bộ nhớ dành cho stack. - Ngoài ra, trong nhiều trường hợp người ta sử dụng thêm một đoạn dữ liệu phụ dùng trong trường hợp các dữ liệu cần khai báo vượt quá kích thước cho phép của 1 đoạn (các khai báo mảng, file…). Khi đó thanh ghi đoạn dữ liệu phụ ES (Extra Segment) sẽ trỏ đến đoạn này 6. Các thanh ghi con trỏ và chỉ số (pointers and index registers) Các thanh ghi con trỏ và chỉ số là các thanh ghi 16 bit. Chúng thường được lưu địa chỉ lệch (offset) và kết hợp với thanh ghi đoạn tương ứng tạo thành cặp thanh ghi chứa địa chỉ xác định của mã lệnh, mục dữ liệu, hoặc mục dữ liệu lưu trong stack. Nhờ vào cặp thanh ghi này, người ta có thể tính đia chỉ vật lý cụ thể theo công thức sau: Địa chỉ vật lý = địa chỉ đoạn * 16 + địa chỉ lệch Dưới đây là các thanh ghi con trỏ và chỉ số: - Thanh ghi con trỏ lệnh IP (Instruction Pointer): trỏ vào lệnh kế tiếp sẽ được thực hiện nằm trong đoạn mã do con trỏ CS trỏ tới. Địa chỉ đầy đủ của lệnh là CS:IP. - Thanh ghi con trỏ cơ sở BP (Base Pointer): trỏ vào một mục dữ liệu nằm trong đoạn ngăn xếp SS. Địa chỉ đầy đủ của mục dữ liệu là CS:IP. - Thanh ghi con trỏ ngăn xếp SP (Stack Pointer): trỏ vào đỉnh hiện thời ngăn xếp nằm trong đoạn ngăn xếp SS. Địa chỉ đầy đủ của đỉnh ngăn xếp là SS:SP. - Thanh ghi chỉ số nguồn SI (Source Index): trỏ vào một mục dữ liệu trong đoạn DS. Địa chỉ đầy đủ của mục dữ liệu là DS:SI. - Thanh ghi chỉ số đích DI (Destination Index): trỏ vào một mục dữ liệu trong đoạn DS. Địa chỉ đầy đủ của mục dữ liệu là DS:DI. 7. Các thanh ghi đa năng (Multi-purposed registers) Bộ xử lý 8088 có 4 thanh ghi đa năng 16 bit đó là: AX, BX, CX và DX. Các thanh ghi này cũng có thể được tách ra thành 2 nửa gồm 8 bít cao (nửa cao) gồm bít thứ 8 đến bít thứ 15 và 8 bít thấp (nửa thấp) gồm các bít thứ 0 đến 7. Các nửa thanh ghi này có thể được sử dụng một cách độc lập để chứa các dữ liệu 8 bít. Đó là các nửa thanh ghi: AH và AL, BH và BL, CH và CL, và DH và DL. Trong đó AH, BH, CH, DH la các nửa cao còn AL,BL, CL, DL là các nửa thấp. Ngoài chức năng “đa năng”, mỗi thanh ghi 16 bít thường được sử dụng trong các tác vụ đặc biệt, giống như tên của chúng: - AX (Accumulator) thanh chứa: các kết quả của các phép toán thường được lưu vào thanh ghi này. Ngoài ra, AX còn là toán hạng ẩn cho 1 số phép toán như nhân (AX là thừa số) hoặc chia (AX là số bị chia).
  • 8. Chương 1: Giới thiệu 6 - BX (Base) thanh ghi cơ sở: thường được dùng để chứa các địa chỉ cơ sở. - CX (Count) bộ đếm: CX thường dung để chứa số lần lặp trong trường hợp dùng lệnh LOOP. Ngoài ra, CL còn chứa số lần dịch chuyển, quay trái, quay phải của các toán hạng. - DX (Data) thanh ghi dữ liệu: DX thường được chứa địa chỉ offset của xâu kí tự khi có các thao tác nhập vào xâu hoặc in xâu. DX (cùng với AX) còn tham gia chứa kết quả của phép nhân các số 16 bit hoặc làm số bị chia cho phép chia các số 16 bit. Ngoài ra, DX còn dùng để chứa địa chỉ của các cổng vào/ra trong trường hợp thực hiện các lệnh IN hoặc OUT. 8. Thanh ghi cờ (flag register) Thanh ghi cờ là thanh ghi lưu trữ trạng thái của CPU tại mỗi thời điểm. Thanh ghi cờ có 16 bít, trong đó có 7 bít dự trữ cho tương lai (CPU 8088 chưa dùng đến các bít này). Còn lại 9 bít và mỗi bít tương ứng là một cờ. Kết hợp các lệnh nhảy có điều kiện (conditional jump) với các cờ này, người lập trình dễ dàng hơn Hình 1.2: Cấu trúc của thanh ghi cờ của CPU 8088. Các bit được đánh dấu x là các cờ chưa được dùng đến. - Cờ CF (Carry Flag): cờ nhớ CF=1 khi có nhớ hoặc trừ có mượn từ bít có trọng số cao nhất (Most Significant Bit). Ngoài ra, cờ CF=1 trong trường hợp khi thao tác với file hoặc thư mục gây ra lỗi như các lỗi tạo, xóa file và thư mục. - Cờ PF (Parity Flag): cờ chẵn lẻ PF=1 khi tổng số các bít bằng 1 trong kết quả của phép tính là một số chẵn. - Cờ AF (Auxiliary Carry Flag): cờ nhớ phụ AF =1 khi có nhớ từ bít thứ 4 sang bít thứ 5 hoặc có mượn từ bít 5 sang bít thứ 4 trong biểu diễn BCD của 1 số. - Cờ ZF (Zero Flag): cờ Zero ZF=1 khi kết quả tính toán bằng 0. - Cờ SF (Sign Flag): cờ dấu SF=1 khi kết quả tính toán là một số âm. - Cờ TF (Trap Flag): cờ bẫy TF=1 khi CPU đang làm việc ở chế độ chạy từng lệnh. Chế độ này được sử dụng cần thiết khi tìm lỗi (defect) và gỡ lỗi (debug) chương trình. - Cờ IF (Interrupt enable Flag): cờ cho phép ngắt IF=1, cho phép tác động đến yêu cầu ngắt che được (maskable interrupts). - Cờ DF (Direction Flag): cờ hướng DF=1 khi CPU xử lý chuỗi kí tự theo thứ tự từ phải sang trái. - Cờ OF (Overflow Flag): cờ tràn OF=1 khi kết quả là một số bù hai vượt ra ngoài giới hạn biểu diễn dành cho nó. 9. Hệ thống bus trong (Internal bus system) 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 x x x x OF DF IF TF SF ZF x AF x PF x CF
  • 9. Chương 1: Giới thiệu 7 Hệ thống bus bên trong của CPU 8088 bao gồm 3 loại: - Bus dữ liệu: 16 bít, cho phép di chuyển 2 byte dữ liệu tại một thời điểm - Bus địa chỉ: 20 bít, có thể địa chỉ hóa được 220 bytes và vì thế không gian địa chỉ nhớ của CPU 8088 là 1MB. - Bus điều khiển: truyền tải các tín hiệu điều khiển như RD, WR … 1.2 MỘT SỐ CHỨC NĂNG CỦA NGẮT 21H Phần này trình bày các hàm thông dụng của ngắt 21h. Đó là các hàm thao tác vào/ra đối với kí tự, chuỗi ký tự, file, thư mục, kết thúc chương trình và trả lại quyền điều khiển cho Hệ điều hành DOS. Hàm 01: đọc 1 kí tự (có hiện) từ bàn phím Input: AH=01 Output: AL= mã ASCII của ký tự AL=0 nếu gõ vào phím chức năng. Hàm 02: hiện 1 kí tự lên màn hình Input: AH=02 DL= mã ASCII của ký tự cần hiển thị Output: Hàm 08: đọc 1 kí tự (không hiện) từ bàn phím Input: AH=08 Output: AL= mã ASCII của ký tự AL=0 nếu gõ vào phím chức năng. Hàm 09: hiện xâu kí tự kết thúc bởi ‘$’ lên màn hình Input: AH = 09 DX = địa chỉ offset của xâu kí tự Hàm 0Ah: đọc xâu kí tự từ bàn phím Input: AH = 09 DX = địa chỉ offset của vùng đệm chứa xâu kí tự Output:DX = địa chỉ offset của xâu kí tự Hàm 39h: tạo thư mục Input: AH = 39h DX = địa chỉ offset của tên thư mục Output: Nếu thành công, thư mục được tạo ra Nếu không thành công, CF=1 và AX= mã lỗi. Hàm 3Ah: xóa thư mục Input: AH = 3Ah DX = địa chỉ offset của tên thư mục
  • 10. Chương 1: Giới thiệu 8 Output: Nếu thành công, thư mục được xóa Nếu không thành công, CF=1 và AX=mã lỗi. Hàm 3Ch: tạo file Input: AH = 3Ch DX = địa chỉ offset của tên file CX = thuộc tính file Output: Nếu thành công, file được tạo ra, CF=0 và AX= thẻ file (file handle) Nếu không thành công, CF=1 và AX= mã lỗi. Thuộc tính file được định nghĩa như sau: 00h: file bình thường (plain old file) 01h: file chỉ đọc (Read Only) 02h: file ẩn (Hidden from searches) 04h: file hệ thống (system) 08h: thuộc tính cho nhãn đĩa. 10h: thuộc tính cho thư mục con. Hàm 3Dh: mở file Input: AH = 3Dh AL = mode Output: Nếu thành công, file được tạo ra, CF=0 và AX= thẻ file (file handle) Nếu không thành công, CF=1 và AX= mã lỗi. Hàm 3Eh: đóng file Input: AH = 3Eh BX = thẻ file Output: Nếu thành công, file được đóng lại và CF=0 Nếu không thành công, CF=1 và AX= mã lỗi. Hàm 3Fh: đọc từ file Input: AH = 3Fh DS:DX = địa chỉ offset của vùng đệm CX = số byte cần đọc BX = thẻ file Output: Nếu thành công, CF=0 và AX= số byte đã đọc được Nếu không thành công, CF=1 và AX= mã lỗi.
  • 11. Chương 1: Giới thiệu 9 Hàm 40h: ghi vào file Input: AH = 40h DS:DX = địa chỉ offset của vùng đệm CX = số byte cần ghi BX = thẻ file Output: Nếu thành công, file được ghi và CF=0. Nếu không thành công, CF=1 và AX= mã lỗi. Hàm 41h: xóa file Input: AH = 41h DX = địa chỉ offset của tên file Output: Nếu thành công, file bị xóa Nếu không thành công, CF=1 và AX=mã lỗi. Hàm 4Ch: kết thúc chương trình Input: AH = 4Ch Output: Kết thúc chương trình, trả lại quyền điều khiển cho hệ điều hành. 1.3 GIỚI THIỆU VỀ TẬP LỆNH CỦA 8088 Phần này giới thiệu về một số lệnh thông dụng của bộ vi xử lý 8088. Để tiện dụng cho người học lập trình, các lệnh được chia thành các nhóm lệnh. 1.3.1 Nhóm lệnh di chuyển dữ liệu 1. Lệnh: MOV Chức năng: chuyển giá trị từ toán hạng nguồn vào toán hạng đích Cú pháp: MOV Dst,src Ví dụ Reg1,reg2 Mov AX,BX Reg, data Mov AH,9Fh Mem,reg Mov [BX],AL Reg,mem Mem,data Mov CL,[3456h] Mov PTR [BX], FFh Chú ý: Data chỉ nằm ở phía toán hạng nguồn Hai toán hạng dst và src không thể đồng thời là hai ô nhớ. 2. Lệnh: PUSH Chức năng: chuyển giá trị của toán hạng nguồn vào đỉnh ngăn xếp
  • 12. Chương 1: Giới thiệu 10 Cú pháp: PUSH Src Ví dụ Reg16 push AX Mem16 push x Segreg push DS Chú ý: Toán hạng nguồn luôn có kích thước 16 bít Toán hạng nguồn không thể là data (hằng số) 3. Lệnh: POP Chức năng: Lấy giá trị của đỉnh ngăn xếp đưa vào toán hạng đích Cú pháp: POP Dst Ví dụ Reg16 Pop AX Mem16 Pop x Segreg Pop DS Chú ý: Toán hạng nguồn luôn có kích thước 16 bít Toán hạng đích không thể là data (hằng số) 4. Lệnh: PUSHF Chức năng: chuyển giá trị của thanh ghi cờ vào đỉnh ngăn xếp Cú pháp: PUSHF 5. Lệnh: POPF Chức năng: lấy giá trị đỉnh ngăn xếp lưu vào thanh ghi cờ. Cú pháp: POPF Chú ý: hai lệnh PUSHF và POPF được hệ thống tự động gọi khi chương trình có lệnh gọi ngắt hoặc gọi chương trình con. 6. Lệnh: XCHG Chức năng: Hoán vị giá trị giữa toán hạng nguồn và đích
  • 13. Chương 1: Giới thiệu 11 Cú pháp: XCHG Dst,src Ví dụ Reg,Reg XCHG AX,BX Reg,Mem XCHG AL,[BX] Mem,Reg XCHG [BX],AH 7. Lệnh: IN Chức năng: Đọc giá trị từ 1 cổng vào thanh ghi AL hoặc AX. Cú pháp: IN AL, địa chỉ cổng (8 bít) VD: IN AL,2Eh IN AX, địa chỉ cổng (16 bít) VD: IN AX,2EBEh 8. Lệnh: OUT Chức năng: Chuyển giá trị 1 byte hoặc 1 từ từ thanh ghi AL hoặc AX ra cổng. Cú pháp: OUT địa chỉ cổng (8 bít), AL VD: OUT 2Eh,AL IN địa chỉ cổng (16 bít),AX VD: OUT 2EBEh,AX 1.3.2 Nhóm các lệnh tính toán số học Phần này giới thiệu về các lệnh lien quan đến tính toán số học như các lệnh: cộng, trừ, nhân, chia, so sánh. Đồng thời, cũng giải thích sự tác động của các lệnh này lên các bit của thanh ghi cờ. 1. Lệnh: ADD Chức năng: cộng toán hạng nguồn và toán hạng đích, lưu kết quả vào toán hạng đích. Cú pháp: ADD Dst,src Ví dụ Reg1,reg2 Add AX,BX Reg, data Add AH,19h Mem,reg Add [BX],AL Reg,mem Mem,data Add CL,[3456h] Add [BX], 1Fh Chú ý: - Không cộng trực tiếp 2 biến ô nhớ với nhau - Toán hạng đích không thể là hằng số - Kết quả có thể tác động đến các cờ: OF, SF, ZF, AF, PF, CF.
  • 14. Chương 1: Giới thiệu 12 2. Lệnh: INC Chức năng: Tăng giá trị của toán hạng đích lên 1. Cú pháp: INC Dst Ví dụ Reg Inc CX Mem Inc x Chú ý: - Toán hạng đích không thể là hằng số - Kết quả có thể tác động đến các cờ: OF, SF, ZF, AF, PF, CF. 3. Lệnh: SUB Chức năng: Trừ toán hạng đích cho toán hạng nguồn, lưu kết quả vào toán hạng đích. Cú pháp: SUB Dst,src Ví dụ Reg1,reg2 Sub AX,BX Reg, data Sub AH,19h Mem,reg Sub [BX],AL Reg,mem Mem,data Sub CL,[3456h] Sub [BX], 1Fh Chú ý: - Không trừ trực tiếp 2 biến ô nhớ với nhau - Toán hạng đích không thể là hằng số - Kết quả có thể tác động đến các cờ: OF, SF, ZF, AF, PF, CF. 4. Lệnh: DEC Chức năng: Giảm giá trị của toán hạng đích đi 1. Cú pháp: DEC Dst Ví dụ Reg DEC CX Mem DEC [BX] Chú ý: - Toán hạng đích không thể là hằng số - Kết quả có thể tác động đến các cờ: OF, SF, ZF, AF, PF, CF. 5. Lệnh: MUL
  • 15. Chương 1: Giới thiệu 13 Chức năng: Nhân nội dung của toán hạng AX hoặc AL với nội dung của toán hạng nguồn. Giá trị của hai toán hạng đều là dạng không dấu. Kết quả sẽ được cất như sau: • Nếu là phép nhân hai toán hạng 8 bít thì kết quả sẽ được đặt trong thanh ghi AX. • Nếu là phép nhân hai toán hạng 16 bít thì kết quả sẽ được đặt trong thanh nghi DX:AX. Cú pháp: MUL Src Ví dụ Reg MUL CL Mem MUL x Chú ý: - Toán hạng nguồn không thể là hằng số - Kết quả có thể tác động đến các cờ: OF, ZF,CF. 6. Lệnh: DIV Chức năng: Chia giá trị của thanh ghi AX hoặc DX:AX cho nội dung của toán hạng nguồn. Giá trị của hai toán hạng đều là dạng không dấu. Kết quả sẽ được cất như sau: • Nếu số bị chia là toán hạng 16 bít thì phần thương sẽ được đặt trong thanh ghi AL và phần dư sẽ được đặt trong thanh ghi AH. • Nếu số bị chia là toán hạng 32 bít thì phần thương sẽ được đặt trong thanh ghi AX và phần dư sẽ được đặt trong thanh ghi DX. Cú pháp: DIV Src Ví dụ Reg DIV CL Mem DIV [BX] Chú ý: - Toán hạng nguồn không thể là hằng số - Kết quả có thể tác động đến các cờ: OF, CF. 7. Lệnh: CMP Chức năng: So sánh giá trị của toán hạng đích và toán hạng nguồn. Nội dung của hai toán hạng đều không thay đổi sau lệnh này. Thực chất, lệnh này thực hiện bằng cách lấy toán hạng đích trừ đi toán hạng nguồn. Kết quả phản ánh lên thanh ghi cờ mà không được lưu lại. Cú pháp: CMP Dst,src Ví dụ Reg1,reg2 Cmp AX,BX Reg, data Cmp AH,9Fh Mem,reg Cmp [BX],AL
  • 16. DOWNLOAD ĐỂ XEM ĐẦY ĐỦ NỘI DUNG MÃ TÀI LIỆU: 51914 DOWNLOAD: + Link tải: tailieumau.vn Hoặc : + ZALO: 0932091562