Giáo trình Học phần Vi xử lý

MỤC LỤC

Chương 1. BỘVI XỬLÝ 8086/8088 . 2

1.1. Tổng quan vềcác bộvi xửlý của Intel . 2

1.2. Cấu trúc bộvi xửlý 8086 . 3

1.2.1. Sơ đồkhối . 3

1.2.2. Giải thích các thành phần trong sơ đồ. 3

1.2.3. Một sốkhái niệm cơbản . 4

1.3. Tập thanh ghi của bộvi xửlý 8086. 5

1.3.1. Các thanh ghi dữliệu . 5

1.3.2. Các thanh ghi đoạn: CS, DS, ES, SS . 6

1.3.3. Các thanh ghi con trỏvà chỉsố: SI, DI, SP, BP . 6

1.3.4. Thanh ghi con trỏlệnh: IP . 7

1.3.5. Thanh ghi cờ. 7

1.4. Tập lệnh của bộvi xửlý . 7

1.4.1. Sơlược vềtập lệnh của bộvi xửlý . 7

1.4.2. Tập lệnh của CPU . 8

1.4.3. Nhóm lệnh di chuyển dữliệu . 8

1.4.4. Nhóm lệnh sốhọc . 10

1.4.5. Nhóm lệnh logic . 11

1.4.6. Nhóm lệnh dịch chuyển và quay . 12

1.4.7. Nhóm lệnh điều khiển rẽnhánh . 13

1.4.8. Nhóm lệnh vào ra cổng . 14

1.4.9. Nhóm lệnh điều khiển . 14

1.5. Chế độ địa chỉcủa bộvi xửlý 8086. 14

1.5.1. Tổng quan . 14

1.5.2. Các chế độ địa chỉdữliệu . 15

1.5.3. Chế độ địa chỉthanh ghi . 15

1.5.4. Chế độ địa chỉtức thì . 15

1.5.5. Chế độ địa chỉtrực tiếp . 15

1.5.6. Chế độ địa chỉgián tiếp thanh ghi . 16

1.5.7. Chế độ địa chỉtương đối cơsở(Base Relative Addressing) . 16

1.5.8. Chế độ địa chỉtương đối chỉsố(Indexed Relative Addressing) . 17

1.5.9. Chế độ địa chỉtương đối chỉsốcơsở(Base Indexed Relative) . 17

1.5.10. Bảng tóm tắt các chế độ địa chỉ. 18

1.6. Phân tích mã lệnh mã máy . 18

1.6.1. Khuôn dạng lệnh . 18

1.6.2. Một sốmã lệnh mã máy . 20

1.6.3. Một sốví dụminh họa . 21

1.7. Lập trình và gỡrối bằng DEBUG . 22

1.7.1. Giới thiệu vềlệnh của DEBUG . 22

1.7.2. Lập trình bằng DEBUG . 24

1.7.3. Gỡrối chương trình bằng DEBUG . 25

Chương 2. CÁC BỘVI XỬLÝ TIÊN TIẾN CỦA INTEL . 26

2.1. Bộvi xửlý 80286 . 26

2.1.1. Các thanh ghi . 26

2.1.2. Tập lệnh . 27

2.2. Bộvi xửlý 80386 . 28

2.2.1. Sơ đồkhối của 80386 . 28

2.2.2. Các thanh ghi . 28

2.2.3. Quản lý bộnhớ. 30

2.2.4. Tập lệnh . 32

2.3. Bộvi xửlý 80486 . 32

2.3.1. Các phần tửxửlý CISC và RISC . 32

2.3.2. Vi xửlý 80486 . 33

2.4. Các bộvi xửlý Intel Pentium . 35

2.4.1. Đặc điểm chung . 35

2.4.2. Cấu trúc và tính năng . 35

2.5. Bộ đồng xửlý toán 80x87 . 39

2.5.1. Sơlược vềcác sốthực . 39

2.5.2. Cấu trúc của 8087 . 39

2.5.3. Tập lệnh của 8087 . 39

2.6. Cấu trúc và chức năng của 8087 . 39

2.6.1. Sơ đồkhối bên trong của 8087 . 39

2.6.2. Nối 8087 với CPU . 42

2.7. Đồng xửlý 80287 . 42

Chương 3. CẤU TRÚC LẬP TRÌNH ASSEMBLY . 43

3.1. Tổng quan vềngôn ngữlập trình ASSEMBLY . 43

3.1.1. Khái niệm . 43

3.1.2. So sánh hợp ngữvới các ngôn ngữbậc cao . 43

3.2. Các đoạn trong một chương trình . 44

3.3. Cấu trúc chung của một lệnh ASSEMBLY . 44

3.4. Khai báo dữliệu và kiểu dữliệu . 45

3.4.1. Biến byte . 45

3.4.2. Biến Word . 46

3.4.3. Biến mảng . 46

3.4.4. Biến chuỗi . 47

3.5. Khung của một chương trình ASSEMBLY . 47

3.5.1. Cấu trúc chương trình đểdịch ra tệp *.EXE. 47

3.5.2. Cấu trúc chương trình đểdịch ra tệp *.COM . 50

3.6. Cách tạo một chương trình hợp ngữ. 52

Chương 4. CÁC CẤU TRÚC LẬP TRÌNH . 55

4.1. Tổng quan . 55

4.1.1. Các lệnh chuyển điều khiển . 55

4.2. Cấu trúc tuần tự. 56

4.3. Cấu trúc rẽnhánh . 57

4.3.1. Cấu trúc IF THEN . 57

4.3.2. Cấu trúc IF.THEN ELSE . 58

4.3.3. Cấu trúc rẽnhánh CASE OF . 59

4.3.4. Cấu trúc rẽnhánh với điều kiện kép . 60

4.4. Cấu trúc lặp . 61

4.4.1. Cấu trúc FOR TO DO . 61

4.4.2. Cấu trúc WHILE DO . 62

4.4.3. Cấu trúc REPEAT UNTIL . 63

4.5. Cấu trúc chương trình con . 63

4.5.1. Cấu trúc của chương trình con . 64

4.5.2. Cách gọi và thực hiện một chương trình con . 66

4.6. MACRO . 67

4.6.1. Định nghĩa MACRO . 67

4.6.2. Gọi MACRO trong chương trình . 68

4.6.3. Gọi MACRO từ đoạn chương trình khác . 70

Chương 5. MỘT SỐVẤN ĐỀNÂNG CAO . 72

5.1. Lập trình xửlý sốnguyên . 72

5.2. Cấu trúc dữliệu mảng . 72

5.2.1. Khai báo mảng . 72

5.2.2. Sửdụng mảng . 73

5.3. Cấu trúc dữliệu xâu ký tự. 75

5.3.1. Cờ định hướng . 75

5.3.2. Lệnh chuyển đổi một chuỗi . 76

5.3.3. Lệnh lưu chuỗi . 77

5.3.4. Lệnh nạp chuỗi . 77

5.4. Lập trình xửlý sốthực . 80

5.5. Lập trình cho các bộvi xửlý tiên tiến . 80

Chương 6. LIÊN KẾT ASSEMBLY VỚI CÁC NGÔN NGỮBẬC CAO . 80

6.1. Lập trình mã lệnh mã máy . 80

6.1.1. Cú pháp . 81

6.1.2. Thực hiện . 81

6.1.3. Một sốchú ý . 81

6.1.4. Ví dụ. 81

6.2. Lập trình mã lệnh gợi nhớ. 83

6.2.1. Chèn khối lệnh ASSEMBLY. 83

6.3. Ngắt và lập trình ngắt trong ngôn ngữbậc cao . 85

6.3.1. Khái niệm vềngắt . 85

6.3.2. Phân loại ngắt . 86

6.3.3. Giới thiệu vềmột sốngắt . 86

pdf94 trang | Chuyên mục: Vi Xử Lý – Vi Điều Khiển | Chia sẻ: dkS00TYs | Lượt xem: 3383 | Lượt tải: 1download
Tóm tắt nội dung Giáo trình Học phần Vi xử lý, để xem tài liệu hoàn chỉnh bạn click vào nút "TẢI VỀ" ở trên
in_max; 
Uses crt; 
Var 
 so1,so2:integer; 
{*---------------------------------------------*} 
Function min(num1:integer;num2:integer):integer; 
Var 
 tg:integer; 
 BEGIN 
 ASM 
 MOV AX,num1 {AX:=num1} 
 CMP AX,num2 {If AX>num2 then} 
 JNG @END_If 
 MOV AX,num2 {AX:=num2} 
 @END_If: {tg:=AX} 
 MOV tg,AX 
 END; 
 min:=tg; 
END; 
{*---------------------------------------------*} 
Function max(num1:integer;num2:integer):integer; 
AX:=số thứ 1 
AX >số thứ 2 
AX:=số thứ 2 
Min:=AX 
Sai 
Đúng 
AX:=số thứ 1 
AX<số thứ 2 
AX:=số thứ 2 
Max:=AX 
Sai 
Đúng 
Giáo trình VI XỬ LÝ  
Bộ môn Kỹ thuật máy tính – Khoa CNTT – ĐHSPKT_HY Trang 85 
LABEL END_IF; 
 Begin 
 ASM 
 MOV AX,num1 {AX:=num1} 
 CMP AX,num2 {If AX<num2 then} 
 JNL END_IF {Begin} 
 MOV AX,num2 {AX:=num2} 
 MOV num1,AX {END} 
 END; 
END_IF: 
 max:=num1; {Gia tri tra lai cua ham} 
END; 
(*--------------------------------------------*) 
Begin 
 Clrscr; 
 Write('So thu nhat:');Readln(so1); 
 Write('So thu hai :');Readln(so2); 
 Write('So nho nhat la: ',min(so1,so2)); 
 Write('So lon nhat la: ',max(so1,so2)); 
 Readln; 
END. 
6.3. Ngắt và lập trình ngắt trong ngôn ngữ bậc cao 
ASSEMBLY là một ngôn ngữ lập trình tác động trực tiếp tới các thành phần phần 
cứng. Các thành phần phần cứng này có thể tác động bằng địa chỉ cổng, song cũng có thể 
tác động bằng các ngắt. 
Việc tác động bằng ngắt đã được qui định cho từng thiết bị ngoại vi cũng như các 
thành phần khác trong máy tính. Hệ điều hành đã qui định chúng trong các ngắt mềm. 
6.3.1. Khái niệm về ngắt 
Ngắt là quá trình CPU tạm thời ngừng 
hoạt động hiện tại khi có một yêu cầu ngắt gọi 
đến để chuyển sang thực hiện chương trình con 
phục vụ ngắt tương ứng. Sau khi thực hiện 
xong thì quay trở lại thực hiện tiếp công việc 
đang dở trên. 
CT chính 
CT con phục vụ ngắt 
Giáo trình VI XỬ LÝ  
Bộ môn Kỹ thuật máy tính – Khoa CNTT – ĐHSPKT_HY Trang 86 
6.3.2. Phân loại ngắt 
Hình 3: Phân loại các ngắt. 
1/ Ngắt cứng là ngắt do các thành phần phần cứng gây ra. 
- Ngắt trong: Là các ngắt xảy ra ngay bên trong CPU. 
- Ngắt ngoài: Là các ngắt do các thành phần phần cứng khác gây ra. 
+ Ngắt có cấm (Maskable Interrupt) là các ngắt chỉ được thực hiện khi cờ IF được thiết 
lập (IF=1) 
+ Ngắt không cấm (Non Maskable Interrupt) là các ngắt có thể thực hiện được ngay cả 
khi cờ IF không được thiết lập. 
2/ Ngắt mềm là các ngắt nằm bên trong chương trình phần mềm. 
- Ngắt của người sử dụng là các ngắt được viết ra bởi những chương trình của người sử 
dụng. 
- Ngắt hệ thống là các ngắt nằm bên trong các chương trình của BIOS hoặc hệ điều hành 
(ví dụ: DOS) 
+ Ngắt DOS là các ngắt nằm bên trong chương trình của DOS trong Module vào/ra 
(IO.SYS) 
+ Ngắt BIOS là các ngắt nằm bên trong chương trình của BIOS. 
6.3.3. Giới thiệu về một số ngắt 
6.3.3.1. Cách thực hiện ngắt trong một số ngôn ngữ lập trình 
1.Gọi ngắt trong ASSEMBLY 
Một số ngắt thông thường cể các tham số đầu vào.Phô thuộc vào các tham số 
này,chương trình sẽ thực hiện giải quyết và đưa ra các tham số đầu ra. 
Các tham số đầu vào là các giá trị chuyển tới các thanh ghi hoặc ô nhớ nào đã 
Các tham đầu ra là các giá trị nhận được sau khi hàm này xử lý xong . 
Để gọi ngắt trong ASSEMBLY ta có thể thực hiện theo mẫu sau: 
- Chuyển các tham số đầu vào 
- Gọi ngắt INT 
 Ng¾t 
Ng¾t cøng Ng¾t mÒm 
Ng¾t ngoµi Ng¾t trong Ng¾t cña ng−êi 
sö dông 
Ng¾t hÖ 
thèng 
BIOS DOS Kh«ng cÊmCã cÊm 
Giáo trình VI XỬ LÝ  
Bộ môn Kỹ thuật máy tính – Khoa CNTT – ĐHSPKT_HY Trang 87 
- Xử lý các tham số đầu ra 
Ví dụ : MOV AH,01h ;Nhập vào một kí tự 
 INT 21h ;Kí tự nằm trong AL 
 MOV DL,AL ;Lấy từ AL sang DL 
 INT 21h ;Hiển thị 
2.Gọi ngắt trong PASCAL 
Việc gọi ngắt trong PASCAL cũng được thực hiện theo mẫu trên.Song phải theo một 
số quy định sau: 
- Các lệnh được sử dụng là các lệnh của PASCAL. Lệnh gán tương đương với lệnh 
MOV trong ASSEMBLY 
- Nếu sử dụng hệ đếm thập lục phân,thì phải cài đặt dấu ‘$’ đứng trước mỗi số đó. 
- Muốn tác động trực tiếp tới các thanh ghi của bộ vi xử lý ,ta phải sử dụng biến có 
kiểu là REGISTERS. kiểu này được quy định trong UNIT DOS như sau: 
+ Kiểu REGISTERS được khai báo trong UNIT DOS: 
 TYPE 
 REGISTERS=RECORD 
 CASE integer OF 
 0:(AX,BX,CX,DX,BP,SI,DI,DS,ES,Flags:word); 
 1:(AL,AH,BL,BH,CL,CH,DL,DH:Byte); 
 END; 
+ Các thanh ghi của bộ vi xử lý được quy định bằng các tên biến. Muốn truy nhập đến 
các biến này, ta phải quy định về kiểu bản ghi. Ví dụ : R là biến kiểu REGISTERS 
 =>R.AH:=$01; hoặc with R do AH:=$01; 
- Muốn gọi ngắt trong PASCAL, có thể sử dụng thủ tục: 
 INTR(,); 
Ví dụ : R là biến kiểu REGISTERS => INTR($ 10,R); 
- Riêng với số hiệu ngắt 21h ta có thể sử dụng thủ tục 
 MSDOS(); 
Ví dụ: INTR($21,R); MSDOS(R); 
6.3.3.2. Một số ngắt thông dụng 
Ngắt 21h: Ngắt chức năng của DOS 
Hàm 01h: Vào một kí tự từ bàn phím và hiển thị ra màn hình 
Mô tả Ví dụ minh hoạ 
Vào: AH=01h 
Ra: AL=Mã ASCII của kí tự nhập vào 
MOV AH,01H 
INT 21H 
Giáo trình VI XỬ LÝ  
Bộ môn Kỹ thuật máy tính – Khoa CNTT – ĐHSPKT_HY Trang 88 
MOV ktu,AL 
Hàm 02h: In một ký tự ra màn hình văn bản 
Vào AH=02h 
DL= mã ASCII của kí tự nhập vào 
Ra Không 
MOV AH,02H ;In ra màn hình 
MOV DL,’A’ ; chữ ’A’ 
INT 21H 
 Hàm 08h: Vào một kí tự từ bàn phím,không hiển thị kí tự ra màn hình 
Vào AH=01h 
Ra AL= mã ASCII của kí tự nhập vào 
MOV AH,08H 
INT 21H 
MOV ktu,AL 
Hàm 09h: In một chuỗi kí tự ra màn hình 
Vào AH=09h 
DS:DX=Con trỏ đến chuỗi kết thúc 
bằng ‘$’ 
Ra Không 
MOV AH,09H 
LEA DX,chuỗi 
INT 21H 
Hàm 4Ch: Kết thúc chương trình .EXE 
Vào : AH=4Ch 
Ra : Không 
MOV AH,4CH 
INT 21H 
 Hàm 2Ah: Xác định ngày tháng 
Vào : AH=2Ah 
Ra : AL=ngày trong tuần(0-6) 
CX=năm(1980-2099) 
DH=tháng(1-12) 
DL=ngày(1-31) 
R.AH:=$2A 
INTR($21,R) 
Ngay-tuan:=R.AL; 
Nam:=R.CX; 
Thang:=R.DH; 
Ngay:=R.DL; 
Hàm 2Bh: Đặt ngày tháng (Đặt lại ngày hệ thống) 
Vào : AH= 2Bh 
CX=năm(1980-2099) 
DH=tháng(1-12) 
DL= ngày(1-31) 
Ra : AL=0 nếu ngày hợp lệ; 
AL=FFh nếu ngày không hợp lệ 
R.AH:=$2B; 
Nam:=R.CX; 
Thang:=R.DH; 
Ngay:=R.DL; 
INTR($21,R); 
IF R>AL=0 then write(‘OK!’); 
Else write(‘Not OK!’); 
Hàm 2Ch: Xác định thời gian hệ thống 
Giáo trình VI XỬ LÝ  
Bộ môn Kỹ thuật máy tính – Khoa CNTT – ĐHSPKT_HY Trang 89 
Vào: AH=2Ch 
Ra : CH=giờ(0-23) 
CL=phút(0-59) 
DH=giây(0-59) 
DL=phần trăm giây(0-99) 
R.AH:=$2C; 
NTR($21,R); 
Gio:=R.CH; 
Phut:=R.CL; 
Giay:=R.DH; 
Phan_tram:=R.DL 
Hàm 2Dh: Đặt thời gian (Đặt lại thời gian hệ thống) 
Vào: AH=2Dh 
CH=giờ(0-23) 
CL=phút(0-59) 
DH=giây(0-59) 
DL=phần trăm giây(0-99) 
Ra : AL=0 nếu thời gian hợp lệ 
AL=FFh nếu thời gian không hợp lệ 
R.AH:=$2D; 
R.CH:=gio; 
R.CL:=phut; 
R.DH:=giay; 
R.DL:=phan_tram; 
INTR($21,R); 
If R.AL=0 then write(‘OK!’) 
Else write(‘Not OK!’); 
Hàm 30h: Xác định số phiên bản của DOS 
Vào : AH=30h 
Ra : BX=0000h 
CX=0000h 
AL=số trước dấu phẩy 
AH=số sau dấu phẩy 
R.AH:=30H 
INTR($21,R); 
Ver1:=R.AL; 
Ver2:=R.AH; 
Write(‘MS_DOS Version ‘,ver1,’,’,ver2) 
Hàm 36h: Xác định dung lượng còn trống trên đĩa 
Vào :AH=36h 
DL=ổ đĩa(0_mặc định;1_A;1_B;...) 
Ra : BX=Số liên cung chưa dùng 
CX=Số byte/cung 
DX=Số liên cung / đĩa 
AX=FFFFh nếu ổ đĩa không hợp lệ=số 
cung/liên cung(hợp lệ) 
R.AH:=36H; 
R.DL:=1; 
INTR($21,R); 
Free_cyl:=R.BX; 
Bps:=R.CX; {byte per sector} 
Cpd:=R.DX; {cylinder per dick} 
If AX=$FFFF then write(‘No Dick’) 
Else spc:=R.AX; {sector per cylinder); 
Ngắt 10h: Ngắt màn hình 
 Hàm 00h: Chọn chế độ hiển thị cho màn hình 
Giáo trình VI XỬ LÝ  
Bộ môn Kỹ thuật máy tính – Khoa CNTT – ĐHSPKT_HY Trang 90 
Vào: AH=0h 
AL=chế độ 
03h:Text 80*25*16 
12h:Grapt 640*480*16 
13h: Grapt 320*200*256 
Ra : Không 
R.AH:=0h; 
R.AL:=mode; 
INTR($10,R); 
Hàm 02h: Dịch chuyển Con trỏ 
Vào: AH=02h 
BH=trang số 
DH=hàng 
DL=cột 
Ra : Không 
R.AH:=02h; 
R.BH:=trang; 
R.DH:=hang; 
R.DL:=cot; 
INTR($10,R) 
Hàm 06h: Cuốn màn hình hay cửa sổ lên một số dòng xác định 
Vào: AH=06h 
AL=số dòng cuốn(=0;toàn bộ) 
BH=thuộc tính của dòng trống 
CH,DL=dòng,cột góc trên trái 
DL,DL=dòng,cột góc dưới phải 
Ra: Không 
R.AH:=06h; 
R.AL:=so_dong; 
R.BH:=thuoc_tinh; 
R.CH:=dong1;R.CL=cot1; 
R.DH:=dong2;R.DL=cot2; 
INTR($10,R); 
Hàm 07h: Cuốn màn hình hay cửa sổ xuống một dòng xác định 
Vào : AH=07h 
AL=số dòng cuốn(=0;toàn bộ) 
BH=thuôc tính các dòng trống 
CH,CL=dong,cột góc dưới phải 
Ra : Không 
R.AH:=07h; 
R.AL:=so_dong; 
R.BH:=thuoc_tinh; 
R.CH:=dong1;R.CL=cot1; 
R.DH:=dong2;R.DL=cot2; 
INTR($10,R); 
Hàm 09h: Hiển thị kí tự với thuộc tính tại vị trí Con trỏ 
Vào: AH=09h 
AL=mã ASCII của kí tự 
BH=trang số 
BL=thuộc tính(text); màu(graph) 
CX=số lần viết kí tự 
Ra :Không 
R.AH:=09h; 
R.AL:=kitu; 
R.BH:=0; {trang so 0} 
R.BL:=mau; 
R.CX=solan; 
INTR($10,R); 
Ngắt 16h: Ngắt bàn phím 
Giáo trình VI XỬ LÝ  
Bộ môn Kỹ thuật máy tính – Khoa CNTT – ĐHSPKT_HY Trang 91 
Hàm 00h: Đọc kí tự từ bàn phím 
Vào : AH=00h 
Ra :AH=mã quét của phím 
AL=mã ASCII của kí tự 
R.AH:=00h; 
INTR($16,R); 
R.AH:=ma_scan; 
R.AL:=ma_ascii; 
Hàm 02h: Lấy các cờ bàn phím 
Vào : AH=02h 
Ra : AL=các cờ 
Bit 7: insert; bit 6:capslock; bit 5:numlock; 
bit 4:scrollock 
R.AH:=00h; 
INTR($16,R); 
R.AH:=ma_scan; 
R.AL:=ma_ascii; 
Ngắt 33h: Ngắt con chuột 
Hàm 00h: Khởi tạo chuột 
Vào : AX=00h 
Ra : AX=FFFFh không nhận chuột 
R.AX:=00h; 
INTR($33,R); 
if R.AX=FFFFh then 
WRITE('Khong khoi tao duoc chuot!'); 
Hàm 01h: Hiện trỏ chuột 
Vào : AX=01h 
Ra : Không 
R.AX:=01h; 
INTR($33,R); 
Hàm 02h: ẩn trỏ chuột 
Vào : AX=02h 
Ra : Không 
R.AX:=02h; 
INTR($33,R); 
Hàm 03h: Trạng thái nhấn chuột 
Vào : AX=03h 
Ra : CX,DX=toạ độ ảo của chuột. 
BX=trạng thái nút chuột nhấn 
bit 0: Nút trái 
bit 1: Nút phải 
bit 2: Nút giữa 
R.AX:=03h; 
INTR($33,R); 
X=R.CX shl 3+1; 
Y=R.DX shl 3+1; 
if (R.BX and 1)=1 then 
WRITE('Phim trai chuot!!!'); 

File đính kèm:

  • pdfGiáo trình Học phần Vi xử lý.pdf