1. Trang chủ
  2. » Công Nghệ Thông Tin

Nghiên cứu và tìm hiểu về tập lệnh vi xử lý 8086

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

Tiêu đề Nghiên cứu và tìm hiểu về tập lệnh vi xử lý 8086
Người hướng dẫn Nguyễn Thanh Hải
Trường học Trường Đại Học Cảng Công Nghiệp Hà Nội
Chuyên ngành Công nghệ thông tin
Thể loại Bài tập lớn học phần
Năm xuất bản 2023
Thành phố Hà Nội
Định dạng
Số trang 36
Dung lượng 447,66 KB

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

Cấu trúc

  • CHƯƠNG 1. MỞ ĐẦU (5)
    • 1.1 Giới thiệu chung về vi xử lý (5)
      • 1.1.1 Lịch sử phát triển (5)
      • 1.1.2 Ứng dụng của vi xử lý (6)
    • 1.2 Giới thiệu chung về vi xử lý 8086 (6)
      • 1.2.1 Cấu trúc của bộ vi xử lý 8086 (7)
      • 1.2.2 Các chế độ định địa chỉ của bộ vi xử lý 8086 (11)
  • CHƯƠNG 2. TẬP LỆNH VI XỬ LÝ 8086 (14)
    • 2.1 Giới thiệu chung về tập lệnh vi xử lý 8086 (14)
    • 2.2 Tập lệnh vi xử lý 8086 (14)
      • 2.2.1 Nhóm các lệnh vận chuyển (sao chép) dữ liệu (14)
      • 2.2.2 Nhóm các lệnh tính toán số học, dịch, quay toán hạng (18)
      • 2.2.3 Nhóm các lệnh tính toán logic (19)
      • 2.2.4 Nhóm lệnh điều khiển vào ra (24)
      • 2.2.5 Nhóm các lệnh điều khiển (rẽ nhánh) (25)
      • 2.2.6 Nhóm các lệnh điều khiển (31)
      • 2.2.7 Nhóm các lệnh xử lý dữ liệu chuyên dụng (33)
      • 2.2.8 Nhóm các lệnh xử lý dấu chấm động (34)
  • CHƯƠNG 3. KẾT LUẬN (35)

Nội dung

Đại học Công nghiệp Hà NộiBài tập lớn Nghiên cứu và tìm hiểu về tập lệnh vi xử lý 8086GV hướng dẫn: Nguyễn Thanh HảiCHƯƠNG 1. MỞ ĐẦU41.1Giới thiệu chung về vi xử lý41.1.1Lịch sử phát triển41.1.2Ứng dụng của vi xử lý51.2Giới thiệu chung về vi xử lý 808651.2.1Cấu trúc của bộ vi xử lý 808661.2.2Các chế độ định địa chỉ của bộ vi xử lý 808610CHƯƠNG 2. TẬP LỆNH VI XỬ LÝ 8086132.1Giới thiệu chung về tập lệnh vi xử lý 8086132.2Tập lệnh vi xử lý 8086132.2.1Nhóm các lệnh vận chuyển (sao chép) dữ liệu132.2.2Nhóm các lệnh tính toán số học, dịch, quay toán hạng172.2.3Nhóm các lệnh tính toán logic182.2.4Nhóm lệnh điều khiển vào ra232.2.5Nhóm các lệnh điều khiển (rẽ nhánh)242.2.6Nhóm các lệnh điều khiển302.2.7Nhóm các lệnh xử lý dữ liệu chuyên dụng322.2.8Nhóm các lệnh xử lý dấu chấm động33CHƯƠNG 3. KẾT LUẬN34

TẬP LỆNH VI XỬ LÝ 8086

Giới thiệu chung về tập lệnh vi xử lý 8086

Tập lệnh của bộ vi xử lý 80x86 đảm bảo khả năng tương thích giữa các thế hệ, giúp các chương trình viết cho 8086 vẫn hoạt động trên các bộ vi xử lý mới hơn mà không cần sửa đổi Tuy nhiên, tính tương thích này không nhất thiết đảm bảo ngược lại Do tập lệnh của bộ vi xử lý thường có hàng trăm lệnh, việc nắm bắt và làm chủ chúng đòi hỏi sự khó khăn nhất định Để dễ dàng sử dụng và lập trình, ta sẽ tiếp cận tập lệnh theo nhóm các thao tác cơ bản trong quá trình xử lý và điều khiển Mỗi nhóm thao tác sẽ được làm quen với một số lệnh tiêu biểu, giúp nắm bắt các chức năng cơ bản của bộ vi xử lý một cách hiệu quả.

- Nhóm các lệnh vận chuyển (sao chép) dữ liệu.

- Nhóm các lệnh tính toán số học.

- Nhóm các lệnh tính toán logic.

- Nhóm các lệnh dịch, quay toán hạng.

- Nhóm các lệnh so sánh.

- Nhóm các lệnh nhảy (rẽ nhánh).

- Nhóm các lệnh xử lý dữ liệu chuyên dụng.

- Nhóm các lệnh xử lý dấu chấm động.

Tập lệnh vi xử lý 8086

2.2.1 Nhóm các lệnh vận chuyển (sao chép) dữ liệu

Load register and DS with words from memory (nạp một word (từ bộ nhớ) vào thanh ghi cho trong lệnh và một word tiếp theo vào DS).

Dạng lệnh: LDS Đích, Nguồn

- Đích: Là một trong các thanh ghi: AX, BX, CX, DX, SP, BP, SI, DI.

Nguồn là ô nhớ trong đoạn DS được chỉ ra trong lệnh, giúp xác định địa chỉ ban đầu của dữ liệu Lệnh này sẽ ghi vào thanh ghi đã chọn và vào DS từ 4 ô nhớ liên tiếp, đảm bảo truyền dữ liệu chính xác Một trong những ứng dụng quan trọng của lệnh nguồn là giúp cho SI và DS chỉ vào địa chỉ đầu của vùng nhớ chứa chuỗi nguồn, trước khi thực hiện các lệnh thao tác chuỗi, tăng hiệu quả xử lý dữ liệu trong lập trình hợp ngữ.

Các cờ bị thay đổi: Không.

Nạp dữ liệu vào thanh ghi SI gồm nội dung của hai ô nhớ STR_PTR và STR_PTR+1, đồng thời nạp vào register DS chứa nội dung của hai ô nhớ STR_PTR+3 và STR_PTR+4 Các ô nhớ này nằm trong đoạn dữ liệu DS và chứa địa chỉ của chuỗi nguồn cần xử lý Sau quá trình này, DS:SI sẽ trỏ chính xác vào đầu chuỗi nguồn, sẵn sàng cho các thao tác tiếp theo.

Load Effective Address (nạp địa chỉ hiệu dụng vào thanh ghi).

Dạng lệnh: LEA Đích, Nguồn

- Đích: Là một trong các thanh ghi: AX, BX, CX, DX, SP, BP, SI, DI.

Nguồn trong lập trình đề cập đến tên biến được xác định rõ trong đoạn danh sách hoặc ô nhớ cụ thể Đích là địa chỉ lệch của nguồn hoặc địa chỉ hiệu quả của nguồn, giúp tính toán vị trí của biến hoặc ô nhớ được chọn Lệnh này dùng để xác định địa chỉ lệch hoặc địa chỉ ô nhớ của nguồn rồi nạp giá trị vào thanh ghi đã chọn, đảm bảo quá trình truy xuất dữ liệu chính xác và hiệu quả.

Các cờ bị thay đổi: Không.

LEA DX, Label (nạp địa chỉ lệch của Label vào DX)

LEA CX, [BX][DI] (nạp vào CX địa chỉ hiệu dụng do BX và DI chỉ ra EA=BX+DI)

Load register and ES with words from memory (nạp một word (từ bộ nhớ) vào thanh ghi cho trong lệnh và một word tiếp theo vào ES).

Dạng lệnh: LES Đích, Nguồn

- Đích: Là một trong các thanh ghi: AX, BX, CX, DX, SP, BP, SI, DI.

Nguồn trong đoạn lệnh là ô nhớ được chỉ ra trong lệnh, chứa địa chỉ của dữ liệu cần truy cập Lệnh này nạp dữ liệu từ 4 ô nhớ liên tiếp vào thanh ghi đã chọn và vào thanh ghi ES, giúp xác định chính xác vị trí nguồn dữ liệu trong bộ nhớ Một trong các ứng dụng quan trọng của lệnh này là điều chỉnh để cho DI và ES cùng trỏ đến địa chỉ đầu của vùng nhớ chứa chuỗi nguồn, trước khi thực hiện các lệnh thao tác chuỗi.

Các cờ bị thay đổi: Không.

Chương trình nạp dữ liệu vào thanh ghi DI từ hai ô nhớ BX và BX+1, đồng thời nạp dữ liệu vào thanh ghi ES từ hai ô nhớ BX+3 và BX+4 Các ô nhớ này đều nằm trong đoạn dữ liệu của ES và chứa địa chỉ của chuỗi Nguồn Nhờ đó, sau thao tác, con trỏ ES:SI sẽ trỏ chính xác tới đầu của chuỗi Nguồn cần xử lý.

Move a byte or word (chuyển một byte hay word)

Dạng lệnh: MOV Đích, Nguồn

Toán hạng Đích và Nguồn có thể được truy cập theo nhiều chế độ địa chỉ khác nhau, nhưng yêu cầu chúng phải có cùng độ dài để đảm bảo tính chính xác trong quá trình xử lý Ngoài ra, hai toán hạng này không được phép cùng lúc là hai ô nhớ hoặc hai thanh ghi đoạn, nhằm tránh xung đột dữ liệu trong hệ thống máy tính Việc lựa chọn chế độ địa chỉ phù hợp giúp nâng cao hiệu suất và tối ưu hóa hoạt động của các bộ phận xử lý của hệ thống.

Các cờ bị thay đổi: Không.

MOVS Chuỗi_đích, Chuỗi_nguồn

Mô tả: Phần tử Chuỗi_đích ← Phần tử Chuỗi_nguồn

Lệnh này dùng để chuyển từng byte hay từng word của chuỗi nguồn sang chuỗi đích, trong đó:

- DS:SI là địa chỉ của phần tử Chuỗi_nguồn

- ES:DI là địa chỉ của phần tử Chuỗi_đích

Trong quá trình chuyển đổi, giá trị SI và DI tự động điều chỉnh theo quy tắc: SI ← SI±1 hoặc SI ← SI±2, DI ← DI±1 hoặc DI ← DI±2, tùy thuộc vào cờ hướng DF là 0 hay 1 Quá trình này phụ thuộc vào loại chuỗi dữ liệu, được xác định là chuỗi byte hoặc chuỗi word, nhằm đảm bảo hoạt động chính xác trong các tác vụ xử lý dữ liệu.

Có hai cách để xác định chuỗi là chuỗi byte hay chuỗi word trong lập trình Cách đầu tiên là khai báo kiểu dữ liệu cho Chuỗi_đích và Chuỗi_nguồn ngay từ ban đầu khi viết chương trình Cách thứ hai là sử dụng lệnh MOVS với đuôi “B” để xử lý chuỗi byte hoặc đuôi “W” cho chuỗi từ, như được trình bày rõ trong lệnh COMPS.

Các cờ bị thay đổi: Không.

CLD ;xoá cờ hướng làm việc với chuỗi theo chiều →

MOV DI, OFFSET Chuoi_dich ;lấy địa chỉ lệch của Chuoi_dich tại ES vào DI

MOV SI, OFFSET Chuoi_goc ;lấy địa chỉ lệch của Chuoi_goc tại DS vào SI

MOVSB ;chuyển 1 byte, SI và DI tăng thêm 1

Dạng 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 bit của cổng, nó có thể là các giá trị trong khoảng 00…FFH Như vậy có thể có các khả năng sau đây.

- Nếu ACC là AL thì dữ liệu 8 bit được đưa ra cổng PORT

- Nếu ACC là AX thì dữ liệu 16 bit được đưa ra cổng PORT và PORT+1

Bạn có thể chứa địa chỉ cổng thông qua thanh ghi DX, giúp tăng tính linh hoạt trong địa chỉ hóa cổng Khi sử dụng thanh ghi DX để lưu trữ địa chỉ cổng, hệ thống có thể truy cập các địa chỉ trong dải từ 0000H đến FFFFH một cách dễ dàng hơn Điều này cho phép lập trình viên viết lệnh với khả năng truy cập cổng rộng rãi và linh hoạt hơn trong các dự án điều khiển phần cứng.

Các cờ bị thay đổi: Không.

OUT 45H, AL ;đưa dữ liệu từ AL ra cổng AH

MOV DX, 00FFH ;nạp địa chỉ cổng vào DX

OUT DX, AX ;đưa dữ liệu ra 00FFH

Pop word from top of Stack (lấy lại 1 word vào thanh ghi từ trên cùng của ngăn xếp).

Toán hạng đích có thể là các thanh ghi đa năng, thanh ghi đoạn (ngoại trừ thanh ghi đoạn mã CS) hoặc ô nhớ.

Các cờ bị thay đổi: Không.

POP DX ;lấy 2 byte từ trên cùng của ngăn xếp đưa vào DX

Pop word from top of Stack to Flag register (lấy 1 word vào thanh ghi cờ từ trên cùng của ngăn xếp).

Chuyển các bit xác định của word ở trên cùng của Stack (được SP trỏ tới) tới các cờ và thay thế tất cả các cờ hiện thời.

Các cờ bị thay đổi: Tất cả các cờ.

Push word on the Stack (đẩy 1 word vào ngăn xếp).

Toán hạng đích có thể là các thanh ghi đa năng, thanh ghi đoạn (kể cả CS) hoặc ô nhớ.

Các cờ bị thay đổi: Không.

PUSH BX ;đẩy BX vào ngăn xếp tại vị trí do SP chỉ ra

Push Flag register to the Stack (đẩy thanh ghi cờ vào ngăn xếp).

PUSH giảm SP đi 2 byte và chuyển tất cả các cờ tới trên cùng của Stack. Các cờ bị thay đổi: Không.

PUSHF BX ;đẩy BX vào ngăn xếp tại vị trí do SP chỉ ra

Exchange (hoán đổi nội dung của 2 toán hạng)

Toán hạng Đích và Nguồn phải có cùng độ dài và không được là hai ô nhớ cùng lúc hoặc là một phần của thanh ghi đoạn Lệnh XCHG cho phép hoán đổi nội dung giữa toán hạng Đích và Nguồn, trong đó toán hạng này chứa nội dung cũ của toán hạng kia sau khi thực hiện.

Các cờ bị thay đổi: Không.

XCHG AH, AL ;tráo nội dung AH và AL

XCHG AX, BX ;tráo nội dung AX và BX

2.2.2 Nhóm các lệnh tính toán số học, dịch, quay toán hạng

Add with Carry (cộng có nhớ).

Dạng lệnh: ADC Đích, Nguồn

Mô tả: Đích ← Đích + Nguồn + CF

Cộng hai toán hạng Đích và Nguồn với cờ CF, kết quả lưu vào Đích.

Các cờ bị thay đổi: AF, CF, OF, PF, SF, ZF.

ADC AL, 74H ;AL ← AL + 74H + CF

ADC CL, BL ;CL ← CL + BL + CF

ADC DL, {SI} ;DL ← DL + (DS:SI) + CF

Add (cộng hai toán hạng).

Dạng lệnh: ADD Đích, Nguồn

Mô tả: Đích ← Đích + Nguồn

Cộng hai toán hạng Đích và Nguồn, kết quả lưu vào Đích.

Các cờ bị thay đổi: AF, OF, PF, SF, ZF.

ADD DX, CX ;DX ← DX + CX

Decrement (giảm byte hay word đi một đơn vị)

DEC trừ toán hạng Đích đi 1 Toán hạng Đích có thể là byte hay word. Các cờ bị thay đổi: AF, OF, PF, SF, ZF.

MOV BX, 1200H ;chuyển 1200H vào BX

2.2.3 Nhóm các lệnh tính toán logic

Dạng lệnh: AND Đích, Nguồn

Mô tả: Đích ← Đích ˄ Nguồn

Phép "và" logic hai toán hạng thường được sử dụng để lưu kết quả vào toán hạng đích, giúp thao tác xử lý dữ liệu trở nên dễ dàng hơn Người ta thường áp dụng phép "và" để che đi hoặc giữ lại một số bit nhất định của một toán hạng bằng cách nhân logic với toán hạng tức thì có các bit 0 hoặc 1 tại các vị trí cần thiết Đây là kỹ thuật phổ biến trong lập trình và xử lý dữ liệu nhờ khả năng kiểm soát chính xác các bit trên mức độ thấp.

- Các cờ bị thay đổi: CF, OF, PF, SF, ZF.

AND DX, CX ;DX ← DX AND CX theo từng bit

AND AL, 0FH ;che 4 bit cao của AL

- NOT đảo giá trị của các bit của toán hạng đích.

- Các cờ bị thay đổi: không.

Dạng lệnh: OR Đích, Nguồn

Mô tả: Đích = Đích ˅ Nguồn

- Toán hạng Đích và Nguồn phải chứa dữ liệu cùng độ dài và 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 được sử dụng để thiết lập một số bit nhất định của toán hạng bằng cách cộng logic với các toán hạng tức thời có bit 1 ở vị trí cần thiết lập Phương pháp này giúp dễ dàng kiểm soát và thay đổi các bit trong phép toán logic, đặc biệt trong thiết kế hệ thống số và mạch điện tử số Khi dùng phép OR, các bit mục tiêu sẽ trở thành 1 nếu ít nhất một trong các toán hạng có bit 1 tại vị trí đó, giúp đơn giản hóa quá trình chỉnh sửa và thao tác dữ liệu trong lập trình và thiết kế mạch.

- Các cờ bị thay đổi: CF, OF, PF, SF, ZF.

OR AX, BX ;AX ← AX ˅ BX theo từng bit

OR CL, 30h ;lập bit b4 và b5 của CL lên

Dạng lệnh: XOR Đích, Nguồn

Mô tả: Đích←Đích ⊕ Nguồn.

Lệnh XOR thực hiện phép logic XOR giữa hai toán hạng và lưu kết quả vào đích, trong đó một bit kết quả bằng 1 nếu các bit tương ứng của hai toán hạng là đối nhau Khi toán hạng đích trùng với toán hạng nguồn, kết quả sẽ bằng 0, giúp lệnh này còn được dùng để xoá thanh ghi về 0 Ngoài ra, lệnh XOR còn làm sạch các cờ CF và OF, đảm bảo trạng thái cờ không bị ảnh hưởng sau khi thực thi.

- Các cờ bị thay đổi: CF, OF, PF, SF, ZF.

Trước khi thực hiện lệnh:

Sau khi thực hiện lệnh:

Dịch trái số học / dịch trái logic.

Lệnh dịch trái số học toán hạng, còn gọi là dịch trái logic, có tác dụng chuyển bit MSB vào vị trí CF, trong khi bit 0 được đưa vào LSB Người dùng cần chuẩn bị sẵn số lần quay mong muốn trong thanh ghi CL để thực hiện quá trình dịch trái đúng quy trình Đặc biệt, trong trường hợp quay một lần, có thể sử dụng lệnh SAL Đích, với tham số là 1 để thực hiện phép dịch chính xác.

Trong quá trình thực hiện lệnh SAL hoặc SHL, cờ CF lưu giữ giá trị cũ của MSB để theo dõi trạng thái lớp cờ Ngoài ra, cờ OF←1 được đặt nếu sau một lần quay, bit MSB bị thay đổi so với trạng thái ban đầu, giúp nhận biết các phép dịch bit ảnh hưởng đến độ chính xác của phép tính.

Ngày đăng: 09/08/2023, 13:22

HÌNH ẢNH LIÊN QUAN

Hình 1.1: Sơ đồ cấu trúc bên trong của vi xử lý 8086 - Nghiên cứu và tìm hiểu về tập lệnh vi xử lý 8086
Hình 1.1 Sơ đồ cấu trúc bên trong của vi xử lý 8086 (Trang 8)
Hình 1.2: Cơ cấu nhận lệnh và thực hiện lệnh của vi xử lý 8086/8088 - Nghiên cứu và tìm hiểu về tập lệnh vi xử lý 8086
Hình 1.2 Cơ cấu nhận lệnh và thực hiện lệnh của vi xử lý 8086/8088 (Trang 9)
Hình 1.3: Sơ đồ chân của vi xử lý 8086 - Nghiên cứu và tìm hiểu về tập lệnh vi xử lý 8086
Hình 1.3 Sơ đồ chân của vi xử lý 8086 (Trang 10)

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

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

w