ngat_vip

92
Hpv HVKTMM 1 Mc lc Chương I. Tng quan ....................................................................................................... 5 1. Kiến trúc hthng ........................................................................................................ 6 1.1. Kiến trúc phn cng................................................................................................. 6 1.1.1. Mô hình và nguyên lý máy Von Neumaan ....................................................... 6 1.1.2. Cu trúc CPU intel 80x86 ................................................................................. 6 1.1.2.2. Mô t.......................................................................................................... 7 1.1.2.3. Bthanh ghi ............................................................................................... 8 1.1.3. Phương thc qun lý bnh............................................................................. 9 1.1.3.1. Sphân đon bnh................................................................................ 9 1.1.3.2. Địa chvt lý và địa chlogic ................................................................. 10 1.1.3.3. Địa chlôgic và các thanh ghi ................................................................. 11 1.1.4. CPU giao tiếp vi thiết bngoi vi ................................................................. 12 1.2. Hot động ca hđiu hành MS-DOS................................................................... 12 1.2.1. Các thành phn ca MS-DOS ......................................................................... 13 1.2.2. Btrí HĐH trong bnhtrung tâm................................................................ 14 1.2.3. Chương trình móc ni (Bootstrap Loader) ..................................................... 15 1.2.4. Chương trình vào/ra cơ sBIOS .................................................................... 16 1.2.4.1. ROM.BIOS .............................................................................................. 16 1.2.4.2. BIOS.COM .............................................................................................. 16 1.2.3. Khi điu hành đĩa DOS.COM ....................................................................... 17 1.2.4.Tp lnh COMMAND.COM ........................................................................... 19 2. Tư tưởng chung ca lp trình vi thiết bngoi vi .................................................. 24 2.1. Các thông sphn cng ca thiết bngoài ........................................................... 24 2.1.1. Cng vào/ra ..................................................................................................... 24 2.1.2. Các vùng nhtham s..................................................................................... 24 2.2. Tư tưởng lp trình .................................................................................................. 26 2.2.1. Gii thiu ........................................................................................................ 26 2.2.2. Qui tc chung lp trình cho thiết bngoi vi ................................................... 27 2.2.2.1. Trao đổi tin gia CPU vi thiết bngoi vi ............................................. 27 2.2.2.2. Khi ghép ni điu khin trao đổi tin ...................................................... 28 2.2.2.3. Lp trình trao đổi tin ................................................................................ 28 2.2.3. Dng tng quát ca chương trình phc vthiết bngoài sdng ngt .......... 30 Chương II. Hthng ngt .............................................................................................. 32 1. Ngt và bđiu khin PIC 8259 ................................................................................ 33 1.1. Mt skhái nim .................................................................................................... 33 1.2. Phân loi ngt ........................................................................................................ 33 1.3. PIC 8259 và hthng ngt cng ........................................................................... 33

Transcript of ngat_vip

Page 1: ngat_vip

Hpv HVKTMM

1

Mục lục

Chương I. Tổng quan ....................................................................................................... 5

1. Kiến trúc hệ thống ........................................................................................................ 6

1.1. Kiến trúc phần cứng................................................................................................. 6 1.1.1. Mô hình và nguyên lý máy Von Neumaan ....................................................... 6 1.1.2. Cấu trúc CPU intel 80x86................................................................................. 6

1.1.2.2. Mô tả .......................................................................................................... 7 1.1.2.3. Bộ thanh ghi............................................................................................... 8

1.1.3. Phương thức quản lý bộ nhớ ............................................................................. 9 1.1.3.1. Sự phân đoạn bộ nhớ ................................................................................ 9 1.1.3.2. Địa chỉ vật lý và địa chỉ logic ................................................................. 10 1.1.3.3. Địa chỉ lôgic và các thanh ghi................................................................. 11

1.1.4. CPU giao tiếp với thiết bị ngoại vi ................................................................. 12

1.2. Hoạt động của hệ điều hành MS-DOS................................................................... 12 1.2.1. Các thành phần của MS-DOS ......................................................................... 13 1.2.2. Bố trí HĐH trong bộ nhớ trung tâm................................................................ 14 1.2.3. Chương trình móc nối (Bootstrap Loader) ..................................................... 15 1.2.4. Chương trình vào/ra cơ sở BIOS .................................................................... 16

1.2.4.1. ROM.BIOS .............................................................................................. 16 1.2.4.2. BIOS.COM .............................................................................................. 16

1.2.3. Khối điều hành đĩa DOS.COM....................................................................... 17 1.2.4.Tệp lệnh COMMAND.COM........................................................................... 19

2. Tư tưởng chung của lập trình với thiết bị ngoại vi .................................................. 24

2.1. Các thông số phần cứng của thiết bị ngoài ........................................................... 24 2.1.1. Cổng vào/ra..................................................................................................... 24 2.1.2. Các vùng nhớ tham số..................................................................................... 24

2.2. Tư tưởng lập trình.................................................................................................. 26 2.2.1. Giới thiệu ........................................................................................................ 26 2.2.2. Qui tắc chung lập trình cho thiết bị ngoại vi................................................... 27

2.2.2.1. Trao đổi tin giữa CPU với thiết bị ngoại vi ............................................. 27 2.2.2.2. Khối ghép nối điều khiển trao đổi tin ...................................................... 28 2.2.2.3. Lập trình trao đổi tin ................................................................................ 28

2.2.3. Dạng tổng quát của chương trình phục vụ thiết bị ngoài sử dụng ngắt .......... 30

Chương II. Hệ thống ngắt .............................................................................................. 32

1. Ngắt và bộ điều khiển PIC 8259 ................................................................................ 33

1.1. Một số khái niệm.................................................................................................... 33

1.2. Phân loại ngắt........................................................................................................ 33

1.3. PIC 8259 và hệ thống ngắt cứng ........................................................................... 33

Page 2: ngat_vip

Hpv HVKTMM

2

1.3.1. Ngắt cứng........................................................................................................ 34 1.3.2. Thiết bị điều khiển PIC 8259 và cơ chế hoạt động của hệ thống ngắt cứng... 34

2. Các ngắt của MS-DOS dành cho thiết bị ngoại vi ................................................... 37

2.1. Các ngắt của BIOS và ROMBIOS ......................................................................... 37

2.2. Các ngắt của DOS (gọi các chức năng) ................................................................ 38 2.2.1. Các chức năng của ngắt INT 21h của DOS .................................................... 38

Chương III. Lập trình cho các thiết bị vào ra.............................................................. 41

1. Lập trình bàn phím..................................................................................................... 42

1.1. Cấu trúc và nguyên lý hoạt động của bàn phím .................................................... 42

1.2. Các ngắt dùng cho bàn phím ................................................................................. 43

1.3. Lập trình phục vụ bàn phím sử dụng ngắt ............................................................. 45 1.3.1. Quy tắc chung ................................................................................................. 45 1.3.2. Một số ví dụ .................................................................................................... 46

1.4. Lập trình trực tiếp cho bàn phím ........................................................................... 46 1.4.1. Đặc điểm của khối điều khiển bàn phím......................................................... 46 1.4.2. Qui tắc chung của lập trình trực tiếp bàn phím............................................... 47 1.4.3. Các ví dụ ......................................................................................................... 48

2. Lập trình cho chuột .................................................................................................... 50

2.1. Cấu trúc và hoạt động của chuột ........................................................................... 50 2.1.1. Cấu tạo và hoạt động của chuột ...................................................................... 50 2.1.2. Mạch ghép nối chuột....................................................................................... 50 2.1.3. Điều khiển chuột ............................................................................................. 50 2.1.4. Màn hình ảo cho chuột.................................................................................... 50

2.2. Ngắt dành cho chuột .............................................................................................. 51

2.3. Lập trình cho chuột ................................................................................................ 52 2.3.1. Kích hoạt và xác định loại chuột..................................................................... 52

2.3.1.1. Các chức hàm năng.................................................................................. 52 2.3.1.2. Chương trình ví dụ ................................................................................... 52

2.3.2. Trạng thái chuột ............................................................................................. 53 2.3.2.1. Các hàm chức năng về trạng thái chuột ................................................... 53 2.3.2.2. Chương trình ví dụ ................................................................................... 54

2.3.3. Điều khiển con trỏ chuột................................................................................. 54 2.3.3.1. Các hàm chức năng về con trỏ chuột ....................................................... 54

2.3.4. Phím nhấn ....................................................................................................... 58 2.3.4.1 Các hàm chức năng................................................................................... 58 2.3.4.2. Chương trình ví dụ ................................................................................... 59

2.3.5. Tốc độ di chuyển của con trỏ chuột ................................................................ 59 2.3.5.1. Các hàm chức năng.................................................................................. 59 2.3.5.2. Chương trình ví dụ ................................................................................... 59

Page 3: ngat_vip

Hpv HVKTMM

3

2.3.6. Cài đặt chương trình xử lý khi dùng chuột ..................................................... 59 2.3.6.1. Cài đặt chương trình xử lý sự kiện........................................................... 59 2.3.6.2. Chương trình ví dụ ................................................................................... 60

3. Lập trình màn hình..................................................................................................... 62

3.1. Cấu trúc, hoạt động của màn hình và bìa( card) ghép nối.................................... 62 3.1.1. Màn hình ......................................................................................................... 62 3.1.2. Bộ ghép nối màn hình ..................................................................................... 62 3.1.3. Các chế độ của màn hình ................................................................................ 63

3.2. Các ngắt và các chức năng cho màn hình ............................................................. 64

3.3. Lập trình cho màn hình sử dụng ngắt .................................................................... 65 3.3.1. Nhiệm vụ......................................................................................................... 65 3.3.2. Phương pháp ................................................................................................... 65 3.3.3. Lập trình chung cho màn hình ........................................................................ 65

3.3.3.1. Xác định chế độ và trạng thái màn hình .................................................. 65 3.3.3.2. Xác định trang màn hình.......................................................................... 67 3.3.3.3. Xác định vị trí, kích thước con trỏ ........................................................... 67 3.3.3.4. Xác định kích thước của cửa sổ màn hình ............................................... 68

3.3.4. Lập trình ở chế độ văn bản.............................................................................. 68 3.3.4.1. Ghi chế độ điều khiển .............................................................................. 68 3.3.4.2. Xác định màu cho bìa CGA..................................................................... 68 3.3.4.3. Xác định màu cho EGA/VGA( có thể không cần) .................................. 68 3.3.4.4. Đọc ghi ký tự với ngắt INT 10h............................................................... 68 3.3.4.5. Ghi ký tự dùng ngắt INT 21h của DOS ................................................... 70

3.3.5. Lập trình ở chế độ đồ hoạ ............................................................................... 70 3.4. Lập trình trực tiếp cho màn hình........................................................................ 71

3.2.6.1. Cấu trúc và nguyên lý hoạt động của card màn hình............................... 71 3.2.6.2. Lập trình trực tiếp màn hình .................................................................... 73

4. Lập trình cho máy in .................................................................................................. 75

4.1. Vi mạch cổng song song ........................................................................................ 75

4.2. Lập trình trực tiếp cho máy in song song .............................................................. 75 4.2.1. Khởi phát máy in............................................................................................. 75 4.2.2. Đưa ký tự cần in ra máy in.............................................................................. 76

4.3. Lập trình sử dụng ngắt cho máy in ........................................................................ 78 4.3.1. Đưa nội dung màn hình ra máy in: sử dụng ngắt INT 5h ............................... 78 4.3.2. Sử dụng ngắt INT 17h..................................................................................... 78 4.3.3. Chương trình ví dụ .......................................................................................... 79

Bài tập .............................................................................................................................. 81

Chương IV. Lập trình thao tác đĩa và file .................................................................... 82

1. Tổ chức lưu trữ file trên đĩa....................................................................................... 83

Page 4: ngat_vip

Hpv HVKTMM

4

1.1. Cấu trúc đĩa ........................................................................................................... 83

1.2. Dung lượng đĩa: (byte) .......................................................................................... 83

1.3. Truy nhập đĩa:........................................................................................................ 83

1.4. Sự phân bố các file: ............................................................................................... 83 1.4.1. Cluster (liên cung): ......................................................................................... 84 1.4.2. Bảng FAT: ...................................................................................................... 84

1.5. Tiến trình đọc ghi file của DOS ............................................................................. 84 1.5.1. Dos đọc một file:............................................................................................. 84 1.5.2. Dos ghi một file: ............................................................................................. 85

2. Lập trình Xử lý file ..................................................................................................... 85

2.1. Thẻ file: .................................................................................................................. 85

2.2. Đọc/ghi file............................................................................................................. 85

2.3. Thay đổi thuộc tính file:......................................................................................... 85

3. Đọc và ghi các sector trực tiếp của đĩa: .................................................................... 86

Phụ lục: ............................................................................................................................ 88

Debug của MsDOS ....................................................................................................... 88

Assembly cơ bản............................................................................................................ 88

Tập lệnh 82086 ............................................................................................................. 88

Bài tập lớn........................................................................................................................ 92

Page 5: ngat_vip

Hpv HVKTMM

5

CHƯƠNG I. TổNG QUAN Mục đích: hiểu được một các tổng quan về hệ thống, hoạt động của hệ thống, tư tưởng chung của lập trình với thiết bị ngoại vi Nội dung: Hệ thống lại một cách khái quát cấu trúc máy tính để hiểu được tổng quan về:

� Kiến trúc chung của hệ thống phần cứng: các khối trong hệ thống, nguyên lý hoạt động của máy tính, cách thức CPU giao tiếp với các thành phần khác

� Hệ thống phần mềm: cấu trúc hệ điều hành, tiến trình hoạt động của máy từ khi bắt đầu khởi động, các mức phần mềm

� Các ý tưởng tổng tổng quan của lập trình hệ thống cho thiết bị ngoại vi

Page 6: ngat_vip

Hpv HVKTMM

6

1. KIếN TRÚC Hệ THốNG

1.1. KIếN TRÚC PHầN CứNG

1.1.1. MÔ HÌNH VÀ NGUYÊN LÝ MÁY VON NEUMAAN

Mô hình:

Nguyên lý: � Kiến trúc phần cứng gồm 3 khối cơ bản : đơn vị xử lý, bộ nhớ và hệ thống

vào/ra; các khối liên lạc với nhau qua hệ thống bus � Là máy tính nhớ chương trình:

− Chương trình điều khiển, xử lý dữ liệu cũng được xem là dữ liệu và được lưu trữ trong bộ nhớ

− Bộ nhớ chia làm nhiều ô, mỗi ô có 1 địa chỉ (số thứ tự) để có thể chọn lựa ô nhớ trong quá trình đọc ghi dữ liệu

� Là máy tính tuần tự: các lệnh được thực hiện tuần tự, tại mỗi thời điểm chỉ có một lệnh được thực hiện

1.1.2. CấU TRÚC CPU INTEL 80X86

1.1.2.1. Mô hình

BBộộ nnhhớớ ĐĐơơnn vvịị xxửử

llýý

HHệệ tthhốốnngg vvààoo//rraa

Dữ liệu Chương trình

Trao đổi thông tin

Điều khiển

Page 7: ngat_vip

Hpv HVKTMM

7

1.1.2.2. MÔ Tả

Là vi xử lý 16 bit. Các phép toán xử lý bên trong CPU là phép toán thực hiện trên số nhị phân 8 và 16 bit. Bus địa chỉ có 20 đường nên có thể quản lý lên đến 1Mb(=220bit) bộ nhớ (phạm vi địa chỉ từ 00000h đến FFFFFh). Bus dữ liệu của 80x86 có 16 bit. Cho phép sử dụng hệ thống ngắt và cơ chế DMA (Direct Memory Access). Quá trình chuyển dữ liệu trực tiếp giữa thiết bị ngoại vi và bộ nhớ chính không thông qua CPU gọi là quá trình(cơ chế) DMA. Sơ đồ khối vi xử lý 80x86 gồm hai phần chính : khối giao tiếp Bus (BIU:Bus interface unit) và khối thực thi (EU:Execution unit). Khối BIU chịu trách nhiệm lấy lệnh và giao tiếp ra bên ngoài để điều khiển bộ nhớ và I/O. Khối EU có nhiệm vụ thi hành lệnh, định thì, kiểm tra các tín hiệu trạng thái, các tín hiệu yêu cầu ngắt, cơ chế DMA, tín hiệu RESET, tín hiệu READY.

Page 8: ngat_vip

Hpv HVKTMM

8

Các lệnh trong bộ nhớ được khối BIU lấy vào liên tục và cất trong hàng đợi lệnh (có chiều dài 6 byte đối với 8086 hoặc 4 byte đối với 8088). Sau đó khối EU lấy lệnh từ hàng đợi lệnh ra để giải mã và thi hành. Hoạt động của hai khối BIU và EU diễn ra độc lập với nhau nên quá trình lấy lệnh và thi hành lệnh được vi xử lý thực hiện đồng thời theo cơ cấu đường ống (pipeline). Điều này tuy không làm tăng tốc độ xử lý của CPU (giới hạn bởi tần số xung đồng bộ) nhưng làm giảm bớt thời gian thi hành của cả chương trình. Nghĩa là nó chỉ làm giảm thời gian thực thi chương trình chứ không làm tăng tốc độ của CPU. Tốc độ CPU do phần cứng quy định và giới hạn bởi xung nhịp đồng bộ.

1.1.2.3. Bộ THANH GHI

Bộ thanh ghi đa năng: Gồm 8 thanh ghi 16 bit. − Các thanh ghi AX, BX, CX, DX có thể dùng phân

nửa như các thanh ghi 8 bit AH, AL, BH, BL, CH, CL, DH, DL.

− Thanh ghi AH là nửa cao của thanh ghi AX. − Thanh ghi AL là nửa thấp của thanh ghi AX.

Chẳng hạn nếu AX= 1234h thì AH=12h và AL=34h.

− AX là thanh ghi bộ tích lũy 16 bit (ACC). − AL là thanh ghi bộ tích lũy 8 bit. − BX là thanh ghi cơ sở (base register). − CX là thanh ghi bộ đếm (counter). − DX là thanh ghi dữ liệu (data). − SI là thanh ghi chỉ số nguồn (source index). − DI là thanh ghi chỉ số đích (destination index). − BP là thanh ghi con trỏ nền (base pointer). − SP là thanh ghi con trỏ ngăn xếp (stack pointer).

Bộ thanh ghi đoạn và con trỏ lệnh:

− Gồm 4 thanh ghi đoạn 16 bit dùng để quản lý bộ − nhớ theo phương pháp phân đoạn. − CS là thanh ghi đoạn chương trình (code segment). − DS là thanh ghi đoạn dữ liệu (data segment). − SS là thanh ghi đoạn ngăn xếp (stack segment). − ES là thanh ghi đoạn mở rộng (extra segment). − IP là thanh ghi con trỏ lệnh (instruction pointer).

Thanh ghi cờ (thanh ghi trạng thái):

− SF là cờ dấu (sign flag). − CF là cờ nhớ (carry flag).

Page 9: ngat_vip

Hpv HVKTMM

9

− ZF là cờ không (zero flag). − OF là cờ tràn (overflow flag). − AF là cờ trung gian (auxiliary flag) hay còn gọi là cờ nhớ nửa (half-carry

flag). AF = 0 khi không có sự tràn về dung lượng 4 bit. AF = 1 khi có sự tràn về dung lượng 4 bit. Ví dụ : phép toán 00001001 + 00000111 = 00010000 sẽ lập cờ AF lên 1.

− Cờ AF thường được dùng trong các phép toán BCD (là các số dùng hệ nhị phân 4 bit để biểu diễn số thập phân từ 0 ÷ 9).

− PF là cờ kiểm tra chẳn lẻ (parity flag). PF = 1 nếu số bit 1 của kết quả là số chẳn. PF = 0 nếu số bit 1 của kết quả là số lẻ. Ví dụ : sau khi thực hiện (00000101 AND 00000101) thì PF = 1.

− DF là cờ định hướng (direction flag). DF = 0 : định hướng giảm địa chỉ cho các lệnh xử lý chuỗi. DF = 1 : định hướng tăng địa chỉ cho các lệnh xử lý chuỗi.

− IF là cờ ngắt (interrupt enable flag). IF = 0 : cấm ngắt cứng INTR. IF = 1 : cho phép ngắt cứng INTR.

− TF là cờ bẫy (trap flag). Dùng để chạy từng bước khi cần kiểm tra hoạt động của CPU.

1.1.3. PHƯƠNG THứC QUảN LÝ Bộ NHớ

1.1.3.1. Sự PHÂN ĐOạN Bộ NHớ

Trong chế độ thực, bộ nhớ được quản lý theo cơ chế phân đoạn. Mức lôgic, bộ nhớ được định vị theo đoạn, mỗi đoạn nhớ được phân thành nhiều ô nhớ; chương trình không được xem là chuỗi liên tục của mã lệnh, dữ liệu mà được chia thành các đoạn: mã lệnh, dữ liệu, ngăn xếp. Mỗi đoạn được chứa trong bộ nhớ có địa chỉ xác định. Có 4 loại đoạn khác nhau:

− Đoạn mã lệnh (code segment): chứa mã lệnh của chương trình − Đoạn dữ liệu (data segment): chứa dữ liệu của chương trình − Đoạn ngăn xếp (stack segment): chứa thông tin và dữ liệu phục vụ chương

trình con − Đoạn mở rộng (extra segment): chứa dữ liệu mở rộng

CPU 8086 dùng phương pháp phân đoạn bộ nhớ để quản lý bộ nhớ 1Mb của nó. - Địa chỉ 20 bit của bộ nhớ 1MB không thể chứa đủ trong các thanh ghi 16 bit của CPU 8086 vì vậy bộ nhớ 1 MB được chia ra thành các đoạn (segment) 64KB. - Địa chỉ trong các đoạn 64KB chỉ có 16 bit nên CPU 8086 dễ dàng xử lý bằng các thanh ghi của nó.

Page 10: ngat_vip

Hpv HVKTMM

10

1.1.3.2. ĐịA CHỉ VậT LÝ VÀ ĐịA CHỉ LOGIC

- Địa chỉ 20 bit được gọi là địa chỉ vật lý. Địa chỉ vật lý được dùng trong thiết kế các mạch giải mã địa chỉ cho bộ nhớ và xuất nhập. - Ngược lại, trong lập trình, địa chỉ vật lý không được dùng mà nó được thay thế bằng địa chỉ lôgic. - Địa chỉ lôgic là địa chỉ gồm có hai thành phần : địa chỉ đoạn (segment) và địa chỉ trong đoạn (offset). - Mỗi địa chỉ thành phần chỉ có 16 bit và được viết theo cách sau : SEGMENT:OFFSET - Segment và offset là các số hệ 16. - Cách tính địa chỉ vật lý từ địa chỉ lôgic như sau :

Hoặc theo công thức :

Ví dụ : tính địa chỉ vật lý tương ứng với địa chỉ lôgic B001:1234 địa chỉ vật lý = B0010h + 1234 = B1244h - Địa chỉ segment còn được gọi là địa chỉ nền của đoạn. Nó cho biết điểm bắt đầu của đoạn trong bộ nhớ. - Trong khi đó, địa chỉ offset thể hiện khoảng cách kể từ đầu đoạn của ô nhớ cần tham khảo. Do offset có 16 bit nên chiều dài tối đa của một đoạn là 64K. Trong mỗi đoạn, ô nhớ đầu tiên có offset là 0000h và ô nhớ cuối cùng có offset là FFFFh.

- Mỗi ô nhớ chỉ có duy nhất một địa chỉ vật lý nhưng có thể có nhiều địa chỉ logic. Chẳng hạn các địa chỉ lôgic 1234:1234, 1334:0234, 1304:0534, ... đều có chung địa chỉ vật lý 13574h. - Để hiểu rõ tại sao, ta lần lượt xem quan hệ giữa địa chỉ vật lý với các thành phần segment và offset. - Với địa chỉ lôgic 0000:0000 ta có địa chỉ vật lý là 00000h.

Page 11: ngat_vip

Hpv HVKTMM

11

- Bây giờ ta giữ nguyên phần segment và tăng phần offset lên 1 thành ra địa chỉ lôgic 0000:0001. Địa chỉ vật lý tương ứng là 00001h. - Tương tự với địa chỉ lôgic 0000:0002 ta có địa chỉ vật lý 00002h. - Ta nhận thấy khi offset tăng 1 đơn vị thì địa chỉ vật lý tăng 1 địa chỉ hoặc là tăng 1 byte. Như vậy có thể xem đơn vị của offset là byte. - Bây giờ ta làm lại quá trình trên nhưng không tăng offset nữa mà tăng phần segment. Ta có : địa chỉ lôgic 0001:0000 tương ứng với địa chỉ vật lý 00010h. địa chỉ lôgic 0002:0000 tương ứng với địa chỉ vật lý 00020h. - Ta nhận thấy khi segment tăng 1 đơn vị thì địa chỉ vật lý tăng 10h địa chỉ hoặc là tăng 16 byte. Người ta gọi đơn vị của segment là paragraph. 1 paragraph = 16 bytes - Điều này cũng có thể được giải thích là do cách tính địa chỉ vật lý từ địa chỉ lôgic đã nêu ở trên.

- Từ các địa chỉ vật lý tính ra ở trên, ta thấy segment 0000 nằm ở đầu vùng nhớ nhưng segment 0001 bắt đầu cách đầu vùng nhớ chỉ có 16 bytes, segment 0002 bắt đầu cách đầu vùng nhớ 32 bytes . . . - Phần chồng chập của cả ba segment 0000, 0001 và 0002 trên hình vẽ là vùng bộ nhớ mà bất kỳ ô nhớ nào nằm trong đó (địa chỉ vật lý từ 00020h đến 0FFFFh) đều có thể có địa chỉ lôgic tương ứng trong cả 3 segment. Chẳng hạn ô nhớ có địa chỉ vật lý 0002Dh sẽ có địa chỉ lôgic trong segment 0000 là 0000:002D, trong segment 0001 là 0001:001D và trong segment 0002 là 0002:000D. - Như vậy nếu vùng bộ nhớ nào càng có nhiều segment chồng chập lên nhau thì các ô nhớ trong đó càng có nhiều địa chỉ lôgic (một ô nhớ có ít nhất 1 địa chỉ lôgic và nhiều nhất là 65536/16=4096 địa chỉ lôgic).

1.1.3.3. ĐịA CHỉ LÔGIC VÀ CÁC THANH GHI

- Để tham chiếu đến bộ nhớ trong chương trình, vi xử lý 8086 cho phép sử dụng các địa chỉ lôgic một cách trực tiếp hoặc thông qua các thanh ghi của nó. - Các thanh ghi đoạn dùng để chứa địa chỉ đoạn segment. - Các thanh ghi tổng quát dùng để chứa địa chỉ trong đoạn offset.

Page 12: ngat_vip

Hpv HVKTMM

12

- Để tham chiếu đến địa chỉ lôgic có segment trong thanh ghi DS, offset trong thanh ghi BX, ta viết DS:BX. Nếu lúc tham chiếu, DS=2000h, BX=12A9h thì địa chỉ lôgic DS:BX chính là tham chiếu đến ô nhớ 2000:12A9. - Trong cách sử dụng địa chỉ lôgic thông qua các thanh ghi của vi xử lý 8086, có một số cặp thanh ghi luôn luôn phải dùng chung với nhau một cách bắt buộc như sau : CS:IP : lấy lệnh (địa chỉ lệnh sắp thi hành).

SS:SP : địa chỉ đỉnh ngăn xếp.

SS:BP : thông số trong ngăn xếp (dùng cho chương trình con).

DS:SI : địa chỉ chuỗi nguồn (chỉ có ý nghĩa trong các lệnh xử lý chuỗi).

ES:DI : địa chỉ chuỗi đích (chỉ có ý nghĩa trong các lệnh xử lý chuỗi).

- Chương trình mà vi xử lý 8086 thi hành thường có 3 đoạn : đoạn chương trình có địa chỉ trong thanh ghi CS, đoạn dữ liệu có địa chỉ trong thanh ghi DS và đoạn chồng có địa chỉ trong thanh ghi SS.

1.1.4. CPU GIAO TIếP VớI THIếT Bị NGOạI VI

� Mô hình minh hoạ:

� CPU nhận biết một thiết bị I/O: − Mỗi I/O có một địa chỉ riêng( thường gọi là cổng); mỗi khi truy xuất

đến một I/O nào, CPU xuất ra địa chỉ(cổng) của I/O đó ra bus địa chỉ − Thông qua Bộ giải mã địa chỉ sẽ xác định I/O mà CPU muốn truy xuất

sẽ được chọn (tín hiệu chip select ở mức tích cực cao) � Trên thực tế, việc điều khiển vào ra được thực hiện thông qua hệ thống

ngắt( có thể là ngắt cứng hoặc ngắt mềm) – là các chương trình viết sẵn của hệ điều hành hoặc của các khối điều khiển. Hệ thống ngắt sẽ được tìm hiểu chi tiết trong chương II.

1.2. HOạT ĐộNG CủA Hệ ĐIềU HÀNH MS-DOS

CPU MEMORY VIDEO

CONTR

OLLER

KEYBOARD

CONTROLLE

R

HARDDI

SK

CONTR

OLLER

FLOPPY

DISK

CONTR

OLLER

MONITOR HARD

DISK FLOPPY

DISK

BBUUSS

KEYBOARD

Page 13: ngat_vip

Hpv HVKTMM

13

1.2.1. CÁC THÀNH PHầN CủA MS-DOS

� Hệ MS-DOS có 6 thành phần:

� ROMBIOS: là hệ chương trình chứa trong ROM, thực hiện ngay sau khi bật

nguồn nuôi của máy vi tính, chứa những chương trình điều khiển các bộ phận của máy (bàn phím, màn hình, bộ nhớ, máy in).

� Chương trình khởi động (Boot Sector-rãnh ghi khởi động): nằm trên cung đầu tiên của mỗi đĩa cứng và khởi phát tiến trình nạp vào bộ nhớ hai tệp

nằm trên đĩa là BIOS và DOS của HĐH MS-DOS. � Khối BIOS: (còn gọi BIOS.COM) với đuôi COM, cung cấp một giao diện ở

mức thấp với ROM-BIOS và điều khiển vào/ra của những thiết bị ngoài (bàn phím, màn hình).

� Khối DOS: cung cấp một giao diện ở mức cao với các chương trình áp dụng, nó điều khiển thư mục của các tệp cũng như sự ngăn cản ghi lên đĩa.

Chính khối này gọi các chức năng DOS bởi sự trung gian của ngắt INT 21h.

� Khối xử lý COMMAND.COM: xử lý những lệnh khác nhau mà người sử dụng gõ vào bàn phím để ra lệnh cho HĐH.

� Những lệnh ngoài (external): đó là những lệnh khác của MS-DOS mà không có trong bộ phiên dịch (interpreter) của lệnh COMMAND.COM

hoặc vì các lệnh này ít dùng, hoặc kích thước của lệnh rất lớn chiếm nhiều địa chỉ nhớ. Để mở rộng, người ta gọi các lệnh ngoài là tất cả các tệp thực

hiện được của đĩa (đuôi .EXE hay .COM).

Chương trình ứng dụng

DOS Command.com

Móc nối BIOS

ROM BIOS

CPU Lệnh ngoài

Page 14: ngat_vip

Hpv HVKTMM

14

� Ghi chú:

� Khối BIOS là giao diện mức thấp nên phải viết lại cho mỗi máy vi tính

khác nhau. � Khối DOS, giao diện mức cao của mọi máy và như nhau đối với mọi máy

tính. Vậy các giao diện là như nhau (DOS duy nhất), những chương trình ứng dụng như vậy có thể chuyển từ máy này sang máy khác.

1.2.2. Bố TRÍ HĐH TRONG Bộ NHớ TRUNG TÂM

Hệ điều hành được chương trình móc nối (Bootstrap) trên đĩa (cứng, mềm) ở

cung đầu tiên, nạp vào bộ nhớ trung tâm (từ đĩa hệ thống mềm hay cứng) theo các vùng của bộ nhớ trung tâm như hình 2.6.

Bảng véctơ ngắt là 256 byte nhớ dùng để chứa các địa chỉ (byte thanh ghi đoạn và byte offset-độ lệch) của tất cả các chương trình con phục vụ ngắt, tức các

chương trình phục vụ của BIOS, DOS, COMMAND.COM và ROM.BIOS. Mỗi một chương trình phục vụ ngắt này đảm bảo thực hiện một nhiệm vụ đã xác định rõ ràng của MS-DOS (xem chi tiết dưới mục dưới).

Hai khối DOS và BIOS có hai vùng liên lạc (communication), mỗi vùng có

bề rộng 100h = 256D địa chỉ nhớ giống như véctơ ngắt, dùng làm địa chỉ liên lạc hay bắc cầu tới phần cơ bản của DOS và BIOS.

Chương trình xử lý lệnh COMMAND.COM chiếm hai vùng nhớ tách biệt: - Phần thường trú.

ROM BIOS: 8KB FFFFFh FE000h

ROM: 32KB (ROM basic điều khiển đĩa cứng)

....

RAM trênL 640KB dành cho HĐH nhớ màn hình

Phần nửa thường chú của command.com

RAM dành để ghi và chạy chương trình ngoài

Phần thường trú của command.com DOS BIOS Vùng liên lạc DOS Vùng liên lạc BIOS Bảng vectơ ngắt 00400h

Page 15: ngat_vip

Hpv HVKTMM

15

- Phần nửa thường trú. Như vậy , HĐH chứa ở hai phần:

+ ROM BIOS có sẵn trong máy, điều khiển máy khởi động sau khi bật nguồn. + Các vùng còn lại là RAM, được nạp vào bởi chương trình Bootstrap (móc

nối có ở cung đầu tiên của đĩa hệ thống), dùng để nạp phần cơ bản của HĐH (DOS, BIOS và COMMAND.COM).

1.2.3. CHƯƠNG TRÌNH MÓC NốI (BOOTSTRAP LOADER)

Nhiệm vụ của chương trình này là nạp các tệp BIOS (hãng IBM gọi là IBM

BIO.COM, còn hãng Microsoft gọi là IO.SYS) và DOS (hãng IBM gọi là IBM DOS.COM, hãng Microsoft gọi là DOS.SYS).

Chương trình này nằm ở rãnh 0, cung 1, mặt 0 của đĩa mềm hoặc cung 1, đĩa 0, trụ đầu tiên trong đĩa cứng.

Chương trình này được ROMBIOS nạp từ đĩa vào RAM như hình 2.7 ở địa chỉ 07C00h, sau đó sự điều khiển nạp lại chuyển cho chính chương trình này. Chương trình này nạp vào bộ nhớ RAM gồm các khối:

+ IBMBIO.COM ở mặt 1, rãnh 0, cung 3 tới cung 6.

+ IBMDOS.COM ở mặt 1, rãnh 0, cung 7 tới 8 (hình 2.7). Với phiên bản (version) khác nhau của DOS, có sự khác nhau về việc ghi chương trình móc nối.

Nếu có tiện ích DISKLOOK, ta có thể xem văn bản của chương trình BOOT bằng cách chạy DISKLOOK, ấn núm chức năng F7, gõ vị trí ghi chương trình BOOT

(mặt 0, rãnh 0 và cung 1) rồi ấn phím F6 để chương trình BOOT hiện lên màn hình.

ROM BIOS

RAM

Boot Nạp hệ thống

Sector 1, r 0, m0

r 0, m1

7C00h

Page 16: ngat_vip

Hpv HVKTMM

16

1.2.4. CHƯƠNG TRÌNH VÀO/RA CƠ Sở BIOS

BIOS (Basic Input Output System) là chương trình:

- Điều khiển hệ (các ngắt cứng và ngắt của hệ - xem chi tiết ở dưới). - Điều khiển vào/ra của các thiết bị ngoài như bàn phím màn hình, máy in.

- Điều khiển ngắt do lệnh của chương trình bởi CTRL-BREAK hay bởi bộ định thời (timer).

- Điều khiển truy cập tới bảng các thông số của màn hình (trong ROM cho khối điều khiển MC 6845), của đĩa hay bảng dữ liệu của các ký tự phụ (ký

tự đồ họa). BIOS được chia thành hai khối:

- ROM.BIOS: chứa trong nhớ ROM, có sẵn trong bộ nhớ trung tâm. - BIOS.COM: (đuôi .COM) chứa trên đĩa hệ thống (mềm, cứng) được nạp

vào bộ nhớ RAM của bộ nhớ trung tâm.

1.2.4.1. ROM.BIOS

Chứa trong ROM, dung lượng 8KB từ địa chỉ FE000h tới FFFFFh. ROM.BIOS bao gồm các chương trình khác nhau:

- Chương trình tự kiểm tra PST: (Power on Self-Test) được thực hiện sau khi bật nguồn điện nuôi hay mỗi lần hồi phục hệ (Ctrl-Alt-Del). Chương trình

này thực hiện: + Kiểm tra bộ nhớ và các thiết bị ngoài (môi trường) của máy vi tính. + Đọc và chép chương trình móc nối từ đĩa vào bộ nhớ RAM (hình 2.7).

Nếu không có đĩa hoặc có lỗi trong chương trình được phát hiện, việc điều khiển được chuyển cho chương trình phiên dịch (interpreter) Basic có ở địa

chỉ OF6000h đến OFE00h trong ROM-basic. - Các chương trình điều khiển thiết bị ngoài: (gọi các ngắt cứng bởi vi mạch

8259A với mức ngắt 8 đến F) như đồng hồ (timer), bàn phím, liên lạc không đồng bộ, đĩa cứng, đĩa mềm, máy in.

- Các chương trình gọi ngắt của hệ (mức 0 – 7) gồm: + Các ngắt logic: chia cho 0, từng bước, dừng, tràn.

+ Các ngắt cứng: NMI (ví dụ sai số chẵn lẻ trong khối nhớ, vi xử lý không tiếp tục làm việc, chép nội dung màn hình ra máy in).

1.2.4.2. BIOS.COM

BIOS.COM ra đời nhằm:

- Khắc phục nhược điểm của ROM.BIOS như:

Page 17: ngat_vip

Hpv HVKTMM

17

+ Không phù hợp với DOS, cơ cấu chính của HĐH. + Phát hiện lỗi của ROM.BIOS và có thể sửa lỗi nhờ BIOS.COM.

+ ROM.BIOS không thể điều khiển được các thiết bị ngoài mới. - Mở rộng các chức năng của ROM.BIOS bằng cách ngắt (10h – 1Fh) để

điều khiển màn hình, xác định kích thước bộ nhớ, hành động đọc và ghi đĩa mềm, cassette, bàn phím, máy in, kiểm tra đồng hồ, truy cập bảng số liệu

của các ký tự đồ họa. - Chuẩn đoán lỗi của các thiết bị ngoài.

Đặc tính chính của BIOS là: - Xác định trạng thái của thiết bị ngoài.

- Hồi phục các đĩa. - Khởi động các thiết bị ngoài.

- Nạp các chương trình điều khiển thiết bị ngoài. - Định nghĩa những véctơ ngắt có số hiệu ngắn hơn (10h – 1Fh).

- Thuộc tính cho địa chỉ nhớ của DOS.COM. - Gọi DOS.COM.

Về cấu trúc, BIOS có hai phần: - Phần liên lạc BIOS chiếm địa chỉ nhớ từ 00400h tới 00500h mà các địa chỉ

con (từ 00400h) như bảng 2.2. - Phần lõi của BIOS.

1.2.3. KHốI ĐIềU HÀNH ĐĨA DOS.COM

Khối DOS.COM này là phần cơ bản của HĐH gồm: - Khối liên lạc của DOS có địa chỉ nhớ đầu là 00500h tới 00600h.

- Khối cơ bản của DOS có địa chỉ đầu là 00B00h.

Bảng 2.2. Địa chỉ nhớ dành cho BIOS liên lạc (bắt đầu từ 0400h)

Địa chỉ Biến số

01 08

10 12

13 15

RS232 base PRINTER-base

EQUIP-Flag MFG-T&T

Memory-Size 10-RAM-SIZE

Máy in không đồng bộ (nối tiếp)

17

18

KB-Flag

KB-Flag1

Page 18: ngat_vip

Hpv HVKTMM

18

19 1A

1C 1E

ALT-INPUT BUFFER-HEAD

BUFFER-TAIL KB-BUFFER

Bàn phím

3E

3F 40

41 42

SEEK-STATUS

MOTOR-STATUS MOTOR-COUNT

DISKETTE-STATUS NEC-STATUS

Đĩa mềm

49 4A

4C

CRT Mode CRT-COLS

CRT-LEN

Vi deo

4E

50 60

62 63

65 66

CRT-START

Cursor-POSN Cursor-Mode

ACTIVE-PAGE ADDR-6845

CRT-MODE-SET CRT-PALETTE

Màn hình

67 69

6B 6C

6E 70

71 72

74 đến 76 78 đến 83

EDGE-CNT CRC-REG

LAST-VAL TIMER-LOW

TIMER-HIGH TIMER-OFF

BIOS-BREAK RESET-BREAK

Đồng hồ

Đĩa cứng

Khác

Khối này là giao diện ở mức cao với những chương trình của người dùng, nó chứa:

+ Các chương trình điều khiển tệp (tổ chức thư mục và tệp trên đĩa, khóa và giải khóa việc ghi).

+ Các chương trình gọi các chức năng cho các đơn vị vào/ra theo ký tự (bàn phím, màn hình, máy in…).

Page 19: ngat_vip

Hpv HVKTMM

19

+ Các chương trình điều khiển bộ nhớ. + Các chương trình gọi thời gian (ngày, giờ, tháng, năm).

+ Chương trình điều khiển việc thực hiện chương trình (dừng, kết thúc). Khi một chương trình của người dùng thực hiện một chương trình vào/ra,

các hành động này phát các chức năng (function) ở mức cao (DOS.COM) bởi trung gian của nội dung các thanh ghi và các khối điều khiển. Những chức năng đó

được hoàn thiện bởi các lời gọi tới BIOS.COM như hình 2.8. HÌNH VẼ 2.8

Các ngắt của DOS (gọi các chức năng) có số hiệu từ 20h đến 3Fh và cả 67h để đua vào thanh ghi ngắt AL trước khi gọi lệnh ngắt chương trình INT nh. Ngắt

INT 21h gồm nhiều chức năng con, chính là bộ phận chủ yếu của HĐH MS-DOS.

1.2.4.TệP LệNH COMMAND.COM

a) Đại cương Ngoài BIOS và DOS, COMMAND.COM cũng là thành phần quan trọng của HĐH, nó tương đương CCP (Control Command Processor – bộ xử lý lệnh bàn

điều khiển). Khối này có hai chức năng: - Phiên dịch dòng lệnh đánh vào từ bàn phím.

- Điều khiển những ngắt. Khi lệnh gõ vào sai về cú pháp, lệnh COMMAND.COM này chỉ ra màn hình

là không thấy lệnh (Command not found) và lại quay về dấu nhắc (C>) của màn hình để chờ lệnh mới gõ vào từ bàn phím.

Trong bộ nhớ trung tâm, COMMAND.COM được nạp thành hai đoạn và chứa ba phần:

+ Phần lưu trú: nằm ngay trên DOS. Phần này chứa:

• Những khối xử lý những ngắt 22h, 23h và 24h (kết thúc chương trình,

dừng khẩn cấp CTRL-BREAK và do sai số).

• Chương trình nạp lại phần bán trú.

• Điều khiển lỗi và thông báo lỗi.

• Những lệnh nội (lưu trú). + Phần khởi phát: phần này chỉ dùng ở lúc khởi động máy vi tính, vị trí của nó được giải phóng. Sauk hi thực hiện (nguyên tắc phủ: overlay). Phần này có:

• Chương trình nạp AUTOEXE.BAT.

• Hiển thị ngày tháng.

• Xác định địa chỉ nạp hay HĐH sẽ nạp những chương trình trước khi

thực hiện chúng.

Page 20: ngat_vip

Hpv HVKTMM

20

+ Phần bán trú: nằm ở bên trên phần bộ nhớ của người dùng (RAM). Nó chứa hầu hết các khối (môđun) điều khiển những tệp của lệnh. BAT (xử lý theo lô).

Phần này có thể bị chia nhỏ nếu HĐH cần chỗ, vì có một chương trình của người dùng đang chạy. Nó sẽ được nạp lại khi bộ xử lý lệnh điều khiển máy (phần lưu

trú của COMMAND.COM).

b) Phân loại lệnh theo chức năng Với quan điểm chức năng, MS – DOS có 4 nhóm lệnh (hay chương trình) với các đuôi: .COM, . EXE, .SYS và .BAT.

- Các lệnh loại .COM Những chương trình loại .COM (lệnh COMMAND) mô phỏng những chương

trình CP/M có những mảng (segment) của mã lệnh (CS), của số liệu (DS và ES) và của ngăn xếp (SS) là trùng nhau, nghĩa là chúng cùng một giá trị. Mã lệnh và số

liệu của một chương trình là xen nhau ở bên trong mảng 64KB và mã lệnh được bắt đầu từ địa chỉ 0100h trong mảng. Những chương trình loại này có thể “quay

vòng” ở bên trong một mảng duy nhất; độ lớn của nó, bao gồm vùng hoạt động không quá 64KB. Chương trình loại có đuôi .COM này có thể chạy trực tiếp trên

máy, không cần một sự biến đổi nào.

- Các lệnh loại . EXE Các lệnh loại . EXE (EXEcute) là có thể chuyển đổi được, chúng nằm ở đầu một thông tin chuyển, dành cho chương trình nạp. Các thanh ghi mảng số liệu

(DS và ES) được nạp với giá trị (hằng) ở đầu một vùng nhớ có thể sử dụng, trong khi các thanh ghi mã lệnh (CS và IP) và ngăn xếp (SS và SP) nhận giá trị

do chương trình kết nối (LINKER) truyền cho. Với cách này,người lập trình có thể khởi phát những thanh ghi ở mọi giá trị mong muốn. Khi hành động nạp

diễn ra lâu hơn.Những tệp .EXE thường sinh ra bởi chương trình dịch assembler của MS- DOS. Chương trình tiện ích EXE2BIN của MS-DOS cho

phép biến đổi tệp .EXE sang tệp .COM để chạy chương trình.

- Các lệnh .SYS Đây là các lệnh liên quan tới cấu trúc thuộc nhóm CONFIG.SYS. Đó là các lệnh điều khiển thiết bị ngoài (ANSI.SYS, DISPLAY.SYS, EGA.SYS, Keyboard.SYS)

điều khiển khối nhớ (HIMEM.SYS, RAMDRIV.SYS) và các điều khiển khác (CHKSTATE.SYS, DBLSPACE.SYS).

- Các lệnh loại .BAT Những lệnh loại BAT (batch) là những tệp của văn bản chứa các lệnh, tương

đương với các tệp .SUB của CP/M. Một số tác giả gọi chúng là các tệp của các chương trình con (thủ tục – procedures). Những lệnh có mặt trong các tệp này

Page 21: ngat_vip

Hpv HVKTMM

21

có thể là tất cả các lệnh viết đúng của MS-DOS, của loại .COM hay .EXE hoặc cả loại . BAT với các thông số của chúng, các lệnh là độc lập tuyệt đối với

nhau. Những thủ tục là tương đương của chế độ xử lý theo lô (Batch Processing),

trong đó, nhiều chương trình (hay các lệnh) được móc nối với nhau một cách tự động, không có sự can thiệp của người điều hành (hay người sử dụng).

Những lệnh được dự kiến để cho phép một điều khiển nào đó được diễn ra bởi người dùng MD-DOS như ECHO, REM, PAUSE.

- ECHO (tiếng vang): hiển thị lên màn hình những yếu tố của một thủ tục dần dần trong quá trình thực hiện chúng.

- REM (ghi chú): cho phép làm hiển thị một ghi chú trong khi tiến hành kiểm tra một số điểm truyền qua.

- PAUSE (nghỉ): cho phép treo sự thực hiện một thủ tục để thực hiện một số hành động ngoài (như nạp đĩa vào đơn vị vào/ra; nạp lại giấy lên máy in …)

Bốn loại chương trình hay lệnh trên của MS-DOS chỉ cần gõ vào bàn phím tên của chúng (không cần ghi đuôi mở rộng) và ấn ENTER (CR) sẽ được

COMMAND.COM phiên dịch và được vi xử lý thực hiện.

c) Phân loại lệnh theo vị trí Theo vị trí ta chia: - Lệnh nội trú nắm ở trong bộ nhớ trung tâm

- Lệnh ngoại trú, chỉ nạp vào bộ nhớ khi gọi đến.

Những lệnh nội (intern) Những lệnh được gọi là nội dung là những lệnh được nhận biết và xử lý tức thì bởi chương trình phiên dịch (interpreter) COMMAND.COM.

Những lệnh loại này chia thành 7 nhóm (version 2): + Những lệnh khởi phát

MODE: đổi thiết bị đầu cuối chủ. PROMPT: đổi ký tự chờ (cho ổ đĩa A, C)

DATE: gọi ngày TIME: gọi giờ

+ Những lệnh điều khiển thư mục

DIR: hiển thị nội dung thư mục

CHDIR: đổi thư mục hiện hành PATH: chỉ đường dẫn tới tệp hiện hành

MKDIR: tạo thư mục mới RMDIR: xóa bỏ thư mục

Page 22: ngat_vip

Hpv HVKTMM

22

+ Những lệnh điều khiển tệp COPY: chép nội dung một tệp

TYPE: hiển thị nội dung một tệp RENAME: đổi tên một tệp

ERASE: xóa một tệp + Những lệnh điều khiển hoạt động

BREAK: thực hiện CTRL – C CLS: xóa màn hình

SET: thay nội dung một biến chuỗi EXIT: ra khỏi DOS

+ Những lệnh điều khiển hiển thị và ghi lên đĩa VER: hiển thị số phiên bản của DOS.

VERYFY : Kiểm tra lại việc ghi lên đĩa. + Những lệnh của các thủ tục

ECHO: hiển thị lên màn hình những phần tử của thủ tục. PAUSE: dừng, treo một thủ tục.

REM: hiển thị những ghi chú. + Những lệnh lập trình các thủ tục

FOR … IN …DO: cho một hành động lặp lại. GO TO: phân nhánh tới.

IF: thực hiện các điều kiện. SHIFT: bỏ qua những biến đã xử lý.

Những lệnh ngoài ( externe): Đây là những lệnh không thực hiện bởi bộ phiên dịch lệnh, nhưng được tệp

COMMAND.COM điều khiển trong suốt thời gian thực hiện. MS-DOS còn chia hai loại lệnh ngoài là:

+ Lệnh ngoài do DOS cung cấp. + Lệnh ngoài cùng không do DOS cung cấp.

- Lệnh ngoài của hệ: + Lệnh của phiên bản 1

EDLIN: soạn thảo dòng. DEBUG.COM: để hiệu chỉnh chương trình.

CHKDSK.com: để kiển tra nội dung của đĩa. FORMAT.COM: tạo dạng đĩa.

SYS.COM: chép lại chương trình hệ thống lên đĩa. EXE2BIN.COM: biến đổi một tệp EXE thành COM.

Page 23: ngat_vip

Hpv HVKTMM

23

COMP.COM: so sánh các tệp trên đĩa. + Lệnh của phiên bản 2

CONFIG.SYS: thay đổi cấu hình của hệ. DISCOPY.COM: chép một đĩa lên đĩa khác.

MORE.COM: hiể thị lên màn hình. PRINT.COM: đưa nội dung màn hình lên máy in.

RECOVER.COM: lây một tệp ở đĩa hỏng. FIND.EXE: tìn một văn bản trong một tệp.

SORT.EXE: tìm nội dung của một tệp. EXEFIX.COM: biến đổi tệp từ COM sang EXE.

CAT.COM: tìm một thư mục.

- Lệnh ngoài cùng Các lệnh này còn chia thành: + Lệnh nhóm 1: lệnh đặc biệt , tham gia vào hoạt động của hệ.

LIB.EXE: điều khiển thư viện của các khối. LINK.EXE: kết nối ( soạn thảo kết nối).

CREF.EXE: phát các hình chữ thập. MASM.EXE: macro assembler.

+ Lệnh nhóm 2: được tạo thnàh bởi các bộ dịch các ngôn ngữ ( biên dịch hay phiên dịch): Basic,Pascal…

+ Lệnh nhóm 3: có thể đặt tất cả các phần mềm áp dụng với số lượng không hạn chế.

Page 24: ngat_vip

Hpv HVKTMM

24

2. TƯ TƯởNG CHUNG CủA LậP TRÌNH VớI THIếT Bị NGOạI VI

2.1. CÁC THÔNG Số PHầN CứNG CủA THIếT Bị NGOÀI

2.1.1. CổNG VÀO/RA

Các thiết bị ngoại vi giao tiếp với CPU thông qua các cổng vào/ra; mỗi cổng vào ra đều có một địa chỉ do MS-DOS( hệ điều hành) qui định. Do đó, lập trình trực tiếp bằng hợp ngữ cần phải biết địa chỉ cổng vào/ra nối với thiết bị ngoại vi.Thường đồng nhất cổng chính là địa chỉ của cổng vào/ra nối với thiết bị ngoại vi. Một số cổng vào/ra của một số thiết bị ngoại vi thông dụng cho hệ máy IBM PC như sau: Địa chỉ Thiết bị 000-03F Bộ điều khiển DMA 8237A 1 020-03F Bộ điều khiển ngắt 8259A 1 060-06F Bộ điều khiển bàn phím 8042 0A0-0BF Bộ điều khiển ngắt 8029A 2 0C0-0CF Bộ điều khiển DMA 8237A 2 170-177 Đĩa cứng 1 1F0-1F7 Đĩa cứng 2 200-207 Gậy điều khiển trò chơi 2F8-2FF Vào/ra nối tiếp COM2 370-377 Đĩa mềm 2 378-37F Máy in song song LPT1, LPT2 380-38F Cổng cho mạng SDLC 3B0-3DF Màn hình VGA 3F8-3FF Vào/ra nối tiếp COM1 3D0-3DF Card màn hình màu CGA, EGA 3F0-3F7 Điều khiển đĩa mềm

2.1.2. CÁC VÙNG NHớ THAM Số

Vùng nhớ tham số của các ngắt là các biến hay các tham số của các ngắt BIOS, DOS; có nhiệm vụ chứa dữ liệu cho các ngắt. Có các địa chỉ dành riêng cho từng ngắt hoặc từng thiết bị ngoài để trỏ tới vùng nhớ tham số này. Khi lập trình trực

tiếp cần biết địa chỉ của các bảng tham số này để cung cấp tham số cho chương

trình còn khi lập trình sử dụng ngắt thì các chương trình con đọc các tham số nên người lập trình có thể không cần biết.

Địa chỉ nhớ cho các tham số của BIOS cho các thiết bị ngoài: Địa chỉ Kích thước Nội dung 0000:0400 2 byte Địa chỉ cơ sơ của khối ghép nối RS233(COM1) 0000:0402 2 byte Địa chỉ cơ sở của khối ghép nối RS232(COM2)

Page 25: ngat_vip

Hpv HVKTMM

25

0000:0404 2 byte Địa chỉ ...................................................(COM3) 0000:0406 2 byte Địa chỉ ...................................................(COM4) 0000:0408 2 byte Địa chỉ cơ sở của khối ghép nối máy in song

song 1 (LPT1) 0000:040A 2 byte Địa chỉ .................................................(LPT2) 0000:040C 2 byte Địa chỉ ..................................................(LPT3) 0000:040E 2 byte Địa chỉ .................................................(LPT4) 0000:0410 2 byte Danh sách các trang thiết bị phần cứng 0000:0412 1 byte Các lỗi trong phần kết nối bàn phím 0000:0413 2 byte Tổng bộ nhớ theo Kbyte 0000:0415 2 byte Đệm dùng cho kiểm tra các lỗi chế tạo 0000:0417 2 byte Các cờ trạng thái bàn phím 0000:0419 1 byte Giá trị của các phím Alt + Số 0000:041A 2 byte Địa chỉ đầu vùng đệm bàn phím 0000:041C 2 byte Địa chỉ cuối vùng đệm bàn phím 0000:041E 32 byte Vùng đệm bàn phím (miềm địa chỉ: 0000:041E-

0000:043D) 0000:0449 1 byte Chế độ màn hình hoạt động 0000:044A 2 byte Chiều rộng màn hình tính theo cột văn bản 0000:044C 2 byte Chiều dài vùng nhớ màn hình 0000:044E 2 byte Ofset tính từ phân đoạn màn hình của trang vùng

nhớ màn hình 0000:0450 16byte Vị trí con trỏ (8 cặp byte) 0000:0460 2 byte Kích thước con trỏ (byte thấp=dòng quét cuối,

byte cao=dòng đầu) 0000:0462 1 byte Số hiệu trang màn hình hoạt động hiện hành 0000:0463 2 byte Địa chỉ cổng chip MC 6845 0000:0465 1 byte Giá trị hiện tại chế độ màn hình của MC 6845 0000:0466 1 byte Giá trị hiện tại của mầu màn hình của MC 6845 0000:0478 4 byte Giá trị vượt thời gian của máy in (0478h:LPT1..) 0000:047C 2 byte Giá trị vượt thời gian của RS 232 (47Ch:COM1) 0000:0480 2 byte Địa chỉ Ofset bắt đầu vùng đệm bàn phím cho

AT và PS/2 0000:0482 2 byte Địa chỉ Ofset kết thúc........................................... 0000:0484 1 byte Hàng ký tự của EGA cao nhất 0000:0485 2 byte Số byte cho mỗi ký tự EGA(số dòng quét/ký tự) 0000:0487 1 byte Thông tin phụ về EGA dùng màn hình đơn sắc 0000:0488 1 byte Thông tin phụ về EGA dùng màn đơn sắc 0000:0496 1 byte Bit 4 của trạng thái cờ của bàn phím AT=1 0000:0497 1 byte Trạng thái cờ của bàn phím AT để hiện các phím

LOCK 0000:0498 4 byte Con trỏ đến trạng thái đợi 8 bit của người dùng

Page 26: ngat_vip

Hpv HVKTMM

26

0000:049C 4 byte Một Micro giây trước khi người dùng máy AT chờ xong

0000:04A0 1 byte Trạng thái cờ hành động chờ của người dùng (1=bận, 80h=đã qua, 0=nhận biết)

0000:04A8 4 byte Địa chỉ bảng con trỏ SAVE-PTR của EGA 0000:04F0 16byte Vùng trao đổi tin của các chương trình ứng dụng 0000:0500 1 byte Trạng thái in màn hình( 00h:cho phép in, 01h:

đang in, 0FFh: lỗi trong khi in)

Bảng các tham số: Lưu trữ thông tin chi tiết ứng với mỗi thiết bị ngoại vi. Gọi chức năng của ngắt -> biết được địa chỉ của bảng -> đọc được nội dung của bảng. Thực chất đây chính là các ofset ứng với địa chỉ đoạn (địa chỉ cơ sở) của địa chỉ nhớ cho thiết bị ngoại vi.

2.2. TƯ TƯởNG LậP TRÌNH

2.2.1. GIớI THIệU

Các chương trình điều khiển thiết bị ngoại vi thông dụng đã được viết sẵn trong hệ điều hành MS-DOS dưới dạng các ngắt (INT nh – n: kí hiệu số ngắt; h: dạng hexa). Khi gọi các chương trình phục vụ ngắt chỉ cần viết lệnh INT nh bằng hợp ngữ; cuối mỗi chương trình phục vụ ngắt đều có lệnh trở về chỗ bị ngắt của chương trình. Có 2 phương pháp lập trình cho các thiết bị ngoại vi: � Lập trình trực tiếp cho phần cứng: điều khiển các khối điều khiển của thiết bị

ngoại vi. Phương pháp này đòi hỏi nắm vững cấu trúc và hoạt động của các khối điều khiển; địa chỉ các thanh ghi, cấu trúc các thanh ghi trạng thái, địa chỉ các ngăn nhớ đệm dành cho thiết bị ngoại vi.

� Lập trình sử dụng ngắt: sử dụng các ngắt INT nh trong ROM-BIOS và DOS của hệ điều hành MS-DOS hay phần mềm hệ thống. Phương pháp này cần biết cách dùng các ngắt với các tham số vào(nạp vào các thanh ghi) và tham số ra(đưa ra các thanh ghi để biết kết quả thực hiện của các chương trình phục vụ ngắt). Thực chất chính các chương trình điều khiển trực tiếp tương tự với các chương trình (các hàm chức năng) phục vụ ngắt mà hệ điều hành đã viết sẵn để phục vụ, điều khiển thiết bị ngoại vi mà sẽ được thực hiện khi gọi ngắt.

Nguyên lý chung của lập trình tr ực ti ếp các thiết bị ngoại vi như sau: � Với lập trình trực tiếp can thiệp vào phần cứng:

− Bước 1: Nạp địa chỉ của các cổng vào/ra (thông thường nói đến cổng vào/ra chính là địa chỉ của cổng mà thiết bị ngoại vi tương ứng đựoc ghép nối vào)

− Bước 2: Kiểm tra trạng thái sẵn sàng hay yêu cầu trao đổi tin của các thiết bị ngoại vi

− Bước 3: Nạp dữ liệu cần đưa ra vào thanh ghi AX

Page 27: ngat_vip

Hpv HVKTMM

27

− Bước 4: Đưa số liệu ra bằng lệnh OUT hoặc đọc số liệu vào bằng lệnh IN

� Với phương pháp sử dụng các ngắt INT nh của hệ điều hành: − Bước 1: Nạp các chức năng hay các hàm phục vụ ứng với từng nhiệm

vụ của thiết bị ngoại vi tương ứng vào thanh ghi AH; các chức năng con vào thanh ghi AL

− Bước 2: Nạp các tham số vào cần thiết vào các thanh ghi thông dụng − Bước 3: Gọi ngắt INT nh tương ứng

2.2.2. QUI TắC CHUNG LậP TRÌNH CHO THIếT Bị NGOạI VI

Phương pháp trao đổi tin của CPU với thiết bị ngoại vi và cấu trúc chung của khối điều khiển ghép nối thiết bị ngoại vi

2.2.2.1. TRAO ĐổI TIN GIữA CPU VớI THIếT Bị NGOạI VI

� Trình tự trao đổi tin: khi trao đổi tin với thiết bị ngoại vi, vi xử lý thực hiện thông qua các lệnh theo trình tự: � CPU đưa ra địa chỉ cổng (địa chỉ thanh ghi đệm của khối ghép nối thiết bị

vào ra) lên bus địa chỉ(A0-An) để chọn vi mạch tương ứng với loại tin( điều khiển, trạng thái hay dữ liệu)

� Nếu đưa tin ra thiết bị ngoại vi, CPU sẽ ghi dữ liệu vào thanh ghi tích luỹ AX(của CPU). Sau đó, CPU đưa lệnh ghi số liệu WR(tích cực thấp) vào thanh ghi. Sau tín hiệu này dữ liệu sẽ được ghi vào thanh ghi đệm dữ liệu của khối điều khiển thiết bị ngoại vi.

� Nếu CPU cần đọc dữ liệu từ thiết bị ngoại vi, CPU phải đưa tín hiệu đọc RD sau khi đưa địa chỉ. Dữ liệu trên thanh ghi đệm đọc( trạng thái, dữ liệu) được đưa lên bus dữ liệu và ghi vào thanh ghi tích luỹ AX

� Chế độ trao đổi tin

� Trao đổi trực tiếp (đồng bộ): Do CPU thực hiện bằng cách đưa địa chỉ, dữ liệu và lệnh cho cổng mà không cần biết thiết bị ngoại vi có yêu cầu trao đổi không hoặc đã sẵn sàng chưa. Nhanh nhưng không tin cậy

� Trao đổi tin có kiểm tra trạng thái: Giống như trực tiếp nhưng CPU có kiểm tra trạng thái sẵn sàng của thiết bị ngoại vi. Do đó CPU cần: − Đọc dữ liệu của thanh ghi trạng thái − Kiểm tra bit sẵn sàng trao đổi tin của thiết bị ngoại vi. Nếu sẵn sàng thì thực hiện lệnh trao đổi tin ngay sau lệnh kiểm tra trạng thái. Nếu chưa sẵn sàng thì: chuyển sang kiểm tra trạng thái của thiết bị ngoại vi khác theo vòng kín (hỏi vòng trạng thái)

� Trao đổi tin theo ngắt chương trình: Do thiết bị ngoại vi khởi xướng bằng cách đưa yêu cầu trao đổi tin, yêu cầu ngắt chương trình INTR( Interrup Request) của CPU ngay khi CPU đang thực hiện một chương trình nào đó. Tiến trình như sau:

− 1. Làm thủ tục ngắt chương trình

Page 28: ngat_vip

Hpv HVKTMM

28

− 2. Phát tín hiệu xác nhận ngắt để tạo và đọc vecto ngắt( địa chỉ chứa địa chỉ của lệnh bắt đầu của chương trình con phục vụ trao đổi tin) từ khối ghép nối điều khiển thiết bị ngoại vi vào thanh ghi chứa AX.

− 3. Chuyển sang thực hiện chương trình phục vụ ngắt cho đến khi thực hiện lệnh RET( trở về) hoặc IRET( trở về từ ngắt). Trả điều khiển về cho chương trình chính

− 4. Thực hiện tiếp chương trình chính bị ngắt � Dạng tin trao đổi

� Dạng song song: Mỗi bit tin được truyền trên một đường dây riêng rẽ tại cùng một thời điểm. Nhanh nhưng tốn đường dây và bị nhiễu khi thiết bị ngoại vi ở xa

� Dạng nối tiếp: Tin trao đổi được truyền từng bit trên một đường dây 2 chiều hoặc 2 đường dây( đường phát Tx, đường thu Rx)

2.2.2.2. KHốI GHÉP NốI ĐIềU KHIểN TRAO ĐổI TIN

Giữa CPU và thiết bị ngoại vi phải lắp khối ghép nối(còn gọi là interface: giao diện hoặc adaptor: bộ điều hợp) để điều khiển trao đổi tin � Cấu trúc của khối ghép nối:

� Khối ghép nối song song: gồm − Khối đệm đường dây cho các đường địa chỉ, dữ liệu, điều khiển để tăng

cường công suất và cách ly CPU với thiết bị ngoại vi. − Khối giải mã địa chỉ và lệnh cho các thanh ghi đệm − Các thanh ghi đệm điều khiển, trạng thái, dữ liệu − Khối xử lý ngắt: mục đích chính là phát tín hiệu yêu cầu ngắt( INTR),

tạo véc tơ ngắt khi nhận xác nhận ngắt INTA từ CPU � Khối ghép nối nối tiếp: ngoài các thành phần giống khối ghép nối song

song khối ghép nối tiếp còn có: − Các thanh ghi dịch: để biến đổi tin song song thành nối tiếp và ngược lại − Khối điều khiển Modem cho tin truyền xa trên điện thoại − Khối phát nhịp thời gian cho tín hiệu phát và thu − Khối phát hiện các bit bắt đầu( start) và kết thúc( Stop) của byte tin − Khối kiểm tra lỗi cho truyền tin

� Hoạt động của khối ghép nối Theo trình tự:

− Khởi phát: khối ghép nối được ghi các thông tin về chế độ, lệnh điều khiển( được ghi ở bộ nhớ đệm và có địa chỉ dành riêng cho từng thiết bị ngoại vi)

− Đọc, kiểm tra và chờ trạng thái sẵn sàng của thiết bị ngoại vi − Trao đổi tin với thiết bị ngoại vi

2.2.2.3. LậP TRÌNH TRAO ĐổI TIN

Page 29: ngat_vip

Hpv HVKTMM

29

� Lập trình trực tiếp: Cần: nắm vững cấu trúc, hoạt động của CPU, khối ghép nối và thiết bị ngoại vi. Phải biết rõ địa chỉ các thanh ghi của khối ghép nối Bảng vùng địa chỉ dành cho thiết bị ngoại vi trong IBM-PC Loại thiết bị Vùng địa chỉ Bộ điều khiển thời gian 040-05F Bộ ghép nối song song( 8255A) 069-063 Các lệnh hợp ngữ dùng để lập trình trực tiếp: Lệnh chuyển: MOV A, B (trường hợp nạp địa chỉ cổng: A là DX, B là địa chỉ ofset , trường hợp gán số liệu để đưa ra cho AX: A là AX, B là giá trị dữ liệu) Lệnh IN A, B (trường hợp nạp trạng thái vào AX với A là AX, D là địa chỉ của thanh ghi trạng thái; hoặc trường hợp đọc dữ liệu từ thanh ghi đệm dữ liệu vào AX với A là AX, D là địa chỉ của thanh ghi đệm số liệu) OUT A, B (trường hợp đưa dữ liệu về điều khiển - lệnh, chế độ từ B ra thanh ghi điều khiển A; hoặc trường hợp đưa dữ liệu từ B ra thanh ghi đệm dữ liệu A) Lệnh chọn lôgic AND AX, dữ liệu (để lọc các bit về trạng thái-chỉ để lại các bit cần thiết của trạng thái cần xét) Lệnh kiểm tra trạng thái: TEST AX, dữ liệu (Nếu các bit của trạng thái trùng với các bit của dữ liệu thì cờ ZF=1, hiệu AX-dữ liệu =0, nhưng không đưa hiệu vào AX) CMP AX, dữ liệu (tương tự TEST nhưng gửi hiệu AX-dữ liệu vào AX) Lệnh nhẩy: JNZ A (nhẩy về nhãn A; sử dụng để nhẩy về lệnh đọc trạng thái nếu trạng thái chưa sẵn sàng) � Lập trình sử dụng ngắt INT nh

Page 30: ngat_vip

Hpv HVKTMM

30

Đơn giản hơn lập trình trực tiếp, không cần phải hiểu rõ cấu trúc của các khối ghép nối vì: Các chương trình con phục vụ ngắt thực chất chính là các chương trình trực tiếp đã viết cho các khối ghép nối Các số liệu cho lập trình trực tiếp đã ghi sẵn trong bộ nhớ đệm dành cho các khối ghép nối Lập trình sử dụng ngắt cần: Hiểu rõ ngắt và các chức năng phụ được dùng cho khối ghép nối nào và để làm gì Ghi đầy đủ các tham số vào cho các thanh ghi thông dụng của VXL mà ngắt yêu cầu Đọc các tham số ra để biết kết quả thực hiện Các lệnh hay dùng: MOV A, B (A thường là các thanh ghi, B là các con số chỉ ngắt hay các hàm chức năng) INC A, DEC A (tăng, giảm giá trị của thanh ghi A) Các lệnh kiểm tra: TEST, CMP Các lệnh nhẩy: JNZ, JZ, LOOP INT nh (gọi số hiệu ngắt cho từng thiết bị ngoại vi tương ứng) Lệnh kết thúc chương trình INT 20h, hoặc MOV AH, 4Ch INT 21h

2.2.3. DạNG TổNG QUÁT CủA CHƯƠNG TRÌNH PHụC Vụ THIếT Bị NGOÀI Sử DụNG NGắT

Các chương trình phục vụ trao đổi tin của các thiết bị ngoại vi đều có cấu trúc sau: Ghi chức năng( hàm phục vụ) vào thanh ghi AH, chức năng con vào thanh ghi AL của CPU bằng lệnh MOV Ghi các tham số vào cần thiết cho chức năng vào các thanh ghi BX, CX, DX Gọi ngắt hệ thống INT nh cho thiết bị ngoại vi Kết thúc chương trình có thể dùng các ngắt: Ngắt INT 20h: Kết thúc chương trình và trả điều khiển cho DEBUG Ngắt INT 21h: Có một số hàm chức năng riêng; trước khi gọi ngắt INT 21h phải nạp chức năng cụ thể vào thanh ghi AH. Các chức năng cơ bản: AH=00h: Kết thúc tương tự như INT 20h AH=4Ch: Kết thúc và trả điều khiển về cho MS-DOS AH=31h: Tương tự như 4Ch nhưng cần ghi mã trở về vào thanh ghi AL, lưu vào DX kích thước của bộ nhớ trong đoạn mã lệnh CS và lưu trữ chương trình trong bộ nhớ. Ngắt INT 27h: Kết thúc này ở lại thường trú trong bộ nhớ; DX ghi ofset của mã lệnh. Nếu không cần ghi chương trình thường trú trong bộ nhớ thì không nên dùng ngắt này vì nó sẽ xoá chương trình đã ghi trong vùng nhớ mà trỏ bởi địa chỉ CS:IP.

Page 31: ngat_vip

Hpv HVKTMM

31

Chương trình chưa ghi thường trú trong bộ nhớ sẽ bị xoá đi khi thoát khỏi DEBUG

Page 32: ngat_vip

Hpv HVKTMM

32

CHƯƠNG II. Hệ THốNG NGắT � Mục đích: nhằm hiểu rõ khái niệm, cơ chế hoạt động, của hệ thống ngắt để

sử dụng ngắt trong lập trình hệ thống � Nội dung chính:

− Khái niệm ngắt − Phân loại − Hệ thống ngắt cứng − Hệ thống ngắt mềm − Giới thiệu các ngắt của MsDos

Page 33: ngat_vip

Hpv HVKTMM

33

1. NGắT VÀ Bộ ĐIềU KHIểN PIC 8259

1.1. MộT Số KHÁI NIệM

Ngắt(Interrup) là cơ chế bắt CPU dừng công việc đang thực hiện để chuyển sang thực hiện quá trình phục vụ ngắt. Bản chất của quá trình phục vụ ngắt là quá trình gọi và thực thi các chương trình con phục vụ ngắt. Do đó, khi nói đến ngắt là hàm ý nói đến các chương trình này. Tất cả các chương trình phục vụ ngắt đều có chung đặc điểm: thứ nhất là hầu hết đã được viết sẵn ( là các chương trình của hệ điều hành) và được phép sử dụng ; thứ hai là địa chỉ của các chương trình con này phải được đặt ở một vùng nhớ xác định gọi là bảng véc tơ ngắt , nằm trong bộ nhớ chính. � Bảng véc tơ ngắt

Bảng véc tơ ngắt là bảng chứa địa chỉ của các chương trình phục vụ ngắt. Bảng này có 256 ô, các ô được đánh số thứ tự lần lượt từ 00h, 01h, …., 08h,…, 0Fh, ….10h,….,FFH. Số thứ tự của từng ô trong bảng được gọi là số hi ệu ngắt. N ô ội dung mỗi ô chứa địa chỉ logic của một chương trình phuc vụ ngắt xác định, các địa chỉ này còn được gọi là véc tơ ngắt.

Cấu tạo của một bảng véc tơ ngắt ở chế độ thực;

1.2. PHÂN LOạI NGắT

� Cách 1: Phân loại dựa vào việc kích hoạt ngắt: có ngắt cứng, ngắt mềm, ngắt lôgic( ngoại lệ) � Ngắt cứng: sử dụng làm phương pháp vào / ra dữ liệu, trong đó thiết bị vào

/ ra (thiết bị vật lý: bàn phím, máy in , đồng hồ nhịp thời gian v.v..) chủ động khởi động quá trình vào / ra. Quá trình phục vụ ngắt cứng được kích hoạt bằng một tín hiệu vật lý từ bên ngoài.

� Ngắt mềm: là ngắt được kích hoạt bằng các chương trình để gọi các chương trình con phục vụ ngắt thông qua chỉ thị INT.

� Ngắt lôgic(Ngoại lệ): là ngắt do chính CPU phát ra khi nó gặp lỗi. Ví dụ phép chia cho 0, tràn bộ nhớ...

� Cách 2: Theo sự nhận biết ngắt của CPU: ngắt che được và ngắt không che được � Ngắt che được(Maskable): có thể thiết lập để CPU nhận biết hoặc không

thể nhân biết được ngắt dựa vào cờ IF. Nếu IF=1, CPU có thể nhận biết ngắt, IF=0, CPU không thể nhận biết được; nghĩa là khi có yêu cầu ngắt CPU vẫn làm việc bình thường

� Ngắt không che được( Non Maskable): CPU luôn nhận biết được khi có yêu cầu ngắt, việc thiết lập cờ IF không ảnh hưởng gì

1.3. PIC 8259 VÀ Hệ THốNG NGắT CứNG

Page 34: ngat_vip

Hpv HVKTMM

34

1.3.1. NGắT CứNG

Các chương trình con phục vụ ngắt cứng thường được điều khiển quá trình vào/ra với các thiết bị vào ra chuẩn ở mức vật lý. Các trương trình con phục vụ ngắt cứng được kích hoạt bởi các tín hiệu vật lý IQR đế từ thiết bị vào – ra. Các chương trình con phục vụ ngắt mềm đực kích hoạt bởi lệnh INT trong hệ lệnh của CPU. Các chương trình con phục vụ ngắt logic cũng phục vụ cho hoạt động của hệ thống, nhưng chúng chỉ được kích hoạt khi CPU thực hiện lệnh phát sinh và thực hiện một ngoại lệ nào đó.

CPU được thiết kế để đáp ứng được với các quá trình ngắt cứng. CPU có một đầu vào nhận tín hiệu ngắt INT, khi nhận được tín hiệu này CPU sẽ phản ứng theo cơ chế ngắt cứng. Trong thực tế có nhiều thiết bị ngoại vi yêu cầu được phục vụ theo Phương pháp ngắt cứng (bàn phím, đống hồ hệ thống, máy in v.v..) và sinh ra nhiều yêu cầu ngắt. Do vậy cần có bộ điều khiển giúp CPU quản lý và phục vụ các yêu cầu ngắt, đó là bộ điều khiển ngắt PIC (Programmable Interrupt Controller). � Cấu trúc hệ thống ngắt cứng (h.48):

� Hệ thống ngắt cứng được xây dựng trên cơ sở hai bộ điều khiển ngắt PIC

8259, mỗi PIC 8259 có thể nhận 8 tín hiệu yêu cầu ngắt IRQ từ thiết bị vào / ra. Hai PIC này được kết nối với nhau theo kiểu ghép tầng, kết hợp hoạt động để có thể thực hiện được 16 yêu cầu ngắt ỈQ.

� Chức năng cơ bản của PIC 8259 : PIC 8259 là một vi mạch điện tử khả trình được thiết kế để giúp CPU thực hiện quá trình ngắt cứng. PIC 8259 thực hiện các chức năng sau:

− Ghi nhận được 8 yêu cầu ngắt IRQi , i = 0,1,2,….,7. − Cho phép chọn và phục vụ các yêu cầu ngắt theo mức ưu tiên. − Cung cấp cho CPU số ngắt tương ứng với yêu cầu ngắt IRQi số ngắt

này đại diện cho địa chỉ của chương trình con phục vụ thiết bị yêu cầu ngắt IRQi

− Cho phép hoặc không cho phép các yêu cầu ngắt IRQi kích hoạt hệ thống ngắt.

1.3.2. THIếT Bị ĐIềU KHIểN PIC 8259 VÀ CƠ CHế HOạT ĐộNG CủA Hệ THốNG NGắT CứNG.

� Cấu trúc bên ngoài của PIC 8259 (h.49)

Page 35: ngat_vip

Hpv HVKTMM

35

� Cấu trúc bên ngoài của PIC 8259 (h.50)

Các khối chức năng: � Thanh ghi yêu cầu ngắt IRR (Interrupt Request Register) : là thanh ghi 8

bit. IRR chứa “ghi nhận” tất cả các yêu cầu ngắt IRQi đòi phục vụ. Nếu tín hiệu IRQi = “1” thì bit IRRi tương ứng được đặt bằng “1”.

� Bộ giải quyết ưu tiên PR (Priority Resolver) : là thanh ghi 8 bít. PR xác định mức ưu tiên của các yêu cầu ngắt. Ngắt có ưu tiên cao nhất được chọn và đặt vào bit tương ứng trong ISR trong chu kỳ INTA.

� Thanh ghi ngắt đang được phục vụ ISR (In service Rigister): là thanh ghi 8 bit. ISR ghi nhận các ngắt đang được phục vụ. yêu cầu ngắt IRQi nào đang được phục vụ thì bit ISRi tương ứng được đặt bằng “1”.

� Khối logic điều kiện đươa ra thí nghiêm INT được nối thẳng vởis chân của CPU khi INT có mức cao là đòi CPU là phục vụ ngắt khôid\s logic điều khiển nhận INTA từ CPU khi nhận được tín hiệu INTA, PIC 8259 sẽ cung cấp số ngắt ra BUS dữ liệu cho CPU khối đệm Bus là loại 8 bit, hai hướng , 3 trạng thái cá từ điều khiển ICWPCW được đưa vào PIC 8259 qua khối này để xác lập chế độ của 8259 số ngắt và trạng thái hoạt động của PIC cũng được đưa ra BUS dữ liệu qua khối này.

� Khối ghép tầng � PIC 8259 có cơ cấu cho phép nối ghép tầng các PIC 8259 với nhau và khối

hoạt động của khối PIC này . tầng thứ nhất có đầu ra nối trực tiếp với CPU, gọi là PIC 8259 - chủ đầu vào IRQi của PIC chủ được nối với đầu ra của PIC 8259 ra. PIC này được gọi là PIC 8259 - thơ cơ chế ghép tầng cho phép xây dựng một hệ thống ngắt cứng quản lý được đến 64 yêu cầu ngắt IRQ.

� Khối logic ghi / đọc và giải mã: Thực hiện giải mã các từ điều khiển ICW (Initialization Command Word - từ điều khiển khởi động) và OCW (Operation Command Word - từ điều khiển hoạt động) qua hai lại từ điều khiển này người sử dụng có thể lập trình xác lập chế độ hoạt động cho PIC.

� Thanh ghi IMR: là thanh ghi 8 bit, cho phép đặt / xoá mạt nạ ngắt.

Page 36: ngat_vip

Hpv HVKTMM

36

� Bảng các tín hiệu CS, AO, RD, WR, và cách ghi / đọc PIC 8259

CS AO RD WR D4 D3 Hướng thông tin 0 0 0 1 X X IRR, ISR => BUS 0 1 0 1 X X (IMR) = OCW1 => BUS 0 0 1 0 0 0 BUS => OCW2 0 0 1 0 0 1 BUS => OCW3 0 0 1 0 1 X BUS => ICW1 0 1 1 0 X X BUS => ICW2, ICW3, ICW4, OCW1

� Cơ chế hoạt động của hệ thống ngắt cứng:

Điều kiện ban đầu: PIC 8259 cần được khởi động qua các từ điều khiển ICW. Sau khi các từ điều khiển ICW được nạp thì PIC 8259 sẵn sang hoạt động. � Một hoặc nhiều thiết bị vào – ra có yêu cầu được phục vụ phát tín hiệu

IRQi = “1” (mức tích cực) cho PIC. PIC ghi nhận các yêu cầu ngắt IRQi này bằng cách đặt các bit IRRi tương ứng lên “1”.

� PIC 8259 chọn IRQi có mức ưu tiên cao nhất để phục vụ PIC gửi tín hiệu INC cho CPU, đòi CPU phục vụ.

� CPU thực hiện các thao tác − Thực hiện nốt lệnh của quá trình hiện hành − Lưu địa chỉ trở về (nội dung của các thanh ghi CS, IP) và thanh ghi

cờ FLAGS vào ngăn xếp. − Gửi hai tín hiệu ngắt INTA cho PIC.

� Khi PIC 8259 nhận được tín hiệu INTA thứ 1 : bit ISRi ứng với IRQi có mức ưu tiên cao nhất được thiết lập (ISRi = 1) và bit IRRi tương ứng bị xoá (IRRi = 0) trong chu kỳ INTA thứ nhất này PIC 8259 không gửi cho CPU qua BUS dữ liệu.

� Khi PIC 8259 nhận được tín hiệu INTA thứ 2: PIC 8259 gửi số ngắt tương ứng với IRQi dang được phục vụ qua BUS dữ liệu cho CPU.

� CPU nhận số ngắt trên cơ sở của số ngắt này vào vị trí tương ứng trong bảng véc tơ ngắt để xác định địa chỉ của chương trình phục vụ ngắt . CPU nạp địa chỉ chương trình phục vụ ngắt vào các thanh ghi CS, IP, và bắt đầu thực hiện chương trình phục vụ này

� Khi thực hiện xong chương trình phục vụ ngắt (khi CPU thực hiện lệnh IRET) thì quá trình phục vụ của CPU cũng kết thúc. CPU khôi phục địa chỉ trở về vào các thanh ghi CS, IP, khôi phục nội dung thanh ghi FLAGS và tiếp tục thực hiện quá trình vừa bị ngắt.

� Hệ thống ngắt cứng có thể kết thúc phục vụ ngắt hiện thời theo hai chế độ: � Kết thúc ngắt bình thường EOI (End Ò Interrupt): khi PIC được đặt chế

độ kết thúc ngắt bình thường EOI thì CPU phải phát lệnh báo kết thúc ngắt EOI (qua từ điều khiển OCW2 cho PIC trước khi rời khỏi chương

Page 37: ngat_vip

Hpv HVKTMM

37

trình con phục vụ ngắt. Khi đó bit ISRi của ngắt đang được phục vụ sẽ được dặt xuống 0.)

� Kết thúc ngắt tự động AEOI (Automantic EOI): khi PIC được dặt chế đọ kết thúc ngắt tự động AEOI thì tại chu kỳ INTA thứ 2 bit ISRi của ngắt đang được phục vụ sẽ được đặt xuống 0.

Bằng các cánh nói trên hệ thống ngắt cứng có thể phục vụ yêu cầu ngắt này ở những phần tiếp theo.

2. CÁC NGắT CủA MS-DOS DÀNH CHO THIếT Bị NGOạI VI Các chương trình phục vụ ngắt của hệ điều hành MS-DOS gán bởi các số hiệu

ngắt (từ 00h-FFh). Khi cần chỉ cần gọi số hiệu ngắt bởi lệnh gọi ngắt INT nh (n: số hexa); từ số hiệu ngắt trong bảng vecto ngắt sẽ lấy được địa chỉ của ngắt trong bộ

nhớ; từ đó có thể gọi thực hiện chương trình phục vụ ngắt. Các số hiệu chức năng của MS-DOS như sau:

2.1. CÁC NGắT CủA BIOS VÀ ROMBIOS

� Các ngắt của hệ 0 đến 7 ( ROM, BIOS) � Ngắt logic:

0 - Chia cho 0 1 - Chế độ từng bước

3 - Điểm dừng thực hiện chương trình 4 - Tràn dung lượng

� Ngắt cứng: 2 - NMI: ngắt không che được

5 - In màn hình ( print screen) � Ngắt dưới sự điều khiển của PIC 8259A

Số hiệu ngắt từ 8 đến F ( ROM.BIOS) nố vào INTR của VXL, các ngắt có dấu * là chủ yếu.

8* Dao động của đồng hồ ( ngắt 18,2 lần/1 sec) 9* Chỉ phím ấn của bàn phím dùng để chỉ ngày giờ ( INT 1Ah) và kiểm

tra tốc độ của đĩa A – Không dùng

B – Liên lạc không đồng bộ ( cửa nối tiếp) C – Bộ phối hợp của lien lạc không đồng bộ

D – Đĩa cố định E* - Đĩa mềm

F – Máy in

Page 38: ngat_vip

Hpv HVKTMM

38

� Ngắt điều khiển thiết bị ngoài 10 – Điều khiển màn hình

11 – Xác định cấu hình của máy vi tính 12 – Xác định kích thước bộ nhớ

13 – Hành động đọc và ghi lên đĩa 14 – Vào/ra cho liên lạc nối tiếp

15 – Hành động vào/ra của cassette 16 – Bàn phím; bổ xung cho INT9h

17 – Máy in 18 – Điểm vào của Basic chứa trong ROM

19 – Điểm vào của khối móc nối (BOOT: địa chỉ 7C00h) 1A – Giờ của ngày.

� Ngắt phát bởi chương trình

1B – Ngắt chương trình bởi CTRL-BREAK

1C – Điều khiển bộ đếm đồng hồ. � Ngắt truy cập bảng các thông số

1D – Bảng các thông số màn hình có trong ROM (dùng để khởi phát khối điều khiển 6845)

1E – Bảng các thông số của ổ đĩa 1F – Bảng các số liệu của các ký tự phụ.

2.2. CÁC NGắT CủA DOS (GọI CÁC CHứC NĂNG)

20 – Kết thúc chương trình, trả điều khiển cho DOS 21 – Gọi các chức năng DOS (chỉ số chức năng trong AH)

22 – Điểm kết thúc chương trình 23 – Điểm dừng khẩn cấp

24 – Điểm dừng khi có lỗi 25 – Đọc trực tiếp trên đĩa với địa chỉ trực tiếp

26 – Ghi trực tiếp lên đĩa với địa chỉ trực tiếp 27 – Đặt ở chế độ thường trú của một chương trình

28 ÷ 3F Các ngắt dùng bên trong chương trình. 67 – Ngắt điều khiển khối nhớ.

2.2.1. CÁC CHứC NĂNG CủA NGắT INT 21H CủA DOS

Riêng ngắt INT 21h của DOS cho phép truy cập tới 94 chức năng (function) tính tới phiên bản 3.0 trong đó có 13 chức năng được dùng bên trong

Page 39: ngat_vip

Hpv HVKTMM

39

DOS, còn 81 chức năng có thể gọi được từ một chương trình sử dụng. Trước khi gọi lệnh ngắt INT 21h, số hiệu chức năng phải nạp vào thanh ghi AH của vi xử lý

và có thể mỗi chức năng này còn có số hiệu chức năng con để nạp vào AL (xem chương 5).

Danh sách các chức năng của ngắt INT 21h như sau:

Số hiệu chức năng Chức năng 00h Kết thúc chương trình 01h Nhập vào từ bàn phím

02h Đưa ra màn hình 03h Vào phụ (bìa không đồng bộ)

04h Ra phụ (bìa không đồng bộ) 05h Đưa ra máy in

06h Vao/ra trực tiếp từ bàn điều khiển 07h Vào trực tiếp từ bàn điều khiển không đưa ra màn hình

08h Vào từ bàn điều khiển không đưa ra màn hình 09h In

0Ah Vào từ bàn phím ở bộ nhớ đệm 0Bh Kiểm tra trạng thái của đơn vị vào

0Ch Xóa bộ đệm bàn phím 0Dh Hồi phục đĩa

0Eh Chọn đĩa 0Fh Mở tệp

10h Đóng tệp 11h Tìm số liệu vào đầu tiên trong thư mục

12h Tìm số liệu vào thứ hai 13h Bãi bỏ tệp

14h Đọc nối tiếp 15h Ghi nối tiếp

16h Tạo tệp mới 17h Thay đổi tên tệp

18h Bên trong DOS 19h Đọc chỉ số đĩa hiện hành

1Ah Chỉ địa chỉ của bộ đệm của đĩa (DTA) 1Bh Các tin tức về bảng các tệp (FAT)

1Ch Tin tức của bảng các tệp của đĩa 1Dh Bên trong DOS

Page 40: ngat_vip

Hpv HVKTMM

40

1Eh Bên trong DOS 1Fh Bên trong DOS

20h Bên trong DOS

21h Đọc một tệp 22h Ghi một tệp

23h Đọc kích thước một tệp 24h Khởi phát vùng ghi có chọn lựa trong một FCB

25h Khởi phát véctơ ngắt 26h Tạo một tiếp đầu mảng (segment) mới của chương trình (PSP)

27h Đọc nhiều khối ghi 28h Ghi nhiều khối, CX=0: thay đổi kích thước một tệp

29h Phân tích tên của tệp 2Ah Đọc ngày trong CX:DX

2Bh Ghi ngày trong CX:DX

Page 41: ngat_vip

Hpv HVKTMM

41

CHƯƠNG III. LậP TRÌNH CHO CÁC THIếT Bị VÀO RA � Mục đích:

− Hiểu được cấu trúc, nguyên lý hoạt động của các thiết bị vào ra thông dụng

− Trên cơ sở đó, lập trình cho các thiết bị này � Nội dung:

− Lập trình bàn phím o Cấu trúc và nguyên lý hoạt động o Lập trình bàn phím

− Lập trình cho chuột o Cấu trúc, hoạt động của chuột o Lập trình

− Lập trình màn hình − Lập trình máy in...

Page 42: ngat_vip

Hpv HVKTMM

42

1. LậP TRÌNH BÀN PHÍM

1.1. CấU TRÚC VÀ NGUYÊN LÝ HOạT ĐộNG CủA BÀN PHÍM

(Bổ sung phần cấu tạo và nguyên lý hoạt động) Có 2 loại bàn phím: Bàn phím điều khiển trực tiếp: ít phím, thường đặt ở bàn tự động hoá dùng máy vi tính Bàn phím thông thường: chứa vi xử lý và bộ nhớ đệm; có nhiều phím ấn Các nhóm phím: Các phím mã ASCII( American national Standard Code Infomation Interchange).... Trong bàn phím có một vi xử lý (8048 cho PC XT, 8042 cho PC AT) để tạo mã quét và mã ASCII khi một phím nhấn và thả. Còn có bộ nhớ đệm để ghi mã quét trước khi truyền vào CPU. Bộ điều khiển bàn phím có thanh ghi điều khiển, thanh ghi trạng thái để CPU ghi lệnh điều khiển hoặc đọc thông báo trạng thái (các cờ). Thanh ghi đệm số liệu để ghi dữ liệu đưa vào/ra. Có một số loại bàn phím sử dụng cho IBM PC. Bàn phím chuẩn có 83 phím; một số loại mở rộng sử dụng 101 phím. Các phím được chia thành ba nhóm chính: Các phím mã ASCII (American national Standard Code Infomation Interchange): là các phím tương ứng với các ký tự hiển thị ASCII và các ký tự điều khiển bao gồm: các chữ cái, các chữ số, các dấu câu, dấu số học và một số biểu tượng đặc biệt; các phím điều khiển như: ESC, Enter, Backspace, Tab. Các phím chức năng: F1-F10 (hoặc F1-F12 với các phím mở rộng), các phím mũi tên, các phím Home, PgUp, PgDn, End, Ins, Del. Các phím này thường được dùng trong chương trình để thực hiện chức năng đặc biệt. Các phím dịch: Shift trái, Shift phải, Caps Lock, Ctrl, Alt... Các phím này thường dùng kết hợp với các phím khác. � Mã Scan: Mỗi phím trên bàn phím được gán một số duy nhất gọi là mã scan của phím. Khi một phím được nhấn, vi mạch bàn phím gửi mã scan tương ứng đến CPU. Giá trị các mã scan bắt đầu từ 1. Để phân biệt một phím nhấn đã được nhả, vi mạch phím sẽ gửi một mã mới bằng mã scan cũ cộng 80h (128) gọi là mã kết thúc. Ví dụ mã scan của ESC là 1h thì mã kết thúc của nó là 81h. Khi nhấn tổ hợp các phím sẽ thu được mã scan và mã ASCII khác. Bộ đệm bàn phím: bàn phím có một bộ nhớ đệm để lưu trữ các phím đã nhấn nhưng chưa được đọc bở chương trình. Mỗi phím nhấn được chứa trong một từ với: byte cao chứa mã scan; byte thấp chứa mã ASCII nếu là phím ASCII hoặc chứa 0 nếu là phím chức năng. Một phím dịch không được lưu trong bộ đệm; khi phím dịch kết hợp với các phím khác sẽ tạo lên một mã scan tổ hợp và được lưu vào bộ đệm.

Page 43: ngat_vip

Hpv HVKTMM

43

Các phím được lưu trữ trong bộ đệm theo cấu trúc hàng đợi (Queue). Nếu có yêu cầu nhập phím mà bộ đệm rỗng, hệ thống sẽ đợi cho đến khi một phím được nhấn. Khi bộ đệm đầy, nếu nhấn phím, máy tính sẽ phát tiếng kêu báo lỗi. � Hoạt động: Khi nhấn một phím và chương trình thi hành đang đọc nó; tiến trình như sau:

1. Bàn phím gửi ngắt 09h đến CPU yêu cầu trao đổi tin 2. Chương trình phục vụ ngắt 09h đọc từ cổng vào/ra và chứa vào trong bộ

đệm. 3. Chương trình có thể sử dụng các ngắt của hệ điều hành để đọc các giá trị

này

1.2. CÁC NGắT DÙNG CHO BÀN PHÍM

Bảng các ngắt bàn phím: Ngắt Nguồn gốc Công dụng INT 09h Từ thiết bị bàn phím

Do chương trình Báo bàn phím yêu cầu trao đổi tin

INT 16h ROM-BIOS Yêu cầu phục vụ bàn phím INT 01Bh ROM-BIOS Tạo ngắt khi có tổ hợp Ctrl-c INT 21h DOS Yêu cầu phục vụ bàn phím INT 23h DOS Yêu cầu xử lý ngắt Ctrl-c

� Ngắt INT 9h Sinh ra do nhấn phím, được đưa vào CPU qua vi mạch xử lý ngắt PIC 8259 (ngắt cứng); yêu cầu họ vi xử lý 86 trao đổi tin

� Ngắt INT 16h Thuộc ROM-BIOS, thuộc chương trình vào ra cơ sở đã ghi trong ROM. Kết thúc chương trình, trả điều khiển về cho chương trình trước đó, không trả về DOS Các hàm chức năng

Chức năng Mô tả 00h Đọc ký tự bàn phím tiếp theo

Tham số vào:AH=00h Tham số ra: AH=mã quét của phím; AL=mã ASCII của phím

01h Đọc và kiểm tra sự sẵn sàng của một phím. Sử dụng cờ ZF: 1 chưa sẵn sàng, 0: đã sẵn sàng( đã có một phím ấn) Tham số vào: AH=01h Tham số ra: AH=mã quét, ZF=0; AL=mã ASCII

02h Đọc trạng thái phím Shift hay kiểm tra trạng thái một số phím điều khiển và một số chế độ vào của phím

Page 44: ngat_vip

Hpv HVKTMM

44

Tham số vào: AH=02h Tham số ra: AH=trạng thái phím Shift với các bít trạng thái: bit 7 = 1( phím Insert đã được nhấn); bit 6 = 1( phím Caps Lock đã được nhấn); bit 5 = 1( phím Num Lock đã nhấn); bit 4 = 1( phím Scroll đã nhấn); bit 3 = 1( phím Alt đã nhấn); bit 2 = 1( phím Ctrl đã nhấn); bit 1 = 1( phím dịch trái đã nhấn); bit 0 = 1( phím dịch phải đã được nhấn)

03h Đặt tốc độ gõ phím và thời gian trễ Tham số vào: AH=03h; AL=05h; BL=vận tốc gõ tự động( với 00h:30lần/s; 01h:26.7lần/s; ...); BH=thời gian trễ( với 01h: 500ns; 02h:750ns; 03h:1000ns) Tham số ra: không có

04h Dành riêng 05h Ghi mã của một phím vào bộ nhớ đệm

Tham số vào: AH=05h; CH=mã quét của phím; CL=mã ASCII Tham số ra: AL=00h( đã ghi); AL=01h( bộ đệm đầy)

06-0Fh Dành riêng 10h Đọc bàn phím mở rộng

Tham số vào: AH=10h Tham số ra: AH=mã quét của phím; AL=mã ASCII

11h Đọc trạng thái của bàn phím mở rộng Tham số vào: AH=11h Tham số ra: ZF=1( không có hành động); ZF=0( có hành động); AH=mã quét của phím; AL=mã ASCII

12h Đọc trạng thái mở rông của phím Shift Tham số vào: AH=12h Tham số ra: AH=trạng thái của Shift (với các bit đã mô tả trong chức năng 02h); AL=trạng thái Shift mở rộng: bit 7 = 1( SysReg được nhấn); bit 6 = 1( Caps Lock được nhấn); bit 5 = 1( Num Lock được nhấn); bit 4= 1( Scroll Lock được nhấn); bit 3 = 1( Alt phải được nhấn); bit 2=1( Ctrl phải được nhấn); bit 1 = 1( Alt trái được nhấn); bit 0 = 1( Ctrl trái được nhấn)

� Ngắt INT 21h( của DOS) với các hàm cho bàn phím So với INT 16h của ROM-BIOS, INT 21h có đặc điểm: Thực hiện chậm hơn Có thể đưa vào/ra trực tiếp màn hình mà không qua bộ nhớ đệm của bàn phím Có thể hiện ký tự đưa vào/ra màn hình Các chức năng:

Page 45: ngat_vip

Hpv HVKTMM

45

Chức năng Mô tả 01h Vào ký tự có in ra màn hình

Tham số vào: AH=01h Tham số ra: AH=mã scan; AL=mã ASCII

06h Vào trực tiếp từ bàn điều khiển, có in ra màn hình Tham số vào: AH=06h, DL=mã ASCII của ký tự muốn đưa ra, DL=FFh nếu muốn đưa ký tự vào từ bàn phím Tham số ra: AL=mã ASCII của phím nhấn

07h Vào trực tiếp từ bàn điều khiển, không in ra màn hình Tham số vào: AH=07h Tham số ra: AL=mã ASCII của phím nhấn

08h Vào các ký tự từ bộ đệm, không đưa ra màn hình Tham số vào: AH=08h Tham số ra: AL=mã ASCII của phím nhấn

0Ah Đọc vào một chuỗi các ký tự từ bàn phím, ghi ở bộ đệm, có đưa ra màn hình, tối đa 254 ký tự Tham số vào: AH=0Ah Tham số ra: mã của chuỗi ký tự được đưa vào bộ nhớ có địa chỉ DS:DX

0Bh Đọc và kiểm tra trạng thái của bàn phím Tham số vào: AH=0Bh Tham số ra: AL=mã ASCII của phím nhấn nếu có, nếu không AL=0; AL=FF nếu có ít nhất 1 phím đã nhấn

0Ch Xoá bộ đệm bàn phím và đọc bàn phím Tham số vào: AH=0Ch, AL=một trong các chức năng đọc bàn phím ở trên (01h, 06h, 07h, 08h, 0Ah) Tham số ra: AL=mã ASCII của phím nhấn tương ứng với các chức năng phụ của AL trong tham số vào

1.3. LậP TRÌNH PHụC Vụ BÀN PHÍM Sử DụNG NGắT

1.3.1. QUY TắC CHUNG

Khi sử dụng các ngắt của hệ điều hành để lập trình phục vụ bàn phím nhìn chung các chương trình đều theo tiến trình sau: Nạp số hiệu của hàm chức năng vào thanh ghi AH, số hiệu hàm chức năng con vào AL và các tham số vào tương ứng với mỗi hàm chức năng vào các thanh ghi

Page 46: ngat_vip

Hpv HVKTMM

46

Gọi ngắt tương ứng dung cho phím: thường dùng ngắt INT 21h của DOS hoặc INT 16h của ROM BIOS Các thông tin trạng thái sau khi thực hiện được lưu trữ như các tham số ra

1.3.2. MộT Số VÍ Dụ

Trong mỗi ví dụ gồm các bước: Mô tả, vẽ lưu đồ thuật toán Ex1: Nhập vào từ bàn phím một ký tự, đưa ra màn hình ký tự đó và các ký tự khác có mã tăng dần kể từ ký tự đó Lưu đồ Code: MOV AH, 01H INT 21H MOV BH, AH ;chuyển mã quét vào thanh ghi BH MOV BL, AL ;chuyển mã ASCII vào BL PRINT: MOV AH, 02H MOV DL, BH ;chuyển mã ASCII vào DL để in INT 21H INC BH INC BL CMP BL, FFH ;so sánh BL với FFh JLE PRINT ;Kết thúc chương trình BT viết ctr sử dụng MASM để biên dịch và chạy Ex2: viết chương trình kiểm tra trạng thái sẵn sàng của phím nếu có ký tự sẽ nhảy tới chương trình đưa ra màn hình; nếu chưa thì chờ nhấn phím MOV AH, 01H INT 16H ;gọi ngắt 16 để kiểm tra JNZ CHECK ;nhảy đến phần kiểm tra nếu có ký tự MOV AH, 00H INT 16H

1.4. LậP TRÌNH TRựC TIếP CHO BÀN PHÍM

Không sử dụng ngắt INT 16h hoặc INT 21h của hệ điều hành. Thực chất của việc lập trình trực tiếp là viết các chương trinh can thiệp trực tiếp phần cứng tương tự như các chương trình con phục vụ ngắt.

1.4.1. ĐặC ĐIểM CủA KHốI ĐIềU KHIểN BÀN PHÍM

� Một số loại máy như PC XT và PC Portable có bộ điều khiển bàn phím là vi xử lý 8048 với các địa chỉ cổng: � Cổng 60h, cổng ghi số liệu, ghi mã quét. � Cổng 61h, cổng trạng thái, ghi trạng thái của bàn phím

Page 47: ngat_vip

Hpv HVKTMM

47

� Máy PC AT được trang bị bộ điều khiển là vi xử lý 8042 với các cổng như sau: � Cổng 60h: là cổng dữ liệu, sử dụng để ghi mã từ bàn phím hoặc từ CPU.

CPU phải đưa lệnh đọc cổng IN AL, 60h để biết phím nào đã được nhấn. � Cổng 64h: là cổng điều khiển và trạng thái với các lệnh từ CPU:

� Ghi lời điều khiển: OUT 64h, AL (hoặc OUT DX, AL - với điều kiện đã nạp 64h vào DX) để điều khiển hoạt động bàn phím. Cụ thể như sau:

0 1: biến đổi mã quét thành giá trị của PC

1: cho phép bàn phím AT hoạt động

1: cấm bàn phím hoạt động

Cho phép/ cấm ghi đè. Giống Insert

Dùng để đọc cờ

0: cấm 1: cho phép ngắt của thiết bị phụ

0: cấm 1: cho phép bàn phím đưa yêu cầu ngắt

Với tổ hợp các bit 0-6 của thanh ghi điều khiển sẽ thu được tập hợp các lệnh của bàn phím AT; một số lệnh phổ biến: Mã lệnh Mô tả 20h Đặt byte lệnh vào thanh ghi đệm ra 60h Viết byte lệnh vào cổng 60 AAh Tự kiểm tra; kết quả 55h ở cổng 60h nếu không lỗi ADh Cấm bàn phím hoạt động C0h Đọc cổng vào tới cổng 60h D0h Đọc nội dung của cổng xuất tới cổng 60h

� Đọc trạng thái bàn phím: IN AL, 64h (hoặc IN AL, DX - với điều kiện

đã nạp 64h vào DX). Lời điều khiển trạng thái cho biết hiện trạng hoạt động của bàn phím. Định dạng như sau:

0: sai số lẻ 1: chẵn

1: có lỗi nhận tin quá thời gian

1: có lỗi trong khi truyền tin

0: keyboard bị khoá.

1: chỉ dữ liệu là lệnh 0: chỉ số liệu

1: tự kiểm tra xong 0: bật nguồn or xoá

0: bộ đệm vào rỗng 1: có số liệu

0: bộ đệm ra rỗng 1: có số liệu

1.4.2. QUI TắC CHUNG CủA LậP TRÌNH TRựC TIếP BÀN PHÍM

� Nhiệm vụ: � Điều khiển bàn phím hoạt động (cấm, cho phép, đặt tốc độ trễ, tốc độ

truyền) � Trao đổi dữ liệu với khối điều khiển bàn phím qua cổng 64h � Trao đổi dữ liệu với bàn phím qua cổng 60h Dữ liệu trao đổi có thể là: các lệnh( ghi ra), trạng thái( đọc vào), số liệu của mã( mã quét, ASCII)

� Thao tác chủ yếu: 1. Gán địa chỉ cổng cho thanh ghi DX 2. Đọc trạng thái của bàn phím( vào AL): IN AL, 64h 3. Kiểm tra và chờ trạng thái sẵn sàng trao đổi dữ liệu của bàn phím

− TEST AL, trạng thái cần( AL chứa trạng thái đã đọc vào; trạng thái cần là một số tương ứng với thanh ghi trạng thái đã trình bầy). Sử dụng TEST thì nội dung của AL không thay đổi sau khi so sánh

− Có thể sử dụng CMP AL, trạng thái cần (nhưng nội dung mới của AL sau khi thực hiện lệnh sẽ là hiệu số của AL và trạng thái cần)

Page 48: ngat_vip

Hpv HVKTMM

48

− JNZ địa chỉ lệnh nhảy tới (thường là lệnh đọc trạng thái để chờ trạng thái sẵn sàng)

− Trao đổi dữ liệu: sử dụng lệnh: − OUT địa chỉ cổng, AL (để đưa dữ liệu từ CPU ra bàn phím hay khối

điều khiển- thường là các lệnh điều khiển) − IN AL, địa chỉ cổng (để đọc dữ liệu từ bộ đệm vào CPU)

1.4.3. CÁC VÍ Dụ

Ví dụ 1: viết chương trình thực hiện việc cấm ngắt, đọc, chờ trạng thái sẵn sàng của bàn phím và cấm bàn phím hoạt động Mã lệnh như sau: CLI ;cấm ngắt MOV CX, 0FFFFh ;nạp số lần lặp vào CX WAIT: IN AL, 64h ;đọc trạng thái tại cổng 64h TEST AL, 00000010h ;kiểm tra bộ đệm vào bị đầy? LOOPNZ WAIT ;chờ bộ đệm đầy MOV AL, 0ADh ;gửi mã lệnh cấm phím hoạt động OUT 64h, AL STI ;cho phép ngắt trở lại INT 20h Ví dụ 2: viết chương trình ghi byte số liệu hay lệnh vào cổng 60h Mã lệnh như sau: MOV CX, 40h ;offset của đoạn nhớ số liệu ES MOV ES, CX ; MOV BH, AL ;luu tam AL trong BH MOV BL, 03h ;so lan lap START_LOOP: CLI ;cam ngat MOV CX, 0FFFFh ;so lan lap de cho trang thai san sang

MOV AL, 01001111b ;xoa bit 4 va bit 5 AND ES:[0097h], AL ;chan bit 4, 5, 7 cua ngan nho ES:[0097h]

WAIT1: IN AL, 64h ;doc trang thai TEST AL, 00000010b ;kiem tra trang thai bo dem day (bit1=1) LOOP WAIT1 ;tro ve WAIT1 neu chua san sang MOV AL, DATA ;DATA la du lieu can ghi vao phim OUT 60h, AL ;ghi ra cong 60h STI ;cho phep ngat MOV CX, 0FFFFh ;so lan lap de cho trang thai san sang

WAIT2:

Page 49: ngat_vip

Hpv HVKTMM

49

TEST BYTE PTR ES:[[0097h]], 0001000b ;kiem tra bit4=1 JNZ EXIT ;nhay den EXIT neu bit4=0 DEC BL ;tro lai WAIT2 neu CX!=0 and bit4=1 JNZ START_LOOP ;tro lai START_LOOP OR BYTE PTR ES:[[0097h]], 1000000h ;xac lap sai so bit7=1

EXIT: INT 20h

Page 50: ngat_vip

Hpv HVKTMM

50

2. LậP TRÌNH CHO CHUộT

2.1. CấU TRÚC VÀ HOạT ĐộNG CủA CHUộT

2.1.1. CấU TạO VÀ HOạT ĐộNG CủA CHUộT

Bóng xoay bằng kim loại bọc cao su. Khi di chuột, bóng truyền chuyển động vào hai thanh nhỏ X, Y đặt vuông góc với nhau. Khi bóng xoay, hai trục X, Y xoay theo làm các đĩa gắn với trục cũng xoay theo. Trên đĩa có khe hở cho ánh sáng của một phôtôdiôt truyền qua tạo thành một xung điện ở bộ cảm biến. Số xung điện này có số lượng khác nhau (theo số vòng của đĩa) và tốc độ khác nhau (theo tốc độ quay của đĩa). Máy tính sẽ đọc các xung trên và chỉ thị toạ độ X, Y thành vị trí của con trỏ (mũi tên trên màn hình).

2.1.2. MạCH GHÉP NốI CHUộT

Chuột được ghép nối trao đổi tin với máy tính thông qua cổng nối tiếp (thường là COM1) Tin được truyền theo gói với các tham số: vận tốc truyền 1200 baud(xung/s); số bit số liệu trên một lời tin 7; số bit khởi phát 1; số bit dừng 1; không có kiểm tra chẵn lẻ. Trong khoảng thời gian xác định, chuột gửi những thông tin về vị trí con trỏ, trạng thái của phím nhấn. Dữ liệu được gửi dưới dạng ba giá trị 7 bit, được tập hợp trong một gói với các bit bắt đầu và bit dừng. Giá trị đầu tiên tương ứng với trạng thái của phím nhấn và chứa hai bit cao của các toạ độ: Bit 6: 1 Bit 5: Núm nhấn phải (0: nhả; 1: nhấn) Bit 4: Núm nhấn trái (0: nhả; 1: nhấn) Bit 3-2: Hai bit cao của toạ độ Y Bit 1-0: Hai bit cao của toạ độ X Hai byte tiếp theo là 7bit thấp của toạ độ X, Y

2.1.3. ĐIềU KHIểN CHUộT

Điều khiển chuột bởi ngắt INT33 với nhiều chức năng khác nhau Có hai cách điều khiển chuột: Cài đặt qua một lệnh DEVICE = MOUSE trong file CONFIG.SYS của MS-DOS Điều khiển bằng những chương trình thường trú được khởi phát sau khi bật nguồn nuôi

2.1.4. MÀN HÌNH ảO CHO CHUộT

Là vùng diện tích trên màn hình mà khi con trỏ ở trong đó thì sự kiện kích chuột sẽ có hiệu lực. Khi lập trình cho chuột, điều quan trọng là cần phải xác định

Page 51: ngat_vip

Hpv HVKTMM

51

vị trí con trỏ chuột trên màn hình. Để thuận tiện, ta sử dụng một màn hình ảo; kích thước của màn hình ảo tuỳ theo từng chế độ của màn hình Chế độ Kích thước màn hình ảo 00-07h 640x200 0D-0Eh 640x200 0F-10h 640x350 11h-12h 640x480 13h 640x200 Khi chuyển từ chế độ đồ hoạ sang văn bản phải chia 8 (vì mỗi dòng và mỗi cột ứng với 8 điểm); ngược lại phải nhân 8

2.2. NGắT DÀNH CHO CHUộT

Những chương trình điều khiển chuột bắt đầu bằng việc kiểm tra bộ điều khiển chuột đã cài đặt chưa. Sử dụng chức năng 00h để kích hoạt Nếu chuột đã kết nối, AX chứa giá trị trả về FFFFh, nếu giá trị khác thì chưa có chuột nào kết nối BIOS có ngắt INT 33h đảm bảo cho hoạt động của chuột với các hàm chức năng mô tả trong bảng sau:

Chức năng Mô tả 00h Khởi động và đọc trạng thái chuột 01h Hiển thị con trỏ chuột 02h Dấu con trỏ chuột 03h Đọc vị trí và trạng thái các phím chuột 04h Thay đổi vị trí con trỏ chuột 05h Trạng thái nhả của núm điều khiển chuột 06h Trạng thái nhấn của núm điều khiển chuột 07h Xác định cột cực đại và cột cực tiểu của chuột 08h Xác định hàng cực đại và hàng cực tiểu của chuột 09h Xác định dạng con trỏ chuột trong chế độ đồ hoạ 0Ah Xác định dạng con trỏ chuột trong chế độ văn bản 0Bh Đọc khoảng cách dịch chuyển của chuột 0Ch Cài đặt chương trình xử lý chuột 0Dh Kích hoạt sự mô phỏng của bút chỉ sáng 0Eh Huỷ bỏ sự mô phỏng của bút chỉ sáng 0Fh Xác định tỷ số mickey/pixel 11h Đặt vùng cấm cho con trỏ 13h Đặt ngưỡng cho vận tốc 14h Thay chương trình xử lý chuột 15h Xác định kích thước vùng đệm cho trạng thái chuột 16h Ghi lại trạng thái của bộ điều khiển chuột 17h Khôi phục trạng thái chuột 18h Cài đặt chương trình xử lý tuỳ chọn

Page 52: ngat_vip

Hpv HVKTMM

52

19h Đọc địa chỉ chương trình xử lý tuỳ chọn 1Ah Đặt độ nhạy cho chuột 1Bh Đọc độ nhậy chuột 1Ch Đặt tần số ngắt của chuột 1Dh Đặt số trang màn hình 1Eh Đọc số trang màn hình 1Fh Làm ngừng chương trình điều khiển chuột 20h Khởi động lại chương trình điều khiển chuột 21h Khởi tạo lại chương trình điều khiển chuột 22h Đặt ngôn ngữ sử dụng 23h Đọc số ngôn ngữ sử dụng 24h Xác định loại chuột, số yêu cầu ngắt, phiên bản

2.3. LậP TRÌNH CHO CHUộT

2.3.1. KÍCH HOạT VÀ XÁC ĐịNH LOạI CHUộT

2.3.1.1. CÁC CHứC HÀM NĂNG

� Khởi tạo: 00h: Kích hoạt chương trình điều khiển và kiểm tra xem có chương trình điều khiển đã cài đặt Tham số vào: AH = 00h Tham số ra: AX = FFFFh nếu đã cài đặt; 0000h ngược lại

BX: chứa số phím của chuột, phải gọi chức năng này trước khi gọi các chức năng khác

� Ngừng và kích hoạt lại: AH=1Fh: làm mất tác dụng của chương trình điều khiển chuột và cho biết địa chỉ của chương trình điều khiển chuột trước đó; còn biết được lỗi (AX=FFFFh) hay không (AX=001Fh) Chức năng 20h: Kích hoạt lại chương trình điều khiển chuột mà 1Fh làm mất tác dụng Chức năng 21h: Khởi tạo lại chương trình điều khiển chuột, thôi kích hoạt các chương trình xử lý đã cài đặt

� Xác định loại chuột: chức năng 24h Tham số vào: AX=0024h Tham số ra: BH=số lớn của thế hệ BL=số nhỏ của thế hệ

CH=kiểu chuột (01:chuột song song; 02:chuột nối tiếp; 04:chuột InPort; 08:chuột PS/2; 10h:chuột HP) CL=số hiệu ngắt cứng (01:PS/2; giá trị khác là PC)

2.3.1.2. CHƯƠNG TRÌNH VÍ Dụ

Page 53: ngat_vip

Hpv HVKTMM

53

....... MOV AX, 0 MOV BX, 0 MOV CX, 0 MOV DX, 0 ;1. Kích hoạt chuột MOV AH, 00h INT 33h ;2. Hiện chuột MOV AH, 01h INT 33h ;3. Ẩn chuột MOV AH, 02h INT 33h ;4. Hiện chuột MOV AH, 01h INT 33h ;5. Huỷ kích hoạt MOV AH, 1Fh INT 33h ;6. Hiện chuột -> vẫn không có co trỏ vì chuột chưa kích hoạt MOV AH, 01h INT 33h ;7. Kích hoạt lại MOV AH, 20h INT 33h ;8. Xác định loại chuột MOV AH, 24h INT 33h INT 20h

2.3.2. TRạNG THÁI CHUộT

2.3.2.1. CÁC HÀM CHứC NĂNG Về TRạNG THÁI CHUộT

Đọc trạng thái: 03h Tham số vào: AH=03h Tham số ra: BX: chỉ các phím nhấn (D0=1:phím trái; D1=1: phải;

D2=1:phím giưa) CX=X: toạ độ ngang của màn hình ảo DX=Y: toạ độ dọc của màn hình ảo Cất trạng thái chuột: 16h Cất trạng thái chuột vào vùng đệm của chương trình gọi tại địa chỉ ES:DX Khôi phục trạng thái cũ của chuột: 17h

Page 54: ngat_vip

Hpv HVKTMM

54

Đọc lại trạng thái đã cất ở địa chỉ ES:DX Đọc kích thước vùng đệm ghi trạng thái chuột: 15h Tham số ra: BX=số byte Đặt tần số ngắt cứng của chuột: 1Ch Đặt tần số để phần cứng của chuột đọc vị trí hiện thời và trạng thái phím nhấn để truyền tham số cho các chương trình điều khiển chuột. Tham số vào: AH: 1Ch

BX=tần số (D0=1:không ngắt; D1=1:cho 30ngắt/s; D2=1: cho 50ngắt/s; D3=1: 100; D4=1: 200)

2.3.2.2. CHƯƠNG TRÌNH VÍ Dụ

Chương trình khởi tạo chuột, đọc trạng thái hiện thời của chuột, cất trạng thái hiện thời, khôi phục trạng thái hiện thời, đọc trạng thái hiện thời. Có thể viết và chạy chương trình trên Debug và chạy từng đoạn lệnh. Mã lệnh như sau:

MOV AH, 00h ;Kích hoạt chuột INT 33h MOV AH, 01h ;Hiện chuột INT 33h MOV AH, 03h ;Đọc trạng thái INT 33h ;của trỏ chuột MOV AH, 16h ;Cất trạng thái MOV CX, 012Eh MOV ES, CX; Gán tham số MOV DX, BX INT 33h ;Khôi phục trạng thái chuột ở vùng nhớ khác MOV AH, 17h MOV CX, 1500h MOV ES, CX MOV DX, 0130h INT 33h ;Đọc lại trạng thái trỏ chuột MOV AH, 03h INT 33h INT 20h

2.3.3. ĐIềU KHIểN CON TRỏ CHUộT

2.3.3.1. CÁC HÀM CHứC NĂNG Về CON TRỏ CHUộT

� Trang màn hình chứa chuột: Đặt trang màn hình chứa chuột:chức năng 1Dh; số hiệu trang trong thanh ghi BX

Page 55: ngat_vip

Hpv HVKTMM

55

Đọc trang màn hình: chức năng 1Eh; số hiệu trang đọc ra chứa trong thanh ghi BX

� Xác định hình dáng con trỏ: Hình dáng con trỏ có thể thay đổi theo chương trình điều khiển; cũng có thể thay đổi theo chương trình ứng dụng; tuỳ chế độ màn hình và loại con trỏ (cứng hoặc mềm) mà có hình dạng và kích thước con trỏ khác nhau � Trong chế độ văn bản: Thường hiện con trỏ dưới dạng hình khối (giống con trỏ văn bản) – con trỏ cứng Chương trình ứng dụng chỉ có thể thay đổi dòng bắt đầu và dòng kết thúc của con trỏ Kích thước con trỏ phụ thuộc vào ma trận ký tự hiện thời và chế độ màn hình Kỹ thuật tạo con trỏ mềm (bằng chưong trình) phải sử dụng: Hai byte ký tự và thuộc tính trong RAM màn hình Thanh ghi mặt nạ (che) màn (Screen Mask) 16bit Thanh ghi mặt nạ (che) con trỏ 16bit Chương trình điều khiển chuột phải xác định lại hình dạng con trỏ mỗi khi con trỏ thay đổi vị trí trên màn hình. Quá trình định dạng con trỏ kết hợp các yếu tố trên theo các bước: Mã ký tự và byte thuộc tính kết hợp với Screen Mask theo phép AND Kết quả được kết hợp với Cursor Mask cho hiện lên màn hình Có bốn khả năng chính của dạng con trỏ: Con trỏ là một ký tự đặc biệt với một màu đặc biệt Con trỏ là một ký tự đặc biệt nhưng màu thay đổi khi con trỏ đè lên ký tự Con trỏ là một ký tự đặc biệt nhưng màu ký tự thành một biến thể khi con trỏ đè lên ký tự � Con trỏ trong chế độ đồ hoạ: chức năng 09h Có một bảng nhớ trong RAM gồm 64byte (32byte đầu được AND và 32byte sau được OR với mẫu của con trỏ hiện thời) Cần phải đưa vào: Khoảng cách từ điểm làm chuẩn tới mép trái của bảng vào thanh ghi Khoảng cách từ điểm làm chuẩn tới mép phải của bảng vào thanh ghi Con trỏ trong chế độ văn bản: chức năng 0Ah Cần phải đưa vào: Kiểu con trỏ vào thanh ghi BX (0: mềm; 1: cứng) Mặt nạ AND với con trỏ mềm hoặc dòng bắt đầu - với con trỏ cứng vào CX Mặt nạ XOR với con trỏ mềm hoặc dòng kết thúc - với con trỏ cứng vào DX Hiện và dấu con trỏ: Hiện con trỏ: chức năng 01h

Con trỏ hiện lên màn hình khi bộ đếm trong có giá trị 0

Page 56: ngat_vip

Hpv HVKTMM

56

Chương trình điều khiển chuột theo dõi chuyển động của chuột ngay cả khi không hiện trên màn hình; chức năng này chỉ thực hiện việc hiện lên màn hình tại vị trí của thời điểm hiện tại Dấu con trỏ; chức năng: 02h Con trỏ không hiện lên màn hình khi bộ đếm trong có giá trị -1 Khi gọi chức năng này, con trỏ không hiện nhưng chương trình điều khiển vẫn theo dõi vị trí của con trỏ Chú ý:

Số lần gọi chức năng 01h và 02h phải đảm bảo một tỷ lệ như nhau; thường gọi 01h ở đầu chương trình và 02h ở cuối chương trình. Nếu chương trình ghi trực tiếp RAM màn hình thì số lần gọi phải nhiêu hơn vì: Con trỏ sẽ biến mất nếu bị ghi đè bởi một ký tự khác Ký tự sẽ khôi phục khi con trỏ rời sang vị trí mới Vị trí con trỏ: Đơn vị là Mickey (1mickey = 1/200 inch) Các toạ độ được tính với màn hình ảo: Chức năng 00h đặt phạm vi di chuyển con trỏ trong toàn bộ màn hình Chức năng 04h xác định vị trí mới; 07h(giới hạn trục X); 08h(giới hạn trục Y) Vị trí con trỏ có thể đọc được cùng với trạng thái nhấn bằng chức năng 03h Xác định vị trí mới: 04h: Cần đưa toạ độ X vào CX; toạ độ Y vào DX Cho phép chuyển vị trí mà không cần di chuyển chuột Xác định phạm vi di chuyển con trỏ: Theo toạ độ X: chức năng 07h cần nạp toạ độ min vào CX, max vào DX Theo toạ độ Y: chức năng 08h cần nạp toạ độ min vào CX, max vào DX Đặt vùng cấm chuột: 10h Cấm chuột di chuyển trong vùng diện tích: Toạ độ góc cao bên trái (CX=X; DX=Y) Toạ độ góc thấp phải (SI=X; DI=Y) Khi di chuyển vào vùng cấm, con trỏ sẽ biến mất. Có thể bỏ vùng cấm bằng chức năng 01h hoặc 00h Xác định khoảng cách dịch chuyển: chức năng 0Bh Đọc khoảng cách giữa vị trí hiện thời và vị trí khi gọi chức năng này lần trước (vị trí đã được đọc ngay trước đó)

CX: chứa khoảng cách ngang DX: chứa khoảng cách dọc

2.3.3.2. Chương trình ví dụ � Vị trí con trỏ chuột MOV AX, 0 MOV BX, 0

Page 57: ngat_vip

Hpv HVKTMM

57

MOV CX, 0 MOV DX, 0 ; MOV AH, 00h INT 33h MOV AH, 03h INT 33h MOV AH, 04h MOV CX, 0278h MOV DX, 0000h INT 33h MOV AH, 03h INT 33h MOV AH, 07h MOV CX, 0050h MOV DX, 0100h INT 33h MOV AH, 08h MOV CX, 0050h MOV DX, 00A0h INT 33h MOV AH, 03h INT 33h INT 33h INT 33h INT 33h MOV AH, 0Bh INT 33h INT 33h INT 33h INT 33h MOV AH, 03h INT 33h INT 20h � Hình dạng con trỏ chuột:

Page 58: ngat_vip

Hpv HVKTMM

58

MOV AX, 0 MOV BX, 0 MOV CX, 0 MOV DX, 0 MOV AH, 01h INT 33h MOV AH, 0Ah MOV BX, 0000h MOV CX, 00AAh MOV DX, 0055h INT 33h MOV AH, 0Ah MOV BX, 0001h MOV CX, 00AAh MOV DX, 0055h INT 33h MOV AH, 00h MOV AL, 04h INT 10h MOV AH, 00H MOV AL, 00h INT 10h MOV AH, 09h MOV BX, 0002h MOV CX, 0030h INT 33h

2.3.4. PHÍM NHấN

2.3.4.1 CÁC HÀM CHứC NĂNG

Xác định số lần nhấn một phím: 05h Đọc trạng thái trong thanh ghi BX: với phím trái (D0=1), phím phải (D1=1) Tham số ra: AX: trạng thái các phím của chuột tại giống BX ở tham số vào BX: số lần phím được nhấn từ khi bắt đầu gọi chức năng này lần trước đó CX: chứa toạ độ X của phím trong màn hình ảo DX: chứa toạ độ Y của phím trong màn hình ảo

Page 59: ngat_vip

Hpv HVKTMM

59

Xác định số lần nhả một phím: chức năng 06h Cho biết một phím đã được nhả bao nhiêu lần từ khi gọi chức năng này lần cuối; cũng cho biết vị trí con trỏ tại thời điểm phím được nhả lần cuối Tham số vào: AX=0006h BX=số hiệu phím (0 trái, 1 phải, 2 giữa) Tham số ra: AX=trạng thái tất cả các phím nhấn của chuột (=01 phím trái bị ấn, 02 phím phải bị ấn, 04 phím giữa bị ấn) BX=số lần phím nhấn được nhả kể từ lần nhả trước khi gọi chức năng này CX=X tại thời điểm được nhả lần cuối DX=Y tại thời điểm được nhả lần cuối

2.3.4.2. CHƯƠNG TRÌNH VÍ Dụ

2.3.5. TốC Độ DI CHUYểN CủA CON TRỏ CHUộT

2.3.5.1. CÁC HÀM CHứC NĂNG

Chức năng 1Ah: Đặt sự tương quan giữa mickey và điểm ảnh: Tham số vào: CX=số lượng mickey tương ứng với 8 điểm chiều ngang DX=số lượng mickey tương ứng với 8 điểm chiều dọc Trước khi đặt, sau khi gọi 00h giá trị mặc định là 8mickey ngang và 16 mickey dọc Đặt ngưỡng tăng gấp đôi tốc độ con trỏ chuột: 13h Khi tốc độ con trỏ chuột vượt quá một ngưỡng nào đó (đặt trong DX), tốc độ di chuyển sẽ được tăng gấp đôi. Muốn ngăn sự tăng gấp đôi cần đặt ngưỡng có giá trị lớn Đặt độ nhậy của con trỏ: 1Ah Kết hợp các chức năng 0Fh và 13h, cho phép đặt sự tương ứng giữa sự di chuyển của chuột và con trỏ chuột và ngưỡng tăng gấp đôi Phải ghi các tham số vào các thanh ghi BX, CX, DX Đọc độ nhậy của chuột: 1Bh

Ngược với 1Ah Các tham số ra chứa trong các thanh ghi: BX, CX, DX

2.3.5.2. CHƯƠNG TRÌNH VÍ Dụ

2.3.6. CÀI ĐặT CHƯƠNG TRÌNH Xử LÝ KHI DÙNG CHUộT

2.3.6.1. CÀI ĐặT CHƯƠNG TRÌNH Xử LÝ Sự KIệN

Page 60: ngat_vip

Hpv HVKTMM

60

Khi di chuyển con trỏ chuột đến vị trí mong muốn, chương trình điều khiển chuột sẽ đọc vị trí và trạng thái của phím chuột; từ đó mà chuyển tới lệnh đầu tiên của chương trình xử lý sự kiện tương ứng trong bộ nhớ để thực hiện. Phím nhấn của chuột sẽ gây ra một ngắt cho vi xử lý; ngắt nào được gọi sẽ tuỳ thuộc vào vị trí của chuột trên màn hình (tuỳ hành động mà gọi chương trình xử lý ngắt tương ứng với vị trí của trỏ chuột) Để làm được điều này cần biết cách cài đặt chương trình xử lý sự kiện hay xử lý ngắt tại địa chỉ nhớ mong muốn Cài đặt chưong trình xử lý chuột: chức năng 0Ch Tham số vào: ES:DX=địa chỉ chương trình xử lý của các bit chỉ sự thay đổi vị trí của chuột: D0, phím trái bị ấn D1 hay nhả D2, phím phải bị ấn D3 hay nhả D4, phím giữa bị ấn D5 hay nhả D6 Thay chương trình xử lý chuột: chức năng 14h Cài đặt một chương trình xử lý mới nhưng giữ lại thông tin về chương trình xử lý cũ Tham số vào: giống 0Ch Tham số ra: CX=sự kiện cũ ES:DX=địa chỉ chương trình xử lý cũ Cài đặt chương trình xử lý sự kiện thay thế: chức năng 18h Cho phép cài đặt tới 3 chương trình xử lý khác nhau Các chương trình này có thể được gọi khi xảy ra một sự kiện liên quan đến chuột hay bàn phím( các phím shift, ctrl, alt) Tham số vào: CX: có các bit ghi sự kiện để xử lý chương trình. D0-D4 giống 14h; D5 cho biết phím shift bị tác động; D6 ctrl; D7 alt. Tham số ra: AX=0018h nếu chương trình đã được cài đặt; FFFFh nếu chưa Xác định địa chỉ của chương trình xử lý sự kiện thay thế: 19h CX ghi các sự kiện mà chương trình xử lý Tham số ra: ES:DX=địa chỉ chương trình xử lý CX: cho biết lỗi(0000h) hay không (!=0)

2.3.6.2. CHƯƠNG TRÌNH VÍ Dụ

MOV AH, 00h ;kích hoạt chuột INT 33h MOV AH, 01h ;hiện con trỏ chuột INT 33h MOV CX, 000Ch ;cài đặt ctr xử lý chuột MOV DX, 011Eh ;đặt nhấn phím phải MOV AX, 0123Eh ;offset của ctr cần thực hiện

Page 61: ngat_vip

Hpv HVKTMM

61

MOV ES, AX ;segment của ctr cần thực hiện INT 33h NOP 132E:011E MOV AH, 00h ;ctr cần thực hiện MOV AL, 04h INT 10h INT 20h

Page 62: ngat_vip

Hpv HVKTMM

62

3. LậP TRÌNH MÀN HÌNH

3.1. CấU TRÚC, HOạT ĐộNG CủA MÀN HÌNH VÀ BÌA( CARD) GHÉP NốI

3.1.1. MÀN HÌNH

Màn hình là thiết bị ra chuẩn. Sử dụng súng bắn các tia điện tử đập vào màn hình phủ phôtpho tạo lên các điểm sáng. Các cuộn lái tia điện tử điều khiển tia điện tử lệch ngang và lệch thẳng làm di chuyển vị trí của tia điện tử. Lưới G điều khiển cường độ tia điện tử, cho ra độ đậm nhạt khác nhau của điểm sáng trên màn hình. Ở chế độ văn bản: tia điện tử được đánh dấu hình mũi tên; ở chế độ đồ hoạ tia điện tử được đánh dấu là các điểm ảnh Màn đen trắng: chỉ có một súng điện tử cho ảnh sáng(trắng) và tối(đen) Màn mầu: có 3 súng bắn điện tử ứng với 3 màu Red(R), Blue(B), Green(G); sự trộn các cường độ khác nhau của 3 màu này cho ra màu tổng hợp Thông tin hiển thị trên màn hình được tạo ra bởi một vỉ mạch gọi là vỉ mạch ghép nối màn hình. Hầu hết các vỉ mạch đều có khả năng hiển thị trong chế độ văn bản và chế độ đồ hoạ

3.1.2. Bộ GHÉP NốI MÀN HÌNH

Bộ ghép nối màn hình điểu khiển việc hiển thị ảnh điểm trên màn hình. Vi mạch này thường nằm trên một bìa phụ( card) có chứa 2 khối cơ bản: � Bộ nhớ màn hình(bộ đệm màn hình):

Chứa thông tin để hiển thị, có thể được truy cập bởi CPU và Bộ điều khiển màn hình. Địa chỉ của khối nhớ này tuỳ thuộc vào từng loại Bộ ghép nối màn hình

� Bộ điều khiển màn hình: Đọc bộ nhớ màn hình và phát tín hiệu tương ứng trên màn hình. Để hiển thị màu, bộ ghép nối phát sinh 3 tín hiệu tách biệt cho các màu cơ bản Red, Green, Blue; hoặc tổng hợp 3 tín hiệu thành một tín hiệu chung rồi phát. Do đó có thể phân màn hình thành hai nhóm: màn hình tổng hợp và màn hình RGB. � Màn hình tổng hợp sử dụng một tín hiệu tổng hợp chung. Tín hiệu tổng hợp

có chứa tín hiệu bật màu (bit cao nhất có giá trị 1); nếu không có tín hiệu này màn hình hiển thị 2 màu (đen-trắng)

� Màn hình RGB: sử dụng các tín hiệu tách biệt � Các loại bìa ghép nối màn hình: MDA: Bộ ghép nối màn hình đơn sắc độ phân giải cao; sử dụng vi xử lý MC 6845 CGA: Bộ ghép nối màn hình đồ hoạ màu; điều khiển bởi vi xử lý MC 6845 Hai bìa trên được IBM cung cấp cho PC đầu tiên loại XT MCGA: IBM trang bị cho máy tính sau PS/2 HGC: Tương thích với MDA, CGA nhưng chất lượng cao hơn

Page 63: ngat_vip

Hpv HVKTMM

63

EGA: IBM đưa ra, có độ phân giải cao VGA: Được sử dụng cho thế hệ PS/2 ....................................

3.1.3. CÁC CHế Độ CủA MÀN HÌNH

Trước khi cho màn hình hoạt động phải viết chế độ cho màn hình Ký hiệu 40x25 dưới đây chỉ có 40 ký tự trên một dòng và cả màn hình có 25 dòng � Các chế độ màn hình văn bản ứng với các Bộ ghép nối( bìa, card) khác nhau:

Chế độ Đặc tính Các Bộ ghép nối

Địa chỉ bộ đệm

Kích thước

Cỡ chữ

0 40x25 văn bản 16 màu (xám)

CGA, EGA, MCGA, VGA

B8000h 2KB 8x8

1 40x25 văn bản 16 màu

CGA, EGA, MCGA, VGA

B8000h 2KB 8x8

2 80x25 vb 16 màu (xám)

CGA, EGA, MCGA, VGA

B8000h 2KB 8x8

3 80x25 vb 16 màu

CGA, EGA, MCGA, VGA

B8000h 4KB 8x8

7 80x25 vb đơn sắc

MDA, EGA, VGA

B0000h 4KB 9x14

� Các chế độ đồ hoạ của màn hình:

Chỉ số chế độ

Đặc tính Loại bìa Địa chỉ Kích thước

Cỡ

4 320x200p, 4màu

CGA, EGA, MCGA, VGA

B8000 8

5 320x200p, 4màu(xám)

CGA, EGA, MCGA, VGA

B8000 8

6 320x200p, 4màu

CGA, EGA, MCGA, VGA

B8000 16

8 160x200p, 4màu

PCjr B8000 16

Page 64: ngat_vip

Hpv HVKTMM

64

9 320x200p, 4màu

PCjr B8000 32

A 320x200p, 4màu

PCjr B8000 32

D 320x200p, 16màu

PCjr A8000 8

E 640x200p, 16màu

EGA, VGA

A8000 16

F 640x350, đơn sắc

EGA, VGA

A8000 28

10 640x350, 16màu

EGA, VGA

A8000 28

11 640x480p, 2màu

EGA, VGA

A8000 38

12 640x480p, 16màu

VGA A8000 38KB 8x16

13 320x200p, 256màu

VGA, MCGA

A8000 38KB 8x8

3.2. CÁC NGắT VÀ CÁC CHứC NĂNG CHO MÀN HÌNH

BIOS sử dụng ngắt 10h để phục vụ màn hình với 23 hàm chức năng. DOS sử dụng chức năng 02h của ngăt INT 21h để in ra màn hình:

Ngắt Chức năng phục vụ màn hình

Hành động

00h Xác định chế độ màn hình 01h Xác định kích thước con trỏ 02h Xác định vị trí con trỏ 03h Đọc vị trí con trỏ 04h Đọc vị trí dấu chấm sáng 05h Xác định trạng thái hoạt động 06h Cuốn cửa sổ lên cao 07h Cuốn cửa sổ xuống thấp 08h Đọc ký tự và thuộc tính 09h Ghi ký tự và thuộc tính 0Ah Ghi ký tự 0Bh Xác định bảng 4 màu 0Ch Ghi điểm ảnh 0Dh Đọc điểm ảnh 0Eh Ghi ký tự ở chế độ teletype

INT 10h của BIOS

0Fh Đọc chế độ màn hình hiện tại

Page 65: ngat_vip

Hpv HVKTMM

65

10h Giao diện bảng màu (thanh ghi màu)

11h Giao diện máy phát ký tự 12h Lựa chọn tuần tự 13h Ghi huỗi ký tự 1Ah Ghi đọc mã tổ hợp hiển thị 1Bh Lấy lại tin về trạng thái hoạt động 1Ch Giữ và tìm lại trạng thái màn hình

INT 21h của DOS

02h In ký tự ra màn hình, mã ASCII đặt trong DL

3.3. LậP TRÌNH CHO MÀN HÌNH Sử DụNG NGắT

3.3.1. NHIệM Vụ

� Xác định: loại card hoặc chế độ (văn bản) với độ phân giải, cỡ chữ � Xác định số hiệu của trang màn hình � Xác định vị trí và kích thước con trỏ (chế độ văn bản), ảnh điểm (chế độ đồ

hoạ) � Xác định kích thước của cửa sổ màn hình � Xác định màu nền, viền, màu ký tự hay điểm ảnh � Đưa ra hoặc đọc vào từ màn hình các ký tự hoặc điểm ảnh

3.3.2. PHƯƠNG PHÁP

� Phương pháp can thiệp trực tiếp phần cứng: ghi các lệnh điều khiển trực tiếp bộ điều khiển màn hình và bộ nhớ đệm của màn hình

� Phương pháp sử dụng các ngắt của MsDOS:

� Ngắt BIOS: sử dụng ngắt INT 10h � Ngắt của DOS: sử dụng ngắt 21h

3.3.3. LậP TRÌNH CHUNG CHO MÀN HÌNH

3.3.3.1. XÁC ĐịNH CHế Độ VÀ TRạNG THÁI MÀN HÌNH

Mục đích phần này là xác định chế độ mới khi biết loại Card màn hình và lựa chọn chế độ thích hợp; đọc chế độ màn hình đang sử dụng

� Chức năng 00h để ghi chế độ màn hình: � Tham số vào: AH=00h, AL=số hiệu chế độ � Tham số ra: không có Ví dụ: Xác lập chế độ chê độ văn bản 25x80 cho màn hình, 16 màu xám, dùng card CCA ...............

Page 66: ngat_vip

Hpv HVKTMM

66

MOV AH, 00h MOV AL, 02h INT 10h

� Chức năng 0Fh: đọc chế độ màn hình � Tham số vào: AH=0Fh � Tham số ra: AL=số ký tự trên một dòng; BH=trang hoạt động

� Chức năng 1Ah: lựa chọn loại card thích hợp cho màn hình: Trả về một mã 2byte chỉ tổ hợp của card màn hình và chế độ hiển thị. Cho phép sử dụng một trong hai chức năng con (chức năng con được sử dụng phải đặt trong AL) � Chức năng con 00h: đọc mã của 2byte tổ hợp trên vào BX. Nếu máy có

hai chế độ nhỏ thì giá trị trong BL là tích cực (nghĩa là BIOS đang sử dụng chế độ này). Nếu chỉ có một chế độ màn hình nhỏ, BH=0

� Chức năng 01h: tác động ngược lại, cho phép đặt lại chế độ hiện hành. Do đó chỉ sử dụng chức năng con này khi biết chính xác cần làm gì.

Các mã tổ hợp cho chức năng 1Ah được mô tả trong bảng sau: Mã tổ hợp Card màn hình và chế độ 00h Không dùng một card nào 01h MDA 02h CGA 03h Để dành 04h EGA với hiển thị màu 05h EGA với hiển thị đơn sắc 06h Khối điều khiển đồ hoạ chuyên dụng 07h VGA đơn sắc 08h VGA hiển thị màu 09h, 0Ah Để dành 0Bh MCGA hiển thị đơn sắc 0Ch MCGA hiển thị màu 0FFh Chưa sử dụng � Chức năng 1Bh giữ lại tin về trạng thái màn hình

Chỉ sử dụng cho card EGA, VGA � Tham số vào: AH=1Bh, ES=địa chỉ bắt đầu đoạn nhớ của bộ đệm 64K,

DI=offset của bộ đệm � Tham số ra: AL=1Bh

Thực hiện chức năng này, BIOS sẽ lấp đầy bộ đệm 64K thông tin về trạng thái màn hình hiện hành

� Chức năng 1Ch để bảo vệ và tìm trạng thái màn hình: Chỉ dùng cho card VGA của PS/2. Chức năng này cho phép giữ mọi thông tin về trạng thái màn hình, vùng dữ liệu trong RAM, giá trị hiện tại của mọi thanh ghi điều khiển màn hình. Có 3 chức năng con:

Page 67: ngat_vip

Hpv HVKTMM

67

� Chức năng 00h: xem loại tin nào muốn đọc, bằng cách đặt một hoặc ba bit thấp của giá trị vào CX

� Chức năng 01h: giữ tin về trạng thái màn hình hiện tại trong bộ đệm mà địa chỉ trong BX. Nên thực hiện chức năng này trước khi có những thay đổi về chế độ màn hình

� Chức năng 00h: cho phép khôi phục lại trạng thái cũ

3.3.3.2. XÁC ĐịNH TRANG MÀN HÌNH

Tuỳ từng loại card màn hình khác nhau mà độ phân giải khác nhau, dung lượng bộ nhớ đệm khác nhau, nên số trang màn hình khác nhau. Do đó phải lập trình để biết trang nào đang sử dụng. Số trang cho các loại card được mô tả trong bảng sau:

Số trang tối đa cho từng loại Số hiệu chế độ CGA EGA VGA

0-1 8 8 8 2-3 4 8 8 7 Không dùng 8 8 � Ngắt 05h: xác định trang màn hình nào được sử dụng:

� Tham số vào: AH=05h, AL=số trang (tuỳ theo chế độ mô tả trong bảng trên)

� Tham số ra: không có Ví dụ: Xác định chế độ văn bản 40x25, 16 màu, trang 1 cho card VGA

.............. MOV AH, 00h ;Xác định chế độ màn hình MOV AL, 01h ;Chọn chế độ 01 INT 10h ;Gọi ngắt để xác lập chế độ MOV AH, 05h ;Xác lập trang màn hình MOV AL, 01h ;Chọn trang 01h INT 10h ;Gọi ngắt để xác lập

3.3.3.3. XÁC ĐịNH Vị TRÍ, KÍCH THƯớC CON TRỏ

� Chức năng 02h: dịch chuyển con trỏ. Việc dịch chuyển con trỏ chính là việc ghi vị trí con trỏ ở những thời điểm xác định.

� Tham số vào: AH=02h, BH=số hiệu trang, DH=dòng mới (0-24) trong chế độ văn bản (ghi dạng hexa), DL=cột mới (0-79)trong chế độ văn bản dạng hexa

� Tham số ra: không có � Chức năng 03h: đọc vị trí và kích thước con trỏ hiện thời

� Tham số vào: AH=03h, BH=số hiệu trang � Tham số ra: DH=dòng, DL=cột, CH=dòng quét đầu, CL=dòng quét cuối

Các giá trị này được ghi trong các thanh ghi dưới dạng hexa � Chức năng 01h: thay đổi kích thước con trỏ

Page 68: ngat_vip

Hpv HVKTMM

68

� Tham số vào: AH=01h, CH=dòng quét đầu, CL=dòng quét cuối � Tham số ra: không có

3.3.3.4. XÁC ĐịNH KÍCH THƯớC CủA CửA Sổ MÀN HÌNH

Thay đổi kích thước cửa sổ màn hình so với một vị trí mốc có 2 khả năng: � Thay đổi kích thước phía trên, nghĩa là cuốn màn hình lên trên, khi đó

cần lấy góc dưới (dòng, cột ghi trong DX) làm mốc và cần biết số dòng cuốn lên (số dòng sáng của cửa sổ)

� Thanh đổi kích thước phía dưới, nghĩa là cuốn màn hình xuống dưới, khi đó cần lấy góc trên (dòng, cột ghi trong CX) làm mốc và cần biết số dòng cuốn xuống

� Chức năng 06h để cuốn màn hình lên: � Tham số vào: AH=06h, AL=số dòng cuốn, BH=thuộc tính dòng trống,

CH, CL=dòng ,cột góc trái trên, DH, DL=dòng cột góc phải dưới � Tham số ra: không có

� Chức năng 07h để cuốn màn hình xuống dưới: các tham số vào ra giống như chức năng 06h.

Ví dụ: Xác định cửa sổ màn hình có toạ độ góc trên trái là 0527h, góc dưới phải 1527h cho màn hình có chế độ 25x80

MOV AH, 00h ;Xác định chế độ màn hình MOV AL, 02h INT 10h MOV AH, 06h ;Hàm cuốn màn hình lên MOV AL, 12h ;Số dòng cuốn là 18 (1*16+2) MOV CX, 0527h ;Góc trên trái MOV DX, 1547h ;Góc dưới phải MOV BH, 42h ;Nền đỏ, ký tự xanh lá cây INT 10h

3.3.4. LậP TRÌNH ở CHế Độ VĂN BảN

Trong chế độ văn bản, các ký tự được hiển thị trên màn hình dưới dạng ma trận ảnh điểm. Trong chế độ này có thể điều chỉnh được màu nền, màu viền màn hình, màu ký tự. Ngoài các công việc lập trình chung cho màn hình, lập trình trong chế độ văn bản còn có thêm: đọc, ghi ký tự ra màn hình, thay đổi kích thước ký tự.

3.3.4.1. GHI CHế Độ ĐIềU KHIểN

3.3.4.2. XÁC ĐịNH MÀU CHO BÌA CGA

3.3.4.3. XÁC ĐịNH MÀU CHO EGA/VGA( CÓ THể KHÔNG CầN)

3.3.4.4. ĐọC GHI KÝ Tự VớI NGắT INT 10H

Page 69: ngat_vip

Hpv HVKTMM

69

� Chức năng 08h: đọc ký tự tại vị trí con trỏ � Tham số vào: AH=08h, BH=số hiệu trang � Tham số ra: AH=thuộc tính ký tự, AL=mã ASCII

� Chức năng 09h: hiển thị ký tự màu tại vị trí con trỏ � Tham số vào: AH=09h, BH=số hiệu trang, AL=mã ASCII, CX=số

lần ghi ký tự, BL=thuộc tính ký tự � Tham số ra: không có Ví dụ: chương trình đổi thuộc tính của ký tự tại vị trí con trỏ thành thuộc tính đảo cho màn hình đơn sắc

................ MOV AH, 08h ;Đọc ký tự tại vị trí con trỏ, AL chứa mã ASCII XOR BH, BH ;BH=0 INT 10h MOV AH, 09h ;Hiển thị ký tự đã đọc với MOV CX, 0Ah ;Số lần lặp MOV BL, 70h ;Thuộc tính thay đổi INT 10h

� Chức năng 0Ah: ghi ký tự với thuộc tính có sẵn. Giống 09h nhưng byte thuộc tính không thay đổi � Tham số vào: AH=0Ah, BH=số hiệu trang, AL=mã ASCII, CX=số lần

lặp � Tham số ra: không có

� Chức năng 0Eh: ghi ký tự và dịch con trỏ. Giống 09h nhưng sau mỗi lần ghi ký tự, con trỏ tự động dịch đi một vị trí của ký tự (giống Ms Word) � Tham số vào: AH=0Eh, AL=mã ASCII, BH=số hiệu trang, BL=thuộc

tính màu � Tham số ra: không Ví dụ: ghi mỗi lần 2 ký tự từ A-N với màu nền tăng dần từ xanh lá cây, máu ký tự tăng dần từ đỏ

;1.Xác định chế độ màn hình MOV AH, 00h MOV AL, 02h INT 10h ;2.Dịch chuyển con trỏ tới vị trí cần in. Ở đây là dòng 12, cột 40 MOV AH, 02h MOV BH, 00h MOV DH, 0Ch MOV DL, 28h INT 10h ;3. Ghi ký tự tại vị trí con trỏ với thuộc tính mong muốn MOV AH, 09h MOV AL, 41h MOV BL, 01h

Page 70: ngat_vip

Hpv HVKTMM

70

MOV CX, 02h PRINT_LOOP: INT 10h ;Gọi ngắt INT 10h để hiệu lực việc in INC AL ADD BL, 11h CMP AL, ‘N’ JLE PRINT_LOOP ;Lặp nếu mã ASCII <= mã ASCII của ‘N’

;4.Kết thúc

INT 20h � Chức năng 13h: ghi chuỗi ký tự ra màn hình. Chỉ thực hiện trên PC/AT,

EGA và PS/2. Có các chức năng con: � Chức năng con 00h: ghi chuỗi ký tự lên màn hình, thuộc tính trong BL,

không thay đổi vị trí con trỏ � Chức năng con 01h: giống 00h nhưng chuyển vị trí tới cuối chuỗi � Chức năng con 02h: giống 01h nhưng thuộc tính nằm trong vùng đệm

có offset trong DX � Chức năng 11h: ghi ký tự với kích thước thay đổi. Chức năng này chỉ dùng

có trong BIOS cho VGA, MCGA.. Các nhóm chức năng con như sau: � 00h-04h: thay đổi cỡ chữ dùng ở chế độ văn bản trên VGA, MCGA,

EGA � 10h-14h: thay đổi chiều cao ký tự � 20h-24h: thay đổi kích thước ký tự trong chế độ đồ hoạ � 30h: lấy lại thông tin liên quan đến cỡ chữ hiện hành và những cỡ chữ

có thể có của BIOS

3.3.4.5. GHI KÝ Tự DÙNG NGắT INT 21H CủA DOS

� Chức năng 02h: ghi một ký tự � Tham số vào: AH=02h, DL=mã ASCII � Tham số ra: không

� Chức năng 09h: ghi một xâu ký tự ra màn hình � Tham số vào: AH=09h, DS:DX=địa chỉ của xâu ký tự. Xâu phải kết

thúc bởi ‘$’ � Tham số ra: không

3.3.5. LậP TRÌNH ở CHế Độ Đồ HOạ

Trong chế độ đồ hoạ, màn hình chỉ vẽ một điểm ảnh tại một thời điểm. Các ký tự cũng được hiển thị theo các điểm ảnh của từng dòng liên tiếp cho đến hết trang của bộ nhớ màn hình nhưng không theo từng ma trận điểm mà theo bản đồ bit (bitmap). Chậm hơn nhiều so với chế độ văn bản nhưng độ phân giải cao hơn nhiều và có nhiều thư viện phục vụ đồ hoạ. Có ba loại card màn hình phổ biến: CGA: Color Graphic Adapter: Bộ phối ghép đồ hoạ màu

Page 71: ngat_vip

Hpv HVKTMM

71

EGA: Enhanced Graphic Adapter: Bộ phối ghép đồ hoạ nâng cao VGA: Video Graphic Adapter: Bộ phối ghép đồ hoạ kiểu ma trận điểm

� Một số chú ý cho lập trình trong chế độ đồ hoạ: Lập trình chế độ đồ hoạ cũng giống lập trình chung nhưng có điểm khác biệt: mỗi lần đưa ra màn hình một điểm; có thể đưa ký tự ra màn hình theo nguyên tắc vẽ từng điểm ảnh trong bản đồ bit (bitmap) Việc xác định chế độ hiển thị cũng giống lập trình trong chế độ văn bản chỉ khác ở chỉ số chế độ. Các số hiệu chế độ được sử dụng trong bảng chế độ đồ hoạ.

3.4. LậP TRÌNH TRựC TIếP CHO MÀN HÌNH

3.2.6.1. CấU TRÚC VÀ NGUYÊN LÝ HOạT ĐộNG CủA CARD MÀN HÌNH

Card màn hình điển hình có các khối: − Khối điều khiển màn hình: điều khiển toàn bộ hoạt động của card màn hình.

Khối này thường chứa vi xử lý riêng: MC 6845 cho CGA, 8514/A cho EGA và VGA, TI 34010, Intel 82786 cho TIGA).

− Khối nhớ ROM: chứa các mẫu ký tự để phát các ký tự. − Khối phát các ký tự. − Khối điều khiển thuộc tính để điều khiển phát màu. − Khối nhớ đệm RAM cho màn hình: ghi nhớ và phát mọi điểm ảnh của màn

hình. − Khối điều khiển tín hiệu: phát các tín hiệu quét ngang, quét dọc, tín hiệu

video cho ống hình. Hai khối quan trọng nhất cần hiểu kỹ để lập trình điều khiển trực tiếp màn hình là khối điều khiển và khối đệm RAM.

� Khối điều khiển: � Liên hệ với CPU qua 4 đường dây điều khiển và 8 đường dây số liệu;

điều khiển ống hình qua các đường dây điều khiển tín hiệu và nhận các tín hiệu: xoá, nhịp, bút sáng con trỏ.

� Khối điều khiển dùng vi xử lý sớm nhất là MC 6845 của Motorola. Có thể truy cập 16K RAM màn hình và nhận mẫu ký tự từ ROM. MC 6845 có 16 thanh ghi nội.

� Các thanh ghi này được mô tả trong bảng sau: Địa chỉ Thanh ghi Chỉ số Chức năng 3x4h Thanh ghi địa chỉ Chọn thanh ghi hoạt động Seg Offset

00h-05h Dạng ngang 0-3 Xác định các tham số màn hình ngang

3x5h

06h Dạng dọc 4-8 Xác định các tham số màn hình dọc (tổng dòng)

Page 72: ngat_vip

Hpv HVKTMM

72

07h-09h Chế độ khối ghép nối

9 Chọn xung đồng bộ: đặt lại quét hàng, hàng tối đa

0Ah Bắt đầu con trỏ 10 Xác định dòng quét cho vị trí bắt đầu con trỏ

0Bh Kết thúc con trỏ 11 Xác định dòng quét cho vị trí kết thúc con trỏ

0Ch 0Dh Địa chỉ bắt đầu 12-13 Xác định địa chỉ bắt đầu cho bộ nhớ màn hình

0Eh, 0Fh Địa chỉ con trỏ 14-15 Xác định vị trí con trỏ 10h, 11h Địa chỉ bút sáng 15-17 Xác định vị trí bút sáng

Tuỳ theo loại card màn hình sử dụng mà khối điều khiển có địa chỉ và cấu trúc các thanh ghi khác nhau. Dưới đây chỉ xét cho card CGA thông dụng:

� Thanh ghi chọn chế độ: địa chỉ 3Dh, các bit mô tả như sau: Bit Mô tả 0 Chỉ chế độ văn bản: 40 ký tự (0), 80 ký tự (1) 1 Chế độ đồ hoạ: 0 với các chế độ khác nhau, 1 với 320pixel 2 Loại màn hình: đơn sắc (1), màu (0) 3 Trạng thái màn hình: tắt (0), bật (1) 4 Chế độ đồ hoạ 640 cột (1), giá trị khác (0) 5 Cho phép nhấp nháy (1), không cho phép (0) 6,7 Không dùng (giá trị 0)

Tổng hợp lại các bit trên được giá trị của thanh ghi chế độ tương ứng với các chế độ như sau:

Giá trị thanh ghi 02Ch 28h 02Dh 29h 02Eh 02Ah 01Ch Chế độ 0 1 2 3 4 5 6

� Thanh ghi chọn màu viền và bảng màu: địa chỉ 3D9h, có các bit: − Bit 0-3: các bit BGRI cho màu viền (theo bảng màu) − Bit 4: bit tăng cường nền( chế độ văn bản), tắt (0), bật (1) − Bit 5: chọn bảng màu (chế độ đồ hoạ) 0 với bảng 0, 1 vơi bảng 1 − Bit 6,7: không dùng

� Thanh ghi trạng thái: địa chỉ 3Dah, với các bit � Thanh ghi chỉ số: địa chỉ 3D4h, chỉ số 0-17 của thanh ghi nội � Thanh ghi đệm số liệu: địa chỉ 3D5h.

� Bộ nhớ đệm RAM cho màn hình: Màn hình cần bộ nhớ đệm để ghi dữ liệu ra màn hình theo nguyên tắc ánh xạ (một điểm ảnh màn hình ứng với một ô nhớ). Tuỳ thuộc vào chế độ và độ phân giải khác nhau mà cần dung lượng bộ nhớ khác nhau. Hầu hết các card màn hình có đặc điểm chung:

� Địa chỉ nhớ đầu tiên là B000:0000 hoặc A000:000 � Mỗi card được CPU dành cho 32KB (với MDA, CGA...) hay 256KB

(với EGA, VGA...)

Page 73: ngat_vip

Hpv HVKTMM

73

3.2.6.2. LậP TRÌNH TRựC TIếP MÀN HÌNH

� Nguyên tắc chung: Lập trình điều khiển trực tiếp màn hình là ghi các lời điều khiển, các thông số

vào các thanh ghi nội của vi xử lý điều khiển màn hình, vào bộ nhớ RAM của màn hình và các thanh ghi thông dụng của CPU. Đồng thời cũng cần đọc và xử lý tin về trạng thái các thanh ghi của khối điều khiển, của RAM và các thanh ghi thông dụng.

� Trước khi ghi lời điều khiển và dữ liệu cần: − Xác định địa chỉ của thanh ghi của khối điều khiển. Số liệu của

thanh ghi chỉ số chính là chỉ số thanh ghi cần trao đổi dữ liệu. − Xác định dữ liệu cần ghi theo dạng các thanh ghi điều khiển đã cho

của khối điều khiển. � Trước khi đọc tin về dữ liệu, trạng thái cần xác định địa chỉ của thanh

ghi cần đọc. Các ví dụ: Ví dụ 1: Ghi vào thanh ghi của khối điều khiển: MOV DX, address của MC6845 ;ghi địa chỉ của thanh ghi chỉ số MOV AL, số hiệu thanh ghi nội OUT DX, AL ;ghi số hiệu ra JMP Short $+2 ;tạm dừng một khoảng t ngắn INC DX ;tăng số hiệu cho thanh ghi tiếp theo MOV AL, AH ;AH chứa nội dung mới OUT DX, AL ;ghi nội dung mới RET Ví dụ 2: Đọc thanh ghi của khối điều khiển: MOV AL, địa chỉ của MC6845 ;ghi địa chỉ của thanh ghi chỉ số MOV AL, số hiệu ;số hiệu thanh ghi nội OUT DX, AL ;ghi số hiệu ra INC DX ;tăng số hiệu JMP Short $+2 ;trễ thời gian IN AL, DX ;đọc nội dung mới RET Ví dụ 3: Tạo cấu hình cho thanh ghi điều khiển màn hình MOV DX, CONTR REG ;chuyển địa chỉ thanh ghi điều khiển vào DX MOV AL, 00101101B ;cho phép hiển thị màn hình OUT DX, AL ;ghi lời điều khiển ra thanh ghi điều khiển RET ;có địa chỉ chứa trong DX Ví dụ 4: Thao tác bộ điều khiển video: MOV CX, 0Ch ;đặt giá trị lặp =12 MOV BH, 0 ;bắt đầu từ thanh ghi 0 LABEL1: LODSB ;lấy giá trị thanh ghi từ bảng

Page 74: ngat_vip

Hpv HVKTMM

74

MOV AH, AL ;giá trị thanh ghi chuyển vào AH MOV AL, BH ;chuyển số hiệu thanh ghi vào AL CALL Vidu1 ;chuyển giá trị đến bộ điều khiển INC BH ;số hiệu thanh ghi tiếp theo LOOP LABEL1 OR BL, 08h ;màn hình bật CALL Vidu3 ;đặt chế độ mới RET Ví dụ 5: Xác lập chế độ văn bản MOV SI, OFFSET TEXT ;địa chỉ offset của bảng thanh ghi MOV BL, 0010001b ;chế độ văn bản CALL Vidu4 RET Ví dụ 6: Xác lập chế độ đồ hoạ MOV BL, 00010001b ;chế độ đồ hoạ MOV SI, OFFSET GRAPHIC ;địa chỉ offset của bảng thanh ghi Ví dụ 7: Xác lập trang màn hình Ví dụ 8: Xác lập vị trí con trỏ Ví dụ 9: Xác lập kích thước con trỏ Ví dụ 10: Xác định màu Ví dụ 11: Ghi điểm ảnh Ví dụ 12: Ghi chuỗi ký tự

Page 75: ngat_vip

Hpv HVKTMM

75

4. LậP TRÌNH CHO MÁY IN

4.1. VI MạCH CổNG SONG SONG

Họ IBM-PC có các vi mạch cổng song song sau: 8255A cho máy loại PC XT (VXL: 8086, 8088) 82345(có thêm 2 máy phát xung và bộ kiểm tra chẵn lẻ) cho máy loại PC AT (VXL 80286) và PS/2( VXL 80386) Các loại PC thông thường có tối đa 4 cổng song song kí hiệu (LPT1, LPT2, LPT3, LPT4) Cấu trúc của các cổng song song đều có 3 thanh ghi. Xét 82345: Thanh ghi điều khiển: Địa chỉ là địa chỉ cơ sở + 2 Thanh ghi trạng thái: Địa chỉ là địa chỉ cơ sở + 1 Thanh ghi dữ liệu: Địa chỉ là địa chỉ cơ sở; sử dụng để ghi/đọc dữ liệu cho thiết bị ngoại vi Các bit của thanh ghi điều khiển: D0 = 1: Tín hiệu Strobe để điều khiển ghi dữ liệu cho thiết bị ngoại vi D1 = 1: Điều khiển tự động xuống dòng sau mỗi dòng ... Các bit của thanh ghi trạng thái: D0 – D1: Không dùng D2 = 0: Thiết bị ngoại vi đã nhận dữ liệu D3 = 0: Thiết bị ngoại vi lỗi D4 = 1: Thiết bị ngoại vi đã được chọn D5 = 1: Thiết bị ngoại vi lỗi D6 = 0: Thiết bị ngoại vi sẵn sàng hoạt động D7 = 0: Thiết bị ngoại vi bận Cổng song song nối với thiết bị ngoại vi qua ổ cắm DB-25(25 chân) theo các tín hiệu: Số 1: Tín hiệu STROBE để ghi dữ liệu ra Số 2-9: Tín hiệu(đường) dữ liệu từ D0-D7

.....................................

4.2. LậP TRÌNH TRựC TIếP CHO MÁY IN SONG SONG

Máy in song song thường nối với cổng vào/ra song song LPT1 hoặc LPT 2 qua ổ cắm DB-25. Lập trình trực tiếp cho máy in thường thực hiện các hành động: Khởi phát máy in

4.2.1. KHởI PHÁT MÁY IN

Ghi các bit thích hợp (vào thanh ghi điều khiển) cho cổng và máy in để chúng sẵn sàng hoạt động và nhận tin vào

Page 76: ngat_vip

Hpv HVKTMM

76

Các bit cho cổng: cho phép ngắt (D4=1), đưa dữ liệu ra (D5=0) Các bit cho máy in: cho phép xuống dòng sau mỗi dòng (D1=1), khởi phát (D2=0), lựa chọn lối vào (D3=1) � Lời điều khiển là: 00011010B=8Ah. Đưa lời điều khiển vào thanh ghi AX và ghi vào thanh ghi điều khiển( địa chỉ là địa chỉ cơ sở + 2) Để đảm bảo độ tin cậy, sau khi khởi phát, cần có độ trễ bằng cách thực hiện chương trình trễ tương ứng. � Chương trình khởi phát máy in như sau:

// 1. Ghi lời điều khiển ra thanh ghi điều khiển cho cổng và máy in // Tính địa chỉ của thanh ghi điều khiển MOV DX, 0378 ADD DX, 2 // Lưu lời điều khiển vào thanh ghi AL MOV AL, 8A // Ghi lời điều khiển ra thanh ghi điều khiển OUT DX, AL // Gọi trễ CALL DELAY // 2. Ghi lời điều khiển về các trạng thái ngầm định MOV AL, 00001100B OUT DX, AL CALL DELAY // 3. Kết thúc chương trình

INT 20 // Định nghĩa đoạn chương trình trễ DELAY DELAY: MOV AH, 00 INT 1A ; Ngắt phục vụ đếm đồng hồ ADD DX, 2 ; Từ thấp của bộ đếm + 2 làm bộ đếm cuối MOV BX, DX ; Lưu từ thấp + 2 A: INT 1A ; Đọc giá trị mới của bộ đếm CMP DX, BX ; So sánh với bộ đếm cuối JB A ; Nếu nhỏ hơn quay lại A RET ; Trở về từ chương trình con

4.2.2. ĐƯA KÝ Tự CầN IN RA MÁY IN

Tiến trình đưa ký tự cần in ra máy in gồm ba giai đoạn: 1. Chuyển và ghi số liệu ra thanh ghi đệm số liệu của cổng (địa chỉ cơ sở).

Trong trường hợp này là mã ASCII của ký tự. 2. Kiểm tra trạng thái máy in. Nếu chưa sẵn sàng phải đợi bằng cách quay trở

lại đọc và kiểm tra trạng thái cho đến khi sẵn sàng

Page 77: ngat_vip

Hpv HVKTMM

77

3. Đưa bit D0 = 1 vào thanh ghi điều khiển để đưa tín hiệu STROBE cho máy in yêu cầu in

Chương trình như sau:

;PROGRAM: PRINT A CHAR ;---------------------------------------- S_SEG SEGMENT STACK DB 100H DUP(?) S_SEG ENDS D_SEG SEGMENT MSG DB "Print Complete$" MSG_ERROR DB "Error$" D_SEG ENDS C_SEG SEGMENT ASSUME CS:C_SEG, DS:D_SEG, ES:D_SEG, SS:S_SEG START: MAIN PROC ;INITILIZE DS, ES MOV AX, D_SEG MOV DS, AX MOV ES, AX MOV AL, 41h ;Chuyen ma ASCII cua ky tu(A) vao AL MOV DX, 387 ;Chuyen dia chi cong vao DX OUT DX, AL CALL DELAY ;Goi thu tuc Delay INC DX ;Tang DX de co dia chi thanh ghi trang thai CHECK: IN AL, DX TEST AL, 10000000b ;Kiem tra trang thai san sang nhan tin cua may in JZ CHECK INC DX ;Tang DX de co dia chi thanh ghi dieu khien MOV AL, 00001101b OUT DX, AL ;Dua tin hieu STROBE cho may in MOV AL, 00001100b OUT DX, AL ;Dua lenh xoa tin hieu STROBE CALL DELAY MOV AH, 4CH

Page 78: ngat_vip

Hpv HVKTMM

78

INT 21H MAIN ENDP ;SUBPROGRAM: DELAY DELAY PROC PUSH AX PUSH DX PUSH BX MOV AH, 00h ;Chuc nang doc dem dong ho INT 1Ah ;Goi ngat phuc vu dem dong ho ADD DX, 2 ;Tang can thap cua bo dem them 2 MOV BX, DX ;Luu trong BX NEW_COUNTER: INT 1Ah ;Goi bo dem moi CMP DX, BX ;So sanh voi bo dem cuoi JB NEW_COUNTER ;Chua bang thi quay lai, doc so dem POP BX POP DX POP AX RET DELAY ENDP C_SEG ENDS END START

4.3. LậP TRÌNH Sử DụNG NGắT CHO MÁY IN

4.3.1. ĐƯA NộI DUNG MÀN HÌNH RA MÁY IN: Sử DụNG NGắT INT 5H

INT 5h là ngắt riêng của VXL, sử dụng để: Đưa nội dung của màn hình ra máy in theo sự kiện nhấn phím Print Screen. Hoạt động như sau: Khi nhận được tín hiệu nhấn phím Print Screen, BIOS sẽ khởi tạo vecto ngắt để trỏ tới các chương trình phục vụ in nội dung màn hình của BIOS trong ROM BIOS Gửi một số kết quả trung gian ra máy in trong quá trình thực hiện các chương trình khi ngắt được gọi Ngắt INT 5h không có tham số vào và tham số ra

4.3.2. Sử DụNG NGắT INT 17H

INT 17h là ngắt của BIOS, có 3 chức năng: � 00h: In ra một ký tự

� Tham số vào:

Page 79: ngat_vip

Hpv HVKTMM

79

AH=00h AL=Mã ASCII của ký tự DX=Số hiệu máy in (0-2)

� Tham số ra: AH=Trạng thái máy in. Các bit mô tả như trong thanh ghi trạng thái

� 01h: Khởi động máy in. Cần được gọi trước khi in � Tham số vào:

AH = 01h DX = Số hiệu máy in

� Tham số ra: AH = trạng thái máy

� 02h: Kiểm tra trạng thái � Tham số vào:

AH = 02h DX = Số hiệu máy in

� Tham số ra: AH = Trạng thái máy in với các bit được mô tả như sau: D0=1:lỗi time out, D1 -D2: không dùng, D3=1:lỗi truyền, D4=1:sẵn sàng nhận, D5=1:hết giấy, D6=1:từ chối, D7=1:bận.

4.3.3. CHƯƠNG TRÌNH VÍ Dụ

In ra 10 ký tự bắt đầu từ ‘A’ ;PROGRAM: PRINT 10 CHARS START FROM 'A' CHAR USE FUNCTIONS OF INT ;17h INTERRUP ;---------------------------------------- S_SEG SEGMENT STACK DB 100H DUP(?) S_SEG ENDS D_SEG SEGMENT MSG DB "Print Complete$" MSG_ERROR DB "Error$" D_SEG ENDS C_SEG SEGMENT ASSUME CS:C_SEG, DS:D_SEG, ES:D_SEG, SS:S_SEG START: MAIN PROC ;INITILIZE DS, ES MOV AX, D_SEG MOV DS, AX MOV ES, AX

Page 80: ngat_vip

Hpv HVKTMM

80

;1. Khoi phat may in MOV DX, 00h MOV AH, 01h INT 17h ;2. Thuc hien vong lap goi thu tuc => in 10 ky tu MOV CX, 10 MOV AL, 41h ;Chuyen ma ASCII cua ky tu(A) vao AL PRINT: CALL PRINT_PROC INC AL LOOP MOV AH, 4CH INT 21H MAIN ENDP ;SUBPROGRAM: PRINT_PROC PRINT_PROC PROC PUSH AX MOV AH, 00h ;Goi chuc nang in 1 ky tu INT 17h ;Goi ngat 17h de thuc hien POP AX RET PRINT_PROC ENDP C_SEG ENDS END START

Page 81: ngat_vip

Hpv HVKTMM

81

BÀI TậP

Page 82: ngat_vip

Hpv HVKTMM

82

CHƯƠNG IV. LậP TRÌNH THAO TÁC ĐĨA VÀ FILE � Mục đích: hệ thống lại cấu trúc, nguyên lý hoạt động của ổ đĩa cứng, ổ đĩa

mềm; cách thức hệ điều hành quản lý dữ liệu trên ổ đĩa để phục vụ lập trình xử lý file và thao tác ổ đĩa.

� Nội dung chính: − Lập trình ổ đĩa cứng − Lập trình ổ đĩa mềm − Lập trình cho USB

Page 83: ngat_vip

Hpv HVKTMM

83

1. Tổ CHứC LƯU TRữ FILE TRÊN ĐĨA

1.1. CấU TRÚC ĐĨA

Thông tin được tổ chức trên các mặt đĩa theo các track( rãnh); track lại được chia

thành các sector(cung). Dos đánh dấu các mặt đĩa bắt đầu từ 0, track bắt đầu từ 0,

trong một track, các sector bắt đầu từ 1. Số sector trên một track, số track trên một

mặt đĩa tuỳ thuộc vào từng loại đĩa. Trụ( cylinde) là tập hợp các rãnh có cùng số

hiệu.

1.2. DUNG LƯợNG ĐĨA: (BYTE)

DiskSize = số mặt * số rãnh trên 1 mặt * số cung trên 1 rãnh * số byte trên 1 cung

1.3. TRUY NHậP ĐĨA:

Phương pháp truy nhập đĩa mềm và đĩa cứng giống nhau. Ổ đĩa nằm dưới sự điều khiển của mạch điều khiển đĩa; mạch điều khiển đĩa có nhiệm vụ chuyển dịch đầu đọc ghi (đầu đọc ghi chỉ dịch chuyển tiến/lùi, đĩa luôn quay quanh trục). Dữ liệu được truy nhập theo từng sector. Để truy nhập dữ liệu, đầu từ phải dịch chuyển đến track cần truy nhập. Khi đặt vào đúng track đầu từ sẽ đợi sector cần đọc đi tới. Vì mọi rãnh trên một trụ có thể truy nhập mà không cần dịch chuyển đầu từ nên khi ghi dữ liệu, Dos thường ghi đầy một trụ rồi mới chuyển sang trụ kế tiếp

1.4. Sự PHÂN Bố CÁC FILE:

Để theo dõi dữ liệu ghi trên đĩa, Dos sử dụng cấu trúc cây thư mục. Các track và các sector đầu tiên của đĩa chứa thông tin về cấu trúc file của đĩa. Các đĩa thường phân bố chung như sau:

Boot Sector Bảng FAT Folder(Root) Data � Thư mục File: Dos tạo một điểm nhập 32byte cho mỗi file trong thư mục, cấu trúc mỗi điểm nhập như sau:

Byte Chức năng 0-7 Tên file, byte 0 dùng làm byte trạng thái 8-10 Phần mở rộng 11 Thuộc tính 12-21 Để mở rộng 22-23 Giờ tạo (h:m:s) 25-25 Ngày tạo (y:m:d) 26-27 Số hiệu cluster đầu tiên (vừa là địa chỉ cluster đầu tiên

Page 84: ngat_vip

Hpv HVKTMM

84

của file trong vùng dữ liệu vừa là số thứ tự của điểm nhập của file trong bảng FAT). Điểm nhập bảng FAT băt đầu từ 0

28-31 Kích thước file theo byte Byte thuộc tính: 0 1 2 3 4 5 6 7 File chỉ đọc

File ẩn File hệ thống

Nhãn đĩa

Thư mục con

Bit lưu Không sử dụng

Không sử dụng

1.4.1. CLUSTER (LIÊN CUNG):

Dos lưu trữ các file theo các cluster. Mỗi cluster gồm một số secter, số secter của một cluster luôn là luỹ thừa của 2. Các cluster được đánh số bắt đầu từ 0; cluster 0 là các sector cuối cùng của thư mục. Khi kích thước file nhỏ hơn 1 cluster, Dos vẫn giành cho file cả cluster đó. Do đó có trường hợp trên đĩa vẫn còn chỗ chưa sử dụng nhưng Dos vẫn thông báo đĩa đầy.

1.4.2. BảNG FAT:

Mục đích của bảng FAT (File Allocation Table) là tạo ra bản đồ các file trên đĩa. Bảng FAT bao gồm các điểm nhập cho file, kích thước của điểm nhập tuỳ thuộc vào từng loại đĩa. Byte đầu tiên của bảng FAT dùng để chỉ ra loại đĩa. Nội dung mỗi điểm nhập trong bảng FAT: nếu là FFF thì chỉ đây số thứ tự của điểm nhập này là địa chỉ cluster cuối cùng của file; nếu là 000 thì điểm nhập chưa sử dụng; nếu là số 000 < a < FFF thì a vừa chỉ địa chỉ cluster hiện tại vừa chỉ trạng thái của file sẽ xem tiếp trong điểm nhập thứ a của bảng FAT. Nghĩa là file sẽ không lưu trữ thành các cluster liên tiếp mà các cluster của file sẽ được tham chiếu trong bảng FAT

1.5. TIếN TRÌNH ĐọC GHI FILE CủA DOS

1.5.1. DOS ĐọC MộT FILE:

Tiến trình đọc file như sau: 1. Nhận số hiệu cluster đầu tiên từ thư mục (chính là số thứ tự điểm nhập

trong bảng FAT ). Ví dụ là 2 2. Dos đọc đọc nội dung cluster đó vào một vùng nhớ gọi là vùng chuyển dữ

liệu (DTA: Data Transfer Area), chương trình sẽ nhận được dữ liệu từ DTA khi cần.

3. Dos đọc nội dung của điểm có số thứ tự chính là số hiệu cluster đầu tiên ở tren (giả sử là 2 ) trong bảng FAT để biết đây là cluster cuối cùng của file hay biết số hiệu cluster tiếp theo và điểm nhập file tiếp có số hiệu bằng nội dung của điểm nhập này (trong ví dụ này là 004)

Page 85: ngat_vip

Hpv HVKTMM

85

4. Điểm nhập 4 trong bảng FAT chứa giá trị FFF nên cluster 4 là cluster cuối cùng của file

Hoặc ví dụ khác: file chứa trong các cluster: 3 5 6 7 8

1.5.2. DOS GHI MộT FILE:

Tiến trình như sau: 1. Xác định một điểm nhập chưa sử dụng trong thư mục và lưu vào tên file

cùng với thuộc tính file, ngày giờ tạo 2. Tìm trong bảng FAT điểm nhập đầu tiên đánh dấu một cluster chưa sử

dụng (000 nghĩa là cluster chưa sử dụng - điểm nhập chưa ứng với cluster nào) và chứa số hiệu cluster đầu tiên của file vào điểm nhập file trong thư mục chính bằng số hiệu điểm nhập này trong bảng FAT. Ví dụ 9

3. Nếu dữ liệu chứa vừa trong một cluster, Dos chứa dữ liệu trong cluster này, đặt nội dung của điểm nhập file trong bảng FAT có số hiệu bằng với số hiệu cluster là FFF. Nếu còn dữ liệu, Dos sẽ tìm cluster tiếp theo chưa sử dụng đặt số hiệu cluster vào điểm nhập này của FAT

2. LậP TRÌNH Xử LÝ FILE

2.1. THẻ FILE:

Một file khi được mở hay được tạo trong chương trình DOS gán cho nó một số duy nhất gọi là thẻ file. Con số này dùng để xác định các file do đó chương trình phải lưu nó. Có 5 loại thẻ file định nghĩa trước:

0 Bàn phím 1 Màn hình 2 Thông báo lỗi đầu ra – màn hình 3 Thiết bị phụ 4 Máy in

Ngoài các file này Dos còn cho phép người sử dụng định nghĩa 3 file được mở

2.2. ĐọC/GHI FILE

2.2.1. Đóng mở file: 2.2.2. Đọc file: 2.2.3. Ghi một file 2.2.4. Con trỏ file

2.3. THAY ĐổI THUộC TÍNH FILE:

Sử dụng hàm 43h của ngắt INT 21h để thay đổi thuộc tính file: � Tham số vào:

AH=43h

Page 86: ngat_vip

Hpv HVKTMM

86

DS:DX=địa chỉ chuỗi ASCII (chuỗi tên file, kết thúc bằng byte 0) AL=0 để lấy thuộc tính AL=1 để thay đổi thuộc tính CX=thuộc tính file mới (nếu AL = 1)

� Tham số ra:

CX = thuộc tính hiện thời nếu thành công CF được đặt thì có lỗi, mã lỗi đặt trong AX

Ví dụ: thay đổi thuộc tính file thành ẩn: MOV AH, 43h MOV AL, 1 LEA DX, FileName MOV CX, 1 INT 21h JC MSG_ERROR ;nhẩy đến thông báo lỗi nếu cờ CF được đặt

3. ĐọC VÀ GHI CÁC SECTOR TRựC TIếP CủA ĐĨA: Sử dụng ngắt 25h và 26h của DOS. Trước khi gọi các ngắt này phải khởi tạo các thanh ghi: AL = số hiệu ổ đĩa (0=ổ A; 1=ổ B, 2=ổ C... giống Debug) DS:BX = segment:offset của vùng đệm dữ liệu bộ nhớ CX = số sector muốn ghi DX = số hiệu sector lôgic đầu tiên Không có số hàm chức năng nào phải đặt trong AH, gọi trực tiếp ngắt Nếu CF=1 thì có lỗi, AX chứa mã lỗi Các sector lôgic có số hiệu bắt đầu từ 0 và tăng dần ứng với sector vật lý. Ví dụ:

Mặt đĩa Rãnh Sector Sector lôgic Thông tin 0 0 0 0 Boot Record 0 0 2-5 1-4 FAT 0 0 6-9 5-8 Thư mục file 1 0 1-3 9-11 Thư mục file 1 0 4-9 12-17 Dữ liệu 0 1 1-9 18-26 Dữ liệu

Đọc một sector: Ví dụ: đọc sector lôgic 5 - sector đầu tiên của thư mục của ổ đĩa A ....... D_SEG SEGMENT BUFFER DB 512 DUP(0) ERROR DB “ERROR$” D_SEG ENDS

Page 87: ngat_vip

Hpv HVKTMM

87

C_SEG SEGMENT ASSUME CS:C_SEG, SS:S_SEG, DS:D_SEG, ES:D_SEG START: MAIN PROC

MOV AX, D_SEG MOV DS, AX MOV ES, AX MOV AL, 2 ;ổ đĩa C MOV DX, 5 ;số hiệu sector đầu tiên MOV CX, 1 ;chuyển số sector cần đọc vào CX INT 25h ;đọc JNC EXIT ;nhẩy đển exit nếu không có lỗi ;nếu có lỗi, hiển thị thông báo lỗi MOV AH, 09h ;chức năng 09h của ngắt INT 21h hiển thị chuỗi MOV DX, Offset ERROR ;<=> LEA DX, ERROR INT 21h EXIT: MOV AH, 4Ch INT 21h

MAIN ENDP C_SEG ENDS END START

Page 88: ngat_vip

Hpv HVKTMM

88

PHụ LụC:

DEBUG CủA MSDOS

ASSEMBLY CƠ BảN

TậP LệNH 82086

Tóm tắt các lệnh 8086 / 8088 Các chữ viết tắt trong các nhóm lệnh: reg : thanh ghi tổng qu¾t. reg16 : thanh ghi 16 bit. segreg : thanh ghi <oạn. accum : thanh ghi bộ tÈch lũy AX hoặc AL. mem : bộ nhớ (<ịa chỉ hiệu dụng). mem16 : bộ nhớ 2 byte liãn tiếp (<ịa chỉ hiệu dụng). mem32 : bộ nhớ 4 byte liãn tiếp (<ịa chỉ hiệu dụng). immed : số tức thời. immed8 : số tức thời 8 bit. shortlabel : nhÁn ngắn (-128 byte ÷ +127 byte). nearlabel : nhÁn trong <oạn (2 byte offset). farlabel : nhÁn ngo¿i <oạn (4 byte : 2 byte segment v¿ 2 byte offset). Nhóm lệnh chuyển dữ liệu : MOV reg,reg MOV reg,immed

MOV mem,reg MOV mem,immed

MOV reg,mem MOV mem16,segreg

MOV reg16,segreg MOV segreg,mem16

M OV segreg,reg16

PUSH reg16 PUSH segreg

PUSH mem16

POP reg16 POP segreg

POP mem16

XCHG reg,reg XCHG mem,reg

X CHG accum,reg16 XCHG reg,mem

IN accum,immed8

IN accum,DX

OUT immed8,accum

OUT DX,accum

XLAT LEA reg16,mem

LDS reg16,mem32

LES reg16,mem32

LAHF SAHF PUSHF POPF

Page 89: ngat_vip

Hpv HVKTMM

89

Nhóm lệnh số học : ADD reg,reg ADD reg,immed

ADD mem,reg ADD mem,immed

ADD reg,mem ADD accum,immed

ADC reg,reg ADC reg,immed

ADC mem,reg ADC mem,immed

ADC reg,mem ADC accum,immed

INC reg INC mem

AAA DAA SUB reg,reg SUB reg,immed

SUB mem,reg SUB mem,immed

SUB reg,mem SUB accum,immed

SBB reg,reg SBB reg,immed

SBB mem,reg SBB mem,immed

SBB reg,mem SBB accum,immed

DEC reg DEC mem

NEG reg NEG mem

CMP reg,reg CMP reg,immed

CMP mem,reg CMP mem,immed

CMP reg,mem CMP accum,immed

AAS DAS MUL reg MUL mem

IMUL reg IMUL mem

AAM DIV reg DIV mem

IDIV reg IDIV mem

AAD CBW CWD NOT reg NOT mem Nhóm lệnh logic: SHL reg,1 SHL mem,1

SHL reg,CL SHL mem,CL

SHR reg,1 SHR mem,1

SHR reg,CL SHR mem,CL

SAR reg,1 SAR mem,1

SAR reg,CL SAR mem,CL

ROL reg,1 ROL mem,1

ROL reg,CL ROL mem,CL

ROR reg,1 ROR mem,1

ROR reg,CL ROR mem,CL

RCL reg,1 RCL mem,1

RCL reg,CL RCL mem,CL

Page 90: ngat_vip

Hpv HVKTMM

90

RCR reg,1 RCR mem,1

RCR reg,CL RCR mem,CL

AND reg,reg AND reg,immed

AND mem,reg AND mem,immed

AND reg,mem AND accum,immed

TEST reg,reg TEST reg,immed

TEST mem,reg TEST mem,immed

TEST reg,mem TEST accum,immed

OR reg,reg OR reg,immed

OR mem,reg OR mem,immed

OR reg,mem OR accum,immed

XOR reg,reg XOR reg,immed

XOR mem,reg XOR mem,immed

XOR reg,mem XOR accum,immed

Xử lý chuỗi : REP lệnh xử lû chuỗi REPE/REPZ lệnh xử lû chuỗi REPNE/REPNZ lệnh xử lû chuỗi MOVSB / MOVSW CMPSB / CMPSW SCASB / SCASW LODSB / LODSW STOSB / STOSW Chuyển điều khiển : CALL nearlabel CALL mem16

CALL farlabel CALL mem32

CALL reg16

JMP shortlabel JMP mem16

JMP nearlabel JMP mem32

JMP farlabel JMP reg16

RET RETF RET immed8 RETF immed8

Jcond shortlabel

Jcond Giải thÈch Điều kiện JE/JZ Nhảy nếu bằng/khéng ZF = 1 JL/JNGE Nhảy nếu nhỏ hơn/khéng lớn hơn hoặc bằng (SF xor OF) = 1 JLE/JNG Nhảy nếu nhỏ hơn hoặc bằng /khéng lớn hơn ((SF xor OF) or ZF) = 1 JB/JNAE/JC Nhảy nếu dưới /khéng trãn hoặc bằng/nhớ CF = 1 JBE/JNA Nhảy nếu dưới hoặc bằng /khéng trãn (CF or ZF) = 1 JP/JPE Nhảy nếu kiểm tra / kiểm tra chẳn PF = 1 JO Nhảy nếu tr¿n OF = 1 JS Nhảy nếu dấu SF = 1 JNE/JNZ Nhảy nếu khéng bằng/kh¾c khéng ZF = 0 JNL/JGE Nhảy nếu khéng nhỏ hơn/lớn hơn hoặc bằng (SF xor OF) = 0 JNLE/JG Nhảy nếu khéng nhỏ hơn hoặc bằng /lớn hơn ((SF xor OF) or ZF) = 0

Page 91: ngat_vip

Hpv HVKTMM

91

JNB/JAE/JNC Nhảy nếu khéng dưới /trãn hoặc bằng/khéng nhớ CF = 0 JNBE/JA Nhảy nếu khéng dưới hoặc bằng /trãn (CF or ZF) = 0 JNP/JPO Nhảy nếu khéng kiểm tra / kiểm tra lẻ PF = 0 JNO Nhảy nếu khéng tr¿n OF = 0 JNS Nhảy nếu khéng dấu SF = 0 LOOP shortlabel

LOOPE/LOOPZ shortlabel

LOOPNE/LOOPNZ shortlabel

JCXZ shortlabel

INT immed8

INT 3

INTO IRET Điều khiển bộ xử lû : CLC STC CMC NOP CLD STD CLI STI HLT WAIT LOCK lệnh ESC immed,reg

ESC immed,mem

Page 92: ngat_vip

Hpv HVKTMM

92

BÀI TậP LớN 1. Tìm hiểu về Virus liên quan đến BIOS 2. Tìm hiểu, viết chương trình virus liên quan đến hoạt động của bàn phím,

chuột; chương trình diệt, ngăn ngừa virus liên quan đến bàn phím, chuột 3. Tìm hiểu, viết chương trình virus liên quan đến hoạt động của màn hình;

viết chương trình diệt, ngăn ngừa virus liên quan đến màn hình 4. Tìm hiểu, viết chương trình virus liên quan đến hoạt động của máy in; viết

chương trình diệt, ngăn ngừa virus liên quan đến máy in 5. Tìm hiểu, viết chương trình virus liên quan đến hoạt động ổ đĩa mềm, ổ đĩa

cứng; chương trình diệt, ngăn ngừa virus liên quan đến ổ đĩa mềm, ổ đĩa cứng

6. Nguyên lý boot( khởi động) hệ điều hành; khởi động máy từ ổ USB

7. Cài đặt hệ điều hành (window xp) trên ổ USB

8. Tìm hiểu về nguyên lý tạo các file, thư mục ẩn. Viết chương trình cho làm

ẩn hoặc hiện toàn bộ hoặc một số file, thư mục con trong thư mục xác định Yêu cầu: báo cáo 5-10 trang; nếu có chương trình ví dụ thì có tài liệu mô tả giải thuật, vẽ lưu đồ giải thuật của ứng dụng