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ủa phần tử thuộc chuỗi nguồn.. Chế độ địa ch
Trang 1Chương 2 Bộ vi xử lý 8088 của Intel
1 Giới thiệu hoạt động của bộ vi xử lý 8088
a Giới thiệu chung
Bộ vi xử lý 8088 thuộc họ vi xử lý của Intel
Điển hình: 8085 là bộ vi xử lý 8 bit
8086 là bộ vi xử lý 16 bit hoàn chỉnh
8088 là bộ vi xử lý 16 bit trong/ 8 bit ngoài
Các đặc tính kỹ thuật chủ yếu:
- Số thanh ghi: 14 thanhg ghi 16 bit
- Bus địa chỉ: 20 bit
- Bus dữ liệu: 16 (8086) và 8 (8088)
- Tập lệnh: 115 (là số lệnh được công bố trong nhiều tài liệu)
- Tốc độ chuẩn: 4.77 MHz
- Số chân của bộ vi xử lý: 40
Bộ vi xử lý 8086 của Intel được phát triển từ năm 1978 vào đưa vào thị trường từ năm 1980 Đây là bộ vi xử lý 16 bit bán hoàn chỉnh, các thanh ghi bên trong là 16 bit
và nó xử lý 16 bit dữ liệu cùng một lúc, 8086 liên hệ với kênh số liệu bên ngoài bằng bus dữ liệu 16 bit và bus địa chỉ là 20 bit
Bộ vi xử lý 8088 ra đời sau 8086, nó có cấu trúc bên trong và tập lệnh hoàn toàn giống của 8086, chỉ khác 8086 ở kênh truyền dữ liệu với bên ngoài 8088 sử dụng kênh dữ liệu 8 bit nên việc truyền dữ liệu giữa các thanh ghi trong nó với bộ nhớ chậm hơn so với 8086 Đây là một bước lùi về kỹ thuật nhưng đem lại nhiều lợi ích về kinh tế Tại thời điểm lịch sử đó, bus DataMaster 8 bit đang được sử dụng rộng rãi trên thị trường, nhiều loại card mở rộng và các chip hỗ trợ có sẵn trên thị trường là loại 8 bit nên giá thấp hơn loại 16 bit tương ứng Việc sử dụng bus dữ liệu 8 bit giúp cho người sử dụng khi nâng cấp máy có thể tận dụng được các card 8 bit trong các máy cũ cũng như chỉ phải mua mới với giá thấp Đồng thời cũng giúp cho các nhà sản xuất các máy tương thích với IBM PC có thêm nhiều cơ hội lựa chọn sản phẩm của các hãng khác nhau Chiến lược phát triển có tính kế thừa như vậy đã góp phần làm cho khách hàng của IBM ngày một gia tăng
Chọn bộ vi xử lý 8088 để nghiên cứu vì:
- Tập lệnh chung cho các bộ vi xử lý nói trên
- Tính phức tạp vừa phải, phù hợp với những người mới tìm hiểu
b Cấu trúc và hoạt động của bộ VXL 8088
Sự hoạt động của bộ vi xử lý 8088/8086 thực sự là việc thực hiện lặp đi lặp lại 3 thao tác chính là lấy lệnh (fetch), giải mã lệnh (decode) và thực hiện (execute) Sơ đồ khối của bộ vi xử lý 8088/8086 như hình vẽ với 2 đơn vị chính:
- EU (Execution Unit): Đơn vị (khối) thực hiện lệnh
- BIU (Bus Interface Unit): Đơn vị giao tiếp bus (khối tương thích bus) để điều khiển bus hiệu quả hơn
EU
Đơn vị EU của 8088 và 8086 giống nhau, bao gồm ALU, thanh ghi cờ, các thanh ghi đệm và các thanh ghi đa năng Các bus dữ liệu bên trong của EU đều là 16 bit EU không nối trực tiếp với bên ngoài, nó nhận lệnh từ hàng đợi lệnh bên trong
Trang 2AX: Accumulator BX: Base
CX: Count DX: Data
Stack Pointer Base Pointer Source Index Destination Index
Instruction Pointer Status flags
Code Segment Data Segment Stack Segment Extra Segment
General Registers
Segment Registers
BUI Nếu là lệnh cần truy nhập bộ nhớ hoặc cổng vào/ra (I/O port - thiết bị ngoại vi) thì EU yêu cầu BIU lấy hoặc gửi dữ liệu Tất cả các địa chỉ mà EU thao tác đều là 16 bit, khi gửi sang BIU thì BIU sẽ thực hiện tính toán để tạo địa chỉ vật lý 20 bit và phát
ra các chân địa chỉ của chip
SP
BP
SI
DI
IP FLAGS
CS
DS
SS
ES Hình vẽ: Bộ vi xử lý 8088 và tập thanh ghi
các thanh ghi tạm
thanh ghi cờ
Logic
điều khiển BUS
AX
BX
CX
DX
SP
BP
SI
DI
Khối
điều khiển của
Đệm lệnh (hàng đợi lệnh) (6 byte cho 8086)
BUS ngoài
Bus địa chỉ (20 các thanh
ghi
các thanh ghi
đoạn
các thanh
ghi
con trỏ
Bus dữ liệu ALU(16bit)
Bus dữ liệu (8 bit) Bus trong
8 bit dữ liệu
20 bit địa chỉ
CS
DS
SS
ES
IP
Trang 3Các thanh ghi trong
Có 8 thanh ghi, là thành phần nhớ có tốc độ truy nhập rất cao Bao gồm các thanh ghi đa năng Ax, Bx, Cx, Dx Mỗi thanh ghi 16 bit có thể được phân chia thành 2 thanh ghi 8 bit làm việc độc lập nhau
+ AX (Accumulator, Acc): Thanh chứa, chứa tạm thời dữ liệu (toán hạng, kết quả phép toán như nhân, chia và được coi là Acc)
AX có thể được phân chia thành AH : Phần cao
AL : Phần thấp
+ BX (Base): Thanh ghi cơ sở, thường được dùng để chứa địa chỉ cơ sở cần truy nhập trong lệnh XLAT
BX có thể được phân chia thành BH : Phần cao
BL : Phần thấp + CX (Count): Bộ đếm, thường được dùng để đếm số lần lặp của công việc (số lần lặp trong các vòng lặp)
CX có thể được phân chia thành CH : Phần cao
CL : Phần thấp
CX thường được dùng để chứa số lần lặp trong các lệnh LOOP, còn CL thường chứa số lần dịch hoặc quay trong các lệnh dịch quay thanh ghi
+ DX (Data): Thanh ghi đữ liệu, sử dụng để chứa toán hạng, kết quả DX cùng AX dùng để chứa toán hạng hoặc kết quả của các phép nhân, chia số 16 bit DX còn chứa địa chỉ cổng trong các lệnh vào ra trực tiếp (IN, OUT)
DX có thể được phân chia thành DH : Phần cao
DL : Phần thấp
• Các thanh ghi con trỏ, chỉ số
Các thanh ghi SP, BP là các thanh ghi con trỏ không tách rời
+ SP (Stack Pointer): Thanh ghi con trỏ ngăn xếp, trỏ vào đỉnh hiện thời của ngăn xếp nằm trong đoạn ngăn xếp SS (Nó luôn kết hợp với thanh ghi SS) Ta có địa chỉ logic SS: SP Sau mỗi thao tác cất một word vào stack (thao tác Push) thì
SP tự động giảm 2 đơn vị, còn sau thao tác lấy một word ra khỏi stack (thao tác Pop), SP được tự động tăng 2 đơn vị
+ BP (Base stack Pointer): Con trỏ cơ sở, luôn trỏ vào một dữ liệu cụ thể nằm trong đoạn ngăn xếp SS Ta có địa chỉ logic SS: BP
+ SI (Source Index): Thanh ghi chỉ số nguồn (hay nguồn), chỉ vào dữ liệu nằm trong đoạn DS Ta có địa chỉ logic DS: SI
+ DI (Destination Index): Thanh ghi chỉ số đích, chỉ dữ liệu trong đoạn DS Ta có
địa chỉ logic DS: DI
Ta có các cặp SP, BP đi với SS và SI, DI đi với DS
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ủa phần tử thuộc chuỗi nguồn
• Khối ALU
Làm nhiệm vụ thực hiện các lệnh số học và logic
+ Số học: +, -, *, /, so sánh, đảo dấu
+ Logic:
Phủ định (NOT): NOT 0 = 1, NOT 1 = 0
Tổng quát: NOT A , là phép đảo từng bit của A (8, 16 bit)
Và (AND)
A AND B , thực hiện AND từng cặp bit một của A và B (8, 16 bit)
Trang 4Ví dụ:
A =1011 0100
B =1101 0011
A AND B =1001 0000
Hoặc (OR)
A OR B, thực hiện OR từng cặp bit của A và B (8, 16 bit)
Ví dụ:
A =1011 0100
B =1101 0011
A OR B =1111 0111
Cộng modul (XOR – eXclusive OR)
a ⊕ b = a.b + a.b
Ví dụ:
A =1011 0100
B =1101 0011
A XOR B =1001 0000
• Thanh ghi cờ:
Đây là thanh ghi 16 bit, mỗi bit được sử dụng để thể hiện một trạng thái của bộ
vi xử lý tại một thời điểm nhất định trong quá trình thực hiện chương trình (dãy các câu lệnh), nhưng chỉ dùng 9 bit đối với bộ vi xử lý 8088/8086 Mỗi bit đó được gọi là một cờ (flag) Giá trị của mỗi cờ được biểu diễn bằng các ký hiệu gợi nhớ như cách biểu diễn của chương trình Debug của DOS
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
X X x x O D I T S Z x A x P x C
Các cờ của bộ vi xử lý 8085 (x: Không được định nghĩa (don't care), với 8 bit thấp là các cờ của bộ vi xử lý 8085)
Hình vẽ: Sơ đồ thanh ghi cờ của 8088/86
o Cờ trạng thái: Biểu diễn trạng thái phép toán vừa thực hiện
CF (Carry Flag): Cờ nhớ (cờ tràn)
CF = 1 (CY - CarrY) khi kết quả phép toán vượt (tràn) khuôn khổ biểu diễn (có nhớ (mượn) lên trên (từ) MSB), CF = 0 (NC - No Carry) trong trường hợp ngược lại Cờ này thường được sử dụng khi thực hiện các phép cộng, trừ các số nhiều byte
Ví dụ:
1011 0001 + 0110 1001
1 0001 1010
PF (Parity Flag): Cờ chẵn lẻ
PF = 1 (PE - Parity Even) khi số bit 1 trong kết quả phép toán (hay các phép vận chuyển dữ liệu) là chẵn, PF = 0 (PO - Parity Old) trong trường hợp ngược lại
AF (Carry Flag): Cờ nhớ phụ (tràn phụ - cờ bổ trợ)
Cờ này có ý nghĩa khi ta làm việc với số BCD AF = 1 (AC - Auxiliary Carry) 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) và AF = 0 (NA - No Auxiliary carry) trong trường hợp ngược lại
SF (Sign Flag): Cờ dấu Trong bộ vi xử lý 8088/8086 các số âm được biểu diễn dưới dạng số bù 2, nên phải dùng cờ SF để chỉ thị dấu của kết quả
Trang 5SF = 1 (NG - NeGative), khi kết quả phép toán là một số âm, SF = 0 (PL- PLus) trong trường hợp ngược lại
ZF (Zero Flag): Cờ rỗng
ZF = 1 (ZR - ZeRo) khi kết quả phép toán = 0, ZF = 0 (NZ-Non Zero) trong trường hợp ngược lại
OF (Overflow Flag): Cờ tràn
OF = 1 (OV-OVerflow) khi kết quả là số bù 2 vượt khuôn khổ biểu diễn (tràn
số học, hay nói cách khác: khi cộng hai số cùng dấu mà kết quả là một số trái dấu thì OF = 1), OF = 0 (NV-Non oVerflow) trong trường hợp ngược lại (cờ này làm việc với số có dấu)
o Cờ điều khiển
Cờ trạng thái phụ thuộc kết quả phép toán, còn với cờ điều khiển ta có thể thiết lập nhờ lệnh
IF (Interrupt Flag): Cờ ngắt
IF = 1 (EI-Enable Interrup), CPU cho phép ngắt, IF = 0 (DI-Disable Interrup) CPU không cho phép ngắt (cấm) các loại ngắt che được (Maskable)
TF (Trap Flag): Cờ bẫy
TF = 1 CPU làm việc trong chế độ chạy từng lệnh, thường dùng để gỡ rối chương trình (debug) Sau khi thực hiện xong mỗi lệnh, bộ vi xử lý sẽ phát ra một lệnh ngắt (INT) để có kiểm tra chương trình
DF (Direction Flag): Cờ hướng
Điều khiển hướng xử lý đối với thao tác chuỗi DF = 1 (DN-DowN) thì các lệnh vận chuyển dữ liệu hay xử lý chuỗi sẽ thao tác lùi từ phải đến trái (địa chỉ cao đến
địa chỉ thấp) DF=0 (UP) trong trường hợp ngược lại (thao tác các phần tử từ địa chỉ thấp đến địa chỉ cao)
Cờ này thường được lập bởi chương trình của người sử dụng khi có các lệnh thao tác chuỗi
tiến (thuận – theo chiều tăng địa chỉ) lùi (ngược – theo chiều giảm địa chỉ)
BIU
• Hàng đợi: Là tập thanh ghi
Với 8086 hàng đợi lệnh là 6 byte, 8088 hàng đợi lệnh là 4 byte nên chứa được tối đa là 4 lệnh CPU chứa tập thanh ghi theo kiểu LIFO
Cơ chế:
+ Đọc lệnh (lấy lệnh)
+ Giải mã lệnh
+ Thực hiện
• Thanh ghi IP: Thanh ghi con trỏ lệnh, trỏ vào lệnh tiếp theo
chuẩn bị được thực hiện nằm trong đoạn CS (CS: IP) Sau khi đọc 1 byte, IP tự
động tăng thêm 1 Như vậy thực tế thì cặp CS:IP mới là con trỏ lệnh vì nó chứa địa chỉ đầy đủ của một lệnh trong bộ nhớ
• Thanh ghi đoạn:
+ CS (Code Segment): Thanh ghi đoạn mã, là thanh ghi địa chỉ đoạn mã lệnh, chứa địa chỉ cơ sở (địa chỉ đoạn) của chương trình đang thực hiện
Hàng đợi lệnh
Trang 6+ DS (Data Segment): Thanh ghi đoạn dữ liệu, là thanh ghi địa chỉ đoạn dữ liệu, chứa địa chỉ đoạn của vùng dữ liệu mà chương trình đang thực hiện sử dụng Vùng này thường chứa các biến của chương trình
+ SS (Stack Segment): Thanh ghi đoạn ngăn xếp, là thanh ghi địa chỉ đoạn bộ nhớ ngăn xếp (stack) của chương trình đang chạy
+ ES (Extra Segment): Thanh ghi đoạn dữ liệu phụ, là thanh ghi địa chỉ đoạn dữ liệu bổ sung mà chương trình đang thực hiện sử dụng Vùng này cũng thường chứa các biến của chương trình
8088 có 20 bit địa chỉ, trong khi đó các thanh ghi quản lý bộ nhớ là 16 bit Để xác định một ngăn nhớ có địa chỉ 20 bit, dùng 2 thanh ghi 16 bit để xác định địa chỉ
Địa chỉ luôn nằm trong một thanh ghi gọi là địa chỉ đoạn
Địa chỉ lệch (offset) trong một thanh ghi khác (Ax, Bx, Cx, )
Địa chỉ logic: DS:SI
DS:DI DS:XX
Địa vật lý (phải là số 20 bit) được xác định như sau:
Địa vật lý = địa chỉ đoạn * 16 + địa chỉ lệch
Ví dụ: DS = 4000h, SI = 3F4Dh
Địa chỉ logic của ngăn nhớ: 4000:3F4D
Địa chỉ vật lí của ngăn nhớ: DS * 16 + SI = 40000 + 3F4D = 43F4Dh
Tại một thời điểm CPU quản lý được 4 đoạn nhớ (DS, SS, CS, ES) , nó có thể
đồng thời truy nhập 4 đoạn đó
Bộ nhớ được chia thành nhiều đoạn Mỗi đoạn có kích thước tối đa là 64 KB Vậy ta có 16 đoạn tách rời và địa chỉ lệch thay đổi từ 0000 H đến FFFFh
Nếu địa chỉ đoạn thay đổi từ 0000h đến FFFFh thì có 64 Kđoạn Khi này các
đoạn bao trùm lên nhau 2 đoạn kề nhau sẽ các nhau 16 Byte (Paragraph)
Khi khởi động máy (hoặc Reset) CS được nạp giá trị F000h, IP được nạp giá trị FFF0h Địa chỉ này thuộc đoạn cuối, nơi đặt ROM khởi động
Địa chỉ vật lý = F000h*16 + FFF0h = F0000h + FFF0h = FFFF0h
c Bộ vi xử lý 8086 và 8088
2 Chế độ địa chỉ của 8088
a Cách mã hoá lệnh của bộ VXL 8088/88
b Chế độ địa chỉ thanh ghi
Dùng thanh ghi như là các toán hạng chứa dữ liệu cần thao tác, tốc độ thực hiện lệnh rất nhanh vì CPU không mất thời gian tìm kiếm dữ liệu
Ví dụ:
MOV AL, BL ; AL:= BL
MOV DS, BX ; DS:= BX
ADD AL, DL ; AL:= AL + DL
c Chế độ địa chỉ tức thì
+ Toán hạng đích là thanh ghi, hoặc ô nhớ
+ Toán hạng nguồn là 1 giá trị cụ thể (hằng số)
Trang 7Ví dụ:
MOV AL, 0Dh ;AL:=0Dh
Lệnh này thường được dùng để nạp dữ liệu cần thao tác vào thanh ghi nào đó
d Chế độ địa chỉ tực tiếp
- Một toán hạng là địa chỉ offset của ô nhớ chứa giá trị cần thao tác
- Toán hạng kia là thanh ghi (không được là ô nhớ)
Ví dụ:
MOV AL, [04FCh] ; đưa vào thanh ghi AL nội dung ô nhớ có địa
chỉ logic DS:04FCh
e Chế độ địa chỉ gián tiếp qua thanh ghi
- Một toán hạng là thanh ghi chứa địa chỉ offset của ngăn nhớ chứa giá trị cần thao tác
- Toán hạng kia là thanh ghi (không được là ngăn nhớ)
Ví dụ:
MOV [BX], AL ; Đưa nội dung thanh ghi AL vào ngăn nhớ có địa chỉ
offset nằm trong thanh ghi BX
f Chế độ địa chỉ tương đối cơ sở
- Thanh ghi BX, BP và các hằng số là giá trị dịch chuyển để xác định ngăn nhớ trong DS, SS chứa giá trị cần thao tác
Ví dụ:
MOV [BX + N], CL ; Đưa nội dung thanh ghi CL vào ngăn nhớ có
địa chỉ offset BX + N (DS:BX + N) MOV AL, [BP + N] ; Đưa nội ngăn nhớ có địa chỉ offset BP + N
vào thanh ghi AL (SS:BP + N)
g Chế độ địa chỉ tương đối chỉ số
- Thanh ghi DI, SI và các hằng số là giá trị dịch chuyển để xác định ngăn nhớ chứa giá trị trong DS cần thao tác
Ví dụ:
MOV [SI + N], AH ; Đưa nội dung thanh ghi AH vào ngăn nhớ có
địa chỉ offset tại SI + N (DS:SI + N)
MOV CL, [DI + N] ; Đưa nội dung ngăn nhớ có địa chỉ offset tại
DI + N (DS:DI + N) vào thanh ghi CL
h Chế độ địa chỉ tương đối chỉ số cơ sở
- Chế độ địa chỉ này là sự kết hợp cả 2 chế độ địa chỉ trên Dùng cả thanh ghi cơ
sở và thanh ghi chỉ số để tính địa chỉ toán hạng
Ví dụ:
MOV [BX + SI + N], AX ;Đưa nội dung thanh ghi AX vào ngăn
;nhớ có địa chỉ offset tại BX + SI + N (DS:BX + SI + N) MOV CL, [BP + DI + N] ;Đưa nội dung ngăn nhớ có địa chỉ
;offset tại BP + DI + N (DS:BP + DI + N)
;vào thanh ghi CL
Trang 83 Mô tả tập lệnh của 8088
Tập lệnh của bộ vi xử lý 8088 nói chung được chia
thành 6 nhóm, với 5 nhóm thao tác dữ liệu và 1 nhóm
đặc biệt (gồm các chỉ thị để điều khiển) Một lệnh thường có cấu trúc như sau:
a Nhóm lệnh chuyển dữ liệu
Nhóm này thực hiện vận chuyển dữ liệu (sao chép - copy) từ nơi này đến nơi khác
+ MOV đích, nguồn (Move a Word or Byte)
Lệnh thực hiện chuyển dữ liệu từ nguồn tới đích (đíchnguồn), dữ liệu có thể là một byte hoặc một word (từ) Các toán hạgn có thể được tìm thấy qua các chế độ địa chỉ khác nhau Lệnh này không tác động đến các cờ
+ LDS đích, nguồn (Load Register and DS with Word from Memory)
Lệnh thực hiện 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 thanh ghi DS (đích nguồn, DS nguồn+2)
ứng dụng: thường nạp địa chỉ đầu của vùng nhớ chứa chuỗi nguồn vào SI và
DS trước khi dùng đến lệnh thao tác chuỗi Lệnh này không tác động đến các cờ
Ví dụ:
LDS SI, Str ;Lệnh nạp vào SI nội dung 2 ô nhớ Str và Str+1, rồi nạp vào
;DS nội dung 2 ô nhớ Str+2 và Str+3, các ô nhớ nằm trong DS + LEA đích, nguồn (Load Effective Address)
Lệnh thực hiện nạp địa chỉ hiệu dụng vào thanh ghi Toán hạng 'đích' thường là một trong các thanh ghi: BX, CX, DX, BP, SI, DI Toán hạng 'nguồn' là tên biến trong
đoạn DS được chỉ ra trong lệnh hoặc ô nhớ cụ thể
đích địa chỉ lệch của nguồn (đích @nguồn)
đích địa chỉ hiệu dụng của nguồn Lệnh này không tác động đến các cờ
Ví dụ:
LEA DX, Str ;Lệnh nạp địa chỉ offset của Str vào DX LEA CX, [BX] ;Lệnh nạp địa chỉ hiệu dụng (EA-Effective Address)
;EA = BX LEA CX, [BX][DI] ;Lệnh nạp địa chỉ hiệu dụng EA = BX + DI + LES đích, nguồn
Lệnh này giống lệnh LDS nhưng 2 byte tiếp theo được nạp vào thanh ghi ES ứng dụng: thường nạp vào DI và ES địa chỉ đầu của vùng nhớ chứa chuỗi trước khi thực hiện các lệnh thao tác chuỗi Lệnh này không tác động đến các cờ
Ví dụ:
LES DI, Str ;Lệnh nạp địa chỉ offset của Str vào DX
Trang 9+ IN Acc, Port (Input data from a port)
Đọc dữ liệu từ cổng vào/ra vào thanh ghi Acc (Acc {Port}) Với {Port} là dữ liệu của cổng có địa chỉ là Port (là địa chỉ 8 bit = 00h FFh)
Acc là AL đọc 8 bit từ cổng Port, là AX đọc 16 bit từ cổng Port và Port+1 Thường dùng DX để chứa địa chỉ cổng có thể có địa chỉ từ 0000h FFFFh
Viết lệnh: IN Acc, DX
Lệnh này không tác động đến các cờ
Ví dụ:
MOV DX, 07F8h
IN AL, DX ;Đọc 1 byte từ cổng có địa chỉ 07F8h
+ OUT Acc, Port (Output a byte or a word to a port)
Đưa dữ liệu từ thanh ghi Acc đến cổng vào/ra
Acc Port
Lệnh này thao tác ngược lại với lệnh IN, tính chất hoàn toàn tương tự Lệnh này không tác động đến các cờ
+ STC (Set the Carry fag): Lập cờ nhớ: CF 1
Lệnh này không tác động đến các cờ khác
+ STD (Set the Direcion flag): Lập cờ hướng: DF 1
Lệnh này định hướng thao tác cho các lệnh làm việc với chuỗi theo chiều lùi () Các thanh ghi liên quan: SI, DI sẽ được tự động giảm khi làm việc xong với 1 phần tử của chuỗi Lệnh này không tác động đến các cờ
+ STC (Set the Interrupt fag): Lập cờ cho phép ngắt: IF 1
Lệnh lập IF để cho các yêu cầu ngắt tác động vào chân INTR được CPU nhận biết IF=1, INTR=1 CPU bị ngắt, cất thanh ghi cờ, địa chỉ trở về vào Stack rồi thực hiện chương trình con phục vụ ngắt Lệnh này không tác động đến các cờ khác + CLC (Clear the Carry flag): Xoá cờ nhớ: CF 0
Lệnh này không tác động đến các cờ khác
+ CLD (Clear the Direction flag): Xoá cờ hướng: DF 0
Lệnh định hướng thao tác cho các lệnh làm việc với chuỗi theo chiều tiến () Các thanh ghi liên quan: SI, DI sẽ tự động tăng 1 khi làm việc xong với một phần tử dữ liệu của chuỗi Lệnh này không tác động đến các cờ khác
+ CLI (Clear the Interrupt flag): Xoá cờ cho phép ngắt: IF 0
Khi thực hiện lệnh này, các ngắt che được sẽ bị che Lệnh này không tác động
đến các cờ khác
+ CMC (Complement the Carry flag): Đảo cờ nhớ: CF CF
Lệnh chỉ cập nhật CF, không tác động đến các cờ khác
+ PUSH nguồn
Push Word on the Stack: Cất 1 từ vào ngăn xếp
SP SP-2
{SP} nguồn
Toán hạng nguồn tìm được theo các chế độ địa chỉ khác nhau Lệnh này thường đi cặp với lệnh POP Lệnh này không tác động đến các cờ
+ POP đích
Pop Word from top of Stack: Lấy 1 word từ đỉnh ngăn xếp vào thanh ghi
đích {SP}
SP SP+2
Toán hạng đích tìm được theo các chế độ địa chỉ (không được là thanh ghi đoạn mã: CS) Dữ liệu để tại ngăn xếp không thay đổi SS không thay đổi Lệnh này không tác động đến các cờ
Trang 10+ POPF
Pop Word from top of Stack to Flag register: Lấy 1 word từ đỉnh ngăn xếp vào thanh ghi cờ
RF {SP}
SP SP+2
Dữ liệu để tại ngăn xếp không thay đổi SS không thay đổi Lệnh này không tác
động đến các cờ
b Nhóm lệnh số học
+ ADC đích, nguồn
Add with carry: cộng 2 toán hạng có nhớ
đích đích+nguồn+CF
Các toán hạng đích, nguồn tìm được theo các chế độ địa chỉ, phải chứa dữ liệu cùng độ dài (cùng kiểu) Không được là 2 ô nhớ và không được là thanh ghi đoạn
Điều này áp dụng hầu hết cho tất cả các lệnh số học có cú pháp tương tự
Lệnh cập nhật các cờ: AF, CF, OF, PF, SF, ZF
+ ADD đích, nguồn ;Add: cộng 2 toán hạng có nhớ
đích đích+nguồn
Các toán hạng đích, nguồn tìm được theo các chế độ địa chỉ, phải chứa dữ liệu cùng độ dài (cùng kiểu) Không được là 2 ô nhớ và không được là thanh ghi đoạn (Tính chất giống với lệnh ADC)
Lệnh cập nhật các cờ: AF, CF, OF, PF, SF, ZF
+ SBB đích, nguồn
Substract with Borrow: Trừ có mượn
đích đích-nguồn-CF
Các toán hạng đích, nguồn tìm được theo các chế độ địa chỉ, phải chứa dữ liệu cùng độ dài (cùng kiểu) Không được là 2 ô nhớ và không được là thanh ghi đoạn (Tính chất giống với lệnh ADC)
Lệnh cập nhật các cờ: AF, CF, OF, PF, SF, ZF
AF, PF chỉ liên quan đến 8 bit thấp
+ SUB đích, nguồn
Substract: Trừ 2 toán hạng
đích đích-nguồn
Các toán hạng đích, nguồn tìm được theo các chế độ địa chỉ, phải chứa dữ liệu cùng độ dài (cùng kiểu) Không được là 2 ô nhớ và không được là thanh ghi đoạn (Tính chất giống với lệnh ADC)
Lệnh cập nhật các cờ: AF, CF, OF, PF, SF, ZF
AF, PF chỉ liên quan đến 8 bit thấp
Chú ý: Các ví dụ cho các lệnh ADC, ADD, SBB, SUB có thể tham khảo trong tài liệu
Kỹ thuật Vi xử lý - Văn Thế Minh
+ MUL nguồn (Multiply Unsigned Byte or Word)
Nhân số không dấu Toán hạng 'nguồn' là số nhân, tìm được theo các chế độ
địa chỉ Tuỳ theo độ dài (kích thước) của toán hạng 'nguồn' mà ta có các trường hợp sau:
o 'nguồn' là 8 bit (1 byte): AX AL*nguồn, số bị nhân phải là số 8 bit để trong thanh ghi AL
o 'nguồn' là 16 bit (2 byte): DXAX AX*nguồn, số bị nhân phải là số 16 bit
để trong thanh ghi AX