Bộ vi sử lí Intel 8088

Thể loại: Điện Điện tử
Lượt xem: 138,976Lượt tải: 6Số trang: 54

Mô tả tài liệu

Trước hết cần nói rỏ lý do tại sao ở đâyta lại chọn đích danh bộ vi zử láy 8088 để tìm hiểu mà không phải là bộ vi xử lý nào khác ( điều mà nhiều người khác phải làm ). Thứ nhất, đây là bộ vi xử lý nổi tiếng một thời thuộc họ 80x86 của Intel, nó được sử dụng trong nhiều lĩnh vực khác nhau, nhất là trong các máy IBM 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àng chục năm nữa, và vi...

Tóm tắt nội dung

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ủa Intel. Thứ nhất, đây là bộ vi xử lý nổi tiếng một thời thuộc họ 80x86 của Intel, nó được sử dụng trong nhiều lĩnh vực khác nhau, nhất là trong các máy IBM 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àng chụ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. 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. 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ìm hiểu kỹ cấu trúc bên trong của nó. Trong số các bus đó có bus dữ liệu 16 bit củ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ài hoặ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ớ. 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 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. 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. 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ủa CPU 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, khi CPU 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ì 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 ). Trong khi đó 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 chia thà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ệc giả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ự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ố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 dung củ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ặc gọ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ác lệ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. Khối BIU đưa ra trên bus địa chỉ 20 bit địa chỉ, như vậy 8088 có khả năng phân biệt ra được 220 = 1.048.576 = 1M ô nhớ hay 1Mbyte, vì các bộ nhớ nói chung tổ chức theo byte. Trong không gian 1Mbyte bộ nhớ cần được chia thành các vùng khác nhau ( đ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 để:  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 ). 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ác thanh 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ậy cá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 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 đó. 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ỉ 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 đóng vai 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ủa mộ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: 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: Đị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 bus địa chỉ. 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ã. Địa chỉ 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 sự tương ứng giữa hai loại địa chỉ này ( thông qua bộ tạo địa chỉ ). 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ý. 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ị: 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 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ần thấ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 ghi thường được gan cho những cái tên đặc biệt rất có ý nghĩa. Nếu kết quả là 8 bit thì thanh ghi AL được coi là acc.  BX ( base ): thanh ghi cơ sở thường chứa địa chỉ cơ sở của một bảng dùng trong lệnh XLAT. 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. 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. Đị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. Đị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. SI chỉ vào dữ liệu trong đoạn dữ liệu DS mà địa chỉ cụ thể đầy đủ ứng với DS:SI và được xác định theo cách đã nói ở trên. 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 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. Đây là thanh ghi khá đặc biệt trong CPU, mỗi bit của nó được dùng để phản ánh một trạng thái nhất định của kết quả phép toán do ALU thực hiện hoặc mộ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 ).  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 ). 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. 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 ): 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 ). Để cho việc giả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 3.4 ). Gọi C67 là cờ nhớ từ bit 6 ( B6 ) lên bit 7 ( B7 ), trong đó B7 là MSB và cũng chính là bit dấu ( SF ) của AL. Ta có thể chứng minh được rằng quan hệ giữa cờ OF với các cờ CF và C67 tuân theo phương trì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. 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 ta nó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. Điểm khác nhau đầ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à 6 byte; đ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ác nhau 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ác thanh 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. Đ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ên hì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 Đố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 cho dướ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ện lê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àm việc với các hệ được trang bị chương trình dịch hợp ngữ ). 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ó. Đối với bộ vi xử lý 8088 một lệnh có thể có độ dài từ 1 đến 6 byte. 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án hạ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. 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. 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: 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ế độ địa chỉ 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êm phầ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 ). - Các giá trị cho trong các cột 2,3,4 (ứng với MOD =00,01,10) là các địa chỉ hiệu 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ộng vớ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. 3.Các chế độ địa chỉ của bộ vi xử lý 8088 Chế độ địa chỉ (addressing mode ) là cách để CPU tìm thấy toán hạng 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ý 8088 và cả họ 80x86 nói chung đều có 7 chế độ địa chỉ sau: 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ệnh ADD. 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. 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. 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 ). 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án hạ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. 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 cho phép quy chiếu bộ nhớ 2 lần đối với một lệnh ). 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.  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ảng Table ( BX ) thuộc đoạn DS là EA = Table+BX và của phần tử đầu tiên là EA = Table. 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 hai chiều 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èm vớ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ỉ ra cá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 định nà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àn hạ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ợp ngầ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 ghi lệ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. 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ể đưa vào AL,thì ta phải viết lại lệnh trên thành 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 . 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ới cá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.Trong khi 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ủa ngăn xếp có địa chỉ do nội dung của thanh ghi con trỏ ngăn xếp SP chỉ ra . 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 ta là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. 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 . 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ày phả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ố BCD không gói khác.Kết quả và số dư cũng là cac số BCD không gói. 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ố BCD không gói để tại AX . Sau khi nhân 2 số 5 và 9 ở dang ASCII .Ta đổi kết quả sang dạng BCD không gói bằng lệnh AAM và sau đó đổi tiếp thành mã ASCII để truyền tiếp 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. Trong đó tớn hạng đích và gốc có thể tìm đwocj theo các chế độ địa chỉ khác nhau. Nhưng phải chứa dữ liệu có 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. Ví dụ: Các ví dụ sau đây có thể đại diện chó các chế độ địa chỉ có thể có trong lệnh cộng này cũng như một số các lệnh khác vứoi ngữ pháp tương tự. Tróng đó toán hạng đích và gốc có thể tìm được theo các chế độ địa chỉ khác nhau. Nhưng phải chứa dữ liệu có 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. 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ả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 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á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ạ ). 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. 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ỉ ra trong đoạn DS ( SI, DI có thể dùng thay chỗ của BX ). 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 ). Các thanh ghi liên quan là SI và DI sẽ được tự động tăng khi làm việc xong với một phần tử của chuỗi. Trong đó toán hạng đích và gốc có thể tìm được theo các chế độ địa chỉ khác nhau. Lệnh này chỉ tạo các cờ, không lưu kết quả so sanh, sau khi so sanh các toán hạng không bị thay đổi. Lệnh chỉ tạo cá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. 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ểu thao 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. 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 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ải chỉ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àm otá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. 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ỉnh lạ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ới các số BCD. 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. Trong đó toán hạng đích có thể tìm đựoc thưo các chế độ địa chỉ khác nhau. 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. Số bị chia phải là số không dấu 32 bit để trong cặp thanh ghi DXAX. 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. 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. 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. 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. 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. 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: Trong đó toán hạng đích có thể tìm được theo các chế độ địa chỉ khác nhau. Bảng này gồm 256 vecto, chứa địa chỉ của các CTPVN tương ứng và chiếm 1Kbyte Ram có địa chỉ thấp nhất của bộ nhớ. 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ắt INT 4. 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ấy lạ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ề địa chỉ 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. Hai lnh trn iưu khin cuìng mt thao tạc Nhaíy cọ iưu kin vi nhaín nu CF+ZF = 0 .Quan h “trn “ (above),” cao hn “ vaì quan h “dỉi “ , “ thp hn” (below) laì cạc quan h daình cho vic so sạnh (do lnh CMP thỉc hin ) ln cuía hai s khng du .Nhaỵn NHAN phaíi nịm cạch xa (dch chuyn mt khoaíng )-128. . +127byte so vi lnh tip theo sau lnh A:/INBE .Chỉng trçnh seỵ cn cỉ vaìo giạ tr chuyn xạc nh cạc giạ tr chuyn Vi dủ :Nu 1 khung thanh AL cao hn 10H thç nhaíy ln nhaỵn TH01 Ba lnh trn ưu thỉc hin cuìng mt thao tạc : nhaíy cọ iưu kin ti NHAN nu CF = 0 . Quan h “trn “ (above),” cao hn “ vaì quan h “dỉi “ , “ thp hn” (below) laì cạc quan h daình cho vic so sạnh (do lnh CMP thỉc hin ) ln cuía hai s khng du .Nhaỵn NHAN phaíi nịm cạch xa (dch chuyn mt khoaíng )-128. . +127byte so vi lnh tip theo sau lnh A:/INBE .Chỉng trçnh seỵ cn cỉ vaìo giạ tr chuyn xạc nh cạc giạ tr chuyn V dủ : Nu ni dung thanh AL cao hn hồc bịng 10H thç nhaíy n nhaỵn THOI Ba lnh trn ưu thỉc hin cuìng mt thao tạc : nhaíy cọ iưu kin ti NHAN nu CF = 0 . Quan h “trn “ (above),” cao hn “ vaì quan h “dỉi “ , “ thp hn” (below) laì cạc quan h daình cho vic so sạnh (do lnh CMP thỉc hin ) ln cuía hai s khng du .Nhaỵn NHAN phaíi nịm cạch xa (dch chuyn mt khoaíng )-128. . +127byte so vi lnh tip theo sau lnh A:/INBE .Chỉng trçnh seỵ cn cỉ vaìo giạ tr chuyn xạc nh cạc giạ tr chuyn V dủ : Nu ni dung thanh AL thp hn hồc bịng 10H thç nhaíy n nhaỵn THOI Hai lnh trn ưu thỉc hin cuìng mt thao tạc : nhaíy cọ iưu kin ti NHAN nu CF+ZF=1 . Quan h “trn “ (above),” cao hn “ vaì quan h “dỉi “ , “ thp hn” (below) laì cạc quan h daình cho vic so sạnh (do lnh CMP thỉc hin ) ln cuía hai s khng du .Nhaỵn NHAN phaíi nịm cạch xa (dch chuyn mt khoaíng )-128. . +127byte so vi lnh tip theo sau lnh A:/INBE .Chỉng trçnh seỵ cn cỉ vaìo giạ tr chuyn xạc nh cạc giạ tr chuyn V dủ : Nu ni dung thanh AL thp hn hồc bịng 10H thç nhaíy n nhaỵn THOI y laì lnh nhaíy iưu kin ti NHAN nu CX =0 vaì khng cọ lin h gç vi cì ZF . . +127byte so vi lnh tip theo sau lnh A:/INBE .Chỉng trçnh seỵ cn cỉ vaìo giạ tr chuyn xạc nh cạc giạ tr chuyn Hai lnh trn ưu thỉc hin cuìng mt thao tạc : nhaíy (cọ iưu kin ) ti NHAN nu ZF=1.Nhaỵn NHAN phaíi nịm cạch xa (dch chuyn mt khoaíng )-128. . +127byte so vi lnh tip theo sau lnh JE/JZ .Chỉng trçnh seỵ cn cỉ vaìo giạ tr chuyn xạc nh cạc giạ tr chuyn V dủ : Nu ni dung thanh AL bịng 10H thç nhaíy n nhaỵn THOI Hai lnh trn ưu thỉc hin cuìng mt thao tạc : nhaíy (cọ iưu kin ) ti NHAN nu (SFOF)+ZF =0 . Quan h “ln hn “ (greater than ),” bẹ hn “(less than) vaìì cạc quan h daình cho vic so sạnh (do lnh CMP thỉc hin ) ln cuía hai s khng du .Ln hn cọ ngha laì dỉng hn .Nhaỵn NHAN phaíi nịm cạch xa (dch chuyn mt khoaíng )-128. . +127byte so vi lnh tip theo sau lnh JG/JNLE .Chỉng trçnh seỵ cn cỉ vaìo giạ tr chuyn xạc nh cạc giạ tr chuyn Hai lnh trn ưu thỉc hin cuìng mt thao tạc : nhaíy (cọ iưu kin ) ti NHAN nu (SFOF =0 . Quan h “ln hn “ (greater than ),” bẹ hn “(less than) vaìì cạc quan h daình cho vic so sạnh (do lnh CMP thỉc hin ) ln cuía hai s khng du .Ln hn cọ ngha laì dỉng hn .Nhaỵn NHAN phaíi nịm cạch xa (dch chuyn mt khoaíng )-128. . +127byte so vi lnh tip theo sau lnh JG/JNLE .Chỉng trçnh seỵ cn cỉ vaìo giạ tr chuyn xạc nh cạc giạ tr chuyn V dủ : Nu ni dung thanh AL ln hn hồc bịng 10H thç nhaíy n nhaỵn THOI : Hai lnh trn biu din cuìng mt thao tạc : nhaíy (cọ iưu kin) ti NHAN nu (SFOF)+ZF=0. Quan h “ln hn” (greater than) vaì “bẹ hn “ (less than) laì cạc quan h daình cho vic so sạnh (do lnh CMP thỉc hin) cuía 2 s cọ du. Hai lnh trn biu din cuìng mt thao tạc: nhaíy (cọ iưu kin) ti NHAN nu (SFOF)=0. Quan h “ln hn” (greater than) vaì “bẹ hn “ (less than) laì cạc quan h daình cho vic so sạnh (do lnh CMP thỉc hin) cuía 2 s cọ du. V dủ : Nu ni dung thanh AL ln hn hồc bịng 10 H thç nhaíy n nhaỵn THOI : Hai lnh trn biu din cuìng mt thao tạc : nhaíy (cọ iưu kin) ti NHAN nu (SFOF)=1. Quan h “ln hn” (greater than) vaì “bẹ hn “ (less than) laì cạc quan h daình cho vic so sạnh (do lnh CMP thỉc hin) cuía 2 s cọ du. V dủ : Nu ni dung thanh AL nhoí hn 10 H thç nhaíy n nhaỵn THOI : Quan h “ln hn” (greater than) vaì “bẹ hn “ (less than) laì cạc quan h daình cho vic so sạnh (do lnh CMP thỉc hin) cuía 2 s cọ du. V dủ : Nu ni dung thanh AL khng ln hn 10H thç nhaíy n nhaỵn THOI : Lnh naìy khin cho b vi xỉí ly 8088 bt ưu thỉc hin mt lnh mi tải a ch ỉc m taí trong lnh. Chỉng trçnh dch seỵ cn cỉ vaìo khoaíng dch giỉỵa nhaỵn vaì lnh nhaíy xạc nh xem ọ laì : Trong trỉìng hp naìy NHAN nịm í oản maỵ khạc so vi lnh tip theo sau lnh JMP. Chỉng trçnh dch seỵ cn cỉ vaìo v tr NHAN xạc nh giạ tr a ch nhaíy n (CS:IP cuía NHAN). y laì lnh nhaíy trỉc tip vç a ch nhaíy n ỉc trỉc tip trong maỵ lnh. y laì lnh nhaíy gưn ỉng vi trỉìng hp b) hçnh 3.8, trỉc ọ BX phaíi chỉa a ch lch cuía lnh nh nhaíy n trong oản CS. y cuỵng laì lnh nhaíy giạn tip vç a ch lch nịm trong thanh ghi. y laì lnh nhaíy gưn ỉng vi trỉìng hp e) hçnh 3.8, IP mi ỉc ly tỉì ni dung 2 nh do BX vaì BX+1 ch ra trong oản DS y cuỵng laì lnh nhaíy giạn tip vç a ch lch nịm trong nh. Giạ tr gạn choIP vaì CS ỉc chỉa trong 4 nh do BX vaì BX+1 (cho IP) vaì BX+2 vaì BX+3 (cho CS) ch ra trong oản DS(SI,DI cọ th duìng thay ch cuía BX). y cuỵng laì lnh nhaíy giạn tip vç a ch c sí nịm trong nh. Hai lnh trn biu din cuìng mt thao tạc : nhaíy (cọ iưu kin) ti NHAN nu ZF=0. V dủ : Nu ni dung thanh AL khạc 10H thç nhaíy n nhaỵn THOI : y laì lnh nhaíy (cọ iưu kin) ti NHAN nu OF=0, tỉc khng saíy ra sau khi thỉc hin cạc phẹp toạn vi cạc s cọ du. Hai lnh trn biu din cuìng mt thao tạc : nhaíy (cọ iưu kin) ti NHAN nu PF=0. V dủ : Nu ta truyưn i mt ky tỉ vi parity chịn maì khi nhn lải ỉc ky tỉ parity leí thç nhaíy n nhaỵn THOI : y laì lnh nhaíy (cọ iưu kin) ti NHAN nu SF=0, tỉc kt quaí laì dỉng sau khi thỉc hin cạc phẹp toạn vi cạc s cọ du. y laì lnh nhaíy (cọ iưu kin) ti NHAN nu OF=1, tỉc saíy ra traìn sau khi thỉc hin cạc phẹp toạn vi cạc s cọ du. Hai lnh trn biu din cuìng mt thao tạc : nhaíy (cọ iưu kin) ti NHAN nu PF=1. V dủ : Nu ta truyưn i mt ky tỉ vi parity leí maì khi nhn lải ỉc mt ky tỉ parity chơn thç nhaíy n nhaỵn THOI : y laì lnh nhaíy (cọ iưu kin) ti NHAN nu SF=1, tỉc kt quaí laì m sau khi thỉc hin cạc phẹp toạn vi cạc s cọ du. Duìng lnh naìy phi hp vi lnh PUSH AX thç cọ th m phoíng lnh PUSH PSW cuía b vi xỉí ly 8085 trn 8088 (lnh PUSH PSW cuía vi xuí ly 8085 ct thanh ghi cì vaì Acc cuía nọ vaìo ngn xp). LDS - Load Register and DS with Words from Memory (Nảp mt tỉì (tỉì b nh) vaìo thanh ghi cho trong lnh vaì mt tỉì tip theo vaìo DS) + ch laì mt trong cạc thanh ghi : AX, BX, CX, DX, SP, BP, SI, DI. + Gc laì nh trong oản DS ỉc ch roỵ trong lnh. y laì lnh nảp vaìo thanh ghi aỵ chon vaì vaìo DS tỉì 4 nh lin tip Mt trong nhỉỵng ỉng dủng cuía lnh naìy laì laìm sao cho SP vaì DS ch vaìo a ch ưu cuía vuìng nh chỉa chui gc trỉc khi duìng n lnh thao tạc chui. Cạc nh naìy ưu nịm trong oản dỉỵ liu DS vaì chỉa a ch cuía chui gc. + ch thỉìng laì mt trong cạc thanh ghi : BX, CX, DX, BP, SI, DI. + Gc laì tn bin trong oản DS ỉc ch roỵ trong lnh hồc nh củ th. y laì lnh tnh a ch lch cuía bin hồc a ch cuía nh chon laìm gc rưi nảp vaìo thanh ghi aỵ chon. LES - Load Register and ES with Words from Memory (Nảp mt tỉì (tỉì b nh) vaìo thanh ghi cho trong lnh vaì mt tỉì tip theo vaìo ES) + ch laì mt trong cạc thanh ghi : AX, BX, CX, DX, SP, BP, SI, DI. + Gc laì nh trong oản DS ỉc ch roỵ trong lnh. y laì lnh nảp vaìo thanh ghi aỵ chon vaì vaìo ES tỉì 4 nh lin tip Mt trong nhỉỵng ỉng dủng cuía lnh naìy laì laìm sao cho DI vaì ES ch vaìo a ch ưu cuía vuìng nh chỉa chui gc trỉc khi duìng n lnh thao tạc chui. Cạc nh naìy ưu nịm trong oản dỉỵ liu DS vaì chỉa a ch cuía chui gc. Lnh LOCK duìng t trỉc cạc lnh maì khi chảy nọ cọ nguy c gy li do khaí nng xaíy ra tranh chp trong vic sỉí dủng bus giỉỵa b vi xỉí ly 8088 vaì cạc b xỉí ly khạc trong h thng a xỉí ly. Lnh XCHG cưn 2 lưn thm nhp bus hoaìn tt vic thỉc hin lnh, do ọ cưn t sau LOCK trạnh nguy c tranh chp bus cọ th xaíy ra trong h thng a xỉí ly. Lnh LODS nảp vaìo AL/AX 1 byte/tỉì (1 phưn tỉí cuía chuuo aỵ ỉc nh ngha trỉc laì chui gưm cạc byte hồc tỉì ) do SI ch ra trogn oản DS, sau ọ SI tỉ ng tng/giaím ch vaìo phưn tỉí tip theo tuyì theo cì hỉng. Khi phaíi dch lnh LODS Chuigc, chỉng trçnh dch duìng tn Chuigc xạc nh xem lục khai bạo thç Chuigc cọ cạc phưn tỉí laì byte hay tỉì. Mun ch roỵ cho chỉng trçnh dch hp ngỉỵ rịng ta laìm vic vi chui cạc byte hồc cạc tỉì, ta cuỵng cọ th duìng lnh LODSB hồc LODSW. Lnh naìy duìng lp lải oản chỉng trçnh (gưm cạc lnh nịm trong khoaíng tỉì nhaỵn NHAN n ht lnh LOOP NHAN) cho n khi s lưn lp CX=0. iưu naìy cọ ngha laì trỉc khi vaìo voìng lp ta phaíi ỉa s lưn lp mong mun vaìo thanh ghi CX vaì sau mi lưn thỉc hin lnh LOOP NHAN thç ưng thìi CX tỉ ng giaím i mt (CX CX-1). Nhaỵn NHAN phaíi nịm cạch xa (dch i mt khoaíng) -128 byte so vi lnh tip theo sau lnh LOOP. Lnh naìy duìng lp lải oản chỉng trçnh (gưm cạc lnh nịm trong khoaíng tỉì nhaỵn NHAN n ht lnh LOOPE NHAN hồc LOOPZ NHAN) cho n khi s lưn lp CX=0 hồc ZF=0. iưu naìy cọ ngha laì trỉc khi vaìo voìng lp ta phaíi ỉa s lưn lp mong mun vaìo thanh ghi CX vaì sau mi lưn thỉc hin lnh LOOP NHAN thç ưng thìi CX tỉ ng giaím i 1 (CX CX-1). Nhaỵn NHAN phaíi nịm cạch xa (dch i mt khoaíng) -128 byte so vi lnh tip theo sau lnh LOOPE/ LOOPZ. Lnh naìy duìng lp lải oản chỉng trçnh (gưm cạc lnh nịm trong khoaíng tỉì nhaỵn NHAN n ht lnh LOOPNE NHAN hồc LOOPNZ NHAN) cho n khi s lưn lp CX=0 hồc ZF=1. iưu naìy cọ ngha laì trỉc khi vaìo voìng lp ta phaíi ỉa s lưn lp mong mun vaìo thanh ghi CX vaì sau mi lưn thỉc hin lnh LOOP NHAN thç ưng thìi CX tỉ ng giaím i 1 (CX CX-1). Nhaỵn NHAN phaíi nịm cạch xa (dch i mt khoaíng) -128 byte so vi lnh tip theo sau lnh LOOPNE/ LOOPNZ. Trong ọ toạn hảng ch vaì gc cọ th tçm ỉc theo cạc ch a ch khạc nhau, nhỉng phaíi cọ cuìng daìi vaì khng ỉc phẹp ưng thìi laì 2 nh hồc 2 thanh ghi oản. Lnh MOVS/MOVSB/MOVSW cọ th duìng keìm vi lnh REPE hồc REPNE so sạnh tt caí cạc phưn tỉí trong chui. Trong ọ toạn hảng Gc laì s nhn vaì cọ th tçm ỉc theo cạc ch a ch khạc nhau. M taí : tuyì theo daìi cuía toạn hảng Gc ta cọ 2 trỉìng hp t chỉc phẹp nhn, ch ngưm nh cho s b nhn vaì kt quaí : Nhỉ vy cạc cì CF vaì OF seỵ bạo cho ta bit cọ th boí i bao nhiu s 0 trong kt quaí. S 8 bit naìy í AL cưn phaíi ỉc mí rng sang AH bịng cạch gạn AH=0 laìm cho s b nhn nịm trong AX. Sau cuìng ch vic duìng lnh MUL Gc vaì kt qur cọ trong cp DXAX. Nọ thỉìng ỉc duìng tnh thìi gian trong cạc voìng tr hồc chim ch cho cạc lnh cưn thm vaìo chỉng trçnh sau naìy maì khng laìm aính hỉíng n daìi cuía chỉng trçnh. Trong ọ toạn hảng ch vaì gc cọ th tçm ỉc theo cạc a ch khạc nhau, nhỉng phaíi chỉa dỉỵ liu cuìng daìi vaì khng ỉc phẹp ưng thìi laì 2 nh vaì cuỵng khng ỉc laì thanh ghi oản. Port laì a ch 8 bit cuía cng, nọ cọ th cọ cạc giạ tr trong khoaíng 00H ... Lục naìy a ch cng nịm trong daíi 0000H ...FFFFH vaì ta phaíi vit lnh theo dảng : Trong ọ toạn hảng ch cọ th tçm ỉc theo cạc ch a ch khạc nhau : cọ th laì cạc thanh ghi a nng, thanh ghi oản (nhỉng khng ỉc laì thanh ghi oản maỵ CS) hồc nh. Trong ọ toạn hảng gc cọ th tçm ỉc theo cạc ch a ch khạc nhau : cọ th laì cạc thanh ghi a nng, thanh ghi oản hồc nh. Lnh naìy thỉìng duìng vi lnh POP nhỉ laì mt cp i ngu xỉí ly cạc dỉỵ liu vaì trảng thại cuía chỉng trçnh chnh (CTC) khi vaìo/ra chỉng trçnh con (ctc). Sau lnh RCL cì CF mang giạ tr cuỵ cuía MSB, coìn cì OF 1 nu sau khi quay mt lưn maì bit MSB b thay i so vi trỉc khi quay. Ta nhn thy s lưn cuía quay laì 9 thç kt quaí khng thay i vç cp CF vaì toạn hảng - thanh ghi quay troìn ụng mt voìng. Sau lnh RCR cì CF mang giạ tr cuỵ cuía LSB, coìn cì OF 1 nu sau khi quay mt lưn maì bit MSB b thay i so vi trỉc khi quay. y laì tip ưu ngỉỵ duìng vit trỉc cạc lnh thao tạc vi chui dỉỵ liu maì ta mun lp lải mt s lưn. Khi cạc lnh naìy ỉc lp lải thç CX tỉ ng giaím i mt sau mi lưn lp. y laì tip ưu ngỉỵ duìng vit trỉc cạc lnh thao tạc vi chui dỉỵ liu maì ta mun lp lải mt s lưn. Khi duìng REPE/REPZ vi lnh so sạnh chui, quạ trçnh seỵ kt thục khi m ht (CX=0) hồc khi hai phưn tỉí so sạnh khạc nhau (ZF=0). y laì tip ưu ngỉỵ duìng vit trỉc cạc lnh thao tạc vi chui dỉỵ liu maì ta mun lp lải mt s lưn. Khi duìng REPNE/REPNZ vi lnh quẹt chui, quạ trçnh seỵ kt thục khi m ht (CX=0) hồc khi Acc bịng phưn tỉí cuía chui (ZF=1). RET ỉc t tải cui ctc b vi xỉí ly ly lải a ch trí vư (a ch cuía lnh tip theo lnh goi cuía CTC), nọ ỉc tỉ ng ct í ngn xp khi cọ lnh goi ctc. Tuyì theo loải gưn hay xa ta cuỵng seỵ cạc xỉí ly khạc nhau i vi a ch trí vư (xem thm phưn m ta chung vi lnh Call). c bit nu ta duìng RET n thç sau khi aỵ ly lải ỉc a ch trí vư (ch cọ IP hồc cọ CS vaì IP) thç SP SP + n (duìng nhaíy qua maì khng ly lải cạc thng s khạc cuía chỉng trçnh coìn lải trong ngn xp). Ta nhn thy nu CL=8 vaì toạn hảng quay laì 8 bit thç kt quaí khng b thay i vç toạn hảng quay troìn ụng mt voìng, coìn nu CL=4 thç 2 nibble cuía toạn hảng b i ch. Sau lnh ROL cì CF mang giạ tr cuỵ cuía MSB, coìn cì OF 1 nu sau khi quay mt lưn maì bit MSB b thay i so vi trỉc khi quay. Cìì CF tỉì giạ tr cuía MSB laìm iưu kin cho cạc lnh nhaíy cọ iưu kin. Sau lnh ROR cì CF mang giạ tr cuỵ cuía LSB, coìn cì OF 1 nu sau khi quay mt lưn maì bit MSB b thay i so vi trỉc khi quay. Lnh naìy thỉìng duìng tảo cì CF tỉì giạ tr cuía LSB laìm iưu kin cho cạc lnh nhaíy cọ iưu kin. Duìng lnh naìy phi hp vi lnh POP AX thç cọ th m phoíng lnh POP PSW cuía b vi xỉí ly 8085 trn 8088. Hai lnh naìy cọ cuìng tạc dủng dch trại s hoc toạn hảng (coìn goi laì dch trại logic cọ lnh i ngu vi lnh dch phaíi logic seỵ nọi í phưn sau). Sau lnh SAL hồc SHL cì CF mang giạ tr cuỵ cuía MSB (vç vy lnh naìy coìn duìng tảo cì CF tỉì giạ tr cuía MSB laìm iưu kin cho cạc lnh nhaíy cọ iưu kin), coìn cì OF 1 nu sau khi dch mt lưn maì bit MSB b thay i so vi trỉc khi quay. Trong ọ toạn hảng ch vaì gc cọ th tçm ỉc theo cạc ch a ch khạc nhau, nhỉng phaíi chỉa cuìng mt loải dỉỵ liu vaì khng ỉc phẹp ưng thìi laì 2 nh vaì cuỵng khng ỉc laì thanh ghi oản. V dủ : Cạc v dủ sau y cọ th ải din cho cạc ch a ch cọ th cọ trong lnh trỉì naìy cuỵng nhỉ mt s cạc lnh khạc vi ngỉỵ phạp tỉng tỉ. Lnh SCAS so sạnh AL hồc AX vi tỉìng byte hay tỉìng tỉì cuía xu ch ch tảo cạc cì, khng lỉu kt quaí so sạnh, cạc toạn hảng khng b thay i. Khi dch ln SCAS Chuich, chỉng trçnh dch duìng tn Chuich xạc nh xem lục khai bạo thç Chuich cọ cạc phưn tỉí laì byte hay tỉì. Mun chi roỵ cho chỉng trçnh dch hp ngỉỵ rịng ta laìm vic vi chui byte (chỉa cạc byte) hồc chui tỉì (chỉa cạc tỉì ), ta cuỵng cọ th duìng lnh SCASB hồc SCASW. Cạc lnh naìy coìn thỉìng duìng keìm vi REPNE/REPNZ lp lải vic quẹt mt s lưn hồc quẹt cho ti khi tçm ỉc mu cưn tçm. Sau lnh SHR cì CF mang giạ tr cuỵ cuía LSB(vç vy lnh naìy coìn duìng tảo cì CF tỉì giạ tr cuía LSB laìm iưu kin cho cạc lnh nhaíy cọ iưu kin), coìn cì OF 1 nu sau khi dch mt lưn maì bit MSB b thay i so vi trỉc khi dch. Cạc thanh ghi SI vaì DI lin quan seỵ ỉc tỉ ng giaím khi laìm vic xong vi mt phưn tỉí cuía chui. Khi IF=1 nu cọ tn hiu INTR=1 thç 8088 seỵ b ngt, nọ seỵ tỉ ng ngt thanh ghi cì vaì a ch trí vư vaìo ngn xp rưi chuyn sang chảy chỉng trçnh (con) phủc vủ ngt CTPVN. Tải chui CTPVN seỵ cọ lnh trí vư CTC tỉì CTPVN (IRET) 8088 ly lải tỉì ngn xp giạ tr cuía thanh ghi cì vaì a ch trí vư. Lnh STOS ct AL/AX vaìo 1 byte/tỉì (1 phưn tỉí cuía chui aỵ ỉc nh ngha trỉc laì chui gưm cạc byte hồc tỉì. Do DI ch ra trong oản ES, sau ọ DI tỉ ng tng /giaím ch vaìo phưn tỉí tip theo tuyì theo cì hỉng. Khi dch ln STOS Chuich, chỉng trçnh dch duìng tn Chuich xạc nh xem lục khai bạo thç Chuich cọ cạc phưn tỉí laì byte hay tỉì. Mun chi roỵ cho chỉng trçnh dch hp ngỉỵ rịng ta laìm vic vi chui cạc byte hồc cạc tỉì ta cuỵng cọ th duìng lnh STOSB hồc STOSW. Trong th dủ trn chỉng trçnh dch hp ngỉỵ seỵ duìng tn STR1 xạc nh kiu cuía STR1 laì byte hay laì tỉì rưi tỉ ng ct AL hay AX vaìo chui. Trong th dủ thỉ 2 chỉng trçnh dch hp ngỉỵ seỵ hiu laì chỉỵ “B” trong lnh STOSB xạc nh kiu cuía STR1 laì byte vaì tỉ ng ct AL vaìo chui. Trong ọ toạn hảng ch vaì gc cọ th tçm ỉc theo cạc ch a ch khạc nhau, nhỉng phaíi chỉa dỉỵ liu cọ cuìng daìi vaì khng ỉc phẹp ưng thìi laì 2 nh vaì cuỵng khng ỉc laì thanh ghi oản. Trong ọ toạn hảng ch vaì gc cọ th tçm ỉc theo cạc ch a ch khạc nhau, nhỉng phaíi chỉa dỉỵ liu cọ cuìng daìi vaì khng ỉc phẹp ưng thìi laì 2 nh vaì cuỵng khng ỉc laì thanh ghi oản. Lnh naìy ỉa b xỉí ly 8088 vaìo trảng thại ngh vaì nọ seỵ mang lải trảng thại naìy cho ti khi cọ tn hiu í mỉc thp tạc ng vaìo chn TEXT hồc khi cọ tn hiu cao tạc ng vaìo chn INTR. Trong ọ toạn hảng ch vaì gc cọ th tçm ỉc theo cạc ch a ch khạc nhau, nhỉng phaíi chỉa dỉỵ liu cọ cuìng daìi vaì khng ỉc phẹp ưng thìi laì 2 nh vaì cuỵng khng ỉc laì thanh ghi oản. Lnh naìy duìng 8 bit hồt t hn tỉì maỵ naìy ( gc) sang maỵ khạc (ch) theo mt baíng tra cho sơn trỉc khi thỉc hin lnh i, baíng tra phaíi chỉa cạc maỵ ch vaì BX phaíi chỉa a ch lnh cuía baíng naìy trong oản dỉỵ liu. khi chảy lnh XLAT thç phẹp cng AL + BX phaíi ỉc thỉc hin tảo ra a ch nh trong baíng so maì ni dung cuía nọ seỵ ỉc cạch trí lải vaìo thanh ghi AL. Trong ọ toạn hảng ch vaì gc cọ th tçm ỉc theo cạc ch a ch khạc nhau, nhỉng phaíi chỉa dỉỵ liu cọ cuìng daìi vaì khng ỉc phẹp ưng thìi laì 2 nh vaì cuỵng khng ỉc laì thanh ghi oản. Tỉì tnh cht cuía phẹp hồc loải trỉì ta thy nu toạn hảng ch truìng vi toạn hảng gc thç kt quaí bịng 0, do ọ lnh naìy coìn ỉc duìng xoạ vư 0 mt thanh ghi naìo ọ vaì keìm theo cạc cì CF vaì OF cuỵng b xoạ. Trn y ta aỵ gii thiu qua tc caí cạc lnh cọ trong tp lnh cuía b vi xỉí ly 8086/88. Ta cọ th coi y laì mt v dủ vư mt tp lnh cuía mt b vi xỉí ly duìng ch tảo ra mạy tnh vi tp lnh ưy uí (Complex instruction set computer CISC) vi c trỉng laì : cọ rt nhiưu lnh vi cạc ch a ch rt a dảng, cạc lnh cọ daìi khạc nhau vaì thìi gian thỉc hin cuỵng khạc nhau. Th maì trn thỉc t, trong cạc chỉng trçnh hp ngỉỵ giaíi quyt cạc cng vic củ th, thỉìng cọ nhiưu lnh ỉc duìng vi tưn sut ln nhỉng cuỵng cọ nhỉỵng lnh rt t khi hồc thm ch khng hư ỉc sỉí dủng. y cuỵng chnh laì ly do cạc nhaì saín xut cho ra ìi cạc b vi xỉí ly cọ cu trục caỵi tin theo hỉng n giaín hoạ vi tp lnh lnh rt hỉỵu dủng ( cọ s lnh t hn vi ch a ch n giaín, cạc lnh cọ daìi thng nht vaì cọ thìi gian thỉc hin nhỉ nhau) nhỉng laijcos khaí nng thỉc hin lnh nhanh hn gp bi so vi loải CISC.