Lập trình Hệ Điều Hành
Sau đây là các bài cơ bản Ngôn đã test các bạn có thể copy vào là chạy được...chúc các bạn thành công.
[=============================================]
- Ngắt 21 quản lý tệp, chỉ ra trong bảng sau:
[=============================================]
Tạo Thư mục :
#include<conio.h>
#include<stdio.h>
#include<dos.h>
main()
{
clrscr();
union REGS tgvao,tgra;
char ten[67];
cprintf("\nNHap ten thu muc can tao :");
scanf("%s",&ten);
tgvao.h.ah=0x39;
tgvao.x.dx=int(&ten);
int86(0x21,&tgvao,&tgra);
return 0;
}
Màn hình nhập tên vào :Chú ý tên chỉ nhập được 8 ký tự thôi và không có dấu cách
Xóa thư mục vừa tạo ở trên :
#include<conio.h>
#include<stdio.h>
#include<dos.h>
main()
{
clrscr();
union REGS tgvao,tgra;
char ten[67];
cprintf("\nXoa ten thu muc Vua tao :");
scanf("%s",&ten);
tgvao.h.ah=0x3a;
tgvao.x.dx=int(&ten);
int86(0x21,&tgvao,&tgra);
return 0;
}
Màn hình xóa thư mục :
2.Tạo tệp vào ổ đĩa C:\
#include<conio.h>
#include<stdio.h>
#include<dos.h>
main()
{
clrscr();
union REGS tgvao,tgra;
char ten[67];
cprintf("\nNhap ten tep tao :");
scanf("%s",&ten);
tgvao.h.ah=0x3c;
tgvao.x.dx=int(&ten);
int86(0x21,&tgvao,&tgra);
return 0;
}
Màn hình hiện lên :
Xóa tên tệp vừa tạo ở trên :
#include<conio.h>
#include<stdio.h>
#include<dos.h>
main()
{
clrscr();
union REGS tgvao,tgra;
char ten[67];
cprintf("\nXoa ten tep vua tao :");
scanf("%s",&ten);
tgvao.h.ah=0x41;
tgvao.x.dx=int(&ten);
int86(0x21,&tgvao,&tgra);
return 0;
}
Màn hình xóa tương tự như ở xóa thư mục..
Thiết lập thuộc tính cho tệp dùng ngắt 21 chứa chức năng 43 :
#include<conio.h>
#include<stdio.h>
#include<dos.h>
main()
{
union REGS tgvao,tgra;
char ten[67];
int att;
cprintf("\nNhap ten tep can thay doi t.t :");scanf("%s",&ten);
cprintf("\nNhap gia tri thuoc tinh :"); scanf("%d",&att);
tgvao.h.ah=0x43;
tgvao.x.dx=int(&ten);
tgvao.h.al=1;
tgvao.x.cx=att;
int86(0x21,&tgvao,&tgra);
return 0;
}
Đọc thuộc tính tệp
[==============================================]
Tham khảo trang dịnh tiếng anh..
He Dieu Hanh MS-DOS
- Định nghĩa của các hệ điều hànhMS-DOS,:
Là một tập hợp các chương trình hoạt động của các thủ tục cần thiết cho việc quản lý tất cả các đơn vị của một máy vi tính IBM Hoặc tương thích với nó. Và gọi là Hệ điều hành DOS Viết tắt của các chữ cái đầu tiên trong các từ Đĩa OPRAITING HỆ THỐNG .
Các chương trình và duy trì các hệ điều hành trên đĩa CD hoặc linh hoạt để được phát triển trên cylinder rắn.
2 - Các chức năng của hệ điều hành MS-DOS,:
Đáp - chuyển đổi và chuyển giao các dữ liệu và hướng dẫn giữa các bộ nhớ chính và các cylinders.
B - bắt đầu hoạt động của máy vi tính và một số các xét nghiệm để xác nhận sự an toàn của điện wiring.
C - sự chấp nhận đơn đặt hàng được thực hiện thông qua các hoạt động của bàn phím, cho phép bạn kiểm soát tất cả các thành phần của máy tính.
D - để cho phép người sử dụng có thể lấy thêm các bản sao của các tập tin từ đĩa CD vào một đĩa CD
E - chuyển giao hướng dẫn và dữ liệu cho các đơn vị in ấn
Chương 1 TỔ CHỨC BỘ XỬ LÝ INTEL-8086
- Cấu trúc bên trong CPU Intel-8086
- Tập thanh ghi
- Tổ chức bộ nhớ và dữ liệu
- Khái quát các bộ xử lý Intel khác như: 80386, 80486, Pentium
Intel-8086 là một CPU 16 bit (bus dữ liệu ngoại có 16 dây). Nó được dùng để chế tạo các máy vi tính PC-AT đầu tiên của hãng IBM vào năm 1981. Trong thực tế, hãng IBM đã dùng CPU 8088 (là một dạng của CPU 8086 với bus số liệu giao tiếp với ngoại vi là 8 bit) để chế tạo máy vi tính cá nhân đầu tiên gọi là PC-XT.
Cho đến nay CPU 8086 đã không ngừng cải tiến và đã trải qua các phiên bản 80186, 80286, 80386, 80486, Pentium (80586), Pentium Pro, Pentium MMX, Pentium II, III, 4. Các CPU trên tương thích từ trên xuống (downward compatible) nghĩa là tập lệnh của các CPU mới chế tạo gồm các tập lệnh của CPU chế tạo trưóc đó được bổ sung thêm nhiều lệnh mạnh khác.
Cấu trúc tổng quát của CPU-8086 có dạng như hình 1.1, gồm 2 bộ phận chính là: Bộ thực hiện lệnh và bộ phận giao tiếp bus.
1. Bộ phận thực hiện lệnh (EU):
Thi hành các tác vụ mà lệnh yêu cầu như: Kiểm soát các thanh ghi (đọc/ghi), giải mã và thi hành lệnh. Trong EU có bộ tính toán và luận lý (ALU) thực hiện được các phép toán số học và luận lý. Các thanh ghi đa dụng là các ô nhớ bên trong CPU chứa dữ liệu tương tự như ô nhớ trong bộ nhớ. Cờ cũng là một thanh ghi dùng để ghi lại trạng thái hoạt động của ALU. Thanh ghi lệnh chứa nội dung lệnh hiện tại mà CPU đang thực hiện.
Các thanh ghi và bus trong EU đều là 16 bit. EU không kết nối trực tiếp với bus hệ thống bên ngoài. Nó lấy lệnh từ hàng chờ lệnh mà BIU cung cấp. Khi có yêu cầu truy xuất bộ nhớ hay ngoại vi thì EU yêu cầu BIU làm việc. BIU có thể tái định địa chỉ để cho phép EU truy xuất đầy đủ 1 MB (8086 có 20 đường địa chỉ ngoại).
2. Bộ giao tiếp bus (BIU):
BIU thực hiện chức năng giao tiếp giữa EU với bên ngoài (Bộ nhớ, thiết bị ngoại vi …) thông qua hệ thống BUS ngoại (bus dữ liệu và bus địa chỉ). BIU thực hiện tất cả các tác vụ về bus mỗi khi EU có yêu cầu. Khi EU cần trao đổi dữ liệu với bên ngoài, BIU sẽ tính toán địa chỉ và truy xuất dữ liệu để phục vụ theo yêu cầu EU.
Trong BIU có 5 thanh ghi CS, DS, ES, SS và IP chứa địa chỉ. Thanh ghi IP chứa địa chỉ của lệnh sẽ được thi hành kế tiếp nên gọi là con trỏ lệnh.
EU và BIU liên lạc với nhau thông qua hệ thống bus nội. Trong khi EU đang thực hiện lệnh thì BIU lấy lệnh từ bộ nhớ trong nạp đầy vào hàng chờ lệnh (6 bytes). Do đó EU không phải đợi lấy lệnh từ bộ nhớ. Đây là một dạng đơn giản của cache để tăng tốc độ đọc lệnh.
Hình 1
Hình 1.1: Sơ đồ khối của CPU 8086
Thanh ghi (register) là thành phần lưu trữ dữ liệu bên trong CPU, mỗi thanh ghi có độ dài nhất định (16 bit hoặc 8 bit) và được nhận biết bằng một tên riêng. Tùy vào độ dài và chức năng mà thanh ghi có công dụng chứa dữ liệu hoặc kết quả của phép toán, hoặc là các địa chỉ dùng để định vị bộ nhớ khi cần thiết.
Nội dung của thanh ghi được truy xuất thông qua tên riêng của nó, do đó tên thanh ghi là từ khóa quan trọng cần phải lưu ý trong lập trình.
CPU-8086 có 16 thanh ghi, mỗi thanh ghi là 16 bit, có thể chia 4 nhóm sau:
Thanh ghi đoạn: Gồm 4 thanh ghi 16 bit: CS, DS, ES, SS. Đây là những thanh ghi dùng để chứa địa chỉ đoạn của các ô nhớ khi cần truy xuất. Mỗi thanh ghi đoạn quản lý 1 đoạn tối đa 64K ô nhớ trong bộ nhớ trong. Người sử dụng chỉ được phép truy xuất ô nhớ dựa vào địa chỉ tương đối. CPU (cụ thể là BIU) có nhiệm vụ chuyển đổi địa chỉ tương đối thành địa chỉ tuyệt đối để truy xuất vào ô nhớ tuyệt đối tương ứng trong bộ nhớ. (Xem phần tổ chức bộ nhớ)
CS: Thanh ghi đoạn mã lệnh, lưu địa chỉ đoạn chứa mã lệnh chương trình của người sử dụng
DS: Thanh ghi đoạn dữ liệu, lưu địa chỉ đoạn chứa dữ liệu (các biến) trong chương trình.
ES: Thanh ghi đoạn dữ liệu thêm, lưu địa chỉ đoạn chứa dữ liệu thêm trong chương trình.
SS: Thanh ghi đoạn ngăn xếp, lưu địa chỉ đoạn của vùng ngăn xếp.
Thông thường bốn thanh ghi này có thể chứa những giá trị khác nhau, do đó chương trình có thể được truy cập trên bốn đoạn khác nhau và chương trình chỉ có thể truy cập cùng 1 lúc tối đa bốn đoạn. Mặc khác, đối với những chương trình nhỏ, chỉ sử dụng 1 đoạn duy nhất, khi đó cả bốn thanh ghi đều chứa cùng giá trị địa chỉ đoạn, gọi là đoạn chung.
Thanh ghi đa dụng (General Register): Bao gồm bốn thanh ghi đa dụng 16 bit (AX, BX, CX, DX). Mỗi thanh ghi đa dụng có thể được sử dụng với nhiều mục đích khác nhau, tuy nhiên từng thanh ghi có công dụng riêng của nó.
AX : Là thanh ghi tích lũy cơ bản. Mọi tác vụ vào/ra đều dùng thanh ghi này, tác vụ dùng số liệu tức thời, một số tác vụ chuỗi ký tự và các lệnh tính toán đều dùng thanh AX.
BX: Thanh ghi nền dùng để tính toán địa chỉ ô nhớ.
CX: Là thanh ghi đếm, thường dùng để đếm số lần trong một lệnh vòng lặp hoặc lệnh xử lý chuổi ký tự.
DX: Thanh ghi dữ liệu, thường chứa địa chỉ của một số lệnh vào/ra, lệnh tính toán số học (kể cả lệnh nhân và chia).
Mỗi thanh ghi 16 bit có thể chia đôi thành 2 thanh ghi 8 bit. Do đó, CPU-8086 có 8 thanh ghi 8 bit là: AH, AL; BH, BL; CH, CL; DH, DL (thanh ghi AH và AL tương ứng với byte cao và byte thấp của thanh ghi AX, tương tự cho các thanh ghi 8 bit còn lại).
Ví dụ: AX = 1234h => AH = 12h, AL = 34h
Thanh ghi con trỏ và chỉ số (Pointer & Index register): Chức năng chung của nhóm thanh ghi này là chứa địa chỉ độ dời của ô nhớ trong vùng dữ liệu hay ngăn xếp.
SI : Thanh ghi chỉ số nguồn
DI : Thanh ghi chỉ số đích
BP: Thanh ghi con trỏ nền dùng để lấy số liệu từ ngăn xếp.
SP : Thanh ghi con trỏ ngăn xếp luôn chỉ vào đỉnh ngăn xếp.
SI và DI chứa địa chỉ độ dời của ô nhớ tương ứng trong đoạn có địa chỉ chứa trong DS hoặc ES (dữ liệu, còn gọi là Biến). Còn BP và SP chứa địa chỉ độ dời của ô nhớ tương ứng trong đoạn có địa chỉ chứa trong SS, dùng để thâm nhập số liệu trong ngăn xếp.
Thanh ghi Đếm chương trình và thanh ghi trạng thái (Cờ):
Thanh ghi con trỏ lệnh IP (còn gọi là PC – đếm chương trình) là thanh ghi 16 bit chứa địa chỉ của lệnh kế tiếp mà CPU sẽ thực hiện trong. Các lệnh của chương trình có địa chỉ đoạn trong CS.
Thanh ghi Cờ (F) dài 16 bit, mỗi bit là một cờ. Mỗi cờ có giá trị 1 (gọi là SET –Đặt) hoặc 0 (gọi là CLEAR – Xóa). Hình 1.2 mô tả 9 bit trong số 16 bit tương ứng với 9 cờ trạng thái (các bit còn lại dùng cho dự trữ mở rộng khi thiết kế các CPU khác)
Thanh ghi cờ được chia thành hai nhóm:
Nhóm cờ điều khiển (bảng 1.1) bao gồm các cờ dùng để điều khiển sự hoạt động của CPU và giá trị của cờ được thiết lập bằng các lệnh phần mềm.
Nhóm cờ trạng thái (bảng 1.2) bao gồm các cờ phản ánh kết quả thực hiện lệnh cũng như trạng thái của CPU
Dự trữ
Hình 1.2: Cấu trúc thanh ghi Cờ
15 0
F
IP
Flag Register.
Intrucstion Pointer Reg.
Bảng 1.1: Ý nghĩa cờ
Trạng thái tràn có thể không xảy ra (nếu không tràn) hoặc xảy ra (nếu tràn có dấu, tràn không dấu, đồng thời tràn có dấu và không dấu). Nói chung là có 2 trạng thái tràn: Tràn không dấu và Tràn có dấu.
Lưu ý: Nếu một giá trị có MSB=1 (bit dấu) thì CPU luôn luôn cho đó là số có dấu.
a. Tràn không dấu: CF=1
Ví dụ: ADD AX, BX ; với AX = 0FFFFh, BX = 1
Nếu xem đây là các số không dấu thì AX không đủ chứa kết quả nên TRÀN không dấu, vậy CF = 1
Nếu xem đây là các số có dấu thì kết quả sẽ là 0 (vì AX = -1) nên không tràn, do đó OF = 0
b. Tràn có dấu: OF = 1
Ví dụ: ADD AX, BX ; với AX = BX = 7FFFh = 32767
Nếu xem đây là các số không dấu thì AX = 7FFFh + 7FFFh = 0FFFEh = 65534 nên không tràn.
Nếu xem đây là các số có dấu thì tràn vì kết quả vượt quá phạm vi cho phép đối với số có dấu (cộng 2 số dương, kết quả lại là số âm). Thật sự trong trường hợp này, CPU sẽ làm cho OF = 1 theo qui tắc "Nhớ ra và vào MSB xảy ra không đồng thời” nghĩa là có nhớ vào MSB nhưng không có nhớ ra hoặc ngược lại thì tràn và không có hoặc có nhớ ra và vào MSB thì không tràn.
Bộ nhớ trong được tổ chức thành mảng gồm các ô nhớ 8 bit liên tực nhau. Các dữ liệu có thể được ghi vào hoặc đọc ra (gọi là truy xuất) từ bất cứ vị trí ô nhớ nào. Mỗi ô nhớ 8 bit được phần cứng quản lý bằng một địa chỉ vật lý duy nhất. Việc truy xuất nội dung ô nhớ phải bằng địa chỉ vật lý này.
Dữ liệu 8 bit được lưu trữ bằng một ô nhớ và địa chỉ của ô nhớ chính là địa chỉ dùng để truy xuất dữ liệu. Dữ liệu nhiều hơn 8 bit được lưu trữ bởi nhiều ô nhớ liên tục nhau. Theo quy ước Intel, byte dữ liệu cao được lưu ở ô nhớ có địa chỉ cao và byte dữ liệu thấp hơn lưu ở ô nhớ có địa chỉ thấp hơn. Khi đó, địa chỉ dùng để truy xuất dữ liệu là địa chỉ của ô nhớ thấp (ô nhớ chứa byte thấp nhất của dữ liệu)
Hình 1.3 mô tả việc tổ chức các dữ liệu có độ dài khác nhau trong bộ nhớ. Giá trị 5Fh (1 byte) được lưu trữ ở địa chỉ 0010h. Giá trị 0A0B1h (2 byte) được lưu trữ bởi 2 ô nhớ có địa chỉ 0015h và 0016h, địa chỉ để truy xuất giá trị này là 0015h. Còn giá trị 0A2B1C0h (3 byte) được lưu trữ bởi 3 ô nhớ 0012h, 0013h và 0014h, do đó địa chỉ truy xuất giá trị ấy là 0012h.
Hình 1.3: Tổ chức dữ liệu trong bộ nhớ
CPU 8086 có không gian địa chỉ là 1MB (ứng với 20 bit địa chỉ) Vậy CPU 8086 có thể quản lý bộ nhớ trong là 220 = 1MB. Bộ nhớ 1 MB này được CPU-8086 quản lý bằng nhiều đoạn 64 KB. Các đoạn có thể tách rời hoặc có thể chồng lên nhau.
Mỗi đoạn có một địa chỉ đoạn 16 bit duy nhất, tùy vào mục đích sử dụng đoạn mà địa chỉ đoạn được lưu trữ trong thanh ghi đoạn tương ứng.
Đối với người lập trình, Địa chỉ của ô nhớ trong bộ nhớ được xác định bởi hai thông số 16 bit (gọi là địa chỉ logic): Địa chỉ Đoạn (segment) và địa chỉ độ dời (offset).
Cách viết: Segment : Offset
Địa chỉ vật lý của ô nhớ khi truy xuất sẽ được BIU tự động chuyển đổi từ địa chỉ logic bằng cách dịch trái thanh ghi đoạn bốn bit (tức nhân nội dung của thanh ghi đoạn cho 16) rồi cộng với địa chỉ độ dời. Vì vậy, người lập trình không cần địa chỉ vật lý của ô nhớ mà chỉ cần biết địa chỉ logic của ô nhớ.
Ví dụ: đoạn CS có giá trị là 1002h, địa chỉ độ dời của ô nhớ K trong đoạn CS là 500h (CS:0500h hoặc 1002h:0500h). Khi đó, địa chỉ vật lý của ô nhớ K được tính như sau:
10020h (dịch trái địa chỉ đoạn 4 bit)
+ 0500h (độ dời)
10520h (địa chỉ vật lý)
Trong ví dụ trên, đoạn CS có điểm bắt đầu ở địa chỉ vật lý 10020h. Độ dời 500h là khoảng cách từ địa chỉ của điểm bắt đầu của đoạn CS đến ô nhớ K (xem hình 1.4)
Bộ nhớ
Độ dời 500h tính từ điểm đầu đoạn CS
- - -
- - -
Địa chỉ vật lý
Ô nhớ K
trong đoạn CS (CS:500h)
10520h
1051Fh
10521h
- - -
- - -
10025h
10024h
10023h
10022h
501h ô nhớ
Ô nhớ có độ dời 05h
Ô nhớ có độ dời 01h
Ô nhớ có độ dời 0h trong đoạn CS (CS:00h)
Hình 1.4: Địa chỉ vật lý của ô nhớ K trong đoạn CS
Khi truy xuất ô nhớ, BIU lấy sẽ sử dụng địa chỉ đoạn trong thanh ghi đoạn tương ứng với tính chất của ô nhớ cần truy xuất:
- Ô nhớ là Code (Mã lệnh) thì đoạn tương ứng là CS.
- Ô nhớ là Data (dữ liệu) thì đoạn tương ứng là DS.
- Ô nhớ nằm trên ngăn xếp thì dùng đoạn SS.
- Khi truy xuất chuỗi, DI và SI luôn chứa độ dời của ô nhớ trong đoạn DS hay ES
Khi khởi động, CPU 8086 nhảy đến địa chỉ vật lý cao nhất của bộ nhớ trong (đoạn CS = 0FFFFh và độ dời 0) để lấy lệnh. Địa chỉ này ứng với địa chỉ của ROM-BIOS của bộ nhớ trong nơi chứa chương trình khởi động máy tính.
Các ngoại vi đều có địa chỉ riêng từ 0 đến 64K. CPU 8086 dùng các lệnh riêng biệt để truy xuất ngoại vi và bộ nhớ trong. Muốn truy xuất ngoại vi, BIU chỉ cần đưa địa chỉ của ngoại vi lên 16 bit thấp của bus địa chỉ (không có đoạn).
I/O64 kByteMemory 1 MByteIntel-8086 ***SORRY, THIS MEDIA TYPE IS NOT SUPPORTED.***
Hình 1.5: Cấu trúc đơn giản của máy tính
Ngoài CPU-8086, Intel đã cho ra đời thế hệ CPU mới hơn, nhiều tính năng hơn và mạnh hơn như: 80186, 80286, 80386, 80486, Celeron và Pentium (80586). Ngày nay, sức mạnh và tính năng của CPU Intel tăng vượt bậc nhờ công nghệ mới như: Centrino, Hyper Threading, Core Duo.
Bắt đầu từ CPU 80286, hãng Intel đã đưa vào một số cải tiến có ý nghĩa như tăng bus địa chỉ lên 24 bit và có thể vận hành với chế độ bảo vệ (protected mode). Chế độ này cho phép CPU 80286 vận hành trong một hệ điều hành đa nhiệm (multitasking).
Hãng Intel đã thành công lớn khi chế tạo CPU 80386. Đây vẫn còn là một CPU CISC thuần túy có bus địa chỉ 32 bit và bus số liệu 32 bit (ta gọi CPU 80386 là một CPU 32 bit).
Các thanh ghi của CPU 80386 đều là thanh ghi 32 bit (Hình 1.5). Một số thanh ghi đa dụng có thể chia thành thanh ghi 16 bit hoặc chia thành thanh ghi 8 bit để đảm bảo tính tương thích với các CPU chế tạo trước đó.
Với bus địa chỉ 32 bit, không gian địa chỉ của CPU 80386 là 4 GB tức 4096 MB. CPU 80386 có 64K cửa vào/ra 8 bit, 16 bit và 32 bit.
CPU 80386 cũng có thể hoạt động với bộ đồng xử lý toán học 80387 (math coprocessor). Bộ đồng xử lý toán học dùng xử lý các phép tính trên các số có dấu chấm động (số lẻ).
Hình 1.6 mô tả đầy đủ tập thanh ghi của CPU-80386.
Các thanh ghi đa dụng và thanh ghi con trỏ được mở rộng thành thanh ghi 32 bit được gọi tên là: EAX, EBX, ESP, EDI... . Tuy nhiên ta vẫn có thể sử dụng các thanh ghi 16 bit (AX, BX, ... ) hoặc 8 bit (AH, AL, BH, BL ... ) giống như các thanh ghi 16 bit hoặc 8 bit của bộ xử lý 8086.
Chiều dài các thanh ghi đoạn vẫn giữ nguyên 16 bit nhưng có thêm hai thanh ghi đoạn thêm là FS và GS. Các thanh ghi FS và GS được dùng giống như thanh ghi ES. Nghĩa là CPU-80386 quản lý được bốn đoạn dữ liệu.
Thanh ghi trạng thái SR (Status register) và thanh ghi đếm chương trình PC (program counter) cũng được nâng lên 32 bit. Ngoài các bit trạng thái đã thấy trong thanh ghi trạng thái của CPU-8086 (C, Z, S, ... ) thanh ghi trạng thái của CPU-80386 còn có thêm các bit trạng thái như sau:
IOP (Input/Output protection: bảo vệ vào/ra): Đây là hai bit trạng thái dùng trong chế độ bảo vệ để xác định mức ưu tiên mà một tiến trình phải có để có thể thâm nhập một vùng vào ra. Chỉ hệ điều hành mới có quyền dùng các bit này.
N (Nested task: tiến trình lồng vào nhau): Trong chế độ bảo vệ, các hệ điều hành dùng bit này để biết có nhiều tiến trình đang vận hành và ít nhất có một tiến trình đang bị gián đoạn.
R (Resume: tải trục): Bit này cho phép một tiến trình được tiếp tục vận hành lại sau khi bị gián đoạn.
V (Virtual 8086 mode: chế độ 8086 ảo): Bit này cho phép 80386 đang vận hành ở chế độ bảo vệ, chuyển sang chế độ 8086 ảo.
Hình 1.6a: Thanh ghi đa dụng và thanh ghi con trỏ
Hình 1.6b: Thanh ghi quản lý bộ nhớ
Hình 1.6: Các thanh ghi của CPU 80386
CPU-80386 có thể vận hành theo một trong ba chế độ khác nhau: chế độ thực (real mode), chế độ bảo vệ (protected mode) và chế độ 8086 ảo (virtual 8086 mode). Chế độ vận hành của CPU phải được thiết lập trước bằng phần cứng.
Chế độ thực: chế độ thực của bộ xử lý 80386 hoàn toàn tương thích với chế độ vận hành của bộ xử lý 8086. Trong chế độ này, không gian địa chỉ của 80386 bị giới hạn ở mức 220 = 1MB giống như không gian địa chỉ của 8086 mặc dù bus địa chỉ của 80386 có 32 đường dây.
Chế độ bảo vệ: (Còn gọi là chế độ đa nhiệm) chế độ bảo vệ đã được đầu tiên đưa vào bộ xử lý 80286. Chế độ này cho phép bộ xử lý 80386 dùng hết không gian địa chỉ của nó là 232 = 4096 MB và cho phép nó vận hành dưới một hệ điều hành đa nhiệm. Trong hệ điều hành đa nhiệm, nhiều tiến trình có thể chạy đồng thời và được bảo vệ chống lại các thâm nhập trái phép vào vùng ô nhớ bị cấm.
Trong chế độ bảo vệ, các thanh ghi đoạn không được xem như địa chỉ bắt đầu của đoạn mà là thanh ghi chọn (selector) gán các ưu tiên khác nhau cho các tiến trình. Phần ưu tiên khác nhau cho các tiến trình. Phần cốt lõi của hệ điều hành có ưu tiên cao nhất và người sử dụng có ưu tiên thấp nhất.
Chế độ 8086 ảo: Chế độ này cho phép thiết lập một kiểu vận hành đa nhiệm trong đó các chương trình dùng trong chế độ thực, có thể chạy song song với các tiến trình khác.
CPU-80486DX được phát hành năm 1989. Đó là bộ xử lý 32bit chứa 1.2 triệu transistor. Khả năng quản lý bộ nhớ tối đa giống như 80386 nhưng tốc độ thi hành lệnh đạt được 26.9 MIPS (Mega Instructions Per Second - triệu lệnh mỗi giây) tại xung nhịp 33 MHz
Nếu bộ xử lý 80386 là bộ xử lý CISC thuần túy với bộ đồng xử lý toán học 80387 nằm bên ngoài bộ xử lý 80386, thì bộ xử lý 80486 là một bộ xử lý hỗn tạp CISC và RISC với bộ đồng xử lý toán học và với 8K cache nằm bên trong bộ xử lý 80486.
Trong bộ xử lý 80486, một số lệnh thường dùng, ví dụ như lệnh MOV, dùng mạch điện (kỹ thuật RISC) để thực hiện lệnh thay vì dùng vi chương trình như trong các CPU CISC thuần túy. Như thế thì các lệnh thường dùng này được thi hành với tốc độ nhanh hơn. Kỹ thuật ống dẫn cũng được đưa vào trong bộ xử lý 80486.
Với các kỹ thuật RISC được đưa vào, bộ xử lý 80486 nhanh hơn bộ xử lý 80386 đến 3 lần (nếu tốc độ xung nhịp là như nhau).
Bộ xử lý 80486 hoàn toàn tương thích với 2 bộ xử lý 80386 và 80387 cộng lại và như thế nó có các chế độ vận hành giống như 80386.
Bộ xử lý 80486 tỏ ra rất mạnh đối với các chương trình cần tính toán nhiều và các chương trình đồ họa, vì bộ đồng xử lý toán học nằm ngay trong bộ xử lý 80486. Hàng chờ lệnh của bộ xử lý 80486 là 32 byte.
Hình 2
Hình 3
Hình 1.7: CPU-80386 Hình 1.8: CPU-80486
Được đưa ra thị trường vào giữa năm 1993, các bộ xử lý Pentium được chế tạo với hơn 3 triệu transistor, thụ hưởng các tính năng kỹ thuật của các bộ xử lý 80486 DX/2 và được có thêm nhiều tính năng mới.
Theo hãng sản xuất Intel, nếu hoạt động ở với xung nhịp 66 MHz thì tốc độ thi hành lệnh của Pentium là 112 MIPS thay vì 54 MIPS cho bộ xử lý 80486 DX/2 cùng xung nhịp.
Các tính năng nổi bật của bộ xử lý Pentium là :
Hoàn toàn tương thích với các bộ xử lý được chế tạo trước đó (8086, 80286, 80386, 80486).
Dùng kỹ thuật ống dẫn tốt hơn với 2 ống dẫn số nguyên độc lập và một ống dẫn số lẻ. Kỹ thuật siêu vô hướng và tiên đoán lệnh nhảy cũng được đưa vào.
Dùng cache lệnh và cache dữ liệu riêng biệt.
Bus số liệu là 64 bit với cách vận chuyển theo từng gói.
Dùng cách quản lý hệ thống cho phép tiết kiệm năng lượng tiêu hao trong bộ xử lý Pentium.
Có tối ưu hóa các chuỗi mã lệnh.
Petium MMX: Các lệnh xử lý multimedia được đưa vào tập lệnh của CPU nên việc thi hành chương trình multimedia được cải thiện rất nhiều.
Hình 4
Hình 5
Hình 6
Hình 7
Pentium Celeron
Hình 8
Hình 9
Hình 10
Hình 1.9: Hình ảnh các loại bộ xử lý Intel
1. Chọn các thanh ghi đa dụng để lưu trữ các dữ liệu sau đây, sao cho mỗi thanh ghi lưu trữ 1 giá trị và không trùng nhau (Giải thích việc chọn thanh ghi): 15h, 0AFh, 01234h, 230, 257, ‘H’, 8086.
Ghi chú: Số có tận cùng bằng h (hay H) là số thập lục phân (Hexa);
‘H’ : Ký tự H
2. Các thanh ghi đang lưu trữ giá trị như sau:
AH = 11hAL = 22hCL = 15
CH = 10BX = 0A1D4hDX = 8086
Hãy cho biết giá trị thập lục phân của những thanh ghi sau và giải thích:
AX, CX, BH, BL, DH, DL
3. Mô tả các cách có thể sử dụng được để lưu trữ giá trị vào thanh ghi sau:
a. 1234h vào thanh ghi SIb. 5678h vào thanh ghi AX
c. 100 vào thanh ghi DId. 100 vào thanh ghi DX
4. Sử dụng mô hình bộ nhớ gồm 17 ô nhớ như hình A1 để ghi các dữ liệu sau đây vào bộ nhớ sao cho các giá trị không chồng lên nhau (sinh viên tự chọn địa chỉ ô nhớ để lưu trữ): 15h, 0AFh, 01234h, 230, 257, ‘H’, 8086, 3A4B5h, 0F1D2E3h
Hình A1: Mô hình bộ nhớ
5. Với mô hình bộ nhớ kết quả của câu 4, hãy cho biết giá trị dữ liệu 8/16/24/32 bit tại mỗi địa chỉ sau đây ở dạng thập lục phân:
a. 00004h b. 00008hc. 0000Bh d. 0000Dh
6. Đổi sang địa chỉ vật lý tương ứng với mỗi địa chỉ logic sau:
a. 0000:0001hb. 0100:1234h
c. ABCD:3AFFhd. AF70:00CFh
7. Viết ra 4 địa chỉ logic khác nhau đối với mỗi địa chỉ vật lý sau:
a. 40000hb. 0D32FCh
8. Tìm tất cả các địa chỉ logic khác nhau có thể có của mỗi ô nhớ có địa chỉ vật lý sau đây:
a. 00000h b. 0000Fhc. 00010h d. 0001Fh
Có nhận xét gì về các kết quả trên?
9. Cho một chương trình bao gồm 100 byte lệnh (Code), 200 byte dữ liệu (Data) và 16 KB ngăn xếp (Stack). Vẽ hình mô tả tổ chức vùng nhớ của chương trình trên trong bộ nhớ có mô hình như hình A2 theo hai cách sau (sinh viên tự gán địa chỉ vật lý và logic thích hợp với đầu và cuối cho từng vùng):
a. Dùng chung 1 đoạn duy nhất cho cả 3 vùng Code, Data và Stack
b. Dùng 3 đoạn riêng biệt không chồng nhau cho Code, Data, Stack
Hình A2: Mô hình tổ chức bộ nhớ
10. Bằng mô hình bộ nhớ kết quả của câu 9a, hãy thiết lập giá trị các thanh ghi sao cho CPU-8086 truy xuất được những ô nhớ trong mỗi trường hợp sau:
a. Byte lệnh đầu tiênb. Byte lệnh thứ 20
c. Byte dữ liệu đầu tiênd. Byte dữ liệu thứ 100
Lich Su MS-DOS
Phiên bản DOS đầu tiên ra đời vào tháng 8 năm 1981, với tên chính thức là PC DOS 1.0. Tên gọi MS-DOS chỉ đựoc biết đến kể từ tháng 5 năm 1982 (MS-DOS 1.25). Sau đó, Microsoft lần lượt cho ra đời các phiên bản tiếp theo của MS-DOS song song cùng với PC-DOS.
MS-DOS 5.0 ra đời vào tháng 6 năm 1991 bao gồm nhiều tính năng mới như quản lý bộ nhớ (MEMMAKER.EXE), trình soạn thảo văn bản (MS-DOS Editor), ngôn ngữ lập trình QBASIC đã trở nên phổ biển một thời trước khi MS-DOS 6.22 ra đời vào tháng 6 năm 1994. MS-DOS 6.22 cũng là phiên bản DOS cuối cùng được chạy như một hệ điều hành độc lập (standalone version). Sau khi Windows 95 ra đời vào năm 1995, các phiên bản MS-DOS tiếp theo đều được phát hành đi kèm với Windows, chẳng hạn như MS-DOS 7.0 (8/1995) là nền để cho Windows 95 khởi động, và MS-DOS 8.0 đi kèm với Windows ME. Đây cũng là phiên bản cuối cùng của hệ điều hành này.
Tom Tat Giao TRinh MS_DOS
1.Phiên bản cuối cùng của DOS hiện nay là version 7.0
-Ổ mềm thường được đặt tên là ổ A và B (drive A, drive B), ổ cứng có tên là C, D, E,... Một đĩa cứng có thể được chia làm nhiều ổ đĩa logic nhỏ có các tên khác nhau.
-C:\>_ hoặc A:\>_
C hoặc A là tên của ổ đĩa làm việc: C khi khởi động từ đĩa cứng và A là từ đĩa mềm. Bộ ký tự :\> là qui ước dấu đợi lệnh của DOS, qui ước này có thể thay đổi. Ðiểm nháy sáng _ gọi là con trỏ (cursor) cho ta biết điểm làm việc hiện tại trên màn hình.
--Ghi chú: Ta có thể đánh tên lệnh và dấu /? để nhận được hướng dẫn (HELP) các chi tiết sau lệnh. Ví dụ C:\>DIR /? , DOS sẽ chỉ dẫn về lệnh DIR trên màn hình.
-1. Các khái niệm cơ bản TOP
a. Tập tin (file)
Tên tập tin thường có 2 phần: phần tên (name) và phần mở rộng (extension). Phần tên là bắt buộc phải có của một tập tin, còn phần mở rộng thì có thể có hoặc không.
b. Thư mục (directory)
Thư mục đang làm việc gọi là thư mục hiện hành (current directory).
c. Ðường dẫn (path)
Cú pháp Tên đường dẫn: path[drive:][\directory][\sub-dir ...]<\filename>
Ví dụ 4.4: C:\>path C:\PASCAL\MAIN\TURBO.EXE
a. Lệnh nội trú (internal command)
Lệnh nội trú nằm trong phần khởi động của MS-DOS chứa trong các file COMMAND.COM, IO.SYS và MSDOS.SYS.
+ Tập tin COMMAND.COM là tập tin quan trọng nhất, có nhiệm vụ thông dịch lệnh và xử lý các lệnh nội trú. Khi khởi động máy, COMMAND.COM được nạp vào bộ nhớ RAM. Khi nhận được lệnh từ bàn phím, tập tin này sẽ nhận diện và điều khiển việc thi hành các lệnh từ người sử dụng.
+ Hai tập tin IO.SYS và MSDOS.SYS là hai tập tin ẩn, nó cũng được nạp vào RAM khi khởi động máy. Chúng có nhiệm vụ quản lý và điều khiển các thiết bị ngoại vi và các tập tin trên đĩa.
Tập lệnh nội trú gồm các lệnh chính thường dùng như:
• Các lệnh liên quan đến thư mục: DIR, CD, MD, RD, PATH, TREE, ...
• Các lệnh liên quan đến file: TYPE, DEL, COPY, REN, ...
• Các lệnh thời gian: TIME, DATE
• Các lệnh khác: PROMPT, CLS, VER, VOL,...
Các lệnh nội trú cơ bản:
* Chuyển ổ đĩa:
Cú pháp : <Ký tự ổ đĩa : > hoặc < drive : >
Với drive: là ổ đĩa cần chuyển đến.
Muốn chuyển từ ổ đĩa C sang ổ đĩa A ta gõ C:\> A: rồi nhấn nút Enter. Tương tự chuyển từ A: sang U: ta gõ lệnh U:
Các lệnh nội trú cơ bản:
* Chuyển ổ đĩa:
Cú pháp : <Ký tự ổ đĩa : > hoặc < drive : >
Với drive: là ổ đĩa cần chuyển đến.
Muốn chuyển từ ổ đĩa C sang ổ đĩa A ta gõ C:\> A: rồi nhấn nút Enter. Tương tự chuyển từ A: sang U: ta gõ lệnh U:
* Liệt kê thư mục (DIR)
Hiển thị danh sách các tập tin và các thư mục con có trong thư mục.
Cú pháp: DIR [drive :] [path][/P][/W][/A : attribs][/O : sortorder]
Ghi chú:
/P : hiển thị từng trang màn hình (Page)
/W : hiển thị theo hàng ngang (Wide), lượt bỏ bớt số liệu về kích thước byte, ngày, giờ.
/A : hiển thị thuộc tính (Attribut) của file
/Option: các ý định hiển thị trật tự sắp xếp:
N : theo alphabetic tên file;
E : theo alphabetic tên phần mở rộng
S : theo kích thước bytes (từ nhỏ đến lớn)
D : theo ngày tháng và giờ (từ trước đến nay)
G : theo nhóm thư mục trước
* Tạo thư mục mới (Make Directory - MD)
Tạo một thư mục mới trong ổ đĩa hoặc thư mục hiện hành.
Cú pháp: MD [drive :][path]<tên thư mục mới>
* Ðổi thư mục (Change Directory - CD)
Cú pháp: CD [drive :] {path}
Ví dụ 4.5 C:\>CD PASCAL sẽ có C:\PASCAL>_
Ghi chú:
- Từ thư mục con, muốn trở về thư mục cha, ta gõ: CD..
- Nếu muốn về thẳng thư mục gốc, ta gõ: CD\
- Ðể hiển thị đường dẫn hiện hành, ta gõ: CD
* Xem nội dung tập tin trên màn hình (TYPE)
Cú pháp: TYPE [drive:][path]<file name>
Ghi chú:
- Lệnh TYPE dùng hiển thị một tập tin văn bản chứa mã ASCIIï mới đọc được.
- Các file chứa mã nhị phân của chương trình như các file *.EXE, *.COM, *.BIN,... thì khi gõ lệnh TYPE sẽ không đọc bình thường được.
* Xóa thư mục (Remove Directory - RD)
Xoá bỏ một thư mục con rỗng (không chứa các tập tin và thư mục con).
Cú pháp: RD [drive :] <path>
* Sao chép tập tin (COPY)
Cú pháp 1: sao chép tập tin sang một vị trí khác.
COPY [drive1 :][path1]<filename1> [drive2:][path2][<filename2>]
Ghi chú:
- Muốn copy một nhóm tập tin, ta có thể dùng các ký tự đại diện của tập tin là dấu * hoặc ? trong <filename>
- Nếu không viết <filename 2> thì máy sẽ hiểu là sao chép mà không đổi tên tập tin. Khi đó ổ đĩa [drive1:] phải khác [drive2:] hoặc đường dẫn <path1> khác <path2>
- Khi không chỉ rõ Ổ đĩa và đường dẫn thì máy sẽ hiểu đang thực hiện trên ổ đĩa và thư mục hiện hành.
Cú pháp 2: cho phép nối các tập tin có sẵn thành một tập tin mới chung.
COPY <file 1> + <file 2> [+ ... + <file n>] [<new_file>]
Ghi chú:
- Nếu không đặt tên tập tin mới thì tất cả các tập tin sẽ ghép chung vào <file 1> - Nếu <new_file > đã có thì nội dung cũ sẽ được thay bằng nội dung mới.
- Tên <new_file > không được trùng với tên các tập tin cần ghép.
Cú pháp 3: sao chép tập tin ra máy in.
COPY <filename> PRN
Cú pháp 4: dùng lệnh COPY để tạo ra một tập tin văn bản đơn giản.
COPY CON <filename>
Ghi chú:
- Sau khi gõ Enter, ta có thể đánh vào một vài đoạn văn trên bàn phím tùy ý. Muốn kết thúc, đánh tổ hợp phím Ctrl+Z hay F6 và Enter để lưu trữ.
- Khi gõ Enter để xuống dòng, ta không di chuyển con trỏ trở lên dòng trên được.
- Lỗi văn bản sai không thể sửa nội dung trực tiếp khi đã lưu, ngoại trừ phải dùng các trình soạn thảo văn bản khác.
* Xoá tập tin (Delete - DEL)
Cú pháp: DEL [drive:][path]<file name>[/P]
Ghi chú:
- Có thể xoá một loạt <tên file> nếu dùng các ký tự * và ?
- [/P] tạo nhắc để xác định từng tập tin muốn xóa
- Xóa tất cả các tập tin thì dùng lệnh DEL *.* khi đó máy sẽ hỏi lại :
All files in directory will be deleted ! (Tất cả các tập tin sẽ bị xóa !
Are you sure (y/n) ? _ Bạn có chắc không (y/n) ?)
Gõ y (yes) nếu muốn xóa tất cả và n (no) khi không muốn dùng lệnh xóa tất cả.
- Lệnh DEL không xóa các tập tin ẩn (hiden) và tập tin chỉ đọc (read only). Muốn xoá các tập tin này ta phải dùng lệnh ATTRIB ngoại trú để thay đổi thuộc tính của nó.
- Nếu DEL một thư mục thì xóa hết các tập tin trong thư mục đó.
* Ðổi tên tập tin (Rename - REN)
Cú pháp: REN [drive:][path]<old_file> <new_file>
Ghi chú:
- <old_file> : tên tập tin cũ cần đổi <new_file> : tên tập tin mới
- Trường hợp tập tin mới đã có tên rồi hoặc không có tập tin cũ, máy sẽ báo:
Duplicate file name or file not found
* Xóa màn hình (ClearScreen - CLS)
Cú pháp: CLS
* Dấu đợi lệnh (PROMPT)
Cú pháp: PROMPT [$text]
Ghi chú:
- Lệnh này định dạng lại dấu đợi lệnh của MS-DOS theo ý riêng của người sử
dụng.
- $text là chuỗi các ký tự liên tiếp nhau, trước mỗi ký tự có ký hiệu $
$P : ổ đĩa và thư mục hiện hành
$G : dấu >
$L : dấu <
$Q : dấu =
$T : giờ hiện hành
$D : ngày hiện hành
$N : ổ đĩa hiện hành
$V : phiên bản của MS-DOS
$_ : xuống hàng
* Xem và chỉnh thời gian (TIME)
Cú pháp: TIME [hh:mm:ss]
Ghi chú:
- Sau khi Enter, trên màn hình sẽ xuất hiện giờ phút giây hiện tại của hệ thống.
Ví dụ 4.5: TIME
Current Time is 9 : 30 : 15
Enter new time : _
- Nếu không cần thay đổi thời gian, ta nhấn Enter để xác nhận.
- Muốn chỉnh thời gian, ta nhập giờ : phút : giây phù hợp tại vị trí con trỏ.
* Xem và chỉnh ngày tháng (DATE)
Cú pháp: DATE [mm-dd-yy]
Ghi chú:
- Sau khi gõ Enter, trên màn hình sẽ hiện ngày tháng năm hiện tại của hệ thống.
- Kiểu ngày tháng năm do người sử dụng thiết lập.
Ví dụ 4.6: DATE
Current date is Sun 09-15-96
Enter new date (mm-dd-yy) : _
- Nếu không muốn thay đổi ngày tháng của hệ thống, ta gõ Enter để xác nhận.
- Nếu muốn thay đổi ngày tháng, ta gõ theo thứ tự số : tháng-ngày-năm
Lưu ý: khi gõ sai, máy sẽ báo : Invalid date (ngày tháng không hợp lệ). Khi đó ngày tháng của hệ thống vẫn giữ nguyên và ta phải dùng lệnh DATE để nhập lại ngày tháng cho hệ thống.
Các máy tính Pentium hiện nay đều thể hiện phần năm là 4 con số, ví dụ :
Current date is Fri 08-04-2000