1. Trang chủ
  2. » Giáo án - Bài giảng

Bai giang Vi xử lývi điều khiển

156 136 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 156
Dung lượng 2,57 MB
File đính kèm Bai giang VXL VDK1.rar (2 MB)

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

Nội dung

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 x

Trang 1

-

; -Chơng 1: Kiến trúc hệ vi xử lý 1.1 Tổ chức hệ Vi xử lý

1.1.1 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 bao gồ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ốighé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ện tử đã và đang sử dụng

ra thành các loại sau:

- 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ậy má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ùng trongquâ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 tin trong ngành ngân hàng, ngành khí tợng, các công ty bảohiể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)

- 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áytính cho các ứng dụng vừa phải mà nếu dùng máy tính lớn vào đó thì sẽ gâylã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ác tí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êu biểu cho nhóm này là loạimáy VAX 6360 của Digital Equipment Corporation và MV/8000II của Datagenaral

- Máy vi tính

Trang 2

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) Chúng 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 vi tí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ậm chí là 64 bit) Ranh giới để phân chia giữamá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 integration) mà ngời ta quen gọi là các bộ vi xử

lý (microcomputer, àP)

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ộcvà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 trongcá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ĩnhvực này, đó là họ vi xử lý 80x86 của Intel và họ vi xử lý 680xx của Motorola

1.1.2 Lịch sử phát triển của máy vi tính.

- 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 RockwellInternational, 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ốc độ thực hiện lệnh: 10-16às/lệnh với tần số đồng hồ fclk = 0,8 MHz

0,1-• 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ý hoàn chỉnh

- 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ủaMOS Technology, 6800 và 6809 của Motorola, 8080 và 8085 của Intel và đặcbiệ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

Trang 3

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ộ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ôngnghệ NMOS ( Với mật độ điện tủ trên một đơn vị diện tích cao hơn so vớicông nghệ PMOS) hoặc CMOS ( tiết kiệm điện năng tiêu thụ) cho phép đạt

xử lý thế hệ này cũng lớn hơn ( từ 1MB đến 16 MB cho bộ nhớ và tới 64 K địachỉ cho thiết bị ngoại vi đối với họ Intel) Đây là các bộ vi xử lý đợc dùng trongcá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 đợc sản xuất bằng công nghệ HMOS và chophép đạt đợc tốc độ từ 0,1-1às/lệnh với tần số đồng hồ fclk =5-10 MHz

Trong thời kì này cũng xuất hiên các máy vi tính 8 bit trong một vỏ nh8048/49 và 6805R2 (mạch này còn có thêm cả ADC 12 bit cho 4 kênh đầu vàotơng tự) hoặc các bộ vi điều khiển 1 bit trong vỏ nh MC 14500B và 4 bit trong

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

Trang 4

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 laincác bộ vi xử lí mới thực hiện cá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êntrong Chúng có các thanh ghi chung 16-32 bit Nhiều loại có phân biệt các tệpthanh nghi 32-bit ( register file ) cho đơn vị nguyên IU ( interger unit ) vafteepj 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ệnhIcache và dùng cho dữ liệu Dcache Các bộ vi xử lí công nghệ cao hiệnnay( advanced microprocessors) đã thoả mãn các yêu cầu chế tạo các máy tínhlớ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ệnh đầ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, RISC) 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ãngApple- Motorola- IBM

Bus điều khiển Bus dữ liệu

Bộ nhớRAM

Trang 5

- Chú thích:

CPU: Central Processing Unit ( Đơn vị xử lý trung tâm - chíp )

ROM: Read Only Memmory ( Bộ nhớ chỉ đọc )

RAM: Radom Acess Memmory (Bộ nhớ truy cập ngẫu nhiên )

I/O: Input/ Output: Thiết bị vào ra

Address Bus: Bus địa chỉ

Data Bus: Bus dữ liệu

Control Bus: Bus điều khiển

1.2 Chức năng

1.2.1 Đơn vị xử lý trung tâm

CPU (Central Processing Unit) là thành phần chủ đạo nhất của hệ

thống máy tính, đôi khi còn đợc gọi là bộ xử lý hay bộ xử lý trung tâm.

CPU là nơi thực hiện phần lớn các phép toán, các phép tính số học, phéptính lôgic và các biến đổi mã tơng ứng ở các máy vi tính ngày nay,CPU thờng đợc xây dựng trên một hoặc vài vi mạch đóng trong một

logic unit) đảm nhiệm các phép toán logic-số học và đơn vị điều

khiển CU (control unit) tiến hành chuyển các lệnh từ bộ nhớ, giải mã,

thực hiện lệnh hay chuyển tới ALU khi cần Bên cạnh các đơn vị ALU,

CU, trong CPU còn có tập hợp các thanh ghi

1.2.2 Bộ nhớ trung tâm

Bộ nhớ (memory) hay còn gọi là bộ nhớ chính, là một bộ phận hết

sức quan trọng của hệ máy tính Bộ nhớ thực hiện việc lu trữ thông tin

Các thanh ghi

(màn hình, máy in,ổ đĩa, máy vẽ ) Bus địa chỉ

Trang 6

và phục vụ cho quá trình trao đổi thông tin Bộ nhớ máy tính thực chất

là bộ nhớ trong để phân biệt với khái niệm bộ nhớ ngoài mà nhiều tàiliệu hiện vẫn hay sử dụng để chỉ thiết bị lu trữ dữ liệu từ tính nh

đĩa cứng, đĩa mềm

a Bộ nhớ RAM: ở các hệ máy vi tính, ngời ta sử dụng bộ nhớ bán dẫn

còn gọi là bộ nhớ ghi đọc Bộ nhớ này cho phép lu trữ dữ liệu tạm thời( mất điện thì bị mát dữ liệu )

b Bộ nhớ ROM: Bộ nhớ chỉ đọc ROM (read-only memory), bộ nhớnày cho phép lu trữ dữ liệu lâu dài ( thờng để lu các cấu hình phầncứng do nhà sản xuất thiết lập cho Main board )

Ngoài bộ nhớ RAM, ROM, trong các hệ máy tính hiện nay còn có một

số dạng bộ nhớ khác nh bộ nhớ chỉ đọc lập trình đợc PROM

(programmable read-only memory), bộ nhớ PROM xoá đợc bằng tia cực

read-only memory)

1.2.3 Thiết bị xuất nhập thông tin

I/O tạo khả năng giao tiếp giữa máy tính và thế giới bên ngoài Các thiết bịngoại vi nh màn hình, bàn phím, máy in, các bộ biến đổi D/A, A/D, các thiết

bị đo lờng điều khiển đều liên hệ với máy tính qua bộ phận này mà cụthể cho từng thiết bị là các cổng

con ngời có thể hiểu đợc hoặc điều khiển các thiết bị khác Thiết bị xuấtthông dụng nhất có thể kể nh màn hình, máy in, faxmodem, máy vẽ, loa haycác thiết bị điều khiển

Tuy nhiên cũng cần lu ý là ranh giới các thiết bị vào và thiết bị ra khôngphải khi nào cũng rõ ràng Nhiều thiết bị vừa đảm nhiệm vai trò là thiết bịvào song cũng thực hiện chức năng là thiết bị ra, ví dụ nh faxmodem, CDROM

đọc ghi, thiết bị đo-điều khiển

con ngời sang dạng mã máy để bộ vi xử lý thực hiện Thiết bị vào thông dụng

Trang 7

nhất có thể kể nh bàn phím, con chuột, máy quét scaner, thiết bị phân tíchnhận dạng tiếng nói, CD-ROM

1.2.4 Hệ thống Bus

Hệ thống bus của máy tính Thực hiện kết nối các khối chức năng là

hệ thống bus Trong máy tính có hai nhóm bus là bus hệ thống, nối giữa CPUvới bộ nhớ chính (trong các máy hiện đại ngày nay bus hệ thống đợc nối giữaCPU và vi mạch tổng hợp) và bus vào ra nối ghép giữa các thiết bị ngoại vi tớiCPU thông qua các "cầu nối" hay còn gọi là các "cầu" Tham gia điều khiểnbus có các vi mạch điều khiển bus Các vi mạch này trớc đây đợc nằm riêng lẻcòn hiện nay thờng tích hợp vào trong các vi mạch tổng hợp chipset Hệ thốngbus bao gồm 3 loại bus là bus địa chỉ, bus dữ liệu và bus điều khiển

a Bus địa chỉ: Phục vụ việc chọn ô nhớ hoặc thiết bị vào/ra Khighi/đọc bộ nhớ hoặc thiết bị vào/ra, bộ xử lý trung tâm sẽ đa lên bus này

địa chỉ của các thiết bị liên quan Đây là bus một chiều và xuất phát từ CPU

b Bus dữ liệu: Đợc dùng để chuyển dữ liệu và thờng có từ 8, 16, 20, 24,

32 đến 64 đờng dây tuỳ thuộc vào từng CPU cụ thể BUS dữ liệu là loại 2chiều 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 trạng thái để bảo đảm cho bus hoạt động đợc bình thờng

c Bus điều khiển: Hỗ trợ cho việc trao đổi các thông tin điều khiển vàtrạng thái nh phân biệt thiết bị đợc CPU truy nhập là bộ nhớ hay thiết bịvào/ra, thao tác truy nhập là đọc hay viết v.v Bus điều khiển thờng gồmhàng chục dây tín hiệu khác nhau, và xét theo cả nhóm thì đó là loại bus 2chiều

Chơng 2: Bộ vi xử lý 80x86 Intel

2.1 Cấu trúc bên trong và hoạt động của bộ vi xử lý 80x86

2.1.1 Giới thiệu về bộ vi xử lý Intel 80x86:

Trang 8

Sau khi đã tìm hiểu qua về cấu trúc của hệ vi xử lý Trong chơng này ta

sẽ đi sâu tìm hiểu một bộ vi xử lý cụ thể và rất điển hình: bộ vi xử lý củaIntel

Lý do chúng ta học và tìm hiểu vể bộ vi xử lý Intel 80x86 mà không phải là vi

xử lý của các hãng khác:

+ Thứ nhất, đây là bộ vi xử lý nổi tiếng một thời thuộc họ 80x86 củaIntel, nó đợc sử dụng trong nhiều lĩnh vực khác nhau, nhất là trong các máyIBM PC /XT Các bộ vi xử lý thuộc họ này sẽ còn đợc sủ dụng rộng rãi trong hàngchục năm nữa, và vi tính kế thừa của các sản phẩm trong họ 80x86., các ch-

ơng trình viết cho8088 vẫn có thể chạy trên các hệ thống tiên tiến sau này

+ Thứ hai, về góc độ s phạm thì đây là bộ vi xử lý khá đơn giản và vìviệc dạy hiểu nó là tơng đối dể đối với những ngời mới bắt đầu thâm nhậpvào lĩnh vực này

+ Thứ ba, các họ vi xử lý tuy có khác nhau nhng xét cho cùng cũng có khánhiều điểm chủ yếu rất giống nhau Do đó 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

2.1.2 Giới thiệu về cấu trúc bên trong của vi xử lý 8086/8088

a Sơ đồ cấu trúc:

Trang 9

b Vai trò của các khối chức năng trong CPU 8086

- Khối BIU, EU:

Bên trong CPU 8086 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 2phầ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ên trong CPU có nhiệm vụ chuyển tải tín hiệucủa các khối khác Trong số các bus đó có bus dữ liệu 16 bit của ALU, bus cáctín hiệu điều khiển ở EU và bus trong của hệ thống ở BIU Trớc khi đi ra busngoài hoặc đi và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éphoặ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ổnghoặc bộ nhớ Nói cách khá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êntrong 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ác dãy xungkhác nhau ( tuỳ theo mã lệnh ) để điều khiển hoạt động của các bộ phận bêntrong và bên ngoài CPU Trong khối EU còn có khối số học và lôgic ( arithmeticand logic unit ALU ) dùng để thực hiện các thao tác khác nhau với các toán hạngcủa lệnh Tóm lại, khi CPU hoạt động EU sẽ cung cấp thông tin về địa chỉ choBIU để khối này đọc lệnh và dữ liệu, còn bản thân nó thì đọc lệnh và giảimã lệnh

Trong BIU còn có một bộ nhớ đệm lệnh với dung lợng 6 byte dùng để chứa cácmã lệnh đọc đợc nằm sẵn để chờ EU xử lý ( trong tài liệu của Intel bộ đệmlệ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ý 8086/88 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ờnghoạt động của CPU gồm 3 giai đoạn: đọc mã lệnh ( opcode fetch ), giải mã

Trang 10

lệnh ( decode ) 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, khi CPU giải mã lệnh hoặc khi nó đang thựchiện những lệnh không liên quan đến bus ( thao tác nội bộ ) thì các buskhô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.Trong khi đó từ bộ vi xử lý 8086/88, Intel sử dụng cơ chế xử lý xen kẽ liên tụcdòng mã lệnh thì CPU đợc chia thành 2 khối và có sự phân chia công việc chotừng khối: việc đọc mã lệnh là do khối BIU thực hiện, việc giải mã lệnh và thựchiệ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àmviệ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 6 byte để giải mã hoặc thực hiệ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ệnh trong bộ đệm này thì có nghĩa là có sự phốihợp hoạt động hiệu quả giữa hai khối EU và BIU theo cơ chế xử lý xen kẽ liêntục dòng mã lệnh để làm tăng tốc độ xử lý tổng thể

- Các thanh ghi:

Trong bộ vi xử lý 8086 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ên cùng chức năng chính của chúng

+ 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ứa các dữ liệu 8 bit thì mỗi thanh ghi có thể tách rathành hai thanh ghi 8 bit cao và thấp để làm việc độc lập, đó là các tậpthanh ghi AH và AL, BH và BL, CH và CL, DH và DL ( trong đó H chỉ phần cao,

Trang 11

L chỉ phần thấp ) Mỗi thanh ghi có thể dùng một cách vạn năng để chứa cáctập dữ liệu khác nhau nhng cũng có công việc đặc biệt nhất định chỉ thaotác với một vài thanh ghi nào đó và chính vì vậy các thanh ghi thờng đợc gáncho những cái tên đặc biệt rất có ý nghĩa.

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 phép nhân, chia ) Nếu kết quả là 8 bitthì thanh ghi AL đợc coi là acc

BX ( base ): thanh ghi cơ sở thờng chứa địa chỉ cơ sở

CX ( count ): bộ đếm CX thờng đợc dùng để chứa số lần lặp trong trờnghợp các lệnh LOOP ( lặp ), còn CL thờng cho ta số lần dịch hoặc quaytrong 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épnhân hoặc chia các số 16 bit DX thờng dùng để chứa địa chỉ của cáccổ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ố:

BP: con trỏ cơ sở ( base pointer ) BP luôn trỏ vào một dữ liệu nằm trong

đoạn ngăn xếp SS Địa chỉ đầy đủ của một phần tử trong đoạn ngănxếp ứng với SS:BP

SP: con trỏ ngăn xếp ( stack pointer ) 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ỉ đỉnh ngăn xếp ứng vớiSS:SP

Trang 12

SI: chỉ số gốc hay nguồn ( source index ) SI chỉ vào dữ liệu trong đoạndữ liệu DS mà địa chỉ cụ thể đầy đủ ứng với DS:SI

DI: chỉ số đích ( destination index ) DI chỉ vào dữ liệu trong đoạn dữliệu DS mà địa chỉ cụ thể đầy đủ ứng với DS:DI

Riêng trong các lệnh thao 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ủaphần tử thuộc chuỗi gốc

+ Các thanh ghi đoạn:

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ệcquả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ý 8086 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ớnnhấ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ác thanh ghi đoạn làm cho các đoạn có thể dịch chuyển linh hoạt trongphạm vi không gian 1 Mbyte, vì vậy các đoạn này có thể nằm cách nhau khi

Trang 13

thông tin cần lu trong chúng đòi hỏi dung lợng đủ 64 Kbyte hoặ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 những đoạn khác có thể bắt đầu nối tiếp ngay sau đó Điều nàycũng cho phép ta truy nhập vào bất kỳ đoạn nhớ ( 64 Kbyte ) nào nằm trongtoàn bộ không gian 1M.

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ằmtrong đ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ệchcủ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 đóng vai trò thanh ghi lệch ( Offset register) Cụ thể, để xác định địa chỉ vật lý 20 bit của một ô nhớ nào đó trong một

đoạn bất kỳ CPU 8086 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ặpthanh ghi đó tạo ra địa chỉ vật lý theo công thức sau: Địachỉvậtlý =Thanhghiđoan x16 + Thanhghilệch

Việc dùng 2 thanh ghi để ghi nhớ thông tin về địa chỉ thực chất để tạo ramộ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ácthanh ghi cụ thể bên trong CPU và khi 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 bus địa chỉ

+ Thanh ghi cờ:

Đâ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ệnhoặ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ềukiện ) Thanh ghi cờ gồm 16 bit nhng ngời ta chỉ dùng hết 9 bit của nó để làmcác bit cờ

Trang 14

Các cờ cụ thể

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

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ả

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 mợn từ một số BCD thấp ( 4 bit thấp ) sang một sốBCD cao ( 4 bit cao )

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

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

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

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 quả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ý

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

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 khi cần tìm lỗi trong một chơng trình )

IF ( interrupt enable flag ): cờ cho phép ngắt IF = 1 thì CPU cho phép các yêucầu ngắt ( che đợc ) đợ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 ( vì vậy D chính là cờ lùi )

Trang 15

b Sơ đồ chân của Vi xử lý 8086 và 8088 ở chế độ tối thiểu.

2.2 Các chế độ định địa chỉ của bộ vi xử lý 80x86

2.1.1 Khái niệm:

Chế độ địa chỉ (addressing mode ) là cách để CPU tìm thấy toánhạng cho cá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ộ bi xử lý và sau này không thể thay đổi đợc

Bộ vi xử lý 8086 và cả họ 80x86 nói chung đều có 7 chế độ địa chỉ sau:

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

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

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

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

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

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

Vcc AD15 A16/S3 A17/S4 A18/S5 A19/S6 /S7 MN/

HOLD HLDA /M DT/

ALE

READY RESET

READY RESET

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

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

8088CPU

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

8086CPU

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

Trang 16

Chế độ địa chỉ tơng đối chỉ số cơ sở ( based indexed relativeaddressing mode ).

Các chế độ địa chỉ này sẽ đợc giải thích thông qua các chế độ địa chỉ củalệnh MOV ( lệnh di chuyển ) và lệnh ADD ( lệnh cộng )

a 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áctoá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 trên bộ nhớ

Ví dụ: MOV BX, DX ; chuyển nội dung DX vào BX

b 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ế độ địachỉ tức thì ) Ta có thể dùng chế độ địa chỉ này để nạp dữ liệu cần thaotác vào bất kỳ thanh ghi nào ( trừ các thanh ghi đoạn và thanh cờ ) hoặc vàobất kỳ ô nhớ nào trong đoạn dữ liệu DS

Ví dụ: MOV CL, 100 ; chuyển 100 vào CL

MOV ( BX ), 10 ; chỉ DS:BX Tại đây ( BX ) có nghĩa là ô nhớ có

MOV AL, ( 1234H ) ; chuuyển nội dung ô nhớ DS:1234 vào AL

MOV ( 4320H ), CX ; chuyển nội dung CX vào 2 ô nhớ liên tiếpDS:4320 và DS:4321

d 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ớ

Ví dụ: MOV AL, ( BX ) ; chuyển nội dung ô nhớ có địa chỉ DS:BX vào AL

MOV ( SI ), CL ; chuyển nội dung CL vào ô nhớ có địa chỉ DS:SI

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

Trang 17

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ủacá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

f 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 ghichỉ số để tính địa chỉ của toán hạng Nếu ta dùng thêm cả thành phần biểudiể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àyrất phù hợp cho việc địa chỉ hoá các mảng hai chiều

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

-

; -;3/45 tiết

2.3 Cách mã hoá lệnh của bộ vi xử lý 80x86

Lệnh của bộ 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

Trang 18

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ễnthông tin duy nhất mà máy hiểu đợc Vì lệnh do bộ vi xử lý đợc cho dới dạngmã 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

Đối với bộ vi xử lý 8086 một lệnh có thể có độ dài từ 1 đến 6 byte

Trên một câu lệnh của vi xử lý thờng có: Tên lệnh, toán hạng, chú thích

Giữa tên lệnh và toán hạng cách nhau bởi một khoảng trắng, giữa các toánhạng cách nhau bởi một dấu phảy ( có một số lệnh không có dấu phảy:DIV,MUL )

Ví dụ: MOV AL,0Fh ;chuyển giá trị 0FH vào thanh ghi AL

Trang 19

+ Tác động lên cờ: AF, CF, PF, SF, ZP/

+ Ví dụ: MOV AL,100

ADD AL,10 ;AL=100+10=110

- Lệnh cộng có nhớ: ADC-Add With Carry ( cộng có nhớ )

+ Ví dụ: MOV AL,100

ADD AL,200 ;AL=100+200-256=44 ( tràn,CF=1)

ADC AL,2 ;AL=44+2+1=47

- Lệnh trừ: SUB - Substract ( trừ hai toán hạng không dấu)

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

+ Mô tả : Đích = Đích - Gốc

Trong đó 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ó cùng độ dài và không đợcphép đồng thời là 2 ô nhớ và cũng không đợc là thanh ghi đoạn

+ Cập nhật : AF, CF, OF, PF, SF, ZP ( AF và PF chỉ liên quan đến 8bit thấp)

+ Ví dụ: MOV AL,100

SUB AL,10 ;AL=100+10=90

- Lệnh trừ có mợn: SBB - Substract with Brrow (trừ có mợn)

+ Viết lệnh : SBB Đích,Gốc+ Mô tả : Đích = Đích - Gốc - CFTrong đó toán hạng đích và gốc có thể tìm đợc theo các chế độ địachỉ khác nhau, nhng phải chứa cùng một loại dữ liệu và không đợc phép đồngthời là 2 ô nhớ và cũng không đợc là thanh ghi đoạn

+ Cập nhật : AF, CF, OF, PF, SF, ZP (AF và PF chỉ liên quan đến8bit thấp)

Trang 20

+ Ví dụ : Các ví dụ sau đây có thể đại diện cho các chế độ địachỉ có thể có trong lệnh trừ này cũng nh một số các lệnh khác với ngữ pháp t-

ơng tự

SBB AL,74H ; AL ← AL - 47 - CFSBB CL,BL ; CL ← CL - BL - CFSBB DL,[SI] ; DL ← DL - {DS:SI} - CF

- Lệnh nhân: MUL - Multiply Unisigned Byte or Word (nhân số không dấu)

+ Viết lệnh : MUL GốcTrong đó toán hạng Gốc là số nhân và có thể tìm đợc theo các chế độ

Số bị nhân phải là số 16 bit để trong AX

Sau khi nhân : DXAX ← tích

Nếu byte cao (hoặc 16 bit cao) của 16 (hoặc 32) bit kết quả chứa

số 8 bit ở AL Số 8 bit này ở AL cần phải đợc mở rộng sang AH bằng cách gánAH=0 để làm cho số bị nhân nằm trong AX Sau cùng chỉ việc dùng lệnh MULGốc và kết qủa có trong cặp DXAX

+ Cập nhật : CF, OF Không xác định : AF, PF, SF, ZP

- Lệnh chia số không dấu: DIV - Unsingned Divide ( chia 2 số không có dấu )

+ Viết lệnh: DIV Gốc

Trang 21

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

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ạng 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

+ Ví dụ:

MOV AX,125

MOV BL,10

DIV BL ;AL=12, AH=5

- Lệnh tăng: Inc-Increment Destination Register or Memory ( Tăng toán hạng

Trang 22

FFFFH ) mà không làm ảnh hởng đến cờ CF Lệnh này cho kết quả tơng đơng

nh lệnh SUB Đích nhng chạy nhanh hơn

+ Cập nhật: AF, OF, PF, SF, ZP Không tác động: CF/

2.4.2 Nhóm lệnh logic:

Các lệnh tiêu biểu nh: AND,OR,NOT,XOR,ROR,ROL,RCL,RCR

- Lệnh và: AND - And Corresponding Bits of Two Operands ( Và 2 toán hạng )

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

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

Trong đó toán hạng đích và gốc có thể tìm đợc theo các chế độ địachỉ khác nhau Nhng phải chứa dữ liệu cùng độ dài và không đợc phép đồngthờ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 logictoán hạ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ạ )

AND AL,11110000B ;AL=00001010B

- Lệnh hoặc: OR - Logically Or Corresponding Bits of TwoOperands (hoặc hai toán hạng)

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

+ Mô tả : Đích ← Đích hoặc Gốc

Trong đó toán hạng đích và gốc có thể tìm đợc theo các địa chỉ khácnhau, nhng phải chứ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 OR thờng dùng để lập một vàibit nào đó của toán hạng bằng cách cộng loogic toán hạng đó với toán hạng tứcthời có các bit 1 tại các vị trí tơng ứng cần thiết lập

Xóa : 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 : AF

+ Ví dụ :

Trang 23

và kèm theo các cờ CF và OF cũng bị xoá.

+ 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 : AF

+ Ví dụ :

MOV AL,10001100B MOV BL,10000010B XOR AL,BL ; AL=00001110B

- Lệnh xoay trái: ROL - Rotate All Bits to the Left (Quay vòng sang trái)

+ Viết lệnh : RCR Đích,CL

Trong đó toán hạng đích có thể tìm đợc theo các chế độ địa chỉ khácnhau

+ Mô tả :

Trang 24

CF MSB LSB

Lệnh này dùng để quay vòng toán hạng sang trái, MSB sẽ đợc đa qua cờ

CF và LSB CL phải đợc chứa sẵn số lần quay mong muốn Trong trờng hợpquay một lần có thể viết trực tiếp : ROL Đích,1

+ Ví dụ:

MOV AL,10100001BMOV CL,2

ROL AL,CL ;AL=10000110b, CF=0( Từ các bộ vi xử lý thế hệ sau nh 80186, 80286 thì có thể viết trực tiếpkiểu này với số lần quay lớn nhất là 32) Ta nhận thấy số lần của quay là 9 thìkết quả không thay đổi vì cặp CF và toán hạng quay tròn đúng một vòng

- Lệnh xoay trái qua cờ nhớ: RCL - Rotate through CF to the left (Quay trái thôngqua cờ nhớ)

RCL Đích,1+ Tác động vào cờ : chỉ có CF và OF bị ảnh hởng

Sau lệnh RCL cờ CF mang giá trị cũ của MSB, còn cờ OF ← 1 nếu sau khiquay một lần mà bit MSB bị thay đổi so với trớc khi quay Cờ OF sẽ không đợcxác định sau nhiều lần quay

+ Ví dụ:

Trang 25

MOV AL,10100001BMOV CL,2

Lệnh này dùng để quay vòng toán hạng sang phải, LSB sẽ đợc đa qua cờ

CF và MSB CL phải đợc chứa sẵn số lần quay mong muốn Trong trờng hợpquay một lần có thể viết trực tiếp :

ROR Đích,1

+ Tác động vào cờ : chỉ có CF và OF bị ảnh hởng

Sau lệnh ROR cờ CF mang giá trị cũ của LSB, còn cờ OF ← 1 nếu sau khiquay một lần mà bit MSB bị thay đổi so với trớc khi quay Cờ OF sẽ không đợcxác định sau nhiều lần quay Lệnh này thờng dùng để tạo cờ CF từ giá trị củaLSB làm điều kiện cho các lệnh nhảy có điều kiện

- Lệnh xoay phải qua cờ nhớ:

RCR - Rotate though CF to the right (quay phải thông qua cờ nhớ)

Trang 26

Lệnh này dùng để quay toán hạng sang trái thông qua cờ CF CL phải đợcchứa sẵn số lần quay mong muốn Trong trờng hợp quay một lần có thể viếttrực tiếp :

RCR Đích,1

+ Tác động vào cờ : chỉ có CF và OF bị ảnh hởng

Sau lệnh RCR cờ CF mang giá trị cũ của LSB, còn cờ OF ← 1 nếu sau khiquay một lần mà bit MSB bị thay đổi so với trớc khi quay Cờ OF sẽ không đợcxác định sau nhiều lần quay

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

+ Ví dụ :

MOV CL,BL ; CL ← BL MOV DL,[SI] ; DL ← {DS:SI}

MOV AL,Table [BX] ; AL ←{DS:(Table+BX)}

Một số lệnh di chuyển khác nh: MOVS/MOVSB/MOVSW - Move String Byte

or String Word (Chuyển 1 phần tử của 1 chuỗi sang một chuỗi khác)

- Lệnh nạp địa chỉ hiệu dụng vào thanh ghi: LEA - Load Effective Address(Nạp địa chỉ hiệu dụng vào thanh ghi)

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

Trong đó :

Đích thờng là một trong các thanh ghi : BX, CX, DX, BP, SI, DI.Gốc là tên biến trong đoạn dữ liệu ( DS ) đợc chỉ rõ trong lệnhhoặc ô nhớ cụ thể

Trang 27

+ Mô tả : Đích ← Địa chỉ lệch của Gốc, hoặc

Đích ← Địa chỉ hiệu dụng của Gốc

Đây là lệnh để tính địa chỉ lệch của biến hoặc địa chỉ của ô nhớchọn làm gốc rồi nạp vào thanh ghi đã chọn

- Lệnh dịch ( lấy ) một byte từ bảng trong bộ nhớ: XLATB - Translate a byte in

AL ( Đổi nội dung AL theo bảng cho trớc)

0000H

0123H 0123H

0124H

Lệnh này dùng để đổi 8 bit hoặt ít hơn từ mã này ( gốc) sang mã khác(đích) theo một bảng tra cho sẵn trớc khi thực hiện lệnh đổi, bảng tra phảichứa các mã đích và BX phải chứa địa chỉ lệnh của bảng này trong đoạn dữliệu Còn mã gốc (cần đổi) phải đợc chứa trong AL Khi chạy lệnh XLATB thì

FF

Trang 28

phép cộng AL + BX phải đợc thực hiện để tạo ra địa chỉ ô nhớ trong bảng so

mà nội dung của nó sẽ đợc cất trở lại vào thanh ghi AL

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ải 0000H FFFFH

và ta phải viết lệnh theo dạng:

In ACC, DXTrong đó DX phải đợc gắn từ trớc giá trị ứng với địa chỉ cổng

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ể có 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 ra cổng port

Trang 29

Nếu Acc là AX thì dữ liệu 16 bit đợc đa ra cổng port và cổngport +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ỉhoá cổng mềm dẻo hơn Lúc này địa chỉ cổng nằm trong dải 0000H FFFFH

và ta phải viết lệnh theo dạng :

OUT DX, AccTrong đó DX phải đợc gán từ trớc giá trị ứng với địa chỉ cổng

OUT DX,AL ;xuất giá trị 01010101B ra cổng máy in

- Lệnh đẩy dữ liệu vào ngăn xếp: PUSH - Push Word on the Stack (cất 1 từ vàongăn xếp)

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

+ Ví dụ :

PUSH BX ; cất BX vào ngăn xếp tại vị trí

- Lệnh lấy dữ liệu từ ngăn xếp: POP - Pop Word from Top of Stack (lấy lại 1 từvào thanh ghi từ đỉnh ngăn xếp)

+ Viết lệnh : POP Đích

SP ← SP +2Trong đó toán hạng đích có thể tìm đợc theo các chế độ địa chỉ khácnhau : có thể là các thanh ghi đa năng, thanh ghi đoạn (nhng không đợc là

Trang 30

thanh ghi đoạn mã CS) hoặc ô nhớ Dữ liệu để tại ngăn xếp không thay đổi.Giá trị của SS không thảy đổi.

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

+ Ví dụ :

POP DX ; lấy 2 byte từ đỉnh ngăn xếp đa vào DX

- Lệnh cất tất cả trạng thái các cờ:PUSHF

- Lệnh lấy lại trạng thái các cờ:POPF

- Lệnh cất tất cả các thanh ghi vào ngăn xếp:PUSHA

- Lệnh lấy lại các thanh ghi từ ngăn xếp: POPA

Các cờ chính theo quan hệ đích và gốc khi so sánh 2 số không dấu:

Một số lệnh so sánh khác: CMPS/CMPSB/CMPSW-Compare String Bytes or String Word ( so sánh 2 chuổi byte hay 2 chuổi từ ).

Trang 31

- Lệnh nhảy không điều kiện: JMP - Unconditinal Jump to specifiedDestination (Nhảy vô điều kiện ) đến một đích nào đó).

Lệnh này khiến cho bộ vi xử lý 8086 bắt đầu thực hiện một lệnh mới tại

địa chỉ đợc mô tả trong lệnh Lệnh này có các chế độ địa chỉ giống nhlệnh Call và nó cũng phân biệt nhảy xa và nhảy gần Tuỳ thuộc vào độ dàicủa bớc nhảy chúng ta phân biệt 5 kiểu lệnh nhảy khác nhau : 3 kiểu nhảygần và 2 kiểu nhảy xa với độ dài lệnh khác nhau

Viết lệnh : JMP NHAN

Lệnh mới bắt đầu tại địa chỉ ứng với nhãn NHAN

- Lệnh nhảy nếu có nhớ ( CF=1): JC LABEL ; nhảy đến LABEL nếu CF=1, vớiLABEL là: nhãn

- Lệnh nhảy nếu không có nhớ ( CF=0): JNC LABEL ;nhảy đến LABEL nếu CF

=0

- Lệnh nhảy nếu bằng: JE LABEL ;nhảy đến nhãn nếu CF=0 và ZF=1

- Lệnh nhảy nếu không bằng: JNE LABEL ;nhảy đến nhãn nếu CF=0hoặc 1 và ZF=0

- Lệnh nhảy nếu lớn hơn: JG LABEL ;nhảy đến nhãn nếu CF=0 và ZF=0

- Lệnh nhảy nếu nhỏ hơn hoặc bằng: JNG LABEL ; nhảy đến nhãn nếuCF=0 và ZF=1 hoặc CF=1 và ZF=0

- Lệnh nhảy nếu bằng không: JZ LABEL ;nhảy đến nhãn nếu ZF=1

- Lệnh nhảy nếu khác không: JNZ LABEL ;nhảy đến nhãn nếu ZF=0

- Lệnh tạo vòng lặp: LOOP - Jump to Sspecified Label if CX ≠0 afterAutodecrement (lặp lại đoạn chơng trình do nhãn chỉ ra cho đến khi CX=0)+ Viết lệnh : LOOP LABEL

Lệnh này dùng để lặp lại đoạn chơng trình (gồm các lệnh nằm trongkhoảng từ nhãn NHAN đến hết lệnh LOOP LABEL) cho đến khi số lần lặpCX=0 điều này có nghĩa là trớc khi vào vòng lặp ta phải đa số lần lặp mongmuốn vào thanh ghi CX và sau mỗi lần thực hiện lệnh LOOP LABEL thì đồngthời CX tự động giảm đi một (CX ←CX-1)

Nhãn LABEL phải nằm cách xa (dịch đi một khoảng) -128 byte so với lệnhtiếp theo sau lệnh LOOP

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

+ Ví dụ :

Trang 32

MOV AL,0 ; AL=0MOV CX,16 ; số lần lặp để tại CX LAP: INC AL ; tăng AL thêm 1

LOOP LAP ; lặp lại 16 lần, AL = 16Một số lệnh lặp khác: LOOPE/LOOPZ - Loop While CX≠0 and ZF=1 (Lặp lại

đoạn chơng trình do nhãn chỉ ra cho đến khi CX=0 hoặc ZF=0)

- Lệnh gọi chơng trình con: CALL-Call o Proceduce ( Gọi chơng trình con )

+Viết lệnh: CALL TEN_CHUONG_TRINH_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ặp lệnh RET ( trở về CTC từ ctc ) tại cuối ctc

+ Ví dụ:

MOV AL,0

OUT DX,AL

CALL TAO_TRE ;gọi chơng trình con có tên là tạo trễ

- Lệnh trở về từ chơng trình con: RET ; bắt buộc phải có để trở về từ

2.4.5 Nhóm lệnh xử lý toán hạng bít:

Các lệnh tiêu biểu nh: CLC, STC, CLI, STI, STD,CLD

- Lệnh đặt cờ CF lên 1: STC - Set the Carry Flag (lập cờ nhớ)

Trang 33

; -;4/45 tiÕt

2.5 Chu tr×nh thùc hiÖn lÖnh

Trang 34

Bộ VXL 8086/8088 hoạt động theo các chu kỳ thời gian gọi là chu kỳ bus(bus cycle) Mỗi chu kỳ bus cần 4 chu kỳ đồng hồ để hoàn thành Hai chu kỳbus chính là

T1: Chu kỳ đồng hồ đầu tiên, bus địa chỉ/dữ liệu đợc sử dụng để đa

ra địa chỉ của bộ nhớ hoặc I/O Đồng thời trong chu kỳ này ALU cũng đa

ra tín hiệu điều khiển ALE, DT/R và IO/M Cuối chu kỳ T1, ALE hạ xuống mứcthấp và địa chỉ trên bus bị chốt đóng lại

T2: ở chu kỳ này có các chuyển trạng thái sau:

Địa chỉ Tín hiệu trạng thái

Địa chỉ ổn định

Địa chỉ Dữ liệu đọc

TRD

Một chu kỳ bus T1 T2 T3 T4

CLK

ALE

A19/S6

A16/S3-A8-A15

AD7

AD0-/M

Trang 35

AD0-AD7 chuyển sang trạng thái trở kháng cao.

A16/S3-A19/S6 chuyển sang trạng thái đa tín hiệu ra

A8-A15 không thay đổi và vẫn đa thông tin về địa chỉ

ALE chuyển xuống mức thấp và chỉ ra rằng địa chỉ không còn tồn tại trêncác đờng địa chỉ

RD phát tín hiệu để bộ nhớ hoặc I/O xuất dữ liệu

DEN làm các mạch đệm trong bus dữ liệu có hiệu lực, cho phép dữ liệu

đợc gửi vào bus để đến MP

T3: Tại chu kỳ này bộ nhớ hoặc mạch I/O đa dữ liệu lên bus Chu kỳ này làkhoảng thời gian phụ thêm để dữ liệu trở nên ổn định trên bus ở chu kỳ này

bộ VXL tiến hành thăm dò chân READY, nếu ở mức cao thì chu kỳ tiếp theo sẽ

là T4, còn nếu ở mức thấp thì chu kỳ tiếp theo sẽ ở trạng thái chờ TW

T4: Tại thời điểm bắt đầu của chu kỳ, MP đọc dữ liệu có trên bus ởcuối chu kỳ T4, các đờng 3 trạng thái chuyển sang trạng thái trở kháng cao đểchuẩn bị

AD0-AD7 WR

/M

Trang 36

2.5.2 Chu trình ghi:

Tơng tự nh ở chu kỳ đọc chỉ có điểm khác nhỏ là ở chu kỳ này không cần

đến trạng thái đợi vì MP lúc đó đang thực hiện việc ghi vào bộ nhớ hoặc I/O

2.5.3 Chu kỳ nhận và thực hiện lệnh

Vi xử lý có 2 chức năng chính là nhận (Fetch) và thực hiện (Execute) lệnh Bớc 1: Trớc hết MP nhận lệnh (mất 1-2 chu kỳ bus)

Bớc 2: Thực hiện lệnh Có những lệnh chỉ cần 2 chu kỳ đồng hồ là thựchiện xong lệnh Song cũng có những lệnh cần rất nhiều chu kỳ đồng hồ Cách

tổ chức của 8086/8088 đã đợc cải tiến thông minh hơn nhiều so với các MPthế hệ trớc ở chỗ tổ chức 2 đơn vị hoạt động tơng đối độc lập là EU và BIU.Trong thời gian EU thực hiện lệnh thì BIU vẫn có thể đảm nhận nhiệm vụnhận trớc các lệnh, cất tạm vào hàng đợi lệnh và các thanh ghi dữ liệu Nhờvậy mà khi bus bị bận trong chu kỳ đọc thì EU thực hiện các lệnh trớc đó vàkhi bus bận trong chu kỳ ghi thì EU lại thực hiện lệnh khác Với cách tổ chứcnày đã làm tăng hiệu quả của toàn bộ hệ thống lên rất nhiều

-

nh vậy là vì:

Về phần cứng, máy IBM PC có cấu trúc khá tiêu biểu của một hệ vi xử lý

Về phần mềm, ta có thể tận dụng các chơng trình soạn thảo văn bảnhoặc rất nhiều chức năng sẵn có khác của máy IBM PC cho các chơng trìnhcủa ta thông qua các dịch vụ (các chơng trình con phục vụ ngắt) của cácngắt của DOS (Disk Operating System, hệ điều hành) và của BIOS (BasicInpus Output System, hệ thống vào ra cơ sở) Tuy nhiên, một hệ thống vi xử lý

Trang 37

cụ thể có thể có kết cấu khác một máy vi tính IBM PC Ta sẽ sử dụng chơngtrình dịch hợp ngữ MASM 5.0 (Macro assemler phiên bản 5.0) của Microsoft vớicách định nghĩa đoạn đơn giản và chế độ bộ nhớ nhỏ hoặc chơng trình

rất phổ biến và dễ dàng sử dụng là EMU8086 Điều này hoàn toàn đủ để

đáp ứng các yêu cầu nảy sinh khi ta thực hiện các chơng trình đơn giản ban

đầu Ta cũng có thể dùng chơng trình dịch hợp ngữ TASM 4.0 (Turboassembler phiên bản 4.0) của Borland International để thử nghiệm các chơngtrình hợp ngữ

Quy ớc đặt tên nhãn: Nhãn phải bắt đầu bằng một chữ cái, kết thúcbằng dấu hai chấm, trong tên nhãn không có khoảng trắng, dấu gạch giữa,không trùng với từ khoá

Trong chơng trình tên nhãn là duy nhất nhng nhãn thì có thể có nhiều( với tên nhãn là vị trí mà nhãn cần tới )

Trang 38

Trong ví dụ trên, tại trờng tên ta có nhãn TIEP, tại trờng mã lệnh ta có lệnhMOV, tại trờng toán hạng ta có các thanh ghi AH, BL và phần chú giải gồm cócác dòng: ; Chuyển nội dung thanh ghi BL sang AH

đích hoặc gốc, còn trong trờng hợp lệnh với 2 toán hạng thì ta có 1 toán hạng

là đích và 1 toán hạng là gốc Toán hạng có thể là các thang ghi hoặc địa chỉcủa ô nhớ hoặc là hằng số

Trờng chú giải ( hú thích) : Lời giải thích ở trờng chú giải phải đợc bắt

đầu bằng dấu chấm phẩy (;) Trờng chú giải này đợc dành riêng cho ngời lậptrình để ghi các lời giải thích cho các lệnh của chơng trình với mục đíchgiúp cho ngời đọc chơng trình dễ hiểu các thao tác của chơng trình hơn Lờichú giải cũng có lợi ngay cho chính tác giả của nó vì sau một thời gian khôngxem đến chơng trình thì mọi việc lại nh mới Khi đọc thấy dấu chấm phẩy,chơng trình dịch bỏ qua không dịch từ phần này trở đi Chính vì vậy ngời

ta cũng thờng hay dùng dấu này để loại bỏ một dòng lệnh nào đó trong chơngtrình Thông thờng lời chú giải cần phải mang đủ thông tin để giải thích vềthao tác của lệnh trong hoàn cảnh cụ thể và nh thế thì mới có ích cho ngời

đọc Đối với những ngời mới lập trình bằng hợp ngữ còn thiếu kinh nghiệm thìlời chú giải còn phản ảnh sự hiểu biết về vấn đề phải giải quyết của họ, vìnếu không hiểu thấu đáo vấn đề thì không để đa ra lời chú giải tốt đợc

3.1.3 Các chỉ dẫn và khai báo trong chơng trình hợp ngữ

- Khai báo quy mô sử dụng bộ nhớ

Kích thớc của bộ nhớ dành cho đoạn mã và đoạn dữ liệu trong một chơngtrình đợc xác định nhờ hớng dẫn chơng trình dịch MODEL nh sau (hớng dẫn

Trang 39

này phải đợc đặt trớc các hớng dẫn khác trong chơng trình hợp ngữ, nhng sauhớng dẫn về loại CPU):

.MODEL Kiểu_ kích_thớc_bộ_nhớ

Có nhiều Kiểu_ kích_thớc_bộ_nhớ cho các chơng trình với đòi hỏi dung ợng bộ nhớ khác nhau Đối với ta thông thờng các ứng dụng đòi hỏi mã chơngtrình dài nhất cũng chỉ cần chứa trong một đoạn (64KB), dữ liệu cho chơngtrình nhiều nhất cũng chỉ cần chứa trong một đoạn, thích hợp nhất nên chọnKiểu_ kích_thớc_bộ_nhớ là Small (nhỏ) hoặc nếu nh tất cả mã và dữ liệu cóthể gói trọn đợc trong một đoạn thì có thể chọn Tiny(hẹp):

l-.Model smallhoặc Model Tiny

Ngoài Kiểu_ kích_thớc_bộ_nhớ nhỏ hoặc hẹp nói trên, tuỳ theo nhu cầu

cụ thể MASM còn cho phép sử dụng các Kiểu_ kích_thớc_bộ_nhớ khác nh liệt kêtrong bảng 4.1

- Khai báo đoạn ngăn xếp:

Việc khai báo đoạn ngăn xếp là cốt để dành ra một vùng nhớ đủ lớndùng làm ngăn xếp phục vụ cho hoạt động của chơng trình khi có chơng

Trang 40

trình con Việc khai báo đợc thực hiện nhờ hớng dẫn chơng trình dịch nhsau.

.Stack Kích_thớcKích_thớc sẽ quyết định số byte dành cho ngăn xếp Nếu ta khôngkhai Kích_thớc thì chơng trình dịch sẽ tự động gán cho Kích_thớc giá trị 1

KB, đây là kích thớc ngăn xếp quá lớn đối với một ứng dụng thông thờng Trongthực tế các bài toán của ta thông thờng với 100-256 byte là đủ để làm ngănxếp và ta có thể khai báo kích thớc cho nó nh sau:

- Khai báo đoạn dữ liệu:

Đoạn dữ liệu chứa toàn bộ các định nghĩa cho các biến của chơngtrình Các hằng cũng nên đợc định nghĩa ở đây để đảm bảo tính hệthống mặc dù ta có thể để chúng ở trong chơng trình nh đã nói ở phần trên

Việc khai báo đoạn dữ liệu đợc thực hiện nhờ hớng dẫn chơng trìnhdịch DATA, việc khai báo và hằng đợc thực hiện tiếp ngay sau đó bằng cáclệnh thích hợp Điều này đợc minh hoạ trong các thí dụ đơn giản sau:

.Data

MSG DB 'helo!$'

- Khai báo đoạn mã:

Đoạn mã chứa mã lệnh của chơng trình Việc khai báo đoạn mã đợc thựchiện nhờ hớng dẫn chơng trình dịch CODE nh sau:

.CODE

- Chỉ dẫn trong chơng trình hợp ngữ:

Bên trong đoạn mã, các dòng lệnh phải đợc tổ chức một cách hợp lý,

đúng ngữ pháp dới dạng một chơng trình chính (CTC) và nếu cần thiết thìkèm theo các chơng trình con (ctc) Các chơng trình con sẽ đợc gọi ra bằngcác lệnh CALL có mặt bên trong chơng trình chính

Một thủ tục đợc định nghĩa nhờ các lệnh giả PROC và ENDP Lệnh giảPROC để bắt đầu một thủ tục còn lệnh giả ENDP đợc dùng để kết thúc nó

Nh vậy một chơng trình chính có thể đợc định nghĩa bằng các lệnh giảPROC và ENDP gọi là chỉ dẫn:

Ngày đăng: 30/09/2018, 22:07

TỪ KHÓA LIÊN QUAN

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

w