1. Trang chủ
  2. » Thể loại khác

+Kỹ Thuật Vi Xử Lý sv cong nghe thuc pham De cuong VXL(OK)

100 150 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 100
Dung lượng 882,5 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Để 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 2

Cá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 4

Xử 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 5

Có 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 6

tá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 11

Trong 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 14

Bộ 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 18

Khi 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 19

Lệ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 20

CË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 21

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.

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 22

Trong đó 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 23

Nế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 24

Khô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 25

Toá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 26

Lệ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 27

Hai 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 28

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ố 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 29

JB/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 30

Lệ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 31

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)

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 32

JLE/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 33

JMP - 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 34

Mô 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 35

IRET - 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 36

Lap: 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 37

Lệ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 38

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 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 39

Lệ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 40

Mô 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

Ngày đăng: 21/01/2018, 15:49

TỪ KHÓA LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w