Để làm đợc điều này, ngời ta đa vào trong cấu trúc của bộ vi xử lý một số cơ chế, cấu trúc nh: kỹ thuật đờng ống, xử lý song song, đồng xử Các bộ vi xử lý khi thực hiện một lệnh thờng ph
Trang 1Đặc điểm chung của các vi xử lý thế hệ này là:
- Độ dài từ thờng là 4 bit
- Công nghệ chế tạo PMOS với đặc điểm mật độ phần tử nhỏ, tốc độ thấp,giá rẻ và chỉ có khả năng đa ra dòng tải nhỏ
và thờng có khả năng phân biệt địa chỉ bộ nhớ với dung lợng đến 64KB Có một
số bộ vi xử lý còn có khả năng phân biệt đợc 256 địa chỉ cho các thiết bị ngoạivi(họ Intel và Zilog) Chúng đã đợc sử dụng rất rộng rãi trong công nghiệp vànhất là để tạo ra các máy tính 8 bit nổi tiếng một thời nh Apple II và Commodore
64 Tất cả các bộ vi xử lý thời kỳ này đều đợc sản xuất bằng công nghệ NMOShoặc CMOS cho phép đạt đợc tốc độ từ 1 - 8 s/lệnh với tần số đồng hồ fclk = 1 -
5 MHz
3 Thế hệ 3(1978 - 1982).
Các bộ vi xử lý trong thế hệ này có đại diện là các bộ vi xử lý 16 bit8086/80186/80286 của Intel hoặc 68000/68010 của Motorola Một tiến bộ hơnhẳn so với các bộ vi xử lý 8 bit thế hệ trớc là các bộ vi xử lý 16 bit có tập lệnh đadạng với các lệnh nhân, chia và các lệnh thao tác với chuỗi ký tự Khả năng phânbiệt địa chỉ cho bộ nhớ và cho thiết bị ngoại vi của các bộ vi xử lý thế hệ này cũnglớn hơn(từ 1 - 16MB cho bộ nhớ và tới 64K địa chỉ cho thiết bị ngoại vi đối với họIntel) Đây là các bộ vi xử lý đợc dùng trong các máy IBM PC, PC/XT, PC/AT vàcác máy Macintosh của Apple Phần lớn các bộ vi xử lý trong thế hệ này đều đợcsản xuất bằng công nghệ HMOS và cho phép đạt đợc tốc độ từ 0,1 - 1 s/lệnh vớitần số đồng hồ fclk = 5 - 10MHz
4 Thế hệ 4(1984 - ?).
Trang 2Các bộ vi xử lý đại diện trong thế hệ này là các vi xử lý 32 bit 80386/80486
và 64 bit Pentium của Intel, các vi xử lý 32 bit 68020/68030/68040/68060 củaMotorola Đặc điểm của các bộ vi xử lý thế hệ này là bus địa chỉ đều là 32 bit và
có khả năng làm việc với bộ nhớ ảo Ngoài ra còn có các cơ chế hoặc cấu trúcnh: cơ chế xử lý xen kẽ liên tục dòng mã lệnh(pipelining), bộ nhớ cache(bộ nhớ
ẩn hay bộ nhớ dự trữ), bộ nhớ ảo Các bộ vi xử lý này đều có bộ quản lý bộnhớ(MMU - Memory Management Unit) và nhiều khi cả các bộ đồng xử lý toánhọc ở bên trong Phần lớn các bộ vi xử lý thế hệ này đều đợc sản xuất bằng côngnghệ HCMOS
Một số thông số chính của các bộ vi xử lý của Intel:
Đồng xử lý toán học 8087 8087 80387DX Bên trong Bên trong
II Một số đặc điểm cấu trúc của bộ vi xử lý.
1 Độ dài từ.
Độ dài từ là số bit dữ liệu mà bộ vi xử lý có khả năng xử lý cùng một lúc.Mỗi bộ vi xử lý có độ dài từ nhất định Tuỳ thuộc vào từng thế hệ vi xử lý vàmức độ phát triển của công nghệ vi xử lý, độ dài từ có thể là 4bit, 8bit, 16bit,24bit, 32bit hay 64bit Độ dài từ càng lớn càng tạo ra nhiều khả năng tính toáncho bộ vi xử lý Thông thờng, các bộ vi xử lý có độ dài từ bên trong và bên ngoài
nh nhau, nghĩa là số bit dữ liệu mà nó xử lý đợc cũng bằng số bit dữ liệu mà nó
có thể nhận đợc từ bên ngoài(bộ nhớ, thiết bị ngoại vi) Tuy nhiên, cũng có một
số bộ vi xử lý làm việc với độ dài từ trong và ngoài khác nhau Ví dụ bộ VXL
8088 có khả năng xử lý đợc với dữ liệu có độ dài 16bit nhng chỉ có thể nhận đợcdữ liệu có độ dài 8bit từ bên ngoài
2 Khả năng đánh địa chỉ.
Các mã lệnh và các dữ liệu cung cấp cho bộ vi xử lý hoạt động đợc để tại bộnhớ(Memory) Bộ nhớ là một cấu trúc dữ liệu bao gồm các ô nhớ, mỗi ô nhớ đợcgán cho một địa chỉ để nhận biết Thông qua địa chỉ của các ô nhớ, bộ vi xử lý
có thể truy cập vào từng ô nhớ để lấy mã lệnh và dữ liệu Số lợng ô nhớ mà bộ vi
xử lý có thể phân biệt gọi là khả năng đánh địa chỉ của bộ vi xử lý Khả năng
Trang 3đánh địa chỉ còn đợc gọi là khả năng địa chỉ hoá, không gian địa chỉ hay khônggian nhớ.
Để quản lý địa chỉ của các ô nhớ, bộ vi xử lý thờng sử dụng các thanh ghi
địa chỉ Độ dài của thanh ghi địa chỉ quyết định khả năng địa chỉ hoá của bộ vi
xử lý Ví dụ: nếu dùng một thanh ghi có độ dài 16bit để quản lý địa chỉ của các ônhớ thì khả năng địa chỉ hoá của bộ vi xử lý là 216 = 65535 = 64K ô nhớ
Khả năng đánh địa chỉ của bộ vi xử lý đợc biết đến không chỉ với bộ nhớ
mà còn đối với thiết bị ngoại vi
N
* f
(triệu lệnh/s)Trong đó: f - tần số làm việc của bộ vi xử lý
N - số lợng các đơn vị xử lý số học và logic(ALU) không phụthuộc vào nhau bên trong bộ vi xử lý
M - số lợng vi lệnh trung bình của một lệnh trong bộ vi xử lý (thờng để thực hiện 1 lệnh cần từ 4 7 vi lệnh)
T - hệ số thời gian truy nhập bộ nhớ
Nh vậy, muốn tăng tốc độ của bộ vi xử lý ta có thể thực hiện bằng cách tăng
f và N, giảm M và T Để làm đợc điều này, ngời ta đa vào trong cấu trúc của bộ
vi xử lý một số cơ chế, cấu trúc nh: kỹ thuật đờng ống, xử lý song song, đồng xử
Các bộ vi xử lý khi thực hiện một lệnh thờng phải trải qua 3 giai đoạn:
đọc mã lệnh, giải mã lệnh, thực hiện lệnh Cơ chế Pipelining cho phép bộ vi xử
lý trong khi chuyển sang giai đoạn giải mã lệnh của lệnh này thì có thể tiếp tục
đọc mã lệnh của lệnh tiếp theo Với cách hoạt động theo kiểu dây chuyền nhtrên, tất cả các bộ phận của bộ vi xử lý liên tục phải làm việc, tốc độ của bộ vi xử
lý vì thế đợc tăng lên một cách đáng kể
Xử lý song song.
Trang 4Xử lý song song có nghĩa là hai hay nhiều quá trình tính toán xảy ra cùngmột lúc Điều này có thể thực hiện bằng cách kết nối hai hay nhiều bộ vi xử lýtrong khối xử lý trung tâm CPU, lúc này ta nhận đợc một hệ đa xử lý Kỹ thuật
xử lý song song cũng có thể đợc thực hiện trong một bộ vi xử lý bằng cách thiết
kế sao cho quá trình xử lý dữ liệu bên trong bộ vi xử lý chia thành các phiênkhác nhau và thực hiện song song nhờ sự phân chia khối logic điều khiển bêntrong thành hai phần riêng Kiến trúc của bộ vi xử lý kiểu này gọi là kiến trúcsiêu hớng(Superscalar architechture), nghĩa là cùng một lúc có nhiều hớng xử lýkhác nhau bên trong bộ vi xử lý
Đồng xử lý.
Trong các hệ vi xử lý trớc đây, để tăng tốc độ xử lý và độ chính xác của hệthống đối với các phép toán số học, đặc biệt là các phép toán với dấu phẩy động,ngời ta thờng mắc thêm vào một bộ đồng xử lý toán học Bộ đồng xử lý toán họcchỉ có chức năng thực hiện các phép toán số học, do đó tốc độ xử lý cũng nh tínhchính xác của nó rất cao Các bộ vi xử lý công nghệ cao hiện nay(thế hệ 4) đã cấyvào bên trong cấu trúc của nó các bộ đồng xử lý toán học và do đó đã làm tăng
đáng kể tốc độ xử lý cũng nh độ chính xác trong các phép toán của các bộ vi xửlý
Bộ nhớ dự trữ.
Tốc độ của bộ vi xử lý sẽ tăng đáng kể nếu nh thời gian truy cập bộ nhớ cóthể giảm tối thiểu Để thực hiện điều này, ngời ta áp dụng cấu trúc bộ nhớ dựtrữ(bộ nhớ ẩn - Cache memory) Bộ nhớ Cache là bộ nhớ có tốc độ truy nhập rấtcao, nó có thể nằm ngay bên trong bộ vi xử lý với dung lợng hạn chế(InternalCache), hoặc nằm ngoài bộ vi xử lý nhng đợc kết nối trực tiếp với bộ vi xử lý vàvới dung lợng đủ lớn(External Cache) Khi hoạt động, trớc tiên bộ vi xử lý tìmkiếm lệnh ở trong bộ nhớ Cache, nếu không tìm thấy thì sẽ tìm trong bộ nhớchính Điều này đồng nghĩa với việc nếu để trong bộ nhớ Cache các lệnh thờngxuất hiện trong hoạt động của bộ vi xử lý thì có thể làm giảm tối thiểu thời giantruy nhập bộ nhớ
5 Tập lệnh.
Tập lệnh là một đặc tính then chốt của kiến trúc bộ vi xử lý Khả năng xử lýcủa bộ vi xử lý đợc thể hiện thông qua tập lệnh Có thể nói, tập lệnh là ngôn ngữdùng để giao tiếp giữa con ngời và bộ vi xử lý Thông qua tập lệnh, ngời lập trìnhhay nhà thiết kế hệ thống có thể điều khiển bộ vi xử lý hoạt động theo một trình
Trang 5Có thể thấy bộ vi xử lý là một thành phần rất cơ bản không thể thiếu trong
hệ thống vi xử lý Tuy nhiên, để tạo nên một hệ vi xử lý hoàn chỉnh thì bộ vi xử
lý còn phải kết hợp thêm với các bộ phận điện tử khác(bộ nhớ, các bộ phối ghépvào ra )
Một hệ vi xử lý bao gồm các khối chức năng chính sau(hình 1-1):
- Khối xử lý trung tâm(CPU - Central Processing Unit)
- Bộ nhớ bán dẫn(M - Memory)
- Khối phối ghép với các thiết bị ngoại vi(I/O - Input/Output)
- Các Bus truyền thông tin
II Cấu trúc và hoạt động của hệ vi xử lý.
1 Khối xử lý trung tâm - CPU.
Là trung tâm tính toán và điều hành hệ thống Nó là một mạch vi điện tử có
độ tích hợp rất cao Khi hoạt động, nó đọc mã lệnh đợc ghi dới dạng các bit 0 và
1 từ bộ nhớ, sau đó giải mã các lệnh này thành dãy các xung điều khiển ứng vớicác thao tác trong lệnh để điều khiển các khối khác thực hiện từng bớc các thaotác đó
Để thực hiện công việc trên, bên trong CPU có các thanh ghi dùng để chứa
địa chỉ của lệnh sắp thực hiện gọi là thanh ghi con trỏ lệnh(IP - InstructionPointer) hoặc bộ đếm chơng trình(PC - Program Counter), một số thanh ghi đanăng khác cùng khối số học và logíc(ALU - Arithmetic and Logic Unit) để thao
Khối xử lý
trung tâm
(CPU)
Bộ nhớ(M)ROM-RAM
Phối ghép vào/ra(I/O)
Thiết bị vàoThiết bị raBus địa chỉ
Bus dữ liệu
Bus điều khiển
Thanh ghi trong
Thanh ghi ngoài
Hình 1-1: Hệ thống vi xử lý
Trang 6tác với dữ liệu Ngoài ra, ở đây còn có các hệ thống mạch điện tử rất phức tạp đểgiải mã lệnh và từ đó tạo ra các xung điều khiển cho toàn hệ thống.
2 Bộ nhớ - M.
Còn gọi là bộ nhớ trong - một bộ phận rất quan trọng của hệ vi xử lý - baogồm các bộ nhớ ROM(Read Only Memory) và RAM(Random Access Memory).Trong ROM chứa chơng trình điều khiển hoạt động của toàn hệ thống Khicấp nguồn cho hệ hoạt động, CPU lấy lệnh từ ROM để khởi động hệ thống Mộtphần của chơng trình điều khiển hệ thống, các chơng trình ứng dụng, dữ liệucùng các kết quả của chơng trình thờng đợc để trong RAM
3 Khối phối ghép vào/ra - I/O.
Tạo ra khả năng giao tiếp giữa hệ vi xử lý với các thiết bị điện tử khác nh bànphím, chuột, màn hình, máy in, bộ nhớ ngoài Bộ phận phối ghép cụ thể giữa bus
hệ thống với các thiết bị điện tử đó thờng đợc gọi là cổng Nh vậy, sẽ có các cổngvào để lấy thông tin từ ngoài vào và có các cổng ra để đa thông tin từ hệ ra ngoài.Tuỳ theo yêu cầu cụ thể, các mạch cổng này có thể đợc xây dựng từ các mạchlogíc đơn giản hoặc từ các vi mạch chuyên dụng lập trình đợc
4 Các bus truyền thông tin.
Các khối chức năng CPU, M và I/O liên hệ với nhau thông qua hệ thống cácbus truyền thông tin bao gồm: bus địa chỉ, bus dữ liệu và bus điều khiển
Bus địa chỉ(Address Bus).
Thờng có 16, 20, 24 hay 32 đờng dây song song chuyển tải thông tin củacác bit địa chỉ Số lợng đờng dây của bus địa chỉ phụ thuộc vào khả năng phânbiệt địa chỉ của CPU(số bit địa chỉ của CPU)
VD: CPU có số bit địa chỉ là 32, tơng ứng với số lợng đờng dây của bus địachỉ là N = 32, và khả năng phân biệt địa chỉ của CPU là 2N = 232 = 4 Giga ô nhớ.Khi đọc/ghi bộ nhớ, CPU sẽ đa ra trên bus này địa chỉ của ô nhớ liên quan.Khi đọc/ghi với cổng vào/ra, CPU cũng đa ra trên bus địa chỉ các bit địa chỉ tơngứng của cổng Bus địa chỉ có tính một chiều, nghĩa là chỉ có CPU mới có khảnăng đa ra địa chỉ trên bus địa chỉ
Bus dữ liệu(Data Bus).
Thờng có 8, 16, 24, 32 hay 64 đờng dây tuỳ theo các bộ vi xử lý cụ thể Sốlợng đờng dây này quyết định số bit dữ liệu mà CPU có khả năng xử lý cùng mộtlúc Bus dữ liệu có tính 2 chiều, nghĩa là dữ liệu có thể đợc truyền đi từ CPU(dữliệu ra) hoặc truyền đến CPU(dữ liệu vào) Các phần tử có đầu ra nối thẳng vớibus dữ liệu đều phải đợc trang bị đầu ra ba trạng thái để có thể ghép vào đợc vàhoạt động bình thờng với bus này
Bus điều khiển(Control Bus).
Thờng gồm hàng chục đờng dây có tín hiệu khác nhau Mỗi tín hiệu điềukhiển có một chiều nhất định Khi hoạt động, CPU đa tín hiệu điều khiển đến cáckhối khác trong hệ, đồng thời nó cũng nhận các tín hiệu điều khiển từ các khối đó
để phối hợp hoạt động của toàn hệ Bus điều khiển có tính 2 chiều, tuy nhiên tính
2 chiều ở đây không phải là của một tín hiệu mà của cả một nhóm tín hiệu
Trang 7-
-Câu hỏi ôn tập
1 Trình bày khái niệm về độ dài từ? Độ dài từ bên trong và độ dài từ bên ngoài?
2 Khả năng địa chỉ hoá của bộ vi xử lý là gì? Bộ vi xử lý quản lý địa chỉ của các
ô nhớ nh thế nào?
3 Trình bày về bộ nhớ Cache? Tác dụng của bộ nhớ Cache trong bộ vi xử lý?
4 Thế nào là xử lý song song, kỹ thuật đờng ống?
5 Trình bày cấu trúc và chức năng các khối của hệ vi xử lý?
6 Trình bày điểm khác biệt cơ bản giữa ROM và RAM, từ đó chỉ rõ vai trò củachúng trong hệ thống vi xử lý?
7 Hệ thống Bus bao gồm mấy loại? Trình bày đặc điểm từng loại?
Trang 10Địa chỉ logic = Thanhghiđoạn : Thanhghilệch
Địa chỉ vật lý(địa chỉ thật) 20 bit của một ô nhớ nào đó trong một đoạn bất
kỳ, đợc tính theo công thức:
Địa chỉ vật lý = Thanhghiđoạn x 16 + Thanhghilệch
Địa chỉ kiểu segment : offset là logic vì nó tồn tại dới dạng giá trị của các
thanh ghi cụ thể bên trong CPU và khi cần thiết truy nhập ô nhớ nào đó thì nóphải đợc đổi ra địa chỉ vật lý rồi đa lên bus địa chỉ Việc chuyển đổi này do một
bộ tạo địa chỉ thực hiện(phần tử ở hình 2-1)
Ví dụ: cặp CS:IP chỉ ra địa chỉ của lệnh sắp thực hiện trong đoạn mã Nếutại một thời điểm nào đó CS = FFF0H và IP = 00F0H thì:
CS:IP ~ FFF0H x 16 + 00F0H = FFF00H + 00F0H = FFFF0H
Các thanh ghi đa năng.
Trong khối EU có 4 thanh ghi đa năng 16 bit: AX, BX, CX, DX Trong một
số trờng hợp, các thanh ghi này có thể tách ra thành 2 thanh ghi 8 bit để làm việc
độc lập: AH và AL, BH và BL, CH và CL, DH và DL(H: byte cao, L: byte thấp).Mỗi thanh ghi có thể đợc dùng một cách vạn năng để chứa các loại dữ liệukhác nhau Tuy nhiên cũng có những công việc đặc biệt nhất định chỉ thao tácvới một vài thanh ghi nào đó Cụ thể:
- AX(accumulator - Acc): thanh chứa, các kết quả của các thao tác thờng
đợc chứa ở đây Nếu kết quả là 8 bit thì AL đợc coi là Acc
- BX(base): thanh ghi cơ sở, thờng chứa địa chỉ cơ sở của một bảng dùngtrong lệnh XLAT
- CX(count): bộ đếm, thờng đợc dùng để chứa số lần lặp trong các lệnhlặp hay số lần dịch hoặc quay trong các lệnh dịch hoặc quay thanh ghi
- DX(data): thanh ghi dữ liệu DX cùng AX tham gia vào các thao tác củaphép nhân hoặc chia số 16 bit DX còn đợc dùng để chứa địa chỉ củacác cổng trong các lệnh vào/ra dữ liệu trực tiếp
Các thanh ghi con trỏ và chỉ số.
Trong 8088 có 3 thanh ghi con trỏ và 2 thanh ghi chỉ số 16 bit Các thanhghi này đều có thể đợc dùng nh các thanh ghi đa năng(trừ IP), nhng vai trò chínhcủa chúng là đợc ngầm định nh thanh ghi lệch cho các đoạn tơng ứng
- IP(instruction pointer): con trỏ lệnh, IP luôn trỏ vào lệnh tiếp theo sẽ đợcthực hiện nằm trong đoạn mã CS(địa chỉ đầy đủ CS:IP)
- BP(base pointer): con trỏ cơ sở, BP luôn trỏ vào một dữ liệu nằm trong
đoạn ngăn xếp SS(địa chỉ đầy đủ SS:BP)
- SP(stack pointer): con trỏ ngăn xếp, SP luôn trỏ vào đỉnh hiện thời củangăn xếp nằm trong đoạn ngăn xếp SS(địa chỉ đầy đủ SS:SP)
- SI(source index): chỉ số gốc(hay nguồn), SI chỉ vào dữ liệu trong đoạn dữliệu DS(địa chỉ cụ thể DS:SI)
- DI(destination index): chỉ số đích, DI chỉ vào dữ liệu trong đoạn dữ liệuDS(địa chỉ đầy đủ DS:DI)
Trang 11Trong các lệnh thao tác với dữ liệu kiểu chuỗi thì cặp thanh ghi ES:DI ứngvới địa chỉ của phần tử thuộc chuỗi đích còn cặp thanh ghi DS:SI ứng với địa chỉcủa phần tử thuộc chuỗi gốc.
Thanh ghi cờ FR.
Đây là thanh ghi khá đặc biệt trong CPU, mỗi bit của nó đợc dùng để phản
ánh một trạng thái nhất định của kết quả phép toán do ALU thực hiện hoặc mộttrạng thái hoạt động của EU Dựa vào các cờ này ngời lập trình có thể có cáclệnh thích hợp tiếp theo cho bộ vi xử lý(các lệnh nhảy có điều kiện), Thanh ghi
cờ gồm 16 bit nhng chỉ dùng hết 9 bit của nó để làm các bit cờ(hình 2-3)
Các cờ trạng thái:
- CF(Carry flag): cờ nhớ, CF = 1 khi có nhớ hoặc mợn
- PF(Parity flag): cờ chẵn/lẻ, PF = 1 khi tổng số bit 1 trong kết quả là chẵn
- AF(Auxiliary carry flag): cờ nhớ phụ, AF = 1 khi có nhớ hay mợn từmột số BCD thấp sang một số BCD cao
- ZF(Zero flag): cờ rỗng, ZF = 1 khi kết quả bằng 0
- SF(Sign flag): cờ dấu, SF = 1 khi kết quả là số âm
- OF(Overflow flag): cờ tràn, OF = 1 khi kết quả là một số bù 2 vợt rangoài giới hạn biểu diễn dành cho nó
Các cờ điều khiển:
- TF(Trap flag): cờ bẫy, TF = 1 thì CPU làm việc ở chế độ chạy từnglệnh(dùng khi cần tìm lỗi chơng trình)
- IF(Interrupt enable flag): cờ cho phép ngắt, IF = 1 thì CPU cho phép cácyêu cầu ngắt đợc tác động
- DF(Direction flag): cờ hớng, DF = 1 khi CPU làm việc với chuỗi ký tựtheo thứ tự từ phải sang trái
Đ2.2 - Các chế độ địa chỉ của bộ vi xử lý 8088.
Chế độ địa chỉ(addressing mode) là cách để CPU tìm thấy toán hạng chocác lệnh của nó khi hoạt động Một bộ vi xử lý có thể có nhiều chế độ địa chỉ.Các chế độ địa chỉ này đợc xác định ngay từ khi chế tạo ra bộ vi xử lý và khôngthể thay đổi đợc Bộ vi xử lý 8088 và cả họ 80x86 nói chung đều có 7 chế độ địachỉ sau:
- Chế độ địa chỉ thanh ghi(register addressing mode)
- Chế độ địa chỉ tức thì(immediate addressing mode)
- Chế độ địa chỉ trực tiếp(direct addressing mode)
xxxxODITSZZxAxPxC
x: không đ ợc định nghĩa
Hình 2-3: Thanh ghi cờ
Trang 12- Chế độ địa chỉ gián tiếp qua thanh ghi(register indirect addressing mode).
- Chế độ địa chỉ tơng đối cơ sở(based relative addressing mode)
- Chế độ địa chỉ tơng đối chỉ số(indexed relative addressing mode)
- Chế độ địa chỉ tơng đối chỉ số cơ sở(based indexed relative addressing mode).Các chế độ địa chỉ này sẽ đợc giải thích thông qua các chế độ địa chỉ củacác lệnh MOV và ADD
I Chế độ địa chỉ thanh ghi.
Trong chế độ địa chỉ này ngời ta dùng các thanh ghi bên trong CPU nh làcác toán hạng để chứa dữ liệu cần thao tác Vì vậy khi thực hiện lệnh có thể đạttốc độ truy nhập cao hơn so với các lệnh có truy nhập đến bộ nhớ
Ví dụ:
MOV BX, DX ; chuyển nội dung DX vào BX
ADD AL, DL ; cộng nội dung AL và DL rồi đa kết quả vào AL
Ví dụ:
MOV CL, 60 ; chuyển 60 vào CL
MOV sochia, 10 ; chuyển 10 vào biến sochia trong đoạn DS
III Chế độ địa chỉ trực tiếp.
Trong chế độ địa chỉ này một toán hạng là hằng số chứa địa chỉ lệch của ônhớ dùng chứa dữ liệu còn toán hạng kia chỉ có thể là thanh ghi mà không đợc là
ô nhớ(8088 không cho phép quy chiếu bộ nhớ 2 lần trong một lệnh)
Ví dụ:
MOV AL, [0FF0H] ; chuyển nội dung ô nhớ DS:0FF0 vào AL.MOV [1357H], CL ; chuyển nội dung CL vào ô nhớ DS:1357
IV Chế độ địa chỉ gián tiếp qua thanh ghi.
Trong chế độ địa chỉ này một toán hạng là một thanh ghi đợc sử dụng đểchứa địa chỉ lệch của ô nhớ chứa dữ liệu, còn toán hạng kia chỉ có thể là thanhghi mà không đợc là ô nhớ Thanh ghi dùng để chứa địa chỉ lệch của ô nhớ phải
là các thanh ghi cơ sở(BX, BP) hoặc các thanh ghi chỉ số(SI, DI)
Ví dụ:
MOV AL, [BX] ; chuyển nội dung ô nhớ có địa chỉ DS:BX vào AL.MOV [DI], AX ; chuyển nội dung AX vào 2 ô nhớ liên tiếp có địa
Trang 13; chỉ DS:DI và DS:(DI+1).
V Chế độ địa chỉ tơng đối cơ sở.
Trong chế độ địa chỉ này các thanh ghi cơ sở nh BX và BP cùng các hằng sốbiểu diễn giá trị dịch chuyển đợc dùng để tính địa chỉ hiệu dụng của toán hạngtrong các vùng nhớ DS và SS
- Table, 10, 5: gọi là các dịch chuyển của các toán hạng tơng ứng 10 và 5
là các giá trị cụ thể, Table là tên mảng biểu diễn dịch chuyển của mảng
so với địa chỉ đầu của đoạn dữ liệu DS
- (BX+10) hoặc (BP+5) gọi là địa chỉ hiệu dụng(EA - effective address)
VI Chế độ địa chỉ tơng đối chỉ số.
Trong chế độ địa chỉ này các thanh ghi chỉ số nh SI và DI cùng các hằng sốbiểu diễn giá trị dịch chuyển đợc dùng để tính địa chỉ toán hạng trong vùng nhớDS
Ví dụ:
MOV AX, [SI] + 10 ; chuyển nội dung 2 ô nhớ liên tiếp có địa chỉ
; DS:(SI+10) và DS:(SI+11) vào AX
MOV CL, [DI + 5] ; chuyển nội dung ô nhớ DS:(DI+5) vào CL
VII Chế độ địa chỉ tơng đối chỉ số cơ sở.
Kết hợp hai chế độ địa chỉ chỉ số và cơ sở ta có chế độ địa chỉ t ơng đối chỉ
số cơ sở Trong chế độ địa chỉ này ta dùng cả thanh ghi cơ sở lẫn thanh ghi chỉ
số để tính địa chỉ của toán hạng
Ví dụ:
MOV AX, [BX][SI]+8 ; chuyển nội dung 2 ô nhớ liên tiếp có địa chỉ
; DS:(BX+SI+8) và DS:(BX+SI+9) vào AX.MOV CL, [BP+DI+5] ; chuyển nội dung ô nhớ SS:(BP+DI+5) vào CL
Đ2.3 - Các tín hiệu của bộ vi xử lý 8088.
8 đ ờng dồn kênh của bus A/D phần thấp
8 đ ờng của bus A phần cao
4 đ ờng dồn kênh của bus C/A cao
8
A
9
A10A
WR (LOCK) DEN (S0) SS0 READY HOLD (RQ/GT0) HLDA (RQ/GT1) INTA (QS1) ALE (QS0) NMI INTR RESET MN/MX TEST CLK Vcc GND GND
Trang 14Bộ vi xử lý 8088 có thể hoạt động ở hai chế độ: chế độ tối thiểu(MIN) hoặcchế độ tối đa(MAX) Hình 2-4 mô tả các tín hiệu của bộ vi xử lý 8088 theo cácnhóm và ở trong các chế độ hoạt động.
Chức năng của một số tín hiệu chung cho cả 2 chế độ:
- A/D0 - A/D7: Các chân dồn kênh cho các tín hiệu phần thấp của bus địachỉ và bus dữ liệu Xung ALE sẽ báo cho mạch ngoài biết khi nào trêncác đờng đó có tín hiệu dữ liệu(ALE = 0) hoặc địa chỉ(ALE = 1) Cácchân này ở trạng thái trở kháng cao khi P chấp nhận treo
- A8 - A15: Các bit phần cao của bus địa chỉ Các chân này ở trạng thái trởkháng cao khi P chấp nhận treo
- A16/S3 - A19/S6: Các chân dồn kênh của địa chỉ phần cao và trạng thái.Khi ALE = 1 thì có tín hiệu địa chỉ A16 - A19, còn khi ALE = 0 thì trêncác chân đó là các tín hiệu trạng thái S3 - S6 Khi làm việc với các tínhiệu trạng thái thì S6 luôn ở mức thấp, S5 chỉ ra trạng thái của cờ IF Haibit S4 và S3 phối hợp với nhau để chỉ ra việc truy nhập các thanh ghi
đoạn Các chân này ở trạng thái trở kháng cao khi P chấp nhận treo
- READY: Tín hiệu báo cho CPU biết tình trạng sẵn sàng của thiết bịngoại vi hay bộ nhớ Khi READY = 1 thì CPU thực hiện ghi/đọc màkhông cần chèn thêm các chu kỳ đợi Ngợc lại khi thiết bị ngoại vi hay
bộ nhớ có tốc độ hoạt động chậm, chúng có thể đa tín hiệu READY = 0
để báo cho CPU biết mà chờ chúng Lúc này CPU tự kéo dài thời gianthực hiện lệnh ghi/đọc bằng cách chèn thêm các chu kỳ đợi
- INTR: Tín hiệu yêu cầu ngắt che đợc Khi có yêu cầu ngắt mà cờ chophép ngắt IF = 1 thì CPU kết thúc lệnh đang làm dở, sau đó nó đi vàochu kỳ chấp nhận ngắt và đa ra bên ngoài tín hiệu INTA 0
Trang 15- TEST: Tín hiệu tại chân này đợc kiểm tra bởi lệnh WAIT Khi CPUthực hiện lệnh WAIT mà lúc đó tín hiệu TEST 1, nó sẽ chờ cho đếnkhi tín hiệu TEST 0 thì mới thực hiện lệnh tiếp theo.
- NMI: Tín hiệu yêu cầu ngắt không che đợc Tín hiệu này không bịkhống chế bởi cờ IF và nó sẽ đợc CPU nhận biết bằng tác động của s-
ờn trớc của xung yêu cầu ngắt Nhận đợc yêu cầu này CPU kết thúclệnh đang làm dở, sau đó nó chuyển sang thực hiện chơng trình phục
vụ ngắt
- RESET: Tín hiệu khởi động lại 8088 Khi RESET = 1 kéo dài ít nhấttrong thời gian 4 chu kỳ đồng hồ thì 8088 bị buộc phải khởi động lại
Nó xoá các thanh ghi DS, ES, SS, IP và FR về 0 và bắt đầu thực hiện
ch-ơng trình tại địa chỉ CS:IP = FFFF:0000H
- CLK: Tín hiệu đồng hồ(xung nhịp) Xung nhịp có độ rỗng là 77% vàcung cấp nhịp làm việc cho CPU
- Vcc: Chân nguồn Tại đây CPU đợc cung cấp +5V 10%, 340mA
- GND: 2 chân nguồn để nối với điểm 0V của nguồn nuôi
- MN / MX: Chân điều khiển CPU hoạt động theo chế độ MIN/MAX
Kết nối vi xử lý 8088 ở chế độ tối thiểu.
Do 8088 có thể làm việc ở 2 chế độ khác nhau nên có một số chân tín hiệuphụ thuộc vào các chế độ ở đây ta chỉ xét đến việc kết nối vi xử lý ở chế độ tốithiểu
Trong chế độ MIN tất cả các tín hiệu điều khiển liên quan đến các thiết bịngoại vi truyền thống và bộ nhớ đều có sẵn bên trong 8088, vì vậy việc phốighép với các thiết bị đó sẽ rất dễ dàng Để vi xử lý hoạt động ở chế độ MIN thìchân MN / MX cần đợc nối thẳng vào +5V mà không qua điện trở
- IO / M: Tín hiệu này cho phép trong thời điểm đã định phần tử nàotrong các thiết bị vào/ra hoặc bộ nhớ đợc chọn làm việc với CPU Trênbus địa chỉ lúc đó sẽ có các địa chỉ tơng ứng của các thiết bị đó Chânnày ở trạng thái trở kháng cao khi P chấp nhận treo
- WR: Xung cho phép ghi Khi CPU đa ra WR 0 thì trên bus dữ liệu cácdữ liệu đã ổn định và chúng sẽ đợc ghi vào bộ nhớ hoặc thiết bị ngoại vitại thời điểm WR đột biến lên 1 Chân này ở trạng thái trở kháng caokhi P chấp nhận treo
- INTA: Tín hiệu báo cho các mạch bên ngoài biết CPU chấp nhận yêucầu ngắt INTR Lúc này CPU đa ra INTA 0 để báo là nó đang chờmạch ngoài đa vào số hiệu ngắt(kiểu ngắt) trên bus dữ liệu
- ALE: Xung cho phép chốt địa chỉ Khi ALE = 1 có nghĩa là trên busdồn kênh A/D có các địa chỉ của thiết bị vào/ra hay ô nhớ Chân nàykhông bao giờ bị thả nổi, khi CPU treo thì ALE = 0
- DT / R: Tín hiệu điều khiển các đệm 2 chiều của bus dữ liệu để chọnchiều vận chuyển của dữ liệu trên bus D Chân này ở trạng thái trởkháng cao khi P chấp nhận treo
Trang 16- DEN: Tín hiệu báo cho bên ngoài biết là lúc này trên bus dồn kênh A/
D có dữ liệu ổn định Chân này ở trạng thái trở kháng cao khi P chấpnhận treo
- HOLD: Tín hiệu yêu cầu treo CPU để mạch ngoài thực hiện việc trao đổidữ liệu với bộ nhớ bằng cách thâm nhập trực tiếp(DMA - Direct MemoryAccess) Khi HOLD = 1, CPU sẽ tự tách ra khỏi hệ thống bằng cáchtreo tất cả các bus A, D và C của nó
- HLDA: Tín hiệu báo cho bên ngoài biết yêu cầu treo CPU để dùng cácbus đã đợc chấp nhận
- SS 0: Tín hiệu trạng thái đợc dùng kết hợp với IO / M và DT / R để giảimã các chu kỳ hoạt động của bus
M /
IO DT / R SS 0 Chu kỳ điều khiển của Bus
Đọc mã lệnh.
Đọc lệnh từ bộ nhớ bên ngoài vi xử lý vào đệm lệnh Trong giai đoạn này, mỗichân của bộ vi xử lý đợc thiết lập ở một trạng thái nhất định(tuỳ thuộc vào chế độhoạt động của vi xử lý là MIN hay MAX) để phục vụ cho việc đọc mã lệnh
Dựa vào nội dung của thanh ghi đoạn CS và thanh ghi con trỏ lệnh IP, KhốiBIU của CPU tìm đợc địa chỉ của ngăn nhớ chứa lệnh Lệnh đợc đọc qua các đ-ờng dây D0 - D7 để đa vào đệm lệnh chờ khối EU giải mã và thực hiện lệnh
Giải mã lệnh.
Mã lệnh nằm trong đệm lệnh đợc đa tới khối CU của EU để giải mã Kếtquả giải mã lệnh sẽ khiến CU tạo ra các tín hiệu tiếp theo để điều khiển các quátrình quy chiếu bộ nhớ hay thiết bị ngoại vi và là quá trình đọc hay ghi
Thực hiện lệnh.
Trong quá trình thực hiện lệnh, các tín hiệu IO / M, WR hoặc RD ở trạngthái tích cực Tuỳ theo từng loại lệnh(một toán hạng, hai toán hạng, ) thời gianthực hiện lệnh có thể kéo dài một hay nhiều chu kỳ máy Một chu kỳ máy có thểkéo dài một hay một số chu kỳ đồng hồ
Trang 17Đ2.5 - Các trạng thái hoạt động của vi xử lý.
II Trạng thái đợi.
Trạng thái đợi giúp CPU phối hợp tốc độ làm việc với các thiết bị vào/rahay bộ nhớ Trạng thái này đợc thể hiện bởi chân READY Khi READY = 1 thìCPU thực hiện ghi/đọc mà không cần chèn thêm các chu kỳ đợi Ngợc lại khithiết bị ngoại vi hay bộ nhớ có tốc độ hoạt động chậm, chúng có thể đa tín hiệuREADY = 0 để báo cho CPU biết mà chờ chúng Lúc này CPU tự kéo dài thờigian thực hiện lệnh ghi/đọc bằng cách chèn thêm các chu kỳ đợi
III Trạng thái treo.
Trong trờng hợp để nâng cao tốc độ truyền số liệu, lúc đó thiết bị ngoại vimuốn xâm nhập trực tiếp từ bộ nhớ mà không phải thông qua mạch vi xử lý.Muốn vậy, các thiết bị ngoại vi thông báo cho vi xử lý biết(bằng chân HOLD) đểxin phép cho sử dụng các đờng bus Khi điều kiện này có thể thực hiện đợc thì vi
xử lý sẽ trả lời tín hiệu đồng ý(bằng chân HLDA) và tự nó chuyển sang trạngthái treo Trong trạng thái treo, các đờng dây đợc nối với chân ra của vi xử lý đều
có trở kháng cao, đờng dữ liệu và đờng địa chỉ cũng có trở kháng cao
Trong thực tế, ngời ta rất muốn tận dụng khả năng của CPU để làm thêm
đ-ợc nhiều công việc khác nữa Chỉ khi nào có yêu cầu trao đổi dữ liệu thì mới yêucầu CPU tạm ngừng công việc hiện tại để phục vụ việc trao đổi dữ liệu Sau khihoàn thành việc trao đổi dữ liệu thì CPU lại phải quay về để làm tiếp công việc
hiện đang bị gián đoạn Cách làm việc theo kiểu này gọi là ngắt CPU(gián đoạn hoạt động của CPU) để trao đổi dữ liệu CPU 8088 có hai chân tín hiệu để
chuyển nó sang trạng thái ngắt, đó là các chân NMI và chân INTR
Trang 18Khi có tín hiệu yêu cầu ngắt tại chân INTR(INTR = 1), đồng thời cờ chophép ngắt IF = 1 thì CPU chuyển sang trạng thái ngắt và đa ra bên ngoài tín hiệu
0
Khi có tín hiệu yêu cầu ngắt tại chân NMI(NMI = 1), CPU sẽ chuyển sangtrạng thái ngắt mà không cần quan tâm tới cờ cho phép ngắt IF Yêu cầu ngắt tạichân NMI gọi là yêu cầu ngắt không che đợc
V Trạng thái dừng.
Trong hầu hết các bộ vi xử lý đều có lệnh dừng máy Khi gặp lệnh này, cáchoạt động của vi xử lý bị tạm dừng và bộ vi xử lý bớc vào trạng thái dừng Đểthoát khỏi trạng thái dừng chỉ có cách tác động vào một trong các chân INTR,NMI hoặc RESET của bộ vi xử lý
Đ2.6 - Tập lệnh của vi xử lý 8088.
Tập lệnh là một đặc tính then chốt của kiến trúc bộ vi xử lý Ngời lập trình haynhà thiết kế hệ thống dựa vào tập lệnh để soạn thảo các chơng trình điều khiển hoạt
động của bộ vi xử lý theo một trình tự nào đó Mỗi bộ vi xử lý có một tập lệnh riêng
và thờng có tính kế thừa, nghĩa là tập lệnh của những bộ vi xử lý ra đời sau th ờngbao hàm các lệnh của bộ vi xử lý cùng họ đã đợc sản xuất trớc đó
Tập lệnh của vi xử lý 8088 thờng đợc chia thành các nhóm chức năng khácnhau, có thể kể đến gồm:
Lệnh này không tác động đến các cờ.
Ví dụ:
MOV AL, 74H ; AL 74H
Trang 19Lệnh này không tác động đến các cờ.
Ví dụ:
XCHG CX, [SI] ; CL { DS:SI }, CH { DS:(SI+1) }
IN - Input data from a Port: Đọc dữ liệu từ cổng vào thanh Acc.
Viết lệnh: IN Acc, Port
Trong đó { Port } là dữ liệu của cổng có địa chỉ là Port Port là địa chỉ 8 bitcủa cổng, nó có thể có các giá trị trong khoảng 00H FFH Nếu Acc là AL thìdữ liệu 8 bit đợc đa vào từ cổng Port Còn nếu Acc là AX thì dữ liệu 16 bit đợc
đa vào từ cổng Port và cổng Port + 1
Cũng có thể dùng DX để biểu diễn địa chỉ cổng, khả năng địa chỉ hoá cổng
sẽ mềm dẻo hơn với địa chỉ cổng từ 0000H FFFFH DX phải đợc gán từ trớc
giá trị ứng với địa chỉ cổng Lệnh lúc này đợc viết: IN Acc, DX
Lệnh này không tác động đến các cờ.
OUT - Output data to a Port: Đa dữ liệu từ Acc ra cổng.
Viết lệnh: OUT Port, Acc
Trong đó { Port } là dữ liệu của cổng có địa chỉ là Port Port là địa chỉ 8 bitcủa cổng, nó có thể có các giá trị trong khoảng 00H FFH Nếu Acc là AL thìdữ liệu 8 bit đợc đa ra cổng Port Còn nếu Acc là AX thì dữ liệu 16 bit đợc đa racổng Port và cổng Port + 1
Tơng tự lệnh IN, cũng có thể dùng DX để biểu diễn địa chỉ cổng, và lệnh lúc này đợc viết: OUT DX, Acc
Lệnh này không tác động đến các cờ.
Trang 20CËp nhËt c¸c cê: AF, CF, OF, PF, SF, ZF.
VÝ dô:
ADC AL, 74H ; AL AL + 74H + CF
ADC CL, [SI] ; CL CL + { DS:SI } + CF
ADD - Add: Céng 2 to¸n h¹ng.
ViÕt lÖnh: ADD §Ých, Gèc
M« t¶: §Ých §Ých + Gèc
Trang 21Toán hạng đích và gốc có thể tìm đợc theo các chế độ địa chỉ khác nhau,nhng phải chứa dữ liệu cùng độ dài Không đợc phép đồng thời là hai ô nhớ vàcũng không đợc là thanh ghi đoạn.
Cập nhật các cờ: AF, CF, OF, PF, SF, ZF.
Ví dụ:
ADD AL, 74H ; AL AL + 74H
ADD CL, [SI] ; CL CL + { DS:SI }
SZBB - SZubstract with Borrow: Trừ có mợn.
Viết lệnh: SZBB Đích, Gốc
Mô tả: Đích Đích - Gốc - CF
Toán hạng đích và gốc có thể tìm đợc theo các chế độ địa chỉ khác nhau,nhng phải chứa dữ liệu cùng độ dài và cùng loại Không đợc phép đồng thời làhai ô nhớ và cũng không đợc là thanh ghi đoạn
Cập nhật: AF, CF, OF, PF, SF, ZF (AF và PF chỉ liên quan đến 8bit thấp)
Cập nhật: AF, CF, OF, PF, SF, ZF (AF và PF chỉ liên quan đến 8bit thấp)
Ví dụ:
SUB AL, 74H ; AL AL - 74H
SUB CL, [SI] ; CL CL - { DS:SI }
INC - Increment: Tăng toán hạng đích thêm 1.
Trang 22Trong đó toán hạng đích có thể tìm đợc theo các chế độ địa chỉ khác nhau.Nếu Đích = 00H(hoặc 0000H) thì Đích - 1 = FFH(hoặc FFFFH) mà không làm
độ dài 8 bit thì số bị nhân là số 8 bit để ở AL, còn trờng hợp Gốc có độ dài 16 bitthì số bị nhân là số 16 bit để ở AX
độ dài 8 bit thì số bị nhân là số có dấu 8 bit để ở AL, còn trờng hợp Gốc có độdài 16 bit thì số bị nhân là số có dấu 16 bit để ở AX
số 8 bit thì số bị chia là số không dấu 16 bit để ở AX, sau khi chia AL chứa
th-ơng còn AH chứa số d Nếu Gốc là số 16 bit thì số bị chia là số không dấu 32 bit
để ở DXAX, sau khi chia AX chứa thơng, DX chứa số d
Trang 23Nếu Gốc = 0 hoặc thơng thu đợc lớn hơn FFH hoặc FFFFH thì 8088 thựchiện lệnh ngắt INT 0.
+ Thơng và số d đều là số có dấu
+ Dấu của số d sẽ trùng với dấu của số bị chia
Nếu Gốc = 0 hoặc thơng nằm ngoài dải -128 127 hoặc -32768 32767thì 8088 thực hiện lệnh ngắt INT 0
có các bit 0/1 ứng với các bit cần che/giữ
Xoá: CF, OF.
Cập nhật các cờ: PF, SF, ZF.
Trang 24Không tác động: AF.
Ví dụ: (AL 0111 0110B ; BL 1001 0101B)
AND AL, BL ; AL 0001 0100B = 14H
AND CL, 0FH ; Che 4 bit cao của CL
AND AL, 08H ; Giữ lại bit AL3, che các bit khác của AL
OR: "Hoặc logic" từng bit của hai toán hạng.
Viết lệnh: OR Đích, Gốc
Mô tả: Đích Đích Gốc
Toán hạng đích và gốc có thể tìm đợc theo các chế độ địa chỉ khác nhau,nhng phải chứa dữ liệu cùng độ dài Không đợc phép đồng thời là hai ô nhớ vàcũng không đợc là thanh ghi đoạn Phép OR thờng dùng để lập một vài bit nào
đó của một toán hạng bằng cách thực hiện OR với toán hạng tức thì có các bit 1ứng với các bit cần lập
XOR AL, BL ; AL 1110 0011B = E3H
XOR AL, AL ; Xoá AL, xoá CF và OF
XOR BX, BX ; Xoá BX, xoá CF và OF
NOT: Đảo các bit của toán hạng.
Viết lệnh: NOT Đích
Trang 25Toán hạng đích có thể tìm đợc theo các chế độ địa chỉ khác nhau
và kết quả không đợc lu giữ mà chỉ tạo cờ Các cờ đợc tạo ra sẽ đợc làm điềukiện cho các lệnh nhảy có điều kiện
Xoá: CF, OF.
Cập nhật các cờ: PF, SF, ZF.
Không tác động: AF.
Ví dụ:
TEST AL, AL ; AL AL để tạo cờ
TEST BL, 04H ; Kiểm tra bit BL2 = 0?
TEST DX, [BX][SI] ; DL { DS:(BX+SI) } và
; DH { DS:(BX+SI+1) } để tạo cờ
RCL AL, 1 ; Quay trái AL 1 lần thông qua CF
MOV CL, 8 ; Số lần quay để trong CL
RCL BL, CL ; Quay trái BL 8 lần thông qua CF
RCR - Rotate though CF to the Right: Quay phải thông qua cờ nhớ.
Viết lệnh: RCR Đích, CL
Mô tả:
CF MSB LSB
CF MSB LSB
Trang 26Lệnh này dùng để quay toán hạng sang phải thông qua cờ CF CL phải đợcchứa sẵn số lần quay mong muốn Trờng hợp quay một lần có thể viết trực tiếp.
Ví dụ:
RCR AL, 1 ; Quay phải AL 1 lần thông qua CF
MOV CL, 8 ; Số lần quay để trong CL
RCR BL, CL ; Quay phải BL 8 lần thông qua CF
ROL - Rotate to the Left: Quay vòng sang trái.
ROL AL, 1 ; Quay vòng sang trái AL 1 lần
MOV CL, 8 ; Số lần quay để trong CL
ROL BL, CL ; Quay vòng sang trái BL 8 lần(BL giữnguyên)
ROR - Rotate to the Right: Quay vòng sang phải.
ROR AL, 1 ; Quay vòng sang phải AL 1 lần
MOV CL, 8 ; Số lần quay để trong CL
ROR BL, CL ; Quay vòng sang phải BL 8 lần(BL giữ nguyên)
SZAL/SZHL - SZhift Arithmetically Left/SZHift logically Left: Dịch trái số
Trang 27Hai lệnh này có cùng tác dụng dịch trái số học toán hạng Sau mỗi lần dịch,MSB sẽ đợc đa qua cờ CF và 0 đợc đa vào LSB Thao tác kiểu này đợc gọi làdịch logic CL phải đợc chứa sẵn số lần quay mong muốn Trờng hợp dịch mộtlần có thể viết trực tiếp.
Có thể nhận thấy một lần dịch trái kiểu này t ơng đơng với một lần làmphép nhân với 2 của số không dấu Nh vậy, nếu dịch n lần thì tơng đơng vớiviệc nhân toán hạng đích với 2n Chính vì vậy thao tác này còn đợc gọi là dịch
số học
Ví dụ:
SAL AL, 1 ; Dịch trái số học AL 1 lần
MOV CL, 4 ; Số lần dịch để trong CL
SHL BL, CL ; Dịch trái BL 4 lần Thanh ghi BL lúc này có
; 4 bit cao là 4 bit thấp ban đầu, 4 bit thấp là 0
SZAR - SZhift Arithmetically Right: Dịch phải số học.
Viết lệnh: SZAR Đích, CL
Mô tả:
Lệnh này có tác dụng dịch phải số học toán hạng Sau mỗi lần dịch, MSB sẽ
đợc giữ lại còn LSB đợc đa vào CF CL phải đợc chứa sẵn số lần quay mongmuốn Trờng hợp dịch một lần có thể viết trực tiếp
Có thể nhận thấy một lần dịch trái kiểu này tơng đơng với một lần làm phépchia cho 2 của số có dấu Nh vậy, nếu dịch n lần thì tơng đơng với việc chia toánhạng Đích(có dấu) cho 2n
MSB LSB CF
MSB LSB CF
0
Trang 28Có thể nhận thấy một lần dịch trái kiểu này tơng đơng với một lần làm phépchia cho 2 của số không dấu Nh vậy, nếu dịch n lần thì tơng đơng với việc chiatoán hạng Đích(không dấu) cho 2n.
Ví dụ:
SHR AL, 1 ; Dịch phải logic AL 1 lần
MOV CL, 4 ; Số lần dịch để trong CL
SHR BL, CL ; Dịch phải BL 4 lần
V Các lệnh chuyển điều khiển.
JA/JNBE - Jump if Above/Jump if Not Below or Equal: Nhảy nếu cao
hơn/nếu không thấp hơn hoặc bằng
Trong các lệnh trên quan hệ "cao hơn", "thấp hơn" là các quan hệ dành choviệc so sánh độ lớn của hai số không dấu Hai lệnh này hoạt động dựa vào các cờ
và chúng thực hiện cùng một thao tác: nhảy tới Label nếu CF + ZF = 0 Label là
một nhãn nằm ở vị trí nào đó trong chơng trình và đợc gán cho một địa chỉ nhất
định trong bộ nhớ Tuỳ vào vị trí của Label, chơng trình dịch sẽ xác định giá trị
dịch chuyển disp Nhãn Label phải nằm cách lệnh tiếp theo các lệnh trên một
khoảng tối đa là 127
Lệnh này không tác động đến các cờ.
Ví dụ:
CMP AL, 30 ; AL > 30 ?
JA Stop ; Đúng! Nhảy đến nhãn Stop
JAE/JNB/JNC - Jump if Above or Equal/Jump if Not Below/Jump if Not Carry: Nhảy nếu cao hơn hoặc bằng/nếu không thấp hơn/nếu không có nhớ.
và chúng thực hiện cùng một thao tác: nhảy tới Label nếu CF = 0 Label là một
nhãn nằm ở vị trí nào đó trong chơng trình và đợc gán cho một địa chỉ nhất địnhtrong bộ nhớ Tuỳ vào vị trí của Label, chơng trình dịch sẽ xác định giá trị dịch
chuyển disp Nhãn Label phải nằm cách lệnh tiếp theo các lệnh trên một khoảng
Trang 29JB/JC/JNAE - Jump if Below/Jump if Carry/Jump if Not Above or Equal:
Nhảy nếu thấp hơn/nếu có nhớ/nếu không cao hơn hoặc bằng
và chúng thực hiện cùng một thao tác: nhảy tới Label nếu CF = 1 Label là một
nhãn nằm ở vị trí nào đó trong chơng trình và đợc gán cho một địa chỉ nhất địnhtrong bộ nhớ Tuỳ vào vị trí của Label, chơng trình dịch sẽ xác định giá trị dịch
chuyển disp Nhãn Label phải nằm cách lệnh tiếp theo các lệnh trên một khoảng
tối đa là 127
Lệnh này không tác động đến các cờ.
Ví dụ:
CMP AL, 30 ; AL < 30 ?
JB Stop ; Đúng! Nhảy đến nhãn Stop
JBE/JNA - Jump if Below or Equal/Jump if Not Above: Nhảy nếu thấp
hơn hoặc bằng/nếu không cao hơn
Mô tả: IP IP + disp
Trong các lệnh trên quan hệ "cao hơn", "thấp hơn" là các quan hệ dành choviệc so sánh độ lớn của hai số không dấu Các lệnh này hoạt động dựa vào các cờ
và chúng thực hiện cùng một thao tác: nhảy tới Label nếu CF + ZF = 1 Label là
một nhãn nằm ở vị trí nào đó trong chơng trình và đợc gán cho một địa chỉ nhất
định trong bộ nhớ Tuỳ vào vị trí của Label, chơng trình dịch sẽ xác định giá trị
dịch chuyển disp Nhãn Label phải nằm cách lệnh tiếp theo các lệnh trên một
khoảng tối đa là 127
Lệnh này không tác động đến các cờ.
Ví dụ:
CMP AL, 30 ; AL > 30 ?
JBE Stop ; Sai! Nhảy đến nhãn Stop
JCXZ - Jump if CX register is Zero: Nhảy nếu CX = 0.
Viết lệnh: JCXZ Label
Mô tả: IP IP + disp
Lệnh này thực hiện thao tác: nhảy tới Label nếu CX = 0 và không liên quan
gì tới cờ ZF Label là một nhãn nằm ở vị trí nào đó trong chơng trình và đợc gáncho một địa chỉ nhất định trong bộ nhớ Tuỳ vào vị trí của Label, chơng trình dịch
sẽ xác định giá trị dịch chuyển disp Nhãn Label phải nằm cách lệnh tiếp theo các
lệnh trên một khoảng tối đa là 127
Trang 30Lệnh này không tác động đến các cờ.
Ví dụ:
JCXZ Stop ; Nếu CX = 0 Nhảy đến nhãn Stop
JE/JZ - Jump if Equal/Jump if Zero: Nhảy nếu bằng/nếu kết quả bằng 0.
Các lệnh này hoạt động dựa vào các cờ và chúng thực hiện cùng một thao
tác: nhảy tới Label nếu ZF = 1 Label là một nhãn nằm ở vị trí nào đó trong
ch-ơng trình và đợc gán cho một địa chỉ nhất định trong bộ nhớ Tuỳ vào vị trí của
Label, chơng trình dịch sẽ xác định giá trị dịch chuyển disp Nhãn Label phải
nằm cách lệnh tiếp theo các lệnh trên một khoảng tối đa là 127
Lệnh này không tác động đến các cờ.
Ví dụ:
CMP AL, 13 ; AL = 13 ?
JE Stop ; Đúng! Nhảy đến nhãn Stop
JNE/JNZ - Jump if Not Equal/Jump if Not Zero: Nhảy nếu không
bằng/nếu kết quả khác 0
Các lệnh này hoạt động dựa vào các cờ và chúng thực hiện cùng một thao
tác: nhảy tới Label nếu ZF = 0 Label là một nhãn nằm ở vị trí nào đó trong
ch-ơng trình và đợc gán cho một địa chỉ nhất định trong bộ nhớ Tuỳ vào vị trí của
Label, chơng trình dịch sẽ xác định giá trị dịch chuyển disp Nhãn Label phải
nằm cách lệnh tiếp theo các lệnh trên một khoảng tối đa là 127
Lệnh này không tác động đến các cờ.
Ví dụ:
CMP AL, 13 ; AL = 13 ?
JNE Stop ; Sai! Nhảy đến nhãn Stop
JG/JNLE - Jump if Greater/Jump if Not Less or Equal: Nhảy nếu lớn
chúng thực hiện cùng một thao tác: nhảy tới Label nếu (SZF OF) + ZF = 0.
Label là một nhãn nằm ở vị trí nào đó trong chơng trình và đợc gán cho một địa
Trang 31chỉ nhất định trong bộ nhớ Tuỳ vào vị trí của Label, chơng trình dịch sẽ xác định
giá trị dịch chuyển disp Nhãn Label phải nằm cách lệnh tiếp theo các lệnh trên
một khoảng tối đa là 127
Lệnh này không tác động đến các cờ.
Ví dụ:
CMP AL, 13 ; AL > 13 ? (số có dấu)
JG Stop ; Đúng! Nhảy đến nhãn Stop
JGE/JNL - Jump if Greater or Equal/Jump if Not Less: Nhảy nếu lớn hơn
chúng thực hiện cùng một thao tác: nhảy tới Label nếu (SZF OF) = 0 Label là
một nhãn nằm ở vị trí nào đó trong chơng trình và đợc gán cho một địa chỉ nhất
định trong bộ nhớ Tuỳ vào vị trí của Label, chơng trình dịch sẽ xác định giá trị
dịch chuyển disp Nhãn Label phải nằm cách lệnh tiếp theo các lệnh trên một
khoảng tối đa là 127
Lệnh này không tác động đến các cờ.
Ví dụ:
CMP AL, 13 ; AL 13 ? (số có dấu)
JGE Stop ; Đúng! Nhảy đến nhãn Stop
JL/JNGE - Jump if Less/Jump if Not Greater or Equal: Nhảy nếu nhỏ
chúng thực hiện cùng một thao tác: nhảy tới Label nếu (SZF OF) = 1 Label là
một nhãn nằm ở vị trí nào đó trong chơng trình và đợc gán cho một địa chỉ nhất
định trong bộ nhớ Tuỳ vào vị trí của Label, chơng trình dịch sẽ xác định giá trị
dịch chuyển disp Nhãn Label phải nằm cách lệnh tiếp theo các lệnh trên một
khoảng tối đa là 127
Trang 32JLE/JNG - Jump if Less or Equal/Jump if Not Greater: Nhảy nếu nhỏ hơn
chúng thực hiện cùng một thao tác: nhảy tới Label nếu (SZF OF) + ZF = 1.
Label là một nhãn nằm ở vị trí nào đó trong chơng trình và đợc gán cho một địachỉ nhất định trong bộ nhớ Tuỳ vào vị trí của Label, chơng trình dịch sẽ xác
định giá trị dịch chuyển disp Nhãn Label phải nằm cách lệnh tiếp theo các lệnh
trên một khoảng tối đa là 127
Lệnh này không tác động đến các cờ.
Ví dụ:
CMP AL, 13 ; AL > 13 ? (số có dấu)
JLE Stop ; Sai! Nhảy đến nhãn Stop
JNSZ - Jump if Not SZigned(Jump if positive): Nhảy nếu kết quả là số dơng.
Viết lệnh: JNSZ Label
Lệnh này thực hiện thao tác: nhảy tới Label nếu SZF = 0(kết quả là số
d-ơng) Label là một nhãn nằm ở vị trí nào đó trong chơng trình và đợc gán chomột địa chỉ nhất định trong bộ nhớ Tuỳ vào vị trí của Label, chơng trình dịch sẽ
xác định giá trị dịch chuyển disp Nhãn Label phải nằm cách lệnh tiếp theo các
lệnh trên một khoảng tối đa là 127
Lệnh này không tác động đến các cờ.
Ví dụ:
SUB AL, 13 ; AL AL - 13 (số có dấu)
JNS Stop ; Nếu kết quả dơng Nhảy đến nhãn Stop
JSZ - Jump if SZigned(Jump if negative): Nhảy nếu kết quả là số âm.
Viết lệnh: JSZ Label
Lệnh này thực hiện thao tác: nhảy tới Label nếu SZF = 1(kết quả là số âm).
Label là một nhãn nằm ở vị trí nào đó trong chơng trình và đợc gán cho một địachỉ nhất định trong bộ nhớ Tuỳ vào vị trí của Label, chơng trình dịch sẽ xác
định giá trị dịch chuyển disp Nhãn Label phải nằm cách lệnh tiếp theo các lệnh
trên một khoảng tối đa là 127
Lệnh này không tác động đến các cờ.
Ví dụ:
SUB AL, 13 ; AL AL - 13 (số có dấu)
JS Stop ; Nếu kết quả âm Nhảy đến nhãn Stop
Trang 33JMP - Unconditional Jump to SZpecified Destination: Nhảy vô điều kiện.
Lệnh này khiến cho bộ vi xử lý 8088 chuyển đến thực hiện một lệnh mới tại
địa chỉ đợc mô tả trong lệnh Đây là lệnh nhảy không cần đến điều kiện Khihoạt động lệnh này phân biệt nhảy xa(địa chỉ của lệnh mới nằm khác đoạn mãvới lệnh tiếp theo sau lệnh JMP) và nhảy gần(địa chỉ của lệnh mới nằm cùng
đoạn mã với lệnh tiếp theo sau lệnh JMP), nhảy trực tiếp(địa chỉ lệnh mới đợcviết trực tiếp ngay trong mã lệnh dới dạng một nhãn) và nhảy gián tiếp(địa chỉcủa lệnh mới không viết trực tiếp trong mã lệnh mà thể hiện dới dạng nội dungcủa thanh ghi hay ô nhớ) Tuỳ thuộc vào độ dài bớc nhảy mà ngời ta phân thànhcác kiểu lệnh nhảy khác nhau
Trong phạm vi nội dung và nhiệm vụ của môn học, chúng ta chỉ xem xétlệnh JMP dới góc độ đơn giản nhất Và lúc này ta có:
Mô tả: IP IP + disp
Label là một nhãn nằm ở vị trí nào đó trong chơng trình và đợc gán cho một
địa chỉ nhất định trong bộ nhớ Tuỳ vào vị trí của Label, chơng trình dịch sẽ xác
định giá trị dịch chuyển disp Nhãn Label phải nằm cách lệnh tiếp theo các lệnh
trên một khoảng tối đa là 32767
Lệnh này không tác động đến các cờ.
CALL - Call a Procedure: Gọi một thủ tục.
Lệnh CALL đợc dùng để gọi một thủ tục(các thủ tục bao gồm chơng trìnhchính và các chơng trình con) Khi thực hiện nó chuyển hoạt động của bộ vi xử
lý 8088 từ thủ tục gọi sang thủ tục đợc gọi Cũng nh lệnh JMP, lệnh này cũngphân biệt gọi gần và gọi xa, gọi trực tiếp và gọi gián tiếp ở đây ta chỉ xét đến ph-
ơng pháp gọi trực tiếp
Đối với gọi gần:
Viết lệnh: CALL Tên_thủ_tục
Mô tả: SP SP - 2 , { SS:SP } IP
IP IP của thủ tụcTrờng hợp này, thủ tục đợc gọi nằm trong cùng đoạn mã với thủ tục gọi.Khi thực hiện lệnh CALL, vi xử lý sẽ tự động cất địa chỉ lệch(IP) của lệnh tiếptheo sau lệnh CALL vào ngăn xếp Sau đó IP mới đợc tính: IP IP + disp
Thủ tục đợc gọi phải nằm ở vị trí cách lệnh tiếp theo sau lệnh CALL mộtkhoảng tối đa là 32767
Đối với gọi xa:
Viết lệnh: CALL Tên_thủ_tục
Trang 34Mô tả: SP SP - 2 , { SS:SP } CS
SP SP - 2 , { SS:SP } IP
IP IP của thủ tục
CS CS của thủ tụcTrờng hợp gọi xa, thủ tục đợc gọi nằm khác đoạn mã với thủ tục gọi Khithực hiện lệnh CALL, vi xử lý sẽ tự động cất địa chỉ đoạn và địa chỉ lệch(CS:IP)của lệnh tiếp theo sau lệnh CALL vào ngăn xếp Sau đó CS:IP mới đợc cập nhật.Thủ tục đợc gọi phải khai báo là một thủ tục ở xa:
Tên_thủ_tục Proc Far
đợc gọi sẽ trả điều khiển về cho thủ tục gọi nó tại lệnh tiếp theo của dòng lệnhgọi bằng lệnh RET Tuỳ theo thủ tục đợc gọi có kiểu gần hay xa, địa chỉ trở vềcủa thủ tục gọi sẽ chỉ có IP hay có đầy đủ cả CS:IP
Một trờng hợp đặc biệt của lệnh RET là khi viết lệnh: RET n Lúc này, sau
khi đã lấy lại đợc địa chỉ trở về thì SP SP + n(dùng để nhảy qua mà không lấylại các thông số khác của chơng trình còn lại trong ngăn xếp)
Lệnh này không tác động đến các cờ.
Trang 35IRET - Interrupt Return: Thoát khỏi chơng trình ngắt.
Lệnh IRET đợc dùng để trở về chơng trình gọi ngắt từ chơng trình phục vụngắt Lệnh này, ngoài việc tự động lấy lại địa chỉ trở về của chơng trình gọi ngắt,còn lấy lại trạng thái của chơng trình trớc khi thực hiện ngắt(lấy lại thanh ghicờ)
Lệnh này không tác động đến các cờ.
LOOP - Loop while CX 0: Lặp khi CX 0.
đợc gán cho một địa chỉ nhất định trong bộ nhớ Tuỳ vào vị trí của Label, chơng
trình dịch sẽ xác định giá trị dịch chuyển disp Nhãn Label phải nằm cách lệnh
tiếp theo lệnh trên một khoảng tối đa là 128 về phía trớc
Lệnh này không tác động đến các cờ.
Ví dụ:
MOV CX, 8 ; số lần lặp lại công việc là 8Lap: INC AL ; tăng AL thêm 1 (công việc cần lặp)
LOOP Lap ; lặp công việc 8 lần, AL = 8
LOOPE/LOOPZ - Loop while CX 0 and ZF = 1: Lặp khi CX 0 và ZF =
Các lệnh này thực hiện thao tác: Lặp đoạn chơng trình do Label chỉ ra cho
đến khi CX = 0 hoặc ZF = 0 Điều này cũng có nghĩa là số lần lặp cần đợc để ở
CX trớc khi vào vòng lặp Mỗi khi thực hiện lệnh thì đồng thời CX tự động giảm
đi 1 Label là một nhãn nằm ở vị trí nào đó trong chơng trình(phía trên các lệnhnày) và đợc gán cho một địa chỉ nhất định trong bộ nhớ Tuỳ vào vị trí của Label,
chơng trình dịch sẽ xác định giá trị dịch chuyển disp Nhãn Label phải nằm cách
lệnh tiếp theo các lệnh trên một khoảng tối đa là 128 về phía trớc
Lệnh này không tác động đến các cờ.
Ví dụ:
MOV CX, 8 ; số lần lặp lại công việc là 8
Trang 36Lap: INC BX ; tăng BX thêm 1
CMP [BX], AL ; {DS:BX} = AL ?LOOPE Lap ; lặp công việc cho đến khi {DS:BX} AL
; hoặc duyệt xong 8 ô nhớ
LOOPNE/LOOPNZ - Loop while CX 0 and ZF = 0: Lặp khi CX 0
Các lệnh này thực hiện thao tác: Lặp đoạn chơng trình do Label chỉ ra cho
đến khi CX = 0 hoặc ZF = 1 Điều này cũng có nghĩa là số lần lặp cần đợc để ở
CX trớc khi vào vòng lặp Mỗi khi thực hiện lệnh thì đồng thời CX tự động giảm
đi 1 Label là một nhãn nằm ở vị trí nào đó trong chơng trình(phía trên các lệnhnày) và đợc gán cho một địa chỉ nhất định trong bộ nhớ Tuỳ vào vị trí của Label,
chơng trình dịch sẽ xác định giá trị dịch chuyển disp Nhãn Label phải nằm cách
lệnh tiếp theo các lệnh trên một khoảng tối đa là 128 về phía trớc
Lệnh này không tác động đến các cờ.
Ví dụ:
MOV CX, 100 ; số lần lặp lại công việc là 100
CMP [BX], AL ; {DS:BX} = AL ?LOOPNE Lap ; lặp công việc cho đến khi {DS:BX} = AL
; hoặc duyệt xong 100 giá trị
VI Các lệnh xử lý chuỗi.
Trong các lệnh xử lý chuỗi, có sự phân biệt rõ giữa chuỗi gốc và chuỗi đích
Để đảm bảo sự hoạt động đúng của các lệnh, cần tuân thủ theo quy định sau:
- DS:SI chứa địa chỉ của chuỗi gốc
- ES:DI chứa địa chỉ của chuỗi đích
LEA - Load Effective Address: Nạp địa chỉ hiệu dụng vào thanh ghi.
Viết lệnh: LEA Reg, Gốc
Mô tả: Reg Offset(Gốc)
Lệnh này thực hiện nạp địa chỉ hiệu dụng(địa chỉ lệch) của một biến nằm
trong đoạn DS vào thanh ghi Toán hạng Reg là một thanh ghi 16 bit và thờng là:
BX, CX, DX, BP, SI, DI Toán hạng gốc là tên biến trong đoạn DS đợc chỉ rõtrong lệnh
Trang 37Lệnh này không tác động đến các cờ.
Ví dụ:
LEA DX, str1 ; nạp địa chỉ lệch của biến str1 vào DX
CMPSZ/CMPSZB/CMPSZW - Compare string bytes or string words: So
sánh 2 chuỗi byte hay 2 chuỗi từ
Viết lệnh: CMPSZ Chuỗiđích, Chuỗigốc
CMPSZB CMPSZW
Mô tả: PhầntửChuỗiđích - PhầntửChuỗigốc
SI SI 1/2 , DI DI 1/2 (chuỗi byte/từ)Lệnh này so sánh từng phần tử(byte hay từ) của 2 xâu có các phần tử cùngloại Lệnh chỉ tạo các cờ(tơng tự lệnh CMP), không lu kết quả so sánh Tronglệnh này, ngầm định các thanh ghi với các chức năng:
- DS:SI chứa địa chỉ của phần tử so sánh trong chuỗi gốc
- ES:DI chứa địa chỉ của phần tử so sánh trong chuỗi đích
Sau mỗi lần so sánh: SI SI 1, DI DI 1 hoặc SI SI 2 , DI DI
2 một cách tự động tuỳ thuộc cờ hớng DF = 0/1 và chuỗi là chuỗi byte hay chuỗi từ.Lệnh CMPS chỉ đợc dùng khi chuỗi đích và chuỗi gốc đã đợc khai báo rõ làchuỗi byte hay chuỗi từ, lúc này chơng trình dịch sẽ dựa vào đó để thực hiện cácthao tác Trờng hợp muốn chỉ rõ cho chơng trình dịch biết kiểu thao tác trên chuỗi
đã đợc định nghĩa là kiểu byte/từ ta dùng các lệnh CMPSB/CMPSW
Cập nhật các cờ: AF, CF, OF, PF, SF, ZF.
LODSZ/LODSZB/LODSZW - Load string byte/words in to AL/AX: Nạp
vào AL/AX một phần tử của chuỗi Byte/từ
Viết lệnh: LODSZ Chuỗigốc
LODSZB LODSZW
Mô tả: AL/AX phầntửhiệntại, SI SI 1/2 (chuỗi byte/từ)Lệnh này nạp vào AL/AX một byte/từ do SI chỉ ra trong đoạn DS Sau đó SI
tự động tăng hoặc giảm để chỉ vào phần tử tiếp theo tuỳ theo DF là 0 hay 1.Lệnh LODS chỉ đợc dùng khi chuỗi gốc đã đợc khai báo rõ là chuỗi byte haychuỗi từ, lúc này chơng trình dịch sẽ dựa vào đó để thực hiện các thao tác Trờnghợp muốn chỉ rõ cho chơng trình dịch biết kiểu thao tác trên chuỗi đã đợc địnhnghĩa là kiểu byte/từ ta dùng các lệnh LODSB/LODSW
Lệnh này không tác động đến các cờ.
MOVSZ/MOVSZB/MOVSZW - Move string bytes or string words: Chuyển
một phần tử của chuỗi sang chuỗi khác
Viết lệnh: MOVSZ Chuỗiđích, Chuỗigốc
MOVSZB
Trang 38Mô tả: PhầntửChuỗiđích PhầntửChuỗigốc
SI SI 1/2 , DI DI 1/2 (chuỗi byte/từ)Lệnh này dùng để chuyển từng byte hay từng từ của chuỗi gốc sang chuỗi
đích Trong lệnh này, ngầm định các thanh ghi với các chức năng:
- DS:SI chứa địa chỉ của phần tử hiện tại trong chuỗi gốc
- ES:DI chứa địa chỉ của phần tử hiện tại trong chuỗi đích
Sau mỗi lần chuyển: SI SI 1, DI DI 1 hoặc SI SI 2 , DI DI
2 một cách tự động tuỳ thuộc cờ hớng DF = 0/1 và chuỗi là chuỗi byte hay chuỗi từ.Lệnh MOVS chỉ đợc dùng khi chuỗi đích và chuỗi gốc đã đợc khai báo rõ làchuỗi byte hay chuỗi từ, lúc này chơng trình dịch sẽ dựa vào đó để thực hiện cácthao tác Trờng hợp muốn chỉ rõ cho chơng trình dịch biết kiểu thao tác trên chuỗi
đã đợc định nghĩa là kiểu byte/từ ta dùng các lệnh MOVSB/MOVSW
Lệnh này không tác động đến các cờ.
SZCASZ/SZCASZB/SZCASZW - SZcan a string bytes or a string words: Quét
chuỗi byte hay từ
Viết lệnh: SZCASZ Chuỗiđích
SZCASZB SZCASZW
Mô tả: AL/AX - phầntửhiệntại, DI DI 1/2 (chuỗi byte/từ)Lệnh này so sánh AL/AX với từng byte/từ của chuỗi đích do DI chỉ ra trong
đoạn ES chỉ để tạo các cờ, không lu kết quả so sánh Lệnh SCAS chỉ đợc dùngkhi chuỗi đích và chuỗi gốc đã đợc khai báo rõ là chuỗi byte hay chuỗi từ, lúc nàychơng trình dịch sẽ dựa vào đó để thực hiện các thao tác Trờng hợp muốn chỉ rõcho chơng trình dịch biết kiểu thao tác trên chuỗi đã đợc định nghĩa là kiểubyte/từ ta dùng các lệnh SCASB/SCASW
Cập nhật các cờ: AF, CF, OF, PF, SF, ZF.
SZTOSZ/SZTOSZB/SZTOSZW - SZtore AL/AX in string byte/word: Cất AL/AX
vào 1 phần tử của chuỗi byte/từ
Viết lệnh: SZTOSZ Chuỗiđích
SZTOSZB SZTOSZW
Mô tả: AL/AX phầntửhiệntại, DI DI 1/2 (chuỗi byte/từ)Lệnh này cất AL/AX vào 1 byte/từ do DI chỉ ra trong đoạn ES, sau đó DI tự
động tăng hay giảm(tuỳ vào DF) để chỉ vào phần tử tiếp theo
Lệnh STOS chỉ đợc dùng khi chuỗi đích và chuỗi gốc đã đợc khai báo rõ làchuỗi byte hay chuỗi từ, lúc này chơng trình dịch sẽ dựa vào đó để thực hiện cácthao tác Trờng hợp muốn chỉ rõ cho chơng trình dịch biết kiểu thao tác trên chuỗi
đã đợc định nghĩa là kiểu byte/từ ta dùng các lệnh STOSB/STOSW
Trang 39Lệnh này không tác động đến các cờ.
VII Một số lệnh khác.
REP - Repeat SZtring Instruction until CX = 0: Lặp 1 lệnh xử lý chuỗi
cho tới khi CX = 0
Đây là tiếp đầu ngữ dùng để viết trớc các lệnh xử lý chuỗi với mục đích lặplại công việc một số lần Số lần lặp phải để trong CX Khi các lệnh này đợc lặplại thì CX tự động giảm đi 1, quá trình sẽ kết thúc khi CX = 0
Ví dụ:
MOV CX, 10 ; số lần lặp là 10
REP MOVSB ; chuyển 10 byte
REPE/REPZ - Repeat SZtring Instruction until CX = 0 or ZF = 0: Lặp 1
lệnh xử lý chuỗi cho tới khi CX = 0 hoặc ZF = 0
Đây là các tiếp đầu ngữ dùng để viết trớc các lệnh xử lý chuỗi với mục đíchlặp lại công việc một số lần Số lần lặp phải để trong CX Khi các lệnh này đợclặp lại thì CX tự động giảm đi 1 Lệnh này thờng đợc dùng với các lệnh so sánhchuỗi(CMPS/CMPSB/CMPSW) và quét chuỗi(SCAS/SCASB/SCASW), khi đóquá trình thực hiện sẽ kết thúc khi đếm hết(CX = 0) hoặc khi 2 phần tử khácnhau(ZF = 0)
Ví dụ:
MOV CX, 20 ; so sánh tất cả 20 phần tử của 2 chuỗi
REPE CMPSB ; Lặp lại lệnh so sánh các byte của hai chuỗi
; tới khi CX = 0 hoặc ZF = 0
REPNE/REPNZ - Repeat SZtring Instruction until CX = 0 or ZF = 1:
Lặp 1 lệnh xử lý chuỗi cho tới khi CX = 0 hoặc ZF = 1
Đây là các tiếp đầu ngữ dùng để viết trớc các lệnh xử lý chuỗi với mục đíchlặp lại công việc một số lần Số lần lặp phải để trong CX Khi các lệnh này đợclặp lại thì CX tự động giảm đi 1 Lệnh này thờng đợc dùng với các lệnh so sánhchuỗi(CMPS/CMPSB/CMPSW) và quét chuỗi(SCAS/SCASB/SCASW) Khi đóquá trình thực hiện sẽ kết thúc khi so sánh hết(CX = 0) hoặc khi 2 phần tử sosánh bằng nhau(ZF = 1)
Ví dụ:
MOV AL, 'a' ; tìm ký tự 'a' trong chuỗi
MOV CX, 20 ; Quét tất cả 20 phần tử của chuỗi
REPNE SCASB ; Lặp lại lệnh quét các byte của chuỗi tới khi
; CX = 0 hoặc phần tử của chuỗi = 'a'
SZLC/CTC - SZet/Clear the Carry Flag: Lập/xoá cờ nhớ.
Trang 40Mô tả: DF 1/0 (STD/CLD)
Lệnh này đợc dùng để định hớng làm việc với chuỗi Khi DF = 0 sẽ khiếncác thao tác với chuỗi đợc thực hiện theo chiều tiến Lúc này SI và DI sẽ tự độngtăng sau mỗi lần thao tác với chuỗi Ngợc lại DF = 1 sẽ khiến các thao tác vớichuỗi đợc thực hiện theo chiều lùi
Dựa vào nguyên nhân gây ngắt, có thể phân ngắt trong 8088 thành 3 loại:
- Nhóm ngắt cứng: là các yêu cầu ngắt CPU do thiết bị phần cứng cầnphục vụ gửi tín hiệu yêu cầu ngắt đến các chân INTR và NMI của 8088.Ngắt cứng INTR là yêu cầu ngắt che đợc Yêu cầu ngắt tại chân INTR
có thể có kiểu ngắt N nằm trong khoảng 00 FFH
Ngắt cứng NMI là yêu cầu ngắt không che đợc, nó tơng đơng với ngắtmềm INT 2
- Nhóm ngắt mềm: là yêu cầu ngắt đợc các chơng trình sử dụng để yêucầu các phục vụ của hệ thống Một ngắt mềm sẽ xảy ra khi chơng trìnhgọi một phục vụ ngắt bằng lệnh INT N, trong đó N là số hiệu ngắt nằmtrong khoảng 00 FFH
- Nhóm ngắt ngoại lệ: là các ngắt do các lỗi nảy sinh trong quá trình hoạt
động của CPU nh phép chia cho 0, tràn số
Cho dù với nguyên nhân gây ngắt nào, bộ VXL 8088 cũng chỉ có tất cả 256chơng trình con phục vụ ngắt ứng với các số hiệu ngắt 00 FFH, bao gồm:
+ INT 0: Ngắt do phép chia cho số 0 gây ra
+ INT 1: Ngắt để chạy từng lệnh ứng với trờng hợp cờ TF = 1
+ INT 2: Ngắt ứng với tín hiệu tích cực tại chân NMI gây ra
+ INT 3: Ngắt để đặt điểm dừng của chơng trình tại một địa chỉ nào đó
+ INT 4: Ngắt ứng với trờng hợp cờ tràn OF = 1
Các kiểu ngắt còn lại đợc dành riêng cho Intel và cho ngời sử dụng:
+ INT 5 INT 1FH: dành riêng cho Intel trong các bộ VXL cao cấp khác.+ INT 20H INT FFH: dành cho ngời sử dụng