1. Trang chủ
  2. » Kỹ Thuật - Công Nghệ

Bài giảng Kỹ thuật Vi xử lý - Văn Thế Minh

176 3,4K 35
Tài liệu đã được kiểm tra trùng lặp

Đ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

Tiêu đề Kỹ Thuật Vi Xử Lý
Trường học Trường Đại học Công nghệ Thông tin - Đại học Quốc gia Hà Nội
Chuyên ngành Kỹ thuật Vi xử lý
Thể loại Bài giảng
Thành phố Hà Nội
Định dạng
Số trang 176
Dung lượng 712,6 KB

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

Nội dung

Bài giảng Kỹ thuật Vi xử lý - Văn Thế Minh

Trang 1

MỤC LỤC

Trang 2

CHƯƠNG I : CÁC HỆ ĐẾM VÀ VIỆC MÃ HÓA THÔNG TIN TRONG MÁY TÍNH

1 Các hệ đếm dùng trong máy tính

1.1 Hệ mười và hệ hai

Trong cuộc sống hàng ngày chúng ta dùng hệ cơ số mười hoặc nói gọn hơn hệ mười để biểu diễncác giá trị số Điều này là rất tự nhiên vì từ khi xưa một con người bình thường đã biết dùng 10 ngón taycủa mình như là “công cụ tính toán sơ đẳng Trong hệ thống này chúng ta dùng tổ hợp của các chữ số 0 9

để biểu diễn các giá trị số, đi kèm theo tập hợp đó có thể dùng thêm chữ D đi mà vẫn ngầm hiểu rằng đó là

số hệ mười

Trong thế giới máy tính thì khác, để biểu diễn 1 giá trị số chúng ta dùng hệ cơ số hai hoặc nói gọnhơn hệ hai, trong đó chỉ tồn tại hai chữ số 0 và 1để biểu diễn các giá trị số (ứng với hai trạng thái có điện

và không có điện của các mạch điện tử cấu tạo trên máy) 0 và 1 cũng là các giá trị có thể có của một chữ

số hệ hai Hệ hai là hệ dùng trong các máy tính Một số hệ hai thường được đánh dấu bằng chữ B đi kèm ởcuối để phân biệt với các hệ khác khi ta làm việc cùng một lúc với nhiều hệ đếm khác nhau Một cụm 4 bit

sẽ tạo thành 1 nibble, cụm 8 bit sẽ tạo thành 1 byte, cụm 16 bit thông thường sẽ trạo thành một từ(word),cụm 32 bit sẽ tạo thành một từ kép Chữ số đầu tiên bên trái trong dãy các số hệ hai gọi là bít có ý nghĩalớn nhất, còn bit cuối cùng bên phải trong dãy gọi là bit có ý nghĩa bé nhất Ứng với việc đếm thứ tự1,2,3…ở hệ 10 thì ở hệ 2 ta có 1,10,11…

Hình1.1 Các đơn vị đo độ dài của số hệ hai dẫn xuất từ bit

Vì con người chỉ quen tính toán với hệ mười, trong khi các bộ phận tính toán của máy tính chỉ biếtlàm việc với hệ hai, nên để đảm bảo sự giao tiếp thuận tiện giữa người và máy (khi đưa số liệu vào và lúclấy ra kết quả tính toán) thường xuyên phải có việc chuyển đổi qua lại giữa hai hệ đếm này Chúng ta cùngxem xét nhanh các vấn đề trên thông qua các ví dụ đơn giản dưới đây

Một số hệ mười viết như sau: 12345,67

Tương tự như vậy, một số hệ hai viết như sau: 10111,01

như sau:

=1.24 +0.23 +1.22 +1.21 +1.20 +0.2-1 +1.2-2

Các thuật toán thường dùng để chuyển đổi giữa hai hệ trên:

 Đổi số hệ hai sang hệ mười

không thứ i của hệ số hai rồi cộng lại như đã nói ở trên:

Ví dụ

Trang 3

10111,11B =2 +2 +2 +2 +2 +2 =25,75Ngược lại muốn chuyển một số từ hệ mười sang hệ hai ta có thể làm theo hai cách:

cho chữ số hệ hai thứ i tùy theo quan hệ giữa số dư và lũy thừa tương ứng:

ví dụ đổi số 34 sang hệ hai.

Các chữ số hệ hai tính được:

Như vậy 34=100010B

Quy tắc: Lấy số cần đổi chia cho 2 và ghi nhớ phần dư, tiếp theo lấy thương của phép chia trước

đó chia cho 2 và ghi nhớ phần dư Làm như vậy cho tới khi được thương bằng 0 Đảo ngược thứ tự dãycác số dư sẽ được các chữ số của số hệ hai cần tìm

Ví dụ : Đổi số 34 sang hệ hai (hình 1.1.) Kết quả được 100010B.

Các số dư trong khung sẽ được sắp xếp theo chiều mũi tên

Hình 1.1 Một cách đổi số hệ mười sang hệ hai

Trong trường hợp số hệ mười cần đổi có thêm cả phần lẻ sau dấu phẩy thì đầu tiên ta phải đổiriêng rẽ từng phần rồi sau đó cộng các kết quả lại Đối với phần nguyên ta có thể làm theo 2 cách đã nói ởtrên Riêng đối với phần sau dấu phẩy ta đổi theo quy tắc trình bày sau đây

Lấy số cần đổi nhân với 2, tích nhận được sẽ gồm phần nguyên và phần lẻ nhị phân, lấy phần lẻnhị phân của tích thu được nhân tiếp với 2 Làm như vậy cho tới khi được tích chẵn bằng 1 Chọn riêngcác phần nguyên (phần trước dấu phẩy) của các tích thu được và sắp xếp lại sẽ được các chữ số sau dấuphẩy của số hệ hai cần tìm

Trang 4

Ta thực hiện phép nhân lần lượt theo các bước trên:

0,125 * 2 = 0 ,2500,250 * 2 = 0 ,5000,500 * 2 = 1 ,000

và thu được kết quả là 0,125 = 0,001B (phần được đóng trong khung)

Kết hợp các ví dụ trên lại, nếu phải đổi số 34,125 ra hệ hai ta thu được kết quả cuối cùng là 34,125

= 100010,001 B

1.2 Số BCD (số hệ mười mã hóa bằng hệ hai)

Giữa hệ mười và hệ hai còn tồn tại một hệ lai: hệ BCD cho các số hệ mười mã hóa bằng hệ hai

(Binary Coded Decimal number), rất thích hợp cho các thiết bị do có thêm phần hiện thị số ở đầu ra dùng

các loại đèn hiện số khác nhau Ở đây ta dùng 4 số hệ hai để mã hóa một số hệ mười có giá trị nằm trongkhoảng 0 9 Như vậy, ở đây ta không dùng hết các tổ hợp có thể có của 4 bit Vì tầm quan trọng của các

số BCD nên các bộ vi xử lý thường có các lệnh thao tác với chúng

Ví dụ: Số 410 nếu biểu diễn theo kiểu số BCD thì được 0100 0001 0000 Kết quả này cũng gợi ý

cho ta cách thức chuyển đổi giữa hai loại số

1.3 Hệ mười sáu (Hexa-decimal, hex, H)

Nếu ta dùng hệ hai để biểu diễn các số có giá trị lớn ta sẽ gặp điều bất tiện là số hệ hai thu đượcquá dài Ví dụ để biểu diễn số 255 ta cần đến 8 bit viết như sau:

255 = 1111 1111 BTrong thực tế để viết kết quả biểu diễn các số cho gọn lại người ta tìm cách nhóm 4 số hệ hai (1

nibble) thành một số hệ mười sáu Khác với hệ BCD vừa nói hệ 16 dùng hết các tổ hợp có thể của 4 bit để

biểu diễn các giá trị số Để làm được điều này người ta sử dụng các chữ số sẵn có của hệ mười 0 9 đểbiểu diễn các giá trị số ứng với 0 9 và dùng thêm các chữ cái A F để biểu diễn các giá trị còn lại ứngvới 10 15 để phân biệt một số hệ mười sáu với các số hệ khác ta kèm thêm chữ H ở cuối Ta cũng dễnhận thấy rằng số mười chỉ là một bộ phận của hệ mười sáu

2 Các phép toán số học đối với số hệ hai

Trang 5

C: nhớ (Carry) B: mượn (Borrow)

Ví dụ:

Cộng hệ mười Cộng hệ hai

11 nhớ 1111 1110

099 Số hạng 1 0110 0011

095 Số hạng 2 0101 1111

194 Tổng 1100 0010

Các bộ cộng trong các khối tính toán số học của máy tính sẽ thực hiện các phép cộng theo cách đã nói ở trên

2.2 Phép trừ và số bù hai

a) Phép trừ

Phép trừ các số hệ hai thực hiện giống như khi ta làm với số hệ mười

Quy tắc phép trừ số hệ hai được chỉ ra trong bảng 1.2

Ví dụ

Trừ hệ mười Trừ hệ hai

1 Mượn 110 0000

109 số bị trừ 0110 1101

9 số trừ 0011 0001

060 Hiệu 0011 1100

b) Số bù hai

Trong khi làm phéo trừ ta nhận thấy có thể thực hiện phép trừ bằng phép cộng: cộng số bị trừ với

số đối của số trừ Điều này cũng được ứng dụng trong các khối tính toán số học của máy tính để tận dụng các bộ cộng đã có sẵn Vấn đề đặt ra đối với số hệ hai là ta phải có cách biểu diễn số âm một cách thích hợp sao cho ta có thể ứng dụng được tính chất nói trên Có rất nhiều cách mã hóa các số hệ hai đê biểu

diến số âm nhưng trong thực tế hay dùng nhất là dùng cách mã hóa kiểu số bù hai.

Bảng 1.3 chỉ ra cách tạo ra các số hệ hai có dấu và số bù hai trong sự tương quan với số hệ hai

Bảng 1.3 Biểu diễn các số theo hệ hai, hệ hai có dấu và mã bù hai.

Số 8 bit số hệ mười số hệ mười theo số hệ mười tính

hệ hai tương đương mã hệ hai có dấu theo mã bù hai

0000 0000 0 + 0 + 0

0000 0001 1 + 1 + 1

0000 0010 2 + 2 + 2

0111 1101 125 + 125 + 125

0111 1110 126 +126 +126

0111 1111 127 +127 +127

1000 0000 128 - 0 - 128

1000 0001 129 - 1 - 127

1000 0010 130 - 2 - 126

1111 1101 125 -125 - 3

Trang 6

1111 1110 126 -126 - 2

1111 1111 255 -127 - 1

Quan sát kỹ bảng này chúng ta có thể rút ra các nhận xét sau:

1 Nếu ta dùng 8 bit để biểu diễn số thì ta thu được 256 tổ hợp có giá trị từ 0 đến 255 (tương ứng

00 FF H), tức là chỉ biểu diễn được số dương

2 Với tổ hợp trên nếu ta muốn biểu diễn số có dấu theo kiểu dấu và độ lớn (sign and magnitude)

ta phải mất 1 bit để dành cho dấu và 7 bit còn lại để định giá trị Với cách làm này ta có khảnăng biểu diễn cả số âm và số dương nằm trong khoảng -127 -0, +0 +127 (chú ý 2 giá trị 0khác nhau)

3 Số bù hai được tạo ra theo cách gần giống như kiếu dấu và độ lớn nhưng nó dùng cả 8 bit đểbiểu diễn giá trị của số được mã hóa Mã bù hai dài 8 bit có khả năng biểu diễn các số âm vàdương trong khoảng -128 0 +127 Một số dương có mã bù hai giống như hệ mã hai thôngthường

4 Một số biểu diễn theo hệ hai sẽ có các giá trị khác nhau nếu hiểu đó là mã để biểu diễn số theokiểu hệ hai có dấu hoặc kiểu số bù hai Nói khác đi, một cụm các số 0 và 1 sẽ được cảm nhậnkhác nhau khi nó biểu diễn giá trị số theo các mã khác nhau Cho dù có được biểu diễn bằng số

hệ hai có dấu hay số bù hai thì các số âm đều có bit b7 = 1, còn các số dương có bit b7 = 0.Bây giờ ta nói cụ thể cách tính số bù hai của một số nào đó Về mặt toán học thì sí bù hai của một

số chính là số đối của nó Như vậy một số dương sẽ có số bù hai là một số âm cùng giá trị tuyệt đối vàngược lại

Quy tắc: Muốn tìm số bù hai (còn gọi là bù số học) của một số A ta làm theo các bước sau:

Ghi chú: Khi có một số âm được biểu diễn theo mã bù hai nếu muốn tính giá trị tuyệt đối của nó tacũng áp dụng quy tắc này (áp dụng các bước 2.3)

Có thể lấy một ví dụ khác để chứng tỏ kết quả trên là đúng và qua đó cũng thấy được ứng dụng của

số bù hai trong khi làm phép trừ

Ví dụ: 15 - 13 = ?

Ta có thể viết lại phép trừ trên thành phép cộng 15 + (-13) và sử dụng kết quả vừa tính được ở trêncho số (-13):

15 0000 1111(-13) 1111 0011tổng 0000 0010 (nhớ 1)Nếu không để ý đến nhớ ta có kết quả là 2

Ví dụ: 12 - 13 = ?

Trang 7

12 0000 1100(-13) 1111 0011tổng 1111 1111 (tức -1)Đây là một số âm (bit b7=1) với giá trị tuyệt đối là 1 (tra theo bảng 1.2) Mặt khác ta cũng

có thể tìm được giá trị tuyệt đối của kết quả bằng cách tìm số bù hai của nó:

Mã bù hai của kết quả trên 1111 1111

Số bù 1 của kết quả trên 0000 0000

Cộng - để tìm giá trị tuyệt đối 0000 0001

Phân tích kỹ quá trình trên ta thấy phép nhân có thể thực hiện theo thuật toán cộng và dịch (trên cơ

sở các bộ cộng và dịch) như sau:

nhân Nếu LSB = 0 thì thành phần này cũng bằng 0, còn nếu LSB = 1 thì thành phần này chínhbằng số bị nhân

dịch trái i bit (có thể bỏ qua các thành phần bằng 0)

Để minh hoạ cho thuật toán trên, ta dùng luôn nó để rút gọn ví dụ đã làm trước đây như sau:

Trang 8

tử để thực hiện phép cộng và dịch trong máy tính) Sau đây là một thuật toán khắc phục được các vấn đềnêu ở trên:

1.Đổi số chia ra số bù hai của nó (để bước ở sau làm tính trừ bằng tính cộng)

2.Lấy số bị chia trừ đi số chia

Nếu kết quả này có bit dấu bằng 0 (có nghĩa là phần này của số bị chia chia được cho số chia) thìbit tương ứng của thương bằng 1

Nếu kết quả này có bit dấu bằng 1 (có nghĩa là phần này của số bị chia không chia được cho sốchia) thì bit tương ứng của thương bằng 0 và ta buộc phải khôi phục lại giá trị ban đầu của số bị chia bằngcách cộng kết quả này với số chia ở mã hệ hai

3.Dịch trái kết quả thu được ở trên và làm lại bước 2 cho đến khi nhận được kết quả cuối cùng là 0(chia hết) hoặc nhỏ hơn số chia (chia còn dư)

Ví dụ: 36/5 = 7, dư 1 Thực hiện phép chia này trong hệ hai.

Đầu tiên ta có 5 = 0101B và số bù hai của nó là 1011B

Các bước tính toán tiếp của phép chia theo thuật toán đã nêu ở trên được liệt kê ra như sau:

Toán hạng Thương Tên toán hạng, thao tác

0 100100 Số bị chia

1 111100 0 Tổng, kết quả 1 (kq1)

Trang 9

3 Mã ASCII - mã tiêu chuẩn cho trao đổi thông tin

Bảng 1.5 Bảng mã ASCII tiêu chuẩn

Trang 10

để hiển thị trên màn hình đều ở dưới dạng ký tự và tuân theo 1 loại mã được dùng rất rộng rãi gọi là mãASCII (American Standard Code for Information Interchange, mã chuẩn của Mỹ dùng cho trao đổi thôngtin) Việc dùng các ký tự để mã hoá thông tin theo bảng mã ASCII (bảng 1.5) cho ta khả năng trao đổithông tin với hầu hết các máy tính khác.

Trong bảng mã ASCII tiêu chuẩn, người ta dùng 7 bit để mã hóa các kỹ tự thông dụng, như vậy

bảng mã này sẽ có 128 ký tự ứng với các mã số từ 0 127 Bit thứ 8 có thể cho liên tục bằng 0, 1 hoặc có

thể dùng để chứa bit parity (xem ý nghĩa của parity ở chương 3, phần nói về các cờ) phục vụ cho việc phát

hiện lỗi khi truyền

Bên cạnh bảng ASCII tiêu chuẩn người ta còn dùng bảng ASCII mở rộng cho các ký tự đặc biệt

(khác các ký tự tiêu chuẩn) với mã từ 128 255

Khi tra các bảng này ta đọc mã của ký tự theo thứ tự cột – hàng

Ví dụ: Mã ASCII của một số ký tự thường dùng trong khi lập trình:

<Bel> (Bell, chuông): 7

<BS> (Back space, xoá lùi): 8

<HT> (Horizont tab, giãn cách ngang): 9

<LF> (Line feed, thêm dòng mới): OAH

<CR> (Carriage return, về đầu dòng): ODH

<SP> (Space, dấu cách): 2OH;

‘$’: 24H; ‘0’: 30H; ‘9’: 39H; ‘A’:41H; ‘a’: 61H

Khi xem xét bảng 1.5 ta có thể rút ra mấy nhận xét sơ bộ như sau:

1 2 cột đầu của bảng mã được dùng cho các ký tự điều khiển

2 Cột 2 dành riêng cho các ký tự ngăn cách

3 Các ký tự số nằm ở cột 3 Mã của ký tự ‘0’ là 30H ‘9’ là 39H Giữa giá trị số và mã ASCII của

số đó có khoảng cách là 30H

4 Các chữ cái hoa nằm ở các cột 4,5, các chữ cái thường ở cột 6,7 Khoảng cách giữa chữ thường

và chữ hoa cùng tên là 20H

4 Quan hệ giữa mã ASCII với số BCD

Trong khi làm toán với các số BCD ta thường kết hợp 2 số BCD thành 1 byte Dạng số BCD viết

theo kiểu này gọi là dạng BCD chuẩn hay còn được gọi là dạng BCD gói (packed BCD) Khi lưu trữ, khi

hiện thị hoặc khi truyền giữa các thiết bị các giá trị số 0 9, thực chất ta làm việc với mã ASCII của các

số đó, tức là các số 30H 39H Như vậy ta thấy trong 1 byte mã ASCII biểu diễn các số 0 9 có 4 bit thấpứng với mã BCD của chính các số đó, 4 bit cao bao giờ cũng ứng với mã BCD của số 3 (tức là 0011B)

Trang 11

Nếu trong byte mã ASCII này ta thay 4 bit cao bằng OH thì ta thu được số BCD không gói Nói cách khác

số BCD không gói là số dài 1 byte, trong đó 4 bit cao bằng không, 4 bit thấp là số BCD chuẩn mã hóa sốcần biểu diễn

Ví dụ sau minh họa quan hệ giữa số BCD gói, BCD không gói và mã ASCII

Mã ASCII của 5 là 0011 0101B = 35H

Mã ASCII của 9 là 0011 1001B = 39H

Mã ASCII không gói của 5 là 0000 0101B = 05H

Mã ASCII không gói của 9 là 0000 1001B = 09H

Mã ASCII gói (chuẩn) của 59 là 0101 1001B = 59H

Từ đây ta có thể rút ra các bước phải làm để đổi 2 số ở dạng mã ASCII sang dạng số BCD chuẩn:

Đây là các công việc hay gặp khi thao tác với các số trong các hệ vi xử lý

Trang 12

CHƯƠNG 2 : MÁY VI TÍNH VÀ HỆ THỐNG VI XỬ LÝ

Bộ vi xử lí có mặt trong các máy vi tính là sự phát triển tiếp theo của bộ xử lí được dùng như là một

bộ phận chủ chốt trong cácmáy tính của các thế hệ trước Để nắm bắt được tính kế thừa và tính liên tụccủa sự phát triển này, trước khi giới thiệu về các bộ vi xử lí ta để ra một chút thời gian để giới thiệu về cácloại máy tính nói chung

1 Từ máy tính lớn đến máy vi tính

Như ta đã biết về kiến thức của máy tính nói chung, một máy tính (Computer) thông thường baogồm các khối chức năng cơ bản như: khối xử lí trung tâm (CPU, central processing unit), bộ nhớ (M,Memory) và khối phối ghép với thiết bị ngoại vi (I/O, input/output) tuỳ theo quy mô phức tạp của cáckhối chức năng kể trên mà người ta phân các máy điệ tử đã và đang sử dụng ra thành các loại sau:

1.1.Máy tính lớn

Máy tính lớn (mainframe) là loại máy tính được thiết kế để giải các bài toán lớn với tốc đọ nhanh.

Nó thường làm việc với số liệu từ 64 bit hoặc lớn hơn nữa và được trang bị bộ nhớ rất lớn Chính vì vậymáy tính cũng lớn về kích thước vật lý Chúng thường được dùng để điều khiển các hệ thống thiết bị dùngtrong quân sự hoặc các hệ thống máy móc của chương trình nghiên cứu vũ trụ, để xử lý các thông tintrong ngành ngân hàng, ngành khí tượng, các công ty bảo hiểm Tiêu biểu cho loại máy tính này là loại

máy IBM 8341, honeywell DSP8 loại máy lớn nhất trong các máy lớn được gọi là supercomputer (như

loại máy Y-MP/832 của Cray)

1.2 Máy tính con

Máy tính con (minicomputer) là một dạng thu nhỏ về kích thước cũng như về tính năng của máy tính

lớn Nó ra đời nhằm thoả mãn các nhu cầu sử dụng máy tính cho các ứng dụng vừa phải mà nếu dùng máytính lớn vào đó thì sẻ gây lãng phí Do vậy máy tính con thường làm việc với các dữ liệu có đọ dài từ 32bit với tốc độ chậm hơn và khả năng của bộ nhớ hạn chế hơn Máy tính con thường được dùng cho cáctính toán khoa học kỹ thuật, gia công dữ liệu quy mô nhỏ hay để điều khiển quy trình công nghệ Tiêubiểu cho nhóm này là loại máy VAX 6360 của Digital Equipment Corporation và MV/8000II của Datagenaral

1.3.Máy vi tính

Máy vi tính (Microcomputer) là loại máy tính rất thông dụng hiện nay Một máy vi tính có thể là một

bộ vi điều khiển (microcontroller)., một máy vi tính trong một vỏ mách (one- chip- microcomputer), vàmột hệ vi xử lí có khả năng làm việc với số liệu có độ dài 1 bit, 4 bit, 8 bit, 16 bit Hiện nay một số máy vitính có tính năng có thể so sánh được với máy tính con, làm việc với số liệu có độ dài từ là 32 bit (thậmchí là 64 bit) Ranh giới để phân chia giữa máy vi tính và máy tính con chính vì thế ngày càng không rỏnét Một dặc điểm tiêu biểu để nhận biết máy vi tính là chúng đều sử dụng các bộ xử lí trung tâm (CPU)được chế tạo bằng công nghệ mạch vi điện tử với mức độ tổ hợp lớn, mạch VLSI (very large of

Các bộ vi xử lý hiện có tên thị trường thường được xếp theo các họ phụ thuộc vào các nhà sản xuất

và chúng rất đa dạng về chủng loại Nổi bật nhất trong các họ vi xử lý đố là 2 họ của 2 nhà sản xuất hàngđầu nổi tiếng trong lĩnh vực này, đó là họ vi xử lý 80x86 của Intel và họ vi xử lý 680xx của Motorola.Trong các chương sau chúng ta sẽ quan tâm chủ yếu đến các bộ vi xử lý, các mạch phụ trợ và các hệthống xây dựng trên cơ sở linh kiện của Intel, tuy thế sau đây cúng ta cũng sẽ giới thiệu lướt qua về lịch sửphát triển và các đặc điểm chung nhất của các thế hệ vi xử lý từ trước đến nay Cuối cùng chúng ta sẽ đưa

ra bảng tổng kết, trong đó nêu ra các thông số chính của các bộ vi xử ký thế hệ gần đây nhất của 2 nhàcung cấp nổi tiếng la Intel và Motorola

2 Sự phát triển của các bộ vi xử lý

Trang 13

2.1 Thế hệ 1 (1971-1973)

Năm 1971, trong khi phát triển các vi mạch dùng cho máy tính cầm tay, Intel đã cho ra đời bộ vi xử

lý đầu tiên là 4004 ( 4 bit ) của Rockwell International, IPM-16 (16 bit) của National Semiconductor.Đặ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 có thể dài hơn)

 Công nghệ chế tạo PMOS với đặc điểm mật độ phần tử nhỏ, tốc độ thấp, giá thành rẻ và cókhả năng đưa ra dòng tải nhỏ

 Tập lệnh đơn giản phải cần nhiều mạch phụ trợ mới tạo nên một hệ vi xử lý hoan chỉnh

2.2 Thế hệ 2 (1974-1977)

Các bộ vi xử lý đại diên trong thế hệ này là các vi xử lý 8 bit 6502 của MOS Technology, 6800 và

6809 của Motorola, 8080 và 8085 của Intel và đặc biệt là bộ vi xử lý Z80 của Zilog Các bộ vi xử lý này

có tập lệnh phong phú hơn 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ại vi (họ Intel và Zilog).Chúng đã được sử dụng 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ộtthờ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ệNMOS ( Với mật độ điện tủ trên một đơn vị diện tích cao hơn so với công nghệ PMOS) hoặc CMOS ( tiết

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ớncác bộ vi xử lý trong thế hệ này đều được sản xuất bằng công nghệ HMOS và cho phép đạt được tốc độ từ

số cơ bản của bộ vi xử lí ngày càng được cải thiện : tốc độ ngày càng cao ( các bộ vi xử lí hiện đại củaINTEL đã đạt tới tốc độ 800 MHz - 3GHz, độ rộng kênh thông tin dữ liệu ngày càng lớn như : 32, 64bit Điều đó đã giúp cho bài toán thiết jkế các bài toán thjiết kếcác hệ vi xử lí chuyên dung với tính năngrang lain trở nên dễ dàng hơn Song song với các hệ vi xử lí của hãng INTEL, hãng Motola cũng đưa racác vi xử lý 32 bit 68020/68030/68040 và các vi xử lí 64 bit 68060/64 Ngày nay tốc độ của các vi xử líhiện đại của hãng MOTOROLA cũng đạt trên 3GHz Đặc điểm của các bộ vi xử lý thế hệ này có sốlượng transistor rất lớn ( từ vài 3 triệu đến trên 50 triệu transistor Phần lain các bộ vi xử lí mới thực hiệncác lênh trong một chu kỳ, và thực tế taut cả chúng đều có đơn vị xử lí dấu phẩy động FPU (Floating-point Unit ) bên trong Chúng có các thanh ghi chung 16-32 bit Nhiều loại có phân biệt các tệp thanh nghi32-bit ( register file ) cho đơn vị nguyên IU ( interger unit ) vaf teepj thanh ghi 32- bit cho FPU Chúng

có Cache memory bên trong với dung lượng lên tới 36 KB Đa số Cache memory bên trong phân đôi :dùng cho lệnh Icache và dùng cho dữ liệu Dcache Các bộ vi xử lí công nghệ cao hiện nay( advanced

Trang 14

microprocessors) đã thoả mãn các yêu cầu chế tạo các máy tính lớn ( mainframes ) và các siêu máy tính( supercomputers) Các vi xử lí thời này có bus địa chỉ đều là 32 bit ( phân biệt 4 GB bộ nhớ) và có khả

năng làm việc với bộ nhớ ảo Người ta cũng áp dụng các cơ chế hoặc các cấu trúc đã được sử dụng trong các máy tính lớn vào các bộ vi xử lí : cơ chế xử lý xen kẽ liên tục dòng mã lệnh( pipeline), bộ nhớ cache

(bộ nhớ ẩn), bộ nhớ ảo Các bộ vi xử lý này đều có bộ quản lý bộ nhớ(MMU) và nhiều khi cả các bộ đồng

xử lý toán học ở bên trong Chính nhờ các cải tiến đó mà các bộ vi xử lý thế hệ này có khả năng cạnh

tranh được với các máy tính nhỏ trong rất nhiều lĩnh vực ứng dụng Phần lớn các bộ vi xử lý thế hệ nàyđều được sản xuất bằng công nghệ HCMOS

Bên cạnh các bộ vi xử lý vạn năng truyền thống thường được dùng đẻ xây dựng các máy tính với tập

lệhn đầy đủ ( complex instruction set computer, CISC) đã nói ở trên, trong thời gian này cũng xuất hiện

các bộ vi xử lý cải tiến dùng để xây dựng các máy tính với tập lệnh rút gọn (reduced instruction set

computer, RÍC) với nhiều tính năng có thể so sánh với các máy tính lớn ở các thế hệ trước Đó là các bộ vi

xử lý Alpha của Digital, PowerPC của tổ hợp hãng Apple- Motorola- IBM Có lẽ hãy còn sớm, nhưngcũng đã có nhiều biểu hiện để có thể nói được rằng sự ra đời của các vi xử lý loại RISC chính là sự bắtđầu cho một thế hệ khác trong lịch sử phát triển của các thế hệ vi xử lý

3 Giới thiệu sơ lược cấu trúc và hoạt động của hệ vi xử lý

Trên đây bộ vi xử lý là một thành phần rất cơ bản không thiếu được để tạo nên máy vi tính Trongthực tế bộ vi xử lý còn phải có thể kết hợp thêm với các boịo phận điện tử khác như bộ nhớ và bộ phối

ghép vào/ra để tạo nên một hệ vi xử lý hoàn chỉnh Cần lưu ý rằng để chỉ một hệ thống có cấu trúc như

trên, thuật ngữ “hệ vi xử lý” mang ý nghĩa tổng quát hơn so với thuật ngữ “máy vi tính”, vì máy vi tính chỉ

là một ứng dụng cụ thể cảu hệ vi xử lý

Hình 2.1 giới thiệu sơ đồ khối tổng quát của một hệ vi xử lý

Trong sơ đồ naydf ta thấy rõ các khối chức năng chính của hệ vi xử lý gồm:

+ Khối xử lý trung tâm (central pgocessing unit,CPU)

+ Bộ nhớ bán dẫn (memory, M

+ Khối phối ghép với các thiết bị ngoại vi (input/ output,I/O)K

+ Các bus truyền thông tin.

Ba khối chức năng đầu liên hệ với nhau thông qua qập các đường day để truyền tín hiệu gọi chung

là Bus hệ thống Bus hệ thống bao gồm 3 bus thành phần Ứng với các tín hiệu địa chỉ, dữ liệu và điều khiển ta có bus địa chỉ, bus dữ liệu và bus điều khiển.

CPU đóng vai trò chủ đạo trong hệ vi xử lý Đây 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 fạng các bit 0 và bit 1 từ bộ nhớ, sau đó nó sẽ giải mã các lệnh này thành các dãy xung điều khiển ứng với cá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 thao tác đó Để làm được việc này bên trong CPU 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 (instruction pointer,IP) hoặc bộ đếm chương trình

(program cuonter,PC), một số thanh ghi đa năng khác cùng bộ tính toán số học và logic (ALU) để thao 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ệ

Bộ nhớ bán dẫn hay còn gọi là bộ nhớ trong là một bộ phận khác rất quan trọng của hệ vi xử lý.Tại

đây (trong ROM) ta có thể chứa chương trình điều khiển hoạt động của toàn hệ để khi bật điện thì CPU có

Trang 15

thể lấy lệnh từ đây mà khửoi đầu hệ thống Một phần của chương trình điều khiển hệ thống, các chuiươngtrình ứng dụng , dữ liệu cùng các kết quả của chương trình thường được để trong RAM Các dữ liệu vàchương trình muốn lưu trữ lâu dài sẽ được để ở bộ nhớ ngoài.

Khối phối ghép vào/ra (I/O) tạo ra khả năng gaio tiếp giữa hệ vi xử lý với thế giới bên ngoài Các

thiết bị ngoại vi như bàn phím, chuột, màn hình, máy in, chuyển đổi số tương tự (D/A converter, DAC) vàchuyển đổi tương tự / số (A/D converter, ADC)., ổ đĩa từ đều liên hệ với hệ vi xử lý qua bộ phận này

Bộ phận phối ghép cụ thể giữa bus hệ thống với thế giới bên ngoài thường được gọi là cổng Như vậy tra

sẽ có các cổng vào để lấy thông tin từ ngoài vào và các cổng ra để đưa thông tin từ trong ra ngoài Tùy

theo nhu cầu cụ thể của công việc, các mạch cổng này có thể được xây dựng từ các mạch lôgic đơngiản hoặc từ các vi mạch chuyên dụng lập trình được

Bus địa chỉ thường có từ 16, 20,24 đến 32 đường dây song song chuyển tải thông tin của các bit địa

chỉ Khi đọc/ghi bộ nhớ CPU sẽ đưa ra trên bus này địa chỉ của o nhớ liên quan Khả năng phân biệt địa

chỉ (số lượng địa chỉ cho ô nhớ mà CPU có khả năng phân biệt được) phụ thuộc vào số bit của bus địa chỉ.

bit địa chỉ tương uéng của cổng Trên sơ đồ khối ta dễ nhận ra tính một chiều của bus địa chỉ qua một

chiều của mũi tên Chỉ có CPU mới có khả năng đưa ra địa chỉ trên bus địa chỉ( sau này ta sẽ thấy cònmạch DMAC, mạch điều khiển trao đổi dữ liệu trực tiếp giữa bộ nhớ - thiết bị ngoại vi cũng có khả năngnày)

Bus dữ liệu thường có từ 8,16,20,24,32 đến 64 đường dây tùy 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ử ký cùng một lúc Chiều mũi tên trên sus

số liệu chỉ ra rằng đây là bus 2 chiều., nghĩa là dữ liệu có thể 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ới bus dữ liệu đều phải được trang bị đầu ra 3

tạng thái để có thể ghép vào được và hoạt động binbhf thường với bus này.

Bus điều khiển thường gồm hàng chục đường dây tín hiệu khác nhau Mỗi tín hiệu điều khiển có một chiều nhất định Vì khi hoạt động CPU đưa tín hiệu điều khiển tới các khối khác trong hệ, đồng thời nó

cũng nhận tín hiệu điều khiển từ các khối đó để phối hợp hoạtm dộng của toàn hệ nên các tín hiệu này trênhình vẽ được thể hiện bởi các đường có mũi tên 2 chiều, điều đó không phải là dể chỉ tính hai chiều củamột tín hiệu mà là tính hai chiều của cả một nhóm các tín hiệu

Hoạt đọng của hệ thống vi xử lý trên cũng xó thể nhìn theo một cách khác Trong khi hoạt động và

tại một thời điểm nhất định, về mặt chức năng mỗi khối trong hệ thống trên tương đương với các thanh

ghi trong ( nằm trong CPU) hoặc các thanh ghi ngoài (nằm rải rác trong bộ nhớ ROM, bộ nhớ RAM và

trong khối phối ghép I/O) Hoạt động của toàn hệ thực chất là sự phối hợp hoạt động của các thanh ghi

trong và cngoài nói trên để thực hiện sự biến đổi dữ liệu hoặc sự trao đổi dữ liệu theo các yêu cầu đã

định trước

Trang 16

đó một khi đã nắm được các vấn đề kỷ thuật của8088, ta sẽ có cơ sở để nắm bắt các kỷ thuật của các bộ vi

xử lý khác cùng trong họ Intel 80x86 hoặc của các họ khác

1 Giới thiệu cấu trúc bên trong vàhoạt động của bộ vi xử lý 8088.

Trước khi giới thiệu tập lệnh và cách thức lập trình cho bộvi xử lý8088 hoạt động ta cần phải tìmhiểu kỹ cấu trúc bên trong của nó

Trên hình 3.1 là sơ đồ khối cấu trúc bên trong cảu bộ vi xử lý Intel 8088:

1.1 BIU Và EU

theo sơ đồ khối trên hình 3.1 ta thấy bên trong CPU 8088 có 2 khối chính: khối phối ghép (

bus interface unit, BIU ) vàkhối thực hiện lệnh ( execution unit, EU ) Việc chia CPU ra thành 2 phần làm

việc đồng thời có liên hệ với nhau qua đệm lệnh làm tăng đáng kể tốc độ xử lý của CPU Các bus bêntrong CPU có nhiệm vụ chuyển tải tín hiệu của các khối khác Trong số các bus đó có bus dữ liệu 16 bitcủa ALU, bus các tín hiệu điều khiển ở EU và bus trong của hệ thống ở BIU Trước khi đi ra bus ngoàihoặc đivào bus trong của bộ vi xử l, các tín hiệu truyền trên bus thường được cho đi qua các bộ đệm đểnâng cao tính tương thích cho nối ghép hoặc nâng cao phối ghép

BIU đưa ra địa chỉ, đọc mã lệnh từ bộ nhớ, đọc / ghi dữ liệu từ vào cổng hoặc bộ nhớ Nói cáchkhác BIU chịu trách nhiệm đưa địa chỉ ra bus và trao đổi dữ liệu với bus

Trong EU ta thấy có một khối điều khiển ( control unit, CU ) Chính tại bên trong khối điều khiển này có mạch giải mã lệnh Mã lệnh đọc vào từ bộ nhớ được đưa đến đầu vào của bộ giải mã, các

thông tin thu được từ đầu ra của nó sẽ được đưa đến mạch tạo xung điều khiển, kết quả là tu thu được cácdãy xung khác nhau ( tuỳ theo mã lệnh ) để điều khiển hoạt động của các bộ phận bên trong và bên ngoài

CPU Trong khối EU còn có khối số học và lôgic ( arithmetic anh logic unit ALU ) dùng để thực hiện các

thao tác khác nhau với các toán hạng của lệnh Tóm lại, khi CPU hoạt động EU sẽ cung cấp thông tin vềđịa chỉ cho BIU để khối này đọc lệnh và dữ liệu, còn bản thân nó thì đọc lệnh và giải mã lệnh

Trong BIU còn có một bộ nhớ đệm lệnh với dung lượng 4 byte dùng để chứa các mã lệnh đọc được nằm sẵn để chờ EU xử lý ( trong tài liệu của Intel bộ đệm lệnh này còn được gọi là hàng đợi lệnh ) Đây là một cấu trúc mới được cấy vào bộ vi xử lý 8086x88 do việc Intel đưa cơ chế xử lý xen kẻ liên tục,

dòng mã lệnh ( instruction pipelining ) vào ứng dụng trong các bộ vi xử lý thế hệ mới Pipeline là một cơ

chế đã được ứng dụng từ những năm 60 từ các máy lớn Nhân đây ta sẽ giới thiệu sơ qua một chút về cơchế này

Trong các bộ vi xử lý ở các thế hệ trước ( như ở 8085 chẳng hạn ), thông thường hoạt động củaCPU gồm 3 giai đoạn: đọc mã lệnh ( ôpcde fetch ), giải mã lệnh ( đecode ) và thực hiện lệnh ( execution ).Trong một thời điểm nhất định, CPU thế hệ này chỉ có thể thực hiện một trong ba công việc nói trên và vìvậy tuỳ theo từng giai đoạn sẽ có những bộ phận nhất định của CPU ở trạng thái nhàn rỗi Chẳng hạn, khiCPU giải mã lệnh hoặc khi nó đang thực hiện những lệnh không liên quan đến bus ( thao tác nội bộ ) thì

Trang 17

F1 D1 E1 F2 D2 E2 F3 D3 E3 Không có pipelining

các bus không được dùng vào việc gì dẫn đến tình trạng lãng phí khả năng của chúng ( hình 3.2 ) Trongkhi đó từ bộ vi xử lý 8086/88, Intel sử dụng cơ chế xử lý xen kẻ liên tục dòng mã lệnh thì CPU được chiathành 2 khối và có sự phân chia công việc cho từng khối: việc đọc mã lệnh là do khối BIU thực hiện, việcgiải mã lệnh và thực hiện lệnh là do khối EU đảm nhiệm Các khối chức năng này có khả năng làm việcđồng thời và các bus sẽ liên tục sử dụng: trong khi EU lấy mã lệnh từ bộ đệm 4 byte để giải mã hoặc thựchiện các thao tác nội bộ thì BIU vẫn có thể đọc mã lệnh từ bộ nhớ chính rồi đặt chúng vào bộ nhớ đệm

lệnh đã nói Bộ đệm lệnh này làm việc theo kiểu “ vào trước – ra trước “ (first in-first out, FIFO ), nghĩa

là byte nào được cất vào đệm trước sẽ được lấy ra xử lý trước Nếu có sự vào/ra liên tục của dòng mã lệnhtrong bộ đệm này thì có nghĩa là có sự phối hợp hoạt động hiệu quả giữa hai khối EU và BIU theo cơ chế

xử lý xen kẻ liên tục dòng mã lệnh để làm tăng tốc độ xử lý tổng thể Kỹ thuật xử lý xen kẻ liên tục dòng

mã lệnh sẽ không còn tác dụng tăng tốc độ xử lý chung của CPU nữa nếu như trong đệm lệnh có chứa các

mã lệnh của các lệnh CALL ( gọi chương trình con ) hoăc JMP ( nhảy ), bởi vì lúc các lệnh này nội dungcủa bộ đệm sẽ bị xoá và thay thế vào đó là nội dung mới được nạp bởi các mã lệnh mới do lệnh nhảy hoặcgọi quyết định Việc này tiêu tốn nhiều thời gian hơn so với trường hợp trong đệm chỉ có mã lệnh của cáclệnh tuần tự

Trong bộ vi xử lý 8088 ta còn thắy có các thanh ghi 16 bit nằm trong cả hai khối BIU và EU,ngoài ra cũng có một số thanh ghi 8 hoặc 16 bit tại EU Ta sẽ lần lượt giới thiệu các thanh ghi nói trêncùng chức năng chính của chúng

*Các thanh ghi đoạn

= 1.048.576 = 1M ô nhớ hay 1Mbyte, vì các bộ nhớ nói chung tổ chức theo byte Nói cách khác: khônggian địa chỉ của 8088 là 1Mbyte Trong không gian 1Mbyte bộ nhớ cần được chia thành các vùng khácnhau ( điều này rất có lợi khi làm việc ở chế độ nhiều người sử dụng hoặc đa nhiệm ) dành riêng để:

 Chứa mã chương trình

 Chứa dữ liệu và kết quả không gian của chương trình

 Tạo ra một vùng nhớ đặc biệt gọi là ngăn xếp ( stack ) dùng vào việc quản lý các thông

số của bộ vi xử lý khi gọi chương trình con hoặc trở về từ chương trình con

Trong thực tế bộ vi xử lý 8088 có các thanh ghi 16 bit liên quan đến địa chỉ đầu của các vùng( các đoạn ) kể trên và chúng được gọi là các thanh ghi đoạn ( Segment Registers ) Đó là thanh ghi đoạn

mã CS ( Code-Segment ), thanh ghi đoạn dữ liệu DS ( Data sement ) Thanh ghi đoạn ngăn xếp SS ( Stacksegment ) và thanh ghi đoạn dữ liệu phụ ES ( Extra segment ) Các thanh ghi đoạn 16 bit này chỉ ra địa chỉđầu của bốn đoạn trong bộ nhớ, dung lượng lớn nhất của mỗi đoạn nhớ này là 64 Kbyte và tại một thờiđiểm nhất định bộ vi xử lý chỉ làm việc được với bốn đoạn nhớ 64 Kbyte này Việc thay đổi giá trị của cácthanh ghi đoạn làm cho các đoạn có thể dịch chuyển linh hoạt trong phạm vi không gian 1 Mbyte, vì vậycác đoạn này có thể nằm cách nhau khi thông tin cần lưu trong chúng đòi hỏi dung lượng đủ 64 Kbytehoặc cũng có thể nằm trùm nhau do có những đoạn không cần dùng hết đoạn dài 64 Kbyte và vì vậy

Trang 18

những đoạn khác có thể bắt đầu nối tiếp ngay sau đó Điều này cũng cho phép ta truy nhập vào bất kỳđoạn nhớ ( 64 Kbyte ) nào nằm trong toàn bộ không gian 1 Kbyte.

Nội dung các thanh ghi đoạn sẽ xác định địa chỉ của ô nhớ nằm ở đầu đoạn Địa chỉ này còn gọi

là địa chỉ cơ sở Địa chỉ của các ô nhớ khác nằm trong đoạn tính được bằng cách cộng thêm vào địa chỉ cơ

sở một giá trị gọi là địa chỉ lệch hay độ lệch ( Offset ), gọi như thế vì nó ứng với khoảng lệch của toạ độmột ô nhớ cụ thể nào đó so với ô đầu đoạn Độ lệch này được xác định bởi các thanh ghi 16 bit khác đóngvai trò thanh ghi lệch ( Offset register ) mà ta sẽ nói đến sau Cụ thể, để xác định địa chỉ vật lý 20 bit củamột ô nhớ nào đó trong một đoạn bất kỳ CPU 8088 phải dùng đến 2 thanh ghi 16 bit ( một thanh ghi đểchứa địa chỉ cơ sở, còn thanh kia chứa độ lệch ) và từ nội dung của cặp thanh ghi đó tạo ra địa chỉ vật lýtheo công thức sau:

Địachỉvậtlý=Thanhghiđoanx16+Thanhghilệch

Việc dùng 2 thanh ghi để ghi nhớ thông tin về địa chỉ thực chất để tạo ra một loại địa chỉ gọi làđịa chỉ logic và được ký hiệu như sau:

Thanhghiđoạn: Thanhghilệch hay segment: offset

Đị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

trông CPU và ghi cần thiết truy cập ô nhớ nào đó thì nó phải được đổi ra địa chỉ vật lý để rồi được đưa lên

Ví dụ: cặp CS:IP sẽ chỉ ra địa chỉ của lệnh sắp thực hiện trong đoạn mã Tại một thời điểm nào

đó ta có CS = F00H và IP = FFFOH thì

CS:IP~FOOOHx16 + FFFOH = FOOOOH + FFFOH = FFFFOH

Địa chỉ FFFFOH chính là địa chỉ khởi động của 8088 dấu ~ ở đây là để chỉ sự tương ứng Địachỉ các ô nhớ thuộc các đoạn khác cũng có thể tính được theo cách tương tự như vậy Từ nay khi cần nóiđến đến địa chỉ của một ô nhớ ta có thể sử dụng cả địa chỉ logic lẫn địa chỉ vật lý vì bao giờ cũng tồn tại

Trước khi nói đến các thanh ghi khác ta nói thêm chút ít về tính đa trị của các thanh ghi đoạn vàthanh ghi lệch trong địa chỉ logic ứng với một địa chỉ vật lý Điều này cũng nói lên tính linh hoạt của cơ

chế segment offset trong việc định địa chỉ của 8086/ 88 Nhìn vào giá trị cuối cùng của địa chỉ vật lý ta

thấy có thể tạo ra địa chỉ đó từ nhiều giá trị khác nhau của thanh ghi đoạn và thanh ghi lệch

Ví dụ: Địa chỉ vật lý 12345H có thể được tạo ra từ các giá trị:

Thanh ghi đoạn Thanh ghi lệch

*Các thanh ghi đa năng

trong khối EU có bốn thanh ghi đa năng 16 bit AX, BX, CX, DX Điều đặc biệt là khi cần chứacác dữ liệu 8 bit thì mỗi thanh ghi có thể tách ra thành hai thanh ghi 8 bit cao và thấp để làm việc độc lập,

đó là các tập thanh ghi AH và AL, BH và BL, CH và CL, DH và DL ( trong đó H chỉ phần cao, L chỉ phầnthấp ) Mỗi thanh ghi có thể dùng một cách vạn năng để chứa các tập dữ liệu khác nhau nhưng cũng cócông việc đặc biệt nhất định chỉ thao tác với một vài thanh ghi nào đó và chính vì vậy các thanh ghithường được gan cho những cái tên đặc biệt rất có ý nghĩa

Cụ thể:

 AX ( accumulator, acc ): thanh chứa Các kết qủa của các thao tác thường được chứa ở đây ( kết quả của

Trang 19

Các cờ của bộ vi xử lý 8086

X : Không được định nghĩa

chữ ci thường ở cột 6,7 Hình 3.3 Sơ đồ thanh ghi cờ của bộ vi xử lý 8086/88

 BX ( base ): thanh ghi cơ sở thường chứa địa chỉ cơ sở của một bảng dùng trong lệnh XLAT

 CX ( count ): bộ đếm CX thường được dùng để chứa số lần lặp trong trường hợp các lệnh LOOP ( lặp ),còn CL thường cho ta 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 BX tham gia các thao tác của phép nhân hoặc chia các số 16 bit

DX thường dùng để chứa địa chỉ của cá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òn có ba thanh ghi con trỏ và hai thanh ghi chỉ số 16 bit Các thanh ghi này ( trừ

IP ) đều có thể được dùng như các thanh ghi đa năng, nhưng ứng dụng chính của mỗi thanh ghi là chúng

được ngầm định như là thanh ghi lệch cho các đoạn tương ứng Cụ thể:

nằm trong đoạn mã CS Địa chỉ đầy đủ của lệnh tiếp theo này ứng với CS:IP và được xác định theo cách

đã nói ở trên

SS Địa chỉ đầy đủ của một phần tử trong đoạn ngăn xếp ứng với SS:BP và được xác định theo cách đãnói ở trên

trong đoạn ngăn xếp SS Địa chỉ đỉnh ngăn xếp ứng với SS:SP và được xác định theo cách đã nói ở trên

địa chỉ cụ thể đầy đủ ứng với DS:SI và được xác định theo cách đã nói ở trên

cụ thể đầy đủ ứng với DS:DI và được xác định theo cách đã nói ở trên

Riêng trong các lệnh thoa tác với dữ liệu kiểu chuổi thì cặp ES:DI luôn ứng với địa chỉ của phần

tử thuộc chuỗi đích còn cặp DS:SI ứng với địa chỉ của phần tử thuộc chuỗi gốc

*Thanh ghi cờ FR ( flag register )

Đâ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áinhất định của kết quả phép toán do ALU thực hiện hoặc một trạ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ác lệ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 nhưng người ta chỉ dùng hết 9 bit của nó để làm các bit cờ ( hình 3.3 )

Các cờ cụ thể

 C hoặc CF ( carry flag ): cờ nhớ CF = 1 khi có nhớ hoặc muợn từ MSSP

 P hoặc PF ( parity flag ): cờ parity PF phản ánh tính chẵn lẻ ( parity ) của tổng số bit 1 có trong kết quả

Cờ PF =1 khi tổng số bit trong kết quả là chẵn ( even parity, parity chẵn ) Ơđây ta tạm dùng parity dạng

nguyên gốc để tránh sự lủng củng khi phải dịch cụm từ “ even parity “ thành tính chẵn lẻ chẵn hoặc “ odd

party “ thành tính chẵn lẻ lẻ.

 A hoặc AF ( auxilialyry carry flag ): cờ nhớ phụ rất có ý nghĩa khi ta làm việc với các số BCD.AF = 1 khi

có nhớ hoặc muợn từ một số BCD thấp ( 4 bit thấp ) sang một số BCD cao ( 4 bit cao )

 Z hoặc ZF ( zero flag ): cờ rỗng ZF =1 khi kết quả = 0

 S hoặc SF ( sign flag ): cờ dấu SF = 1 khi kết quả âm

 O hoặc OF ( over flow flag ): cò tràn OF = 1 khi kết quả là một số bù 2 vượt qua ngoài giới hạn biểu diễndành cho nó

Trang 20

Chế độ MIN VI6 AI5 AI6/S3 AI7/S4 AI8/S5 AI9/S6 SS0 MN/MN RD HOLD WR IO/M DT7R DEN ARE ININ IIST READY RESET

Chế độ MAX

BIH

(RQ/GT0) (RQ/GH) (LOCK) (S2) (S1) (S0) (QS0) (QS1)

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

40 39 38 37 36 35 34 33 32 31 30 29 28 27 26 25 24 23 22 21

P 8088 [8086]

GND A14 A13 A12 A11 A10 A9 A8 AD7 AD6 AD5 AD4 AD3 AD2 AD1 AD0 NMI INRT CLK GND

AD14 AD13 AD12 AD11 AD10 AD00 AD91 AD81

Trên đây là 6 bit cờ trạng thái phản ánh các trạng thái khác nhau của kết sau một thao tác nào đó,trong đó 5 bit cờ đầu thuộc byte thấp của thanh cờ là các cờ giống như của bộ vi xử lý 8 bit 8085 của Intel.Chúng được lặp hoặc xoá tuỳ theo các điều kiện cụ thể sau các thao tác của ALU Ngoài ra, bộ vi xử lý

8088 còn có các cờ điều khiển sau đây ( các cờ này được lập hoặc xoá bằng các lệnh riêng ):

 T hoặc TF ( trap flag ): cờ bẩy TF = 1 thì CPU làm việc ở chế độ chạy từng lệnh ( chế độ này dùng khicần tìm lỗi trong một chương trình )

 I hoặc IF ( interrupt enable flag ): cờ cho phép ngắt IF = 1 thì CPU cho phép các yêu cầu ngắt ( cheđược ) được tác động

 D hoặc 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 sangtrái ( vì vậy D chính là cờ lùi )

Ý nghĩa của các cờ đã khá rõ ràng Riêng cờ tràn cần phải làm rõ hơn để ta hiểu được bản chất và

cơ chế làm việc của nó Cờ tràn thường được dùng đến khi ta làm việc với số bù 2 có dấu Để cho việcgiải thích được đơn giản, đầu tiên giả thiết ta làm việc với số bù 2 dài 8 bit, kết quả để ở AL ( xem hình

sau:

Nghĩa là khi thực hiện các phép toán với số bù 2 có dấu, hiện tượng tràn sẽ xảy ra ( cờ OF = 1 )nếu có nhớ từ MSB ( tất là SF ) sang CF nhưng lại không có nhớ vào chính nó ( SF ) hoặc ngược lại Điềunày có thể tổng quát hoá cho các trường hợp làm việc với số bù 2 có dấu với độ dài 16/32 bit

[Type text] Trang

Trang 21

Trước khi kết thúc phần mô tả cấu trúc của bộ vi xử lý để đi vào giới thiêu tập lệnh của 8088 tanói qua một chút về sự giống nhau vàkhác nhau giữa 8088 và 8086 là bộ vi xử lý 16 bit hoàn chỉnh, còn

8088 là bộ vi xử lý với 16 bit dữ liệu bên trong ( giống như 8086 ), nhưng khi ra ngoài bus dữ liệu của nóchỉ còn 8 bit Cấu trúc bên trong của 8088 và 8086 giống nhau về cơ bản, ngoài trừ hai điểm Điểm khácnhau đầu tiên là ở độ dài bộ nhớ đệm lệnh ( hàng đợi lệnh ) độ dài này ở 8088 là 4 byte còn ở 8086 là 6byte; điều này sẽ có ảnh hưởng ít nhiều đến sự khác biệt về sự tốc độ xử lý của hai bộ CPU Điểm khácnhau thứ hai là ở kích thước của bus dữ liệu: ở 8088 là 8 bit còn ở 8086 là 16 bit ( trong khi ALU và cácthanh ghi của hai bộ CPU vẫn có độ dài như nhau Điều này có ảnh hưởng nhiều đến công năng( Perfomance ) và giá thành của hệ thống xây dựng trên cơ sở các bộ vi xử lý này Đối với 8086 do bus dữliệu là 16 bit nó có thể đọc/ghi được một từ nằm ở hai ô nhớ thẳng hàng ( một từ trong bộ nhớ được coi làxếp thẳng hàng khi ở địa chỉ chẵn làbyte thấp, ở địa chỉ lẻ là byte cao ) trong một chu kỳ đọc/ghi: còn ở

8088 do bus dữ liệu chỉ có 8 bit nên đọc/ghi một từ nằm ở hai ô nhớ thẳng hàng ( nằm liên tiếp như trên )

nó phải thực hiện trong hai chu kỳ đọc/ghi Bù lại nhược điểm về tốc độ, 8088 có giá rẻ vàdùng để tạo racác hệ thống với giá phải chăng vì nó dể phối ghép với các thiết bị ngoại vi 8 bit đang thịnh hành lúc đó.Điều khác nhau nữa tất yếu phải xảy ra là sự khác nhau trong việc bố trí các chân ở hai vi mạch như trênhình 3.5 ( xem thêm phần giới thiệu cụ thể các tín hiệu tại các chân ở chương V )

Mặc dù có những điểm khác nhau đã nêu, nhưng vì những điểm giống nhau là rất cơ bản và vìhai bộ vi xử lý có tập lệnh giống nhau nên về quan điểm lập trình thì chúng là tương đương

2 Cách mã hoá lệnh củabộ vi xử lý 8088

Trang 22

Di chuyển trực tiếp phần thấp Di chuyển trực tiếp phần cao

Hình 3.6 Dạng thức Byte mã lệnh của lệnh MOV

Lệnh củabộ vi xử lý được ghi bằng các ký tự dưới dạng gợi nhớ ( memonic ) để người sử dụng

để nhận biết Đối với bản thân bộ vi xử lý thì lệnh cho nó được mã hoá dưới dạng các số 0 và 1 (còn gọi là

mã máy ) vì đó là dạng biểu diễn thông tin duy nhất mà máy hiểu được Vì lệnh do bộ vi xử lý được chodưới dạng mã nên sau khi nhận lệnh., bộ vi xử lý phải thực hiện việc giải mã lệnh rồi sau đó mới thực hiệnlênh Việc hiểu rõ bản chất cách ghi lệnh bằng số hệ 2 cho bộ vi xử lý sẽ có lợi khi ta cần dịch “ bằng tay

“ Một lệnh gợi nhớ khi làm việc với các “ kit “ vi xử lý ( tuy rằng việc này ít khi xảy ra vì ta thường làmviệc với các hệ được trang bị chương trình dịch hợp ngữ )

Một lệnh có thể có độ dài một vài byte tuỳ theo bộ vi xử lý Giả thiết một bộ vi xử lý nào đódùng 1 byte để chứa các mã lệnh ( opcode ) của nó Ta có thể tính được số lệnh lớn nhất mà 1 byte này cóthể mã hoá được là 256 lệnh Trong thực tế việc ghi lệnh không phải hoàn toàn đơn giản như vậy Việc mãhoá lệnh cho bộ vi xử lý là rất phức tạp và bị chi phối bởi nhiều yếu tố khác nữa

Đối với bộ vi xử lý 8088 một lệnh có thể có độ dài từ 1 đến 6 byte Ta sẽ chỉ lấy trường hợp lệnhMOV để giải thích cách ghi lệnh nói chung của 8088

Lệnh MOV đích, gốc dùng để nguyển dữ liệu giữa 2 thanh ghi hoặc giữa 2 ô nhớ và thanh ghi Chỉ

nguyên với các thanh ghi của 8088, nếu ta lần lượt đặt các thanh ghi vào các vị trí toán hạng đích và toánhạng gốc ta thấy đã phải cần tới hàng trăm mà lệnh khác nhau để mã hoá tổ hợp các lệnh này

Hình 3.6 biểu diễn dạng thức các byte dùng để mã hoá lệnh MOV Từ đây ta thấy rằng để mã hoálệnh MOV ta phải cần ít nhất là 2 byte, trong đó 6 bit của byte đầu dùng để chứa mã lệnh Đối với cáclệnh MOV Để chuyển dữ liệu kiểu:

thì điều này lại khác

Bit W dùng để chỉ ra rằng 1 byte (W = 0 ) hoặc 1 từ ( W = 1 ) sẽ được chuyển

Trong các thao tác chuyển dữ liệu, một toán hạng luôn bắt buộc phải là thanh ghi Bộ vi xử lý dùng

2 hoặc 3 bit để mã hoá các thanh ghi trong CPU như sau:

Trang 23

Thanh ghi Mã

W = 1 AX PX CX DX SP DI BP SI

W = 0 AL BL CL DL AH BH CH DH

000 011 001 010 100 111 101 110

CS DS ES SS

01 11 00 10

Bit D dùng để chỉ hướng đi của dữ liệu D = 1 thì dữ liệu đi đến thanh ghi cho bởi b bit của REG

2 bit MOD ( chế độ ) cùng với 3 bit R/M ( thanh ghi/bộ nhớ ) tạo ra 5 bit dùng để chỉ ra chế độ địachỉ cho các toán hạng của lệnh ( có thể hiểu chế độ địa chỉ là cách tìm ra địa chỉ của toán hạng, xem thêmphần sau của chương này để rõ hơn về chế độ địa chỉ

Bảng 3.1 cho ta thấy cách mã hoá các chế độ địa chỉ ( cách tìm ra các toán hạng bằng các bit này ) MOD

Ghi chú : - disp , 8bit ,d16: disp , 16bit

dụng (EA) sẽ được cộng với DS để tạo ra địa chỉ vật lý (riêng BP phải được cộngvới SP )

Trong các ví dụ sau đây ta sẽ dùng các kiến thức nêu trên để mã hoá một vài lệnh MOV

Trang 24

1111 0 0 0 1 0 1 0 0 0 0 0 1 1 1 1 MOV CL ,[BX]

Opcode Chuyển tới thanh ghi

Chuyển 1 byte

mã hoá CL [ BX]

có 7 chế độ địa chỉ sau:

1 Chế độ địa chỉ thanh gi ( register addressing mode )

2 Chế độ địa chỉ tức thì ( immediate addressing mode )

3 Chế độ địa chỉ trực tiếp ( direct addressing mode )

4 Chế độ địa chỉ gián tiếp qua thanh ghi ( register indirect addressing mode )

5 Chế độ địa chỉ tương đối cơ sở ( based indexed relative addressing mode )

6 Chế độ địa chỉ tương đối chỉ số ( indexed relative addressing mode )

7 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ủa lệnh MOV và lệnhADD

*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ể đạt tốc độ truy nhập cao hon so với các lệnh có truynhập đên bộ nhớ

Ví dụ:

MOV BX, DX ; chuyển nội dung DX vào BX

MOV DS,AX ; chuyển nội dung AX vào DX

ADD AL,DL ; cộng nội dung AL và DL rồi đưa vào

*Chế độ địa chỉ tức thì

trong chế độ địa chỉ này toán hạng đích là một thanh ghi hay một ô nhớ, còn toán hạng nguồn làmột hằng số và ta có thể tìm thấy toán hạng này ở ngay sau mã lệnh ( chính vì vậy chế độ địa chỉ này cótên là chế độ địa chỉ tức thì ) Ta có thể dùng chế độ địa chỉ này để nạp dữ liệu cần thao tác vào bất kỳthanh ghi nào ( trừ các thanh ghi đoạn và thanh cờ ) hoặc vào bất kỳ ô nhớ nào trong đoạn dữ liệu DS

Ví dụ:

MOV CL, 100 ; chuyển 100 vào CL

Trang 25

MOV AX, OFFOH ; chuyển OFFOH vào AX để rồi đưa

MOV DS, AX ; vào DS ( vì không thể chuyển

; trực tiếp vào thanh ghi đoạn )

MOV ( BX ), 10 ; chỉ DS:BX

Trong ví dụ cuối ta đã dùng chế độ địa chỉ gián tiếp qua thanh ghi để chỉ ra ô nhớ ( toán hạngđích ) sẽ nhận dữ liệu ở chế độ địa chỉ tức thì ( toán hạng nguồn ) Tại đây ( BX ) có nghĩa là ô nhớ có địachỉ DS:BX

*Chế độ địa chỉ trực tiếp

Trong chế độ địa chỉ này một toán hạng chứa địa chỉ lệnh của ô nhớ dùng chứa dữ liệu còn toánhạng kia chỉ có thể là thanh ghi mà không được là ô nhớ

Nếu so sánh với chế độ địa chỉ tức thì ta thấy ở đây ngay sau mã lệnh không phải là toán hạng mà

là địa chỉ lệch của toán hạng Xét về phương diện địa chỉ thì đó là địa chỉ trực tiếp

*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à thanh ghi mà không được là ô nhớ ( 8088 không chophép quy chiếu bộ nhớ 2 lần đối với một lệnh )

MOV ( DI ), AX ; chuyển nội dung AX vào 2 ô nhớ

; liên tiếp có địa chỉ DS:DI và

; DS: ( DI + 1 )

*Chế độ địa chỉ tương đối cơ sở

Trong chế độ địa chỉ này các thanh ghi cơ sở như BX và BP và các hằng số biểu diễn các giá trị

dịch chuyển ( displacement values ) được dùng để tính địa chỉ hiệu dụng của toán hạng trong các vùng

nhớ DS và SS Sự có mặt của các giá trị dịch chuyển xác định tính tương đối ( so với cơ sở ) của địa chỉ

Ví dụ:

MOV CX, ( BX ) +10 ; chuyển nội dung 2 ô nhớ liên

; tiếp có địa chỉ DS: ( BX + 10 ) và

; DS: ( BX+10 ) vào CX

MOV CX, ( BX+10 ) ; một cách viết khác của lệnh trên

MOV CX, 10 ( BX ) ; một cách viết khác của lệnh đầu

MOV AL, ( BP ) +5 ; chuyển nội dung ô nhớ SS: ( BP+5 )

; vào AL

ADD AL, Table ( BX ) ; cộng AL với nội dung ô nhớ do

; BX chỉ ra trong bảng table

; ( bảng này nằm trong DS ), kết

; quả dựa vào AL

Nhân đây cần làm rõ một số thuật ngữ hay dùng thông qua các ví dụ trên

Trang 26

 10.5.Table 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ênmảng biểu diễn kiểu dịch chuyển của mảng ( phần tử đầu tiên ) so với địa chỉ đầu của đoạn dữ liệu DS.

 ( BX+10) hoặc ( BJP+5 ) gọi là địa chỉ hiệu dụng (effective address EA.theo cách gọi của Intel ).

 DS: ( BX+10 ) hoặc SS: ( BP+5 ) chính là logic tương ứng với một địa chỉ vật lý

 Theo cách định nghĩa này thì địa chỉ hiệu dụng của một phần tử thứ BX nào đó ( kể từ 0 ) trong mảngTable ( BX ) thuộc đoạn DS là EA = Table+BX và của phần tử đầu tiên là EA = Table

*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ỉ 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 Nếu ta dùng thêm cảthành phần biểu diển sự dịch chuyển của địa chỉ thì ta có chế độ địa chỉ phức hợp nhất: chế độ địa chỉtương đối chỉ số cơ sở Ta có thể thấy chế độ địa chỉ này rất phù hợp cho việc dịa chỉ hoá các mảng haichiều

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 AX, [BX+SI+8] ; một cách viết khác của lệnh trên

MOV CL, [BP+DI+5] ; chuyển nội dung ô nhớ

; SS:( BP+DI+5 ) vào CL

*Tổng kết các chế độ địa chỉ

Các chế địa chỉ đã trình bày ở trên có thể tóm tắt lại trong bảng 3.2

Một hình thức tổng kết khác về của chế độ địa chỉ của 8086/88 được biểu diễn trrrn hình 3.7

*Phương pháp bỏ ngầm định thanh ghi đoạn ( segment override )

Như trong các phần trước đã nói, các thanh ghi đoạn và thanh ghi lệch được ngầm định đi kèmvới nhau từng cặp dùng để địa chỉhoá các toán hạng teong các vùng khác nhau vủa bộ nhỡ.Bảng 3.3 chỉ racác khả năng cặp đôi ngầm định của cácthan ghi đoạn và thanh ghi lệch thưồng dung Vì tính ngầm địnhnày nểntong các lệnh ta chỉ cần viểta cấctnh thanh ghi lệch là đủ cơ sở để tính ra được đia chỉ của toànhạng

Tuy nhiên, ngoài các tổ hợp ngầm định đã kể, 8088 còn cho phép ta làm việc với các tổ hợpngầm định đã kể, 8088 còn cho phép ta làm việc với các tổ hợp khác của các thanh ghi đoạn và thanh ghilệch Muốn loại vỏ các tổ hợp ngầm định nói trên, trung khi viết lệnh ta phải ghi rõ thanh ghi đoạn sẽ dùng

để tính địa chỉ và kèm thêm dấu 2 chấm trước thanh ghi lệch Cụm ký hiệu này goik là cụm tiếp đầu để lại

bỏ thanh ghi đoạn ngầm đinhj (segmnent override prefix) và để dạt được ivệc loại bỏ này chỉ cần ghi rõthanh ghi đoạn

Bảng 3.2 : Tóm tắt các chế độ địa chỉ

[BP] +DISP

DSSS

Trang 27

Dịch chuyển

Địa chỉ vật lý

CSx16

DSx16 SSx16

ESx16

BX

BP DI

hoặc

hoặc

hoặc hoặc Chế độ cơ sở hoặc chỉ số Chế độ chỉ số cơ sở

Hình 3.7 : một hình thức khác tổng kết các chế độ địa chỉ của 8088

[SI]+ DISP

DSDS

[BX]+[SI]+DISP[BP]+[DI]+DISP[BP]+[SI]+DISP

DSDSSSSS(Ghi chú : Reg : thanh ghi ; Data : dữ liệu tức thì ; disp : dịch chuyển )

Bảng 3.3 : Các cặp thanh ghi đoạn và thanh ghi lệch ngầm định

Ví dụ:

Trong lệnh chuyển dữ liệu thỉ địa chỉ vật lý của toán hạng để chuyển vào thanh ghi AL, tươngứng với DS:BX, vì DS sà đoạn ngầm định cuarvùng nhớ chứatoán hạng do BX chỉ ra.Nếu ta muốn thayđổi,không lấy toán hạng trong đoạn dữ liệu DS ,mà lại lấy toán hạng traong đoạn dữ liệu phụ ES dể đưavào AL,thì ta phải viết lại lệnh trên thành

MOV AL.ES:[BX]

Trong đó ta đã dùng cụm tiếp đàu ES : để loại bỏ thanh ghi đoạn ngầm định DS và để chỉ rõthanh ghi đoạn mới dùng trong lệnh nayf bây giờ là ES

Trang 28

4 Mô tả tập lệnhcủa bộ vi xử lý 8088.

Có nhiều cánh trình bày tập lệnh của bộ vi xử lý:Trình bày cac lệnh cho các nhóm hoặc theo thứ

tự ABC Ta sẻ chọn cách làm thứ 2 để sau này dễ tìm kiếm cac lệnh cần tra cứu cụ thể.Trong khi nói tớicác lệnh ở dạng gợi nhớ tacũng mô tả ngắn gon luôn từng lệnh và tác động (nếu có) của lệnh tới cac cờ.Đểcho các diển giải dể đọc ta quy định kí hiệu AL được hiểu là thanh ghi AL hoặc là nội dung của AL.Trongkhi ghi lệnh ,dấu[ X] nên được hiểu như là một ki hiệu của Intel để ghi lệnh.Không nên hiểu là ‘nội dung’của X ,còn {XX:YY} dùng để chỉ nội dung ô nhớ tại địa chỉ XX:YY hoặc {SP} dùng để chỉ ô nhớ củangăn xếp có địa chỉ do nội dung của thanh ghi con trỏ ngăn xếp SP chỉ ra

AAA _ASCII Adjust after Addition (Chỉnh sau khi cộng hai số ở dạng ASCII)

Dữ liệu truyền từ các thiết bị đầu cuối đến máy tính thường ở dưới dạng mã ASCII Khi dãtruyền đi các số dưới dạng ASCII roòi,đôi khi ta muốn cộng luôn các số đó.Bộ vi xử lý 8088 cho phep talàm điều này với điều kiện phải chỉnh lại kết quả có trong AL,bằng lệnh AAA để thu được kết quả là sốBCD không gói

Cập nhật : AF , CF

Không xác định: OF , PF ,SF ,ZF

Ví dụ:Ta có 2 số dưới dạng mã ASCII là 30H và 39H ứng với ‘ 0 ‘ và ‘ 9 ‘

Nếu cộng hai số ở dạng mã lại ta được số 69H.Số náy không có ý nghĩa gì vì nó không phải la sốBCD đúng Ta sẻ thu được số BCD không gói nếu dùng thêm lệnh AAA

;AL = 0011 0000B = 30H = ‘0’,

;BL = 0011 1001B = 39H = ‘ 9’,

ADD AL , BL ; thu được AL = 0110 1001B = 69H , Kết quả sai

AAA ; thu được AL = 0000 1001B = 9, kết quả đúng

OR AL ,30H ; thu được AL = 39H = ‘9’ đê truyền kết quả trở lại thiết bị đầu cuối

AAD_ ASCII Adjust before Division (Chỉnh trước khi chia 2 số ơ dạng ASCII )

Lệnh này đổi 2 số BCD khônbg gói ở AH và AL sang số hệ 2 tương đương để tại Al.Viêc nàyphải thưc hiện trước khi làm phép chia một số BCD không gói( gồm 2 chữ số ) để trong AX cho 1 số BCDkhông gói khác.Kết quả và số dư cũng là cac số BCD không gói

AAD ;sau khi chỉnh AX = 0041 = 41H

DIV BL;sau khi chia đươc thương AL = 08

;số dư ở AH = 1 là số BCD không gói ,

AAM_ASCII Adjust After Mult iplication (Chỉnh sau khi nhân 2 số ở dạng ASCII )

Lệnh này dung để đổi 1 số hệ 2,là tích của 2 số BCD không gói ,có trong AL sang số BCDkhông gói để tại AX

Trang 29

MUL BL; thu được AX = 002DH = 45,

AAM; thu được AX = 0405H, mã BCD

;không nen của 45

OR AX ,3030H; thu được AX = 3435H, mã ASCII

;cho 45 để truyền kết quả

; trở lại thiết bị đầu cuối

AAS-ASCH Adjust after Subtraction ( chỉnh sau khi trừ 2 số ở dạng ASCH )

Lệnh này dùng để đổi một số hệ hai là hiệu của 2 số BCD không gói, có ở AL sang số BCDkhông gói

SUB AL, BL ; thu được AL = 04H = 4,

AAC ; thu được AL = 04H, mã BCD không

; gói của 4

OR AL, 30H ; thu được AL = 34H, mã ASCII cho 4

; để truyển kết qủa trở lại thiết bị

; đầu cuối

b) ; AL = 0011 0101B = 35H = ‘5’,

; BL = 0011 1001B = 39H = ‘ 9’, ; ASCII 5- ASCII 9:

SUB AL, BL ; thu được AL = FCH = -4, CF = 1,

AAS ; thu được AL = 04H, mã BCD không

; gói của 4, CF = 1 ( có thể dùng cho các

Cập nhật: AF, CF, PF, SF, ZP/

AND-And Corresponding Bits of Two Operands ( Và 2 toán hạng )

Viết lệnh: AND Đích, Gốc

Trang 30

Mô tả: Đích - Đích, Gốc.

Trong đó toán hạng đích và gốc có thể tìm được thoe các chế độ địa chỉ khác nhau Nhưng phảichứa dữ liệu cùng độ dài và không được phép đồng thời là 2 ô nhớ và cũng không được là thanh ghi đoạn.Phép AND thường dùng để che đi/ giữ lại một vài bit nào đó của một toán hạng bằng cách nhân logic toánhạng đó với toán hạng tức thì có các bit 0/1 ở các chỗ cần che đi/giữ nguyên tương ứng ( toán hạng tức thìlúc này còn được gọi là mặt nạ )

Xoá: CF, OF.

Cập nhật: PF, SF, ZP, PF chỉ có nghĩa khi toán hạng là 8 bit.

Không xác định: À.

Ví dụ:

AND AL, BL ; AL , AL BL theo từng bit

AND OFH ; che 4 bit cao của BL

CALL-Call o Proceduce ( Gọi chương trình con )

Mô tả:

Lệnh này dùng để chuyển hoạt động của bộ vi xử lý từ chương trình chính ( CTC ) sang chương

trình con ( ctc ) Nếu ctc ở trong cùng một đoạn mã với CTC thì ta có gọi gần ( near call ) Nếu CTC và ctc nằm ở hai đoạn mã khác nhau thì tra có gọi xa ( far call ) Gọi gần và gọi xa khác nhau về cách tạo ra

địa chỉ trở về ( return address) Địa chỉ trở về là địa chỉ của lệnh tiép ngay sau lệnh Call Khi gọi gần thì

chỉ cần các IP của địa chỉ trở về ( vì CS không đổi ) Khi gọi xa thì phải cất cả CS và IP của địa chỉ trở về.Địa chỉ trở về được tự động cất tại ngăn xếp khi bắt đầu thực hiện lệnh gọi và được tự động lấy ra khi gặplệnh RET ( trở về CTC từ ctc ) tại cuối ctc

Viết lệnh: Sau đây là ví dụ các dạng khác nhau của các dạng khác nhau của các lệnh gọi ctc và

cách tính địa chỉ của ctc:

CALL Multiple: Gọi ctc có tên là Multiple trong cùng đoạn mã với CTC, ctc này phải nằm

trong giới hạn đích chuyển-32Kbyte ( dịch về phái địa chỉ thấp ) hoặc ( 32K-1) byte ( dịch về phía địa chỉcao ) so với lệnh tiếp theo ngay sau lệnh Call Sau khi cất IP cũ ( địa chỉ trở về ) vào ngăng xếp IP mớiđược tính: IP –IP + Dịch chuyển

CALL Divi: Gọi ctc có tên Divi ở đạon mã khác Trong chương trình hợp ngữ Divi phải được

khai báo là một ctc ở xa:

Divi Proc Far

Đại chỉ của ctc là đại chỉ CS:IP cảu Divi

CALL WORD PTR [ BX ]: Gọi ctc nằm trong cùng đạon mã, ctc có địa chỉ dịch chuyển ( tính

từ lệnh tiếp ngay sau lệnh gọi tới lệnh đầu tiên của ctc ) chứa trong 2 ô nhớ do BX và BX+1 chỉ ra trongđoạn DS Địa chỉ lệch này sẽ đưa vào IP ( SI, DI có thể dùng thay chỗ của BX )

CALL DWORD PTR [ BX ]: Gọi ctc không nằm trongcùng một đoạn mã, ctc có địa chỉ CS:IP,

giá trị gần cho IP và CS chứa trong 4 ô nhơ do BX và BX +1 (cho IP) và BX+2 và BX+3 ( cho CS chỉ ratrong đoạn DS ( SI, DI có thể dùng thay chỗ của BX )

CBW-Convert a Byte to a Word ( Chuyển byte thành từ )

Lệnh này mở rộng bit dấu của AL sang 8 bit của AH, AH lúc này được gọi là phần mở rộng dấucuả AL Ta dùng CBW để mở rộng dấu cho số có dấu nằm trong AL trước khi muốn chia nó cho một số

có dấu 8 bit khác bằng lệnh IDIV ( lệnh chia các số có dấu ), hoặc trước khi muốn nhân nó với một số códấu 16 bit khác bằng lệnh IMUL, ( lệnh nhân các số có dấu )

Lệnh này không tác động đến các cờ

Ví dụ: Nếu AL = 80 thì sau lệnh chuyển ta có AX = PF80H

CLC-Clear the Carry Flag ( xoá cờ nhớ )

Mô tả: CF – 0.

Trang 31

Mô tả: Chuổiđích – Chuổigốc.

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ùng loại Lệnh chỉ tạocác cờ, không lưu kết quả so sánh, sau khi so sánh các toán hạng không bị thay đổi Trong lệnh này ngầmđịnh các thanh ghi với các chức năng:

+DS:SI là địa chỉ của phần tử so sánh trong chuỗi gốc

+ES:DI là địa chỉ của phần tử so sánh trongchuỗi đích

Ta sẽ giải thích cụ thể các trường hợp dùng các dạng lệnh trên Giải thích này cũng có thể ápdụng cho cáclện có dạng thức lện hoặc cấu trúc ngữ pháp ương tự

MOVS, STOS, LODS, SCAS

Có 2 cách để chỉ ra một chuỗi là chuỗi byte hoặc chuỗi từ Cách đầu tiên là ta khai rõbằng ten ngay từ đầu chuỗi nguồn và chuỗi đích là loại gì Sau đó ta dùng lệnh COMPS để thao tácvới các chuỗi đó

StrByte1 DB “daylachuoibyte1”

StrByte2 DB “ daylachuoibyte2”

Trang 32

StrWord1 DW “ daylachuoitư1”

StrWord1 DW “daylachuoitu2”

LEA SI, StrByte1 LEA DI, StrByte2 COMPS StrWord2, StrWord1 ;có thể thay ; bằng MOMPSB

Cách ths hai là ta thêm vào lệnh CMPS đuôi thích hoẹp để báo cho chương trình dịch biết kiểuthao tác trên chuỗi đã được định nghĩa: đuôi “B” để thao tác với byte hoặc đuôi “W”để thao tác với từtrong chuỗi

Cập nhật: AF, CF, OF, PF, SF, ZP.

Ví dụ:

MOV DI, OFFSET chuỗiđích ; lấy địa chỉ lệch

; của chuỗiđích tại

; ES vào SI,

MOV SI, OFFSET chuỗigốc ; lấy địa chỉ lệch

; của chuỗigốc tại

CWD-Convert a Word to a DoubleWord ( chuyển từ thành từ kép )

Lệnh này mở rộng bit dấu của AX sang 16 bit của DX DX lúc này được gọi là phần mở rộngdấu của AX Ta dùng CWD để mở rộng dấu cho số có dấu nằm trong AX trước khi muốn chia nó cho một

số có dấu khác bằng lệnh IDIV

Lệnh này không tác động đến các cờ.

Ví dụ: nếu DX = 0000H AX = 8087H thì sau lệnh đổi ta có:

DX = FFFFH, AX = 8086H

DAA-Decimal Adjust AL after BCD Addition ( chỉnh AL sau khi cộng số BCD )

Lệnh này dùng để chỉnh lại kết quả ( hiện nằm ở AL ) sau phép cộng 2 số BCD Lý do phảichỉnh lại kết quả này là do ta đã dùng bộ ALU của XPU, cốn chỉ biết làm toán với các số hệ hai Để làmotán với các số VCD, lệnh DÂ chỉ tác độ đúng đến kết quả ở AL ngay sau khi vừa thực hiện phép cộng.Hoạt động của lệnh DAA:

+Nếu 4 bit thấp cảu AL lớn hơn 9 hoặc AF = 1 thì AL – AL + 6

+Nếu 4 bit cao của AL lớn hơn 9 hoặc CF = 1 thì AL – AL + 60H

Trang 33

; AL + 60H +6 = 1001 0000BCD = 36,CF = 1.

DAS- Decimal Adjust AL after BCD Subtraction ( chỉnh AL sau khi trừ 2 số BCD )

Lệnh này dùng để chỉnh lại kết quả ( hiện nằm ở AL ) sau phép trừ 2 số BCD Lý do phải chỉnhlại kết qủ này là do ta đã dùng bộ ALU của CPU, vốn chỉ biết làm toán với các số hệ hưi, để làm toán vcớicác số BCD Lệnh DAS chỉ tác động đúng đến kết quả ở AL ngay sau khi vừa thực hiện phép trừ Hoạtđộng của lệnh DAS:

+Nếu 4 bit thấp của AL lớn hơn 9 hoặc AF = 1 thì AL – AL.6

+Nếu 4 bit cao của AL lớn hơn 9 hoặc CF = 1 thì AL – AL.60H

Trong thí dụ trên CF = 1 có nghĩa là phải mượn 100 thêm vào số bị trừ để được kết quả là 99.Nói cách khác đi kết quả đúng sẽ là -1

DEC – Decrement Destination Register or Memory ( Giảm toán hạng đi 1 ).

Viết lệnh : DEC Destination

Mô tả: Đích – Đích -1.

Trong đó toán hạng đích có thể tìm đựoc thưo các chế độ địa chỉ khác nhau Lưu ý là nếu Đích =00H ( hoặc 0000H ) thì Đích -1 = FFH ( hoặc FFFFH ) mà không làm ảnh hưởng đến cờ CF Lệnh nàycho kết quả tương đương như lệnh SUB Đích nhưng chạy nhanh hơn

Cập nhật: AF, OF, PF, SF, ZP.

Không tác động: CF/

DIV – Unsingned Divide ( chia 2 số không có dấu )

Viết lệnh: DIV Gốc

Trong đó toán hạng Gốc là số chia và có thể tìm được theo các chế độ địa chỉ khác nhau

Mô tả: tuỳ theo độ dài của toán hạng gốc ta có 2 trường hợp bố trí phép chia Các chỗ để ngầm

định cho số bị chia và kết quả:

 Nếu Gốc là số 8 bit: AX/Gốc Số bị chia phải là số không dấu 16 bit để trong AX

 Nếu Gốc là số 16 bit: DXAX/Gốc Số bị chia phải là số không dấu 32 bit để trong cặp thanh ghi DXAX

Nếu thương không phải là số nguyên nó được làm tròn theo số nguyên sát đuôi

Nếu Gốc = 0 hoặc thương thu được lớn hơn FFH hoặc FFFFH ( tuỳ theo độ dài của toán hạngGốc ) thì 8088 thực hiện lệnh ngắt INT 0

Không xác định: AF, CF, OF, PF, SF, ZP.

ESC – Escape

Lệnh này dùng để truyêng các lệnh cho bộ đồng xử lý toán học 8087 bị tạm dừng và bộ vi xử lý

8088 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ý

IDIV – Integer Division ( Signed division ) ( chia số có dấu )

Viết lệnh: IDIV Gốc

Trong đó toán hạng Gốc là số chia và có thể tìm được theo các chế độ địa chỉ khác nhau.

Đây là lệnh dùng để chia các số nguyên có dấu Chỗ để ngầm định của số chia Số bị chia.Thương và số dư giống như ở lệnh DIV chỉ có 2 điều khác là:

+Sau phép chia AL chứa thương ( số có dấu ) AH chứa số dư ( số có dấu )

Trang 34

+Dấu của số có 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…+32767 ( tuỳ theo độ dàicủa Gốc ) thì 8088 thực hiện lệnh ngắt INT 0

Không xác định: AF, CF, OF, PF, SF, ZP.

IMUL – Integer Multiplication ( Multiply Signed Numbers ) ( Nhân số có đầu ).

Viết lệnh: IMUL Gốc.

Trông dố toán hạng Gốc là số nhân và có thể tìm được theo các chế độ địa chỉ khác nhau.

Mô tả: tuỳ theo độ dài của toán hạng Gốc ta có 2 trương hợp bố trí phép nhân Chỗ để ngầm

định cho só bị nhân và kết quả:

Số bị nhân phải là số cso dấu 8 bit để trong AL

Số bị nhân phải là số có dấu 16 bit để trong AX

Nếu tích thu được nhỏ, không đủ lấp đầy hết được các chỗ dành cho nó thì các bit không dùngđến đựơc thay bằng bit dấu

Nếu byte cao ( hoặc 16 bit cao ) của 16 ( hoặc 32 bit ) kết quả chỉ chưa một giá trị của dấu thì CF

Nếu ta cần nhân một số có dấu 8 bit với một số có dấu 16 bit, ta để số 16 bit ở gốc và số 8 bit ở

AL Số 8 bit này ở AL cần phải được mở rộng dấu sang AH băng lệnh CBW Sau cùng chỉviệc dùng lệnhIMUL gốc và kết quả có trong cặp DXAX

Cập nhật:CF, OF.

Không xác đinh: AF, PF, FS, ZP.

In- Input Data From a Port ( đọc dữ liệu từ cổng vào thanh ACC.

Viết lệnh: In ACC, Port.

Mô tả: ACC <- {Port}.

các giá trị trong khoảng 00H…FFH Như vậy ta có thể có các khả năng sau:

+Nếu ACC là AL thì dữ liệu 8 bit được đưa vào từ cổng Port

+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ó một cách khác để biểu diển địa chỉ cổng là thông qua thanh ghi DX Khi dùng thanh ghi DX

để chứa địa chỉ cổng ta sẽ có khả năng địa chỉ cổng hoá mềm dẽo hơn Lúc này địa chỉ cổng nằm trong dải0000H FFFFH và ta phải viết lệnh theo dạng:

Cập nhật: AF, OF, PF, SF, ZP.

Trang 35

hệ giữa CTC với ctc.

INTO-Interrupt On Overflow ( ngắt nếu có tràn ).

Nếu có tràn ( OF = 1 ) thì lệnh này ngắt công việc đang làm của vi xử lý và thực hiện lệnh ngắtINT 4

IRET-Interrupt Return ( trở về CTC từ chương trình ( Con ) phục vụ ngắt ).

Như đã trình bày ở lệnh CALL, tại cuối ctc phải có lệnh trở về ( RET ) để bộ vi xử lý tự động lấylại địa chỉ trở về CTC Trong trường hợp CTCPVN, để trở về CTC với đầy đủ thông tin cần thiết về địachỉ và trạng thái, tất nhiên phải cần có lệnh với các tác động tương ứng: lệnh IRET Lệnh này, ngoài việc

tự động lấy lại địa chỉ trở về CTC, còn lấy lại thanh ghi cờ đã được cất giữ trước khi chạy CTCPVN

JA/JNBE-Jump If Above/Jump If Not Below Or Equal ( nhảy nếu cao hơn/nhảy nếu không

thấp hơn hoặc bằng )

Viết lệnh: JA NHAN

JNBE NHAN

Mô tả IP ←IP → Dịchchuyển

Hai lệnh trên điều khiển cùng một thao tác Nhảy có điều kiện với nhản nếu CF+ZF = 0 Quan hệ “trên

“ (above),” cao hơn “ và quan hệ “dưới “ , “ thấp hơn” (below) là các quan hệ dành cho việc so sánh (dolệnh CMP thực hiện ) độ lớn của hai số không dấu Nhãn NHAN phải nằm cách xa (dịch chuyển mộtkhoảng )-128 +127byte so với lệnh tiếp theo sau lệnh A:/INBE Chương trình sẽ căn cứ vào giá trịchuyển để xác định các giá trị chuyển

Lệnh này không tác động đến các cờ

Vi dụ :Nếu 1 khung thanh AL cao hơn 10H thì nhảy lên nhãn TH01

CMP AL , 10H ; so sánh Al với 10H

UA THOI ; nhảy lên TH01 nếu Al cao hơn

4AE/JNB/4NC – 4jump if Above or Equal /jump if not below /jump if no carry ( nhảy nếu cao hơn

hoặc bằng / nhảy nếu thấp hơn / nhảy nếu không có nhỏ )

Trang 36

IP ←IP → Dịchchuyển

Ba lệnh trên đều thực hiện cùng một thao tác : nhảy có điều kiện tới NHAN nếu CF = 0 Quan hệ

“trên “ (above),” cao hơn “ và quan hệ “dưới “ , “ thấp hơn” (below) là các quan hệ dành cho việc so sánh(do lệnh CMP thực hiện ) độ lớn của hai số không dấu Nhãn NHAN phải nằm cách xa (dịch chuyển mộtkhoảng )-128 +127byte so với lệnh tiếp theo sau lệnh A:/INBE Chương trình sẽ căn cứ vào giá trịchuyển để xác định các giá trị chuyển

Lệnh này không tác động đến các cờ

Ví dụ : Nếu nội dung thanh AL cao hơn hoặc bằng 10H thì nhảy đến nhãn THOI

JB/JC/JNAE - jump if Below/ Jump if Carry /Jump ì Not Above or Equal ( Nhảy thấp hơn / nhảy

nếu có / nhảy nếu không cao hơn hoặc bằng )

Viết lệnh

JB NHAN

JC NHAN JNAE NHAN

Ba lệnh trên đều thực hiện cùng một thao tác : nhảy có điều kiện tới NHAN nếu CF = 0 Quan hệ

“trên “ (above),” cao hơn “ và quan hệ “dưới “ , “ thấp hơn” (below) là các quan hệ dành cho việc so sánh(do lệnh CMP thực hiện ) độ lớn của hai số không dấu Nhãn NHAN phải nằm cách xa (dịch chuyển mộtkhoảng )-128 +127byte so với lệnh tiếp theo sau lệnh A:/INBE Chương trình sẽ căn cứ vào giá trịchuyển để xác định các giá trị chuyển

Lệnh này không tác động đến các cờ

Ví dụ : Nếu nội dung thanh AL thấp hơn hoặc bằng 10H thì nhảy đến nhãn THOI

CMP AL ,10H ; So sánh AL với 10H

JB THOI ; nhảy đến THOI nếu Al thấp hơn hoặc bằng 10H

JBE/JNA- jump if Below/ Jump if Carry /Jump ì Not Above or Equal ( Nhảy thấp hơn / nhảy nếu

có / nhảy nếu không cao hơn hoặc bằng )

IBA NHAN

Mô tả :

IP ←IP → Dịchchuyển

Hai lệnh trên đều thực hiện cùng một thao tác : nhảy có điều kiện tới NHAN nếu CF+ZF=1 Quan hệ

“trên “ (above),” cao hơn “ và quan hệ “dưới “ , “ thấp hơn” (below) là các quan hệ dành cho việc so sánh(do lệnh CMP thực hiện ) độ lớn của hai số không dấu Nhãn NHAN phải nằm cách xa (dịch chuyển mộtkhoảng )-128 +127byte so với lệnh tiếp theo sau lệnh A:/INBE Chương trình sẽ căn cứ vào giá trịchuyển để xác định các giá trị chuyển

Lệnh này không tác động đến các cờ

Ví dụ : Nếu nội dung thanh AL thấp hơn hoặc bằng 10H thì nhảy đến nhãn THOI

JBE/JNA- jump if Below/ Jump if Carry /Jump ì Not Above or Equal ( Nhảy thấp hơn / nhảy nếu

có / nhảy nếu không cao hơn hoặc bằng )

Mô tả :

IP ←IP + Dịchchuyển

Trang 37

Đây là lệnh nhảy điều kiện tới NHAN nếu CX =0 và không có liện hệ gì với cờ ZF Nhãn NHAN phải

nằm cách xa (di chuyển một khoảng ) -128 +127byte so với lệnh tiếp theo sau lệnh A:/INBE Chươngtrình sẽ căn cứ vào giá trị chuyển để xác định các giá trị chuyển

Lệnh này không tác động đến các cờ

Ví dụ : Nếu thanh CX rỗng thì nhảy đến lệnh THOI

: JCXZ THOI

:

JE/JZ - Jump ì Equal /jump if Zero ( Nhảy nếu bằng nhau /Nhảy nếu kết quả bằng không )

JZ NHAN

Hai lệnh trên đều thực hiện cùng một thao tác : nhảy (có điều kiện ) tới NHAN nếu ZF=1.Nhãn NHAN

phải nằm cách xa (dịch chuyển một khoảng )-128 +127byte so với lệnh tiếp theo sau lệnh JE/JZ.Chương trình sẽ căn cứ vào giá trị chuyển để xác định các giá trị chuyển

Lệnh này không tác động đến các cờ

Ví dụ : Nếu nội dung thanh AL bằng 10H thì nhảy đến nhãn THOI

SUB AL ,10H ; AL trừ giá trị cần quan tâm

JE THOI ; Nhảy đến THOI nếu AL bằng 10H

JNLENHAN

Quan hệ “lớn hơn “ (greater than ),” bé hơn “(less than) và các quan hệ dành cho việc so sánh (do lệnhCMP thực hiện ) độ lớn của hai số không dấu Lớn hơn có nghĩa là dương hơn Nhãn NHAN phải nằmcách xa (dịch chuyển một khoảng )-128 +127byte so với lệnh tiếp theo sau lệnh JG/JNLE Chươngtrình sẽ căn cứ vào giá trị chuyển để xác định các giá trị chuyển

Viết lệnh

JGE NHAN JNL NHAN

hệ “lớn hơn “ (greater than ),” bé hơn “(less than) và các quan hệ dành cho việc so sánh (do lệnh CMPthực hiện ) độ lớn của hai số không dấu Lớn hơn có nghĩa là dương hơn Nhãn NHAN phải nằm cách xa(dịch chuyển một khoảng )-128 +127byte so với lệnh tiếp theo sau lệnh JG/JNLE Chương trình sẽ căn

cứ vào giá trị chuyển để xác định các giá trị chuyển

Trang 38

Ví dụ : Nếu nội dung thanh AL lớn hơn hoặc bằng 10H thì nhảy đến nhãn THOI :

JNLE NHAN

+ZF=0 Quan hệ “lớn hơn” (greater than) và “bé hơn “ (less than) là các quan hệ dành cho việc sosánh (do lệnh CMP thực hiện) của 2 số có dấu Lớn hơn có nghĩa là dương hơn Nhãn NHAN phảinằm cách xa (dịch đi một khoảng) - 128 + 127 byte so với lệnh tiếp theo sau lệnh JG/JNLE chương trình dịch sẽ căn cứ vào vị trí NHAN để xác định giá trị dịch chuyển

Lệnh này không tác động đến các cờ :

Ví dụ : Nếu nội dung thanh AL lớn hơn 10H thì nhãy đến nhãn THOI :

CMP AL, 10H ; so sánh AL với 10H

JG THOI ; nhảy đến THOI nếu AL lớn hơn 10H

JGE/JNL - Jump if Greater than or Equal/jump if not less than

(Nhảy nếu lớn hơn hoặc bằng /Nhảy nếu không bé hơn)

JNLE NHAN

Quan hệ “lớn hơn” (greater than) và “bé hơn “ (less than) là các quan hệ dành cho việc so sánh(do lệnh CMP thực hiện) của 2 số có dấu Lớn hơn có nghĩa là dương hơn Nhãn NHAN phải nằmcách xa (dịch đi một khoảng) - 128 + 127 byte so với lệnh tiếp theo sau lệnh JGE/JNL Chươngtrình dịch sẽ căn cứ vào vị trí NHAN để xác định giá trị dịch chuyển

Lệnh này không tác động đến các cờ :

Ví dụ : Nếu nội dung thanh AL lớn hơn hoặc bằng 10 H thì nhảy đến nhãn THOI :

CMP AL, 10H ; so sánh AL với 10HJGE THOI ; nhảy đến THOI nếu AL lớn hơn hoặc

Trang 39

; bằng 10H.

JL/JNGE - Jump if Less than/Jump if Not Greater than or Equal

(Nhảy nếu bé/Nhảy nếu không lớn hơn hoặc bằng)

JNGE NHAN

Quan hệ “lớn hơn” (greater than) và “bé hơn “ (less than) là các quan hệ dành cho việc so sánh(do lệnh CMP thực hiện) của 2 số có dấu Lớn hơn có nghĩa là dương hơn Nhãn NHAN phải nằmcách xa (dịch đi một khoảng) - 128 + 127 byte so với lệnh tiếp theo sau lệnh JL/JNGE Chươngtrình dịch sẽ căn cứ vào vị trí NHAN để xác định giá trị dịch chuyển

Lệnh này không tác động đến các cờ :

Ví dụ : Nếu nội dung thanh AL nhỏ hơn 10 H thì nhảy đến nhãn THOI :

CMP AL, 10H ; so sánh AL với 10H

JL THOI ; nhảy đến THOI nếu AL nhỏ hơn 10H

JLE/JNG - Jump if Less than or Equal/Jump if Not Greater than

(Nhảy nếu bé hơn hoặc bằng/Nhảy nếu không lớn hơn)

JNG NHAN

+2Z=1 Quan hệ “lớn hơn” (greater than) và “bé hơn “ (less than) là các quan hệ dành cho việc sosánh (do lệnh CMP thực hiện) của 2 số có dấu Lớn hơn có nghĩa là dương hơn Nhãn NHAN phảinằm cách xa (dịch đi một khoảng) - 128 + 127 byte so với lệnh tiếp theo sau lệnh JLE/JNG.Chương trình dịch sẽ căn cứ vào vị trí NHAN để xác định giá trị dịch chuyển

Trang 40

Viết lệnh : sau đây là các dạng lệnh nhảy không điều kiện :

JMP NHAN

Lệnh mới bắt đầu tại địa chỉ ứng với nhãn NHAN Chương trình dịch sẽ căn cứ vào khoảngdịch giữa nhãn và lệnh nhảy để xác định xem đó là :

+ nhảy ngắn (short jump) ứng với trường hợp a) hình 3.8

Trong trường hợp này nhãn NHAN phải nằm cách xa (dịch đi một khoảng nhiều nhất là-128 + 127 byte so với lệnh tiếp theosau lệnh JMP Chương trình dịch sẽ căn cứ vào vị tríNHAN để xác định giá trị dịch chuyển mở rộng dấu cho nó Sau đó

Đây là lệnh nhảy trợc tiếp vì dịch chuyển được để trực tiếp trong mã lệnh

Để định hướng cho chương trình dịch làm việc nên viết lệnh dưới dạng :

JMP SHORT NHAN

+ nhảy gần (near jump) ứng với trường hợp c) hình 3.8Trong trường hợp này nhãn NHAN phải nằm cách xa (dịch đi một khoảng nhiều nhất là-32768 + 32767 byte so với lệnh tiếp theosau lệnh JMP Chương trình dịch sẽ căn cứ vào vị tríNHAN để xác định giá trị dịch chuyển mở rộng dấu cho nó Sau đó

Đây là lệnh nhảy trợc tiếp vì dịch chuyển được để trực tiếp trong mã lệnh

Để định hướng cho chương trình dịch làm việc nên viết lệnh dưới dạng :

JMP NEAR NHAN

+ nhảy xa (far jump) ứng với trường hợp d) hình 3.8

Ngày đăng: 26/05/2014, 03:24

HÌNH ẢNH LIÊN QUAN

Bảng 3.3 : Các cặp thanh ghi đoạn và thanh ghi lệch ngầm  định - Bài giảng Kỹ thuật Vi xử lý - Văn Thế Minh
Bảng 3.3 Các cặp thanh ghi đoạn và thanh ghi lệch ngầm định (Trang 27)
Hình 3.7 : một hình thức khác tổng kết các chế độ địa chỉ của 8088 - Bài giảng Kỹ thuật Vi xử lý - Văn Thế Minh
Hình 3.7 một hình thức khác tổng kết các chế độ địa chỉ của 8088 (Trang 27)
Hình 4.2. Các bước công việc để tạo ra và cho chạy một chương trình hợp ngữ - Bài giảng Kỹ thuật Vi xử lý - Văn Thế Minh
Hình 4.2. Các bước công việc để tạo ra và cho chạy một chương trình hợp ngữ (Trang 80)
Hình 4.4. Cấu trúc lệnh CASE - Bài giảng Kỹ thuật Vi xử lý - Văn Thế Minh
Hình 4.4. Cấu trúc lệnh CASE (Trang 86)
Hình 5.1. các tín hiệu của 8088 ở chế độ MIN và (MAX). - Bài giảng Kỹ thuật Vi xử lý - Văn Thế Minh
Hình 5.1. các tín hiệu của 8088 ở chế độ MIN và (MAX) (Trang 113)
Hình 5.8. Các tín hiệu của CPU 8088 trong chu kỳ ghi đơn giản hoá. - Bài giảng Kỹ thuật Vi xử lý - Văn Thế Minh
Hình 5.8. Các tín hiệu của CPU 8088 trong chu kỳ ghi đơn giản hoá (Trang 123)
Hình 5.19. sơ đồ bộ giải mã dùng 74LS138. - Bài giảng Kỹ thuật Vi xử lý - Văn Thế Minh
Hình 5.19. sơ đồ bộ giải mã dùng 74LS138 (Trang 130)
Hình 5.23. Sơ đồ 16KBSRAM có trang bị bộ kiểm tra parity. - Bài giảng Kỹ thuật Vi xử lý - Văn Thế Minh
Hình 5.23. Sơ đồ 16KBSRAM có trang bị bộ kiểm tra parity (Trang 134)
Hình 5.25. Bộ điều khiển DRAM TMS 4500A - Bài giảng Kỹ thuật Vi xử lý - Văn Thế Minh
Hình 5.25. Bộ điều khiển DRAM TMS 4500A (Trang 136)
Hình 5.26. TMS 4500A và 128 KB DRAM tại địa chỉ 00000FH-1FFFFH - Bài giảng Kỹ thuật Vi xử lý - Văn Thế Minh
Hình 5.26. TMS 4500A và 128 KB DRAM tại địa chỉ 00000FH-1FFFFH (Trang 138)
Hình 5.32. Một mạch phối ghép ra đơn giản dùng 74LS373 - Bài giảng Kỹ thuật Vi xử lý - Văn Thế Minh
Hình 5.32. Một mạch phối ghép ra đơn giản dùng 74LS373 (Trang 141)
Hình 5.33. Một mạch phối ghép ra đơn giản dùng 74LS244 - Bài giảng Kỹ thuật Vi xử lý - Văn Thế Minh
Hình 5.33. Một mạch phối ghép ra đơn giản dùng 74LS244 (Trang 142)
Hình 5.37. Mạch 8255A ở chế độ 1 và các tín hiệu trạng thái. - Bài giảng Kỹ thuật Vi xử lý - Văn Thế Minh
Hình 5.37. Mạch 8255A ở chế độ 1 và các tín hiệu trạng thái (Trang 144)
Hình 7.9. Dạng thức của các từ điều khiển hoạt động OCW - Bài giảng Kỹ thuật Vi xử lý - Văn Thế Minh
Hình 7.9. Dạng thức của các từ điều khiển hoạt động OCW (Trang 157)
Bảng 7.4. Các IRQ của các máy PC/AT - Bài giảng Kỹ thuật Vi xử lý - Văn Thế Minh
Bảng 7.4. Các IRQ của các máy PC/AT (Trang 163)

TỪ KHÓA LIÊN QUAN

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

w