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

Tài liệu Chương III: Tập lệnh của vi xử lý docx

14 578 2
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Chương III: Tập lệnh của vi xử lý khái niệm về lệnh, dạng lệnh và cách mã hóa lệnh của vi xử lý.
Định dạng
Số trang 14
Dung lượng 140,5 KB

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

Nội dung

Reg Segment Register: các thanh ghi đoa ̣n... Nạp con trỏ bộ nhớ vào thanh ghi DS Load Pointer to DS... • Lê ̣nh tăng Increment.. • Chỉnh ASCII cho lê ̣nh cô ̣ng ASCII Adjust for

Trang 1

CHƯƠNG III: TẬP LỆNH CỦA VI XỬ LÝ

3.1 KHÁI NIỆM VỀ LỆNH, DẠNG LỆNH VÀ CÁCH MÃ HOÁ LỆNH CỦA VI

XỬ LÝ.

Vi xử lý là mô ̣t IC số có tất cả các hàm số cơ bản, để thực hiê ̣n được mô ̣t bài toán hay mô ̣t công viê ̣c nào đó, các hàm số cơ bản sẽ được cho phép thực hiê ̣n mô ̣t cách tuần tự theo mô ̣t thuâ ̣t toán nhất đi ̣nh Để cho phép mô ̣t hàm số hoa ̣t đô ̣ng cần phải cung cấp tín hiê ̣u cho ̣n hàm, và cho ̣n dữ liê ̣u xử lý trong hàm, viê ̣c cung cấp các tín hiê ̣u như vâ ̣y được go ̣i là cung cấp mô ̣t lê ̣nh cho vi xử lý

Như vâ ̣y da ̣ng lê ̣nh của vi xử lý sẽ bao gồm hai phần chính: mô ̣t phần cho ̣n hàm được go ̣i là mã hoa ̣t đô ̣ng (opcode – operation code), mô ̣t phần cho ̣n dữ liê ̣u cần xử lý trong hàm đươ ̣c go ̣i là toán ha ̣ng của lê ̣nh (operand) như trình bày trên hình 3.1

Vi xử lý là mô ̣t IC số, vì vâ ̣y các lê ̣nh mà nó hiểu được phải ở dưới da ̣ng nhi ̣ phân 0, 1 đươ ̣c go ̣i là các lê ̣nh mã máy Do viê ̣c viết các chương trình bằng các lê ̣nh mã máy, chỉ toàn là các số 0 và 1 rất khó nhớ, khó kiểm tra nên người ta sử du ̣ng các mã gợi nhớ để thay thế khi lâ ̣p trình Ở cả hai da ̣ng mã gợi nhớ và mã máy, các lê ̣nh đề thể hiê ̣n hai phần opcode và operand như mô tả ở trên Để lê ̣nh ngắn go ̣n, người ta không cung cấp trực tiếp các tín hiê ̣u cho ̣n trong lê ̣nh, mà chúng được mã hoá thành các phần khác nhau của lê ̣nh Sau khi lấy vào CPU các phần này sẽ được giải mã để ta ̣o ra các tín hiê ̣u cho ̣n ma ̣ch

Đô ̣ dài của mô ̣t lê ̣nh có thể từ 1 tới vài byte, tuỳ thuô ̣c vào từng loa ̣i vi xử lý Nếu sử du ̣ng

1 byte để mã hoá phần opcode, thì vi xử lý sẽ có cực đa ̣i 256 lê ̣nh khác nhau Trong thực tế viê ̣c ghi lê ̣nh không hoàn toàn đơn giản như vâ ̣y, mà nó còn bi ̣ chi phối bởi nhiều yếu tố khác nữa

Các lê ̣nh của vi xử lý thường có 1 hoă ̣c hai toán ha ̣ng, các toán ha ̣ng này cũng được mã hoá

cu ̣ thể trong mã lê ̣nh Ví du ̣ lê ̣nh di chuyển dữ liê ̣u của 8088 được mã hoá như hình 3.2

Hình 3.1: Da ̣ng lê ̣nh của vi xử lý

M/R REG

0 0 1 0

0

Hình 3.2: Mã hoá lê ̣nh MOV trong CPU 8088

Trang 2

Toán ha ̣ng chứa kết quả cuối cùng của phép xử lý dữ liê ̣u được go ̣i là toán ha ̣ng đích (Destination), toán ha ̣ng còn la ̣i trong lê ̣nh được go ̣i là toán ha ̣ng nguồn (Source)

Lê ̣nh MOV đích,nguồn sử du ̣ng để chuyển dữ liê ̣u giữa hai thanh ghi, hoă ̣c giữa thanh ghi

và ô nhớ Như vâ ̣y ngoài phần Opcode, trong lê ̣nh các toán ha ̣ng nguồn và đích cần được chỉ thi ̣ Hình 3.2 cho thấy, để mã hoá các lê ̣nh MOV cần ít nhất 2 byte, trong đó 6 bit của byte đầu sử du ̣ng cho Opcode Với các lê ̣nh MOV không sử du ̣ng toán ha ̣ng là thanh ghi đoa ̣n thì 6 bit này luôn là 100010 Khi sử du ̣ng toán ha ̣ng là thanh ghi đoa ̣n sẽ có 6 bit Opcode khác

Bit W để mã hoá toán ha ̣ng là mô ̣t byte (W=0) hoă ̣c hai byte (W=1) Trong lê ̣nh chuyển dữ liê ̣u, mô ̣t trong hai toán ha ̣ng bắt buô ̣c phải là thanh ghi 8088 sử du ̣ng 2 hoă ̣c 3 bit trong

lê ̣nh để mã hoá các thanh ghi của nó như sau:

AX BX CX DX SP DI BP SI CS DS ES SS

AL BL CL DL AH BH CH DH

000 011 001 010 100 111 101 110 01 11 00 10

Bit D dùng để mã hoá hướng truyền của dữ liê ̣u trong lê ̣nh, D=1 dữ liê ̣u sẽ được chuyển tới thanh ghi mã hoá bởi 3 bit REG trong lê ̣nh, D=0 dữ liê ̣u sẽ chuyển từ thanh ghi mã hoá bởi REG đi

Hai bit mod và 3 bit M/R (memory/register) sử du ̣ng cho viê ̣c chỉ thi ̣ cho chế đô ̣ đi ̣a chỉ cho toán ha ̣ng còn la ̣i của lê ̣nh Chế đô ̣ đi ̣a chỉ là cách chỉ thi ̣ vi ̣ trí của dữ liê ̣u sau được mô tả trong mu ̣c kế tiếp Bảng sau sẽ trình bày cách mã hoá của các chế đô ̣ đi ̣a chỉ trong mô ̣t

lê ̣nh

Mod

Trang 3

001

010

011

100

101

110

111

[BX]+[SI]

[BX]+[DI]

[BP]+[SI]

[BP]+[DI]

[SI]

[DI]

d16, direct [BX]

[BX]+[SI] + d8 [BX]+[DI] + d8 [BP]+[SI] + d8 [BP]+[DI] + d8 [SI] + d8 [DI] + d8 [BP] + d8 [Bx] + d8

[BX]+[SI] + d16 [BX]+[DI] + d16 [BP]+[SI] + d16 [BP]+[DI] + d16 [SI] + d16 [DI] + d16 [BP] + d16 [Bx] + d16

AL CL DL BL AH CH DH BH

AX CX DX BX SP BP SI DI

Trong đó : - d8: là toán ha ̣ng đô ̣ dời 8 bit; d16: là toán ha ̣ng đô ̣ dời 16 bit

Ví du ̣ viê ̣c mã hoá lê ̣nh MOV CL,[BX] như sau:

3.2 CÁC CHẾ ĐỘ ĐI ̣NH VI ̣ ĐI ̣A CHỈ.

Các chế đô ̣ đi ̣nh vi ̣ đi ̣a chỉ là các cách chỉ thi ̣ vi ̣ trí các toán ha ̣ng trong các lê ̣nh mà CPU thực hiê ̣n Mô ̣t bô ̣ vi xử lý có thể có nhiều chế đô ̣ đi ̣a chỉ, các chế đô ̣ này được xác đi ̣nh theo cấu trúc phần cứng ngay từ khi chế ta ̣o Cùng mô ̣t nguyên tắc đi ̣nh vi ̣ đi ̣a chỉ, các hãng chế ta ̣o CPU có thể đă ̣t các tên go ̣i khác nhau Sau đây là các chế đô ̣ đi ̣a chỉ thông du ̣ng của các bô ̣ vi xử lý :

3.2.1 Chế độ tức thời (immediate addressing mode):

Trong chế đô ̣ này toán ha ̣ng là mô ̣t hằng số được mã hóa ngay trong lê ̣nh Toán ha ̣ng tức thời chỉ có thể là toán ha ̣ng nguồn

Ví du ̣ : MOV CL,100H ; chuyển giá tri ̣ 100H vào thanh ghi CL

MOV [BX],10H ; chuyển 10H vào ô nhớ có đi ̣a chỉ logic DS:BX

3.2.2 Chế độ trực tiếp (direct):

Trong chế đô ̣ này toán ha ̣ng là đi ̣a chỉ của ô nhớ chứa dữ liê ̣u cần xử lý trong lê ̣nh Toán

ha ̣ng còn la ̣i trong lê ̣nh chỉ có thể là thanh ghi, không thể cùng đồng thời là ô nhớ Trong

8088, toán ha ̣ng trực tiếp sẽ là đi ̣a chỉ đô ̣ lê ̣ch (offset) của dữ liê ̣u

Ví du ̣ : MOV AL,[1000H] ;Chuyển nô ̣i dung ô nhớ DS:1000H vào AL

MOV [2009H],CX ;Chuyển nô ̣i dung CX vào hai ô nhớ liên tiếp

;DS:2009H và DS:200AH – với 8088

3.2.3 Chế độ trực tiếp thanh ghi (direct register):

Trong chế đô ̣ này các thanh ghi bên trong CPU đươ ̣c sử du ̣ng để chứa dữ liê ̣u cần xử lý trong lê ̣nh Vì thế các lê ̣nh này có tốc đô ̣ thực hiê ̣n nhanh hơn nhiều so với các lê ̣nh sử du ̣ng các toán ha ̣ng ngoài bô ̣ nhớ

1 0 0 0 1 0 1 0 0 0 0 0 1 1 1 1

Opcode chuyển tới thanh ghi

Chuyển 1 byte

CL [BX]

Hình 3.3: Mã hoá lê ̣nh MOV CL,[BX]

Trang 4

Ví du ̣ : MOV BX,DX ; chuyển giá tri ̣ từ DX qua BX.

ADD BL,CL ; cô ̣ng giá tri ̣ của BL với giá tri ̣ trong CL

3.2.4 Chế độ gián tiếp thanh ghi (indirect register):

Chế đô ̣ này sử du ̣ng các thanh ghi giữ đi ̣a chỉ của ô nhớ chứa dữ liê ̣u cần xử lý trong lê ̣nh, toán ha ̣ng còn la ̣i trong lê ̣nh phải là mô ̣t thanh ghi

Ví du ̣ : MOV AH,[BX] ; chuyển nô ̣i dung ô nhớ có đi ̣a chỉ DS:BX vào AH

MOV [SI],CL ; chuyển giá tri ̣ của CL vào ô nhớ có đi ̣a chỉ DS:SI

Trong ho ̣ 8088/8086 chỉ có các thanh ghi BX, BP, SI, DI có thể sử du ̣ng làm các toán ha ̣ng gián tiếp thanh ghi

3.2.5 Chế độ đi ̣a chỉ chỉ số (index):

Trong chế đô ̣ này đi ̣a chỉ của toán ha ̣ng được tính bằng tổng số giữa 1 thanh ghi 16 bit và giá tri ̣ đô ̣ dời (displacement values) Phương pháp chỉ đi ̣nh đi ̣a chỉ này rất có lợi khi truy

câ ̣p các bảng số liê ̣u, lúc này các lê ̣nh truy câ ̣p chỉ cần cung cấp giá tri ̣ đô ̣ dời trong mã lê ̣nh của nó

Với ho ̣ Intel chỉ có các thanh ghi BX, BP, SI và DI có thể sử du ̣ng trong chế đô ̣ đi ̣a chỉ này

Đi ̣a chỉ đoa ̣n tùy theo từng lê ̣nh có thể nằm trong các thanh ghi DS hoă ̣c ES

Ví du ̣ : MOV CX,[BX]+10 ;chuyển nô ̣i dung hai ô nhớ liên tiếp bắt đầu

;ta ̣i đi ̣a chỉ DS:(BX+10) vào CX

MOV CX,[BX+10] ; 1 cách viết khác của lê ̣nh trên

MOV CX,10 [BX] ; 1 cách viết khác của lê ̣nh trên

3.2.6 Chế độ tương đối chỉ số :

Trong chế đô ̣ này đi ̣a chỉ ô nhớ chứa toán ha ̣ng được chỉ đi ̣nh bằng tổng của hai thanh ghi và mô ̣t số đô ̣ dời Chế đô ̣ này rất tiê ̣n du ̣ng trong viê ̣c đi ̣a chỉ hoá cho các mảng hai chiều Trong 8088, chúng ta có tất cả 4 cách viết toán ha ̣ng trong chế đô ̣ đi ̣a chỉ này bao gồm: [BX]+[DI]+Disp ; [BX]+[SI]+Disp ; [BP]+[DI]+Disp ; [BP]+[SI]+Disp

3.2.7 Chế độ tương đối:

Trong vi xử lý thông thường chế đô ̣ này được sử du ̣ng trong các lê ̣nh nhảy Khi đó đi ̣a chỉ cần chuyển điều khiển tới sau lê ̣nh nhảy sẽ được tính bằng khoảng cách từ vi ̣ trí lê ̣nh nhảy tới vi ̣ trí cần chuyển điều khiển đến

Ví du ̣ : JZ 03H ;chuyển điều khiển tới lê ̣nh cách lê ̣nh nhảy 03 byte

3.2.8 Chế độ từng bit.

Trong chế đô ̣ này toán ha ̣ng chỉ thi ̣ trong lê ̣nh chỉ là 1 bit của mô ̣t ô nhớ hoă ̣c mô ̣t thanh ghi nào đó Chế đô ̣ này rất hữu du ̣ng trong các chương trình điều khiển, khi muốn thay đổi

mô ̣t ngõ nào đó chúng ta sẽ không cần phải câ ̣p nhâ ̣t giá tri ̣ cho cả cổng chứa nó

Ví du ̣ : SET P0.0 ;lâ ̣p giá tri ̣ bit 0 của cổng 0 lên 1

3.2.9 Chế độ gián tiếp.

Chế đô ̣ này thường sử du ̣ng cho các cơ cấu chuyển điều khiển chương trình Vi ̣ trí cần chuyển tới sẽ được chứa trong mô ̣t ô nhớ, và toán ha ̣ng trong lê ̣nh sẽ chỉ thi ̣ đi ̣a chỉ của ô nhớ chứa đi ̣a chỉ của ô nhớ đó

Trong 8088 chế đô ̣ này được sử du ̣ng cho cơ chế phu ̣c vu ̣ ngắt

3.3 MÔ TẢ TẬP LỆNH CỦA 8088/8086.

Trang 5

Mô ̣t bô ̣ vi xử lý có tâ ̣p lê ̣nh bao gồm nhiều lê ̣nh, các lê ̣nh của chúng thông thường thể hiê ̣n cho mô ̣t chức năng số cơ bản nào đó Tuy vâ ̣y, tất cả các loa ̣i vi xử lý đều có thể chia tâ ̣p

lê ̣nh của chúng thành ba nhóm chính là : Các lê ̣nh di chuyển dữ liê ̣u, các lê ̣nh xử lý dữ liê ̣u và các lê ̣nh điều khiển chương trình

Khi mô tả các lê ̣nh sử du ̣ng các ký hiê ̣u sau:

- Imm (Immediate): các toán ha ̣ng tức thời

- Reg (Register) : các toán ha ̣ng trực tiếp thanh ghi

- Mem (Memory) : các toán ha ̣ng bô ̣ nhớ nói chung

- Mem8 (Memory 8 bit) : các toán ha ̣ng bô ̣ nhớ 8 bit

- Mem16 (Memory 16 bit) : các toán ha ̣ng bô ̣ nhớ 16 bit

- Seg Reg (Segment Register): các thanh ghi đoa ̣n

3.3.1 Nhóm lê ̣nh di chuyển dữ liê ̣u.

1 Lê ̣nh chuyển dữ liê ̣u (Move).

- Cú pháp: MOV Dest,Source

- Thực hiê ̣n: Dest ← Source

Dữ liê ̣u được chép từ toán ha ̣ng nguồn (Source) tới toán ha ̣ng đích (Dest) Chú ý lê ̣nh không làm thay đổi toán ha ̣ng nguồn, chỉ làm thay đổi toán ha ̣ng đích

- Các toán ha ̣ng sử du ̣ng trong lê ̣nh mô tả trong bảng sau:

Reg

Reg

Reg

Mem

Mem

Seg.Reg

Seg.Reg

Reg Mem Imm Reg Imm Reg16 Mem16

MOV AH,BH MOV CL,[1000H]

MOV DH,10 MOV Table,BX MOV X1,25H MOV DS,AX MOV ES,X2

- Chú ý mô ̣t số trường hợp không sử du ̣ng được trong lê ̣nh này bao gồm:

+ Không chuyển dữ liê ̣u trực tiếp giữa hai ô nhớ

+ Không chuyển giá tri ̣ tức thời (Imm) vào thanh ghi đoa ̣n

+ Không chuyển dữ liê ̣u giữa hai thanh ghi đoa ̣n

+ Không dùng thanh ghi CS làm toán ha ̣ng đích

2 Lê ̣nh chuyển đổi dữ liê ̣u (Exchange).

- Cú pháp: XCHG Dest,Source

- Thực hiê ̣n: Dest ↔ Source

Dữ liê ̣u được chuyển đổi giữa hai toán ha ̣ng đích và nguồn, tức là sau khi thực hiê ̣n cả toán

ha ̣ng đích và toán ha ̣ng nguồn đều thay đổi

- Các trường hợp sử du ̣ng trong lê ̣nh:

Trang 6

3 Lê ̣nh lấy dữ trong bảng vào AL.

- Cú pháp: XLAT

- Thực hiê ̣n: AL ← [DS*10H+BX+AL]

Lấy giá tri ̣ thứ n trong bảng dữ liê ̣u vào thanh ghi AL, với BX giữ đi ̣a chỉ đầu bảng, AL giữ khoảng cách từ đầu bảng tới giá tri ̣ cần lấy

4 Lê ̣nh nạp đi ̣a chỉ tác động vào thanh ghi.(Load Effective Address to Register)

- Cú pháp: LEA Reg16,X1 ;X1 là tên biến cần lấy đi ̣a chỉ

- Thực hiê ̣n: Reg16 ← Đi ̣a chỉ tác đô ̣ng của biến X1.

Lấy đi ̣a chỉ offset của biến X1 vào mô ̣t thanh ghi 16 bit

5 Nạp con trỏ bộ nhớ vào thanh ghi DS (Load Pointer to DS).

- Cú pháp: LDS Reg16,X

- Thực hiê ̣n: DS ← Seg.X

Lấy đi ̣a chỉ đoa ̣n của biến X vào thanh ghi DS và lấy đi ̣a chỉ tác đô ̣ng vào thanh ghi 16 bit

6 Lê ̣nh nạp con trỏ bộ nhớ vào thanh ghi ES:

- Cú pháp: LES Reg16,Var

- Thực hiê ̣n: ES ← Seg.Var

Reg16 ← Off.Var

7 Lê ̣nh cất dữ liê ̣u vào ngăn xếp.

- Cú pháp: PUSH Source

Toán ha ̣ng Source trong lê ̣nh có thể là mô ̣t biến bô ̣ nhớ hoă ̣c mô ̣t biến thanh ghi Cất thanh ghi cờ vào đỉnh ngăn xếp sử du ̣ng lê ̣nh PUSHF

- Thực hiê ̣n: Cất dữ liê ̣u chỉ thi ̣ bởi toán ha ̣ng nguồn vào đỉnh ngăn xếp và tự đô ̣ng giảm con trỏ ngăn xếp tuỳ theo số byte của toán ha ̣ng nguồn

Ví du ̣ : PUSH AX sẽ thực hiê ̣n các thao tác sau

8 Lê ̣nh lấy dữ liê ̣u ra khỏi ngăn xếp.

- Cú pháp: POP Dest

Toán ha ̣ng đích trong lê ̣nh cũng có thể là mô ̣t toán ha ̣ng bô ̣ nhớ hoă ̣c mô ̣t thanh ghi Phu ̣c hồi thanh ghi cờ từ đỉnh ngăn xếp sử du ̣ng lê ̣nh POPF

- Thực hiê ̣n: Lấy dữ liê ̣u từ đỉnh ngăn xếp ra toán ha ̣ng đích và tăng giá tri ̣ của SP lên mô ̣t lươ ̣ng tương ứng với số byte chứa được trong toán ha ̣ng đích

9 Các lê ̣nh truy cập cổng.

Lê ̣nh nhâ ̣p (input):

IN Acc,Port

IN Acc,[DX]

Trang 7

Lê ̣nh xuất (output):

OUT Port,Acc

OUT [DX],Acc

Với: Port là đi ̣a chỉ cổng vào ra truy xuất dữ liê ̣u

[DX] là toán ha ̣ng gián tiếp thanh ghi chứa đi ̣a chỉ cổng

Acc là thanh ghi chứa (AX nếu truy xuất từ, AL nếu truy xuất byte)

3.3.2 Các lê ̣nh xử lý dữ liê ̣u.

Các lê ̣nh xử lý dữ liê ̣u ngoài kết quả lê ̣nh chứa trong toán ha ̣ng đích, tra ̣ng thái của kết quả đó còn làm ảnh hưởng tới các cờ tra ̣ng thái trong thanh chi cờ

1 Các lê ̣nh cộng:

• Cô ̣ng (Add):

- Cú pháp: ADD Dest,Source

- Thực hiê ̣n: Dest ← Dest+Source

CF ← Bit tràn của kết quả.

- Các toán ha ̣ng sử du ̣ng trong lê ̣nh:

Reg

Reg

Mem

Reg

Mem

Reg Mem Reg Imm Imm

ADD AX,BX ADD BX,VAR ADD SUM,DX ADD CL,09 ADD SUM,10

• Cô ̣ng có nhớ : (Add with Carry).

- Cú pháp: ADC Dest,Source

- Thực hiê ̣n: Dest ← Dest+Source+CF

- Các toán ha ̣ng sử du ̣ng trong lê ̣nh giống như lê ̣nh cô ̣ng

• Lê ̣nh tăng (Increment)

- Cú pháp: INC Dest

- Thực hiê ̣n: Dest ← Dest+1

- Toán ha ̣ng đích sử du ̣ng trong lê ̣nh có thể là mô ̣t thanh ghi hoă ̣c mô ̣t ô nhớ

• Chỉnh thâ ̣p phân cho lê ̣nh cô ̣ng (Decimal Adjust for Add)

- Cú pháp: DAA

- Thực hiê ̣n: kết quả của lê ̣nh cô ̣ng đă ̣t ngay trước lê ̣nh chỉnh thâ ̣p phân sẽ được điều chỉnh từ da ̣ng nhi ̣ phân thông thường thành da ̣ng BCD nén Giá tri ̣ tràn khỏi thanh chứa sẽ lưu trong cờ C

Để có kết quả đúng, các toán ha ̣ng sử du ̣ng trong lê ̣nh cô ̣ng trước DAA phải ở da ̣ng thâ ̣p phân nén

• Chỉnh ASCII cho lê ̣nh cô ̣ng (ASCII Adjust for Add).

- Cú pháp: AAA

Trang 8

- Thực hiê ̣n: Điều chỉnh la ̣i giá tri ̣ ASCII cho lê ̣nh cô ̣ng ngay phía trước Để có kết quả đúng, các toán ha ̣ng của lê ̣nh cô ̣ng phải dưới da ̣ng mã ASCII

2 Các lê ̣nh trừ (Subtract).

Hoàn toàn tương tự với các lê ̣nh cô ̣ng, 8088 có các lê ̣nh trừ tương đương

• Trừ có nhớ : SBB Dest,Source

• Chỉnh thâ ̣p phân cho phép trừ : DAS

• Chỉnh ASCII cho phép trừ : AAS

3 Các lê ̣nh nhân (multiply).

• Lê ̣nh nhân

- Cú pháp: MUL Source

- Thực hiê ̣n: AX ← AL * Source8 ; khi toán ha ̣ng nguồn 8 bit

DX AX ← AX * Source16 ; khi toán ha ̣ng nguồn 16 bit

• Lê ̣nh nhân số nguyên có dấu:

- Cú pháp: IMUL Source

- Thực hiê ̣n: tương tư như lê ̣nh nhân thường nhưng với các số nguyên, kết quả sẽ là mô ̣t số nguyên

Ngoài ra còn có các lê ̣nh nhân số nguyên có dấu khác như:

IMUL Reg,Source,Imm8 ; Reg16 ← Source16 * Imm8

• Lê ̣nh chỉnh ASCII cho phép nhân.

- Cú pháp: AAM

- Lê ̣nh này chỉ thực hiê ̣n đúng cho phép nhân số BCD nén 8 bit kết quả trong AL

4 Các lê ̣nh chia (Division).

Tương tự như các lê ̣nh nhân, 8088 có các lê ̣nh chia như sau:

• Chia: DIV Source

Với Source 8 bit, số bi ̣ chia trong AX thương số trong AL, số dư trong AH

Với Source 16 bit, số bi ̣ chia trong DX AX, thương chứa trong AX, số dư chứa trong DX

• Chia số nguyên có dấu: IDIV Source

• Chỉnh ASCII cho phép chia: AAD

5 Các lê ̣nh logic.

Các lê ̣nh logic thực hiê ̣n với các toán ha ̣ng 8 và 16 bit với viê ̣c thực hiê ̣n phép logic từng bit tương ứng trong hai toán ha ̣ng Các lê ̣nh logic bao gồm:

• AND Dest,Source

• OR Dest,Source

• XOR Dest,Source

• NOT Dest

Các toán ha ̣ng sử du ̣ng trong các lê ̣nh logic trên bao gồm:

Trang 9

Dest Source Reg

Reg Mem Reg Mem

Reg Mem Reg Imm Imm

Riêng lê ̣nh NOT chỉ có mô ̣t toán ha ̣ng đích, toán ha ̣ng này có thể là mô ̣t thanh ghi hoă ̣c

mô ̣t ô nhớ

6 Các lê ̣nh quay di ̣ch dữ liê ̣u.

Trong các lê ̣nh quay, di ̣ch toán ha ̣ng đích (Dest) là bô ̣ nhớ hoă ̣c thanh ghi sẽ quay hoă ̣c

di ̣ch các bit đi số lần chỉ thi ̣ bằng số đếm (Count) chỉ thi ̣ trong lê ̣nh Số đếm count chỉ có thể bằng 1 hoă ̣c chứa trong CL

• Di ̣ch trái logic (Shift Logic Left).

- Cú pháp: SHL Dest,Count

- Thực hiê ̣n: các bit của toán ha ̣ng đích sẽ được di ̣ch về phía trái count lần, sau mỗi lần di ̣ch bit thứ i sẽ thay thế bit thứ (i+1), bit có tro ̣ng số cao nhất sẽ được di ̣ch ra cờ nhớ (CF), và bit có trong số thấp nhất sẽ được thay thế bằng số 0 Phép di ̣ch trái logic có thể biểu diễn trên hình 3.4

• Di ̣ch trái số ho ̣c (Shift Arithmetic Left).

- Cú pháp: SAL Dest,Count

- Thực hiê ̣n: tương tự như lê ̣nh di ̣ch trái logic, chỉ khác ở chỗ bit có trong số cao nhất trong toán ha ̣ng đích không thay đổi sau khi thực hiê ̣n lê ̣nh

Tương tự có các lê ̣nh di ̣ch phải logic và di ̣ch phải số ho ̣c:

SHR Dest,Count ;di ̣ch phải logic

SAR Dest,Count ;di ̣ch phải số ho ̣c

• Quay trái (Rote Left).

- Cú pháp: ROL Dest,Count

- Thực hiê ̣n: tương tự như lê ̣nh di ̣ch trái logic nhưng bit có tro ̣ng số cao nhất được chuyển trở về thay cho bit có tro ̣ng số thấp nhất trong toán ha ̣ng Dest Có thể mô tả hoa ̣t đô ̣ng của

lê ̣nh trên hình 3.5

CF

Hình 3.4: Hoa ̣t đô ̣ng của lê ̣nh SHL Dest,Count

CF

Hình 3.5: Hoa ̣t đô ̣ng của lê ̣nh ROL Dest,Count

Trang 10

• Quay phải (Rote Right).

- Cú pháp: ROR Dest,Count

- Thực hiê ̣n: tương tự lê ̣nh ROL như chiều quay đổi về bên phải

• Quay trái qua cờ nhớ.

- Cú pháp: RCL Dest,Count

- Thực hiê ̣n: Tương tự lê ̣nh quay trái nhưng cả cờ nhớ đều tham gia vào vòng quay Có thể mô tả hoa ̣t đô ̣ng của lê ̣nh này trên hình 3.6

• Quay phải qua cờ nhớ.

- Cú pháp: RCR Dest,Count

- Thực hiê ̣n: giống như lê ̣nh quay trái qua cờ nhớ (RCL), nhưng với chiều quay ngược

la ̣i

7 Lê ̣nh so sánh.

- Cú pháp: CMP Dest,Source

- Thực hiê ̣n: Dest – Source → tác đô ̣ng lên các cờ tra ̣ng thái.

Phép trừ không làm thay đổi các toán ha ̣ng trong lê ̣nh, nhưng tra ̣ng thái của nó được thông báo lê ̣nh các cờ tra ̣ng thái Các toán ha ̣ng sử du ̣ng trong lê ̣nh bao gồm

Reg Reg Reg Mem

Reg Mem Imm Imm

8 Các lê ̣nh xử lý chuỗi dữ liê ̣u.

• Di chuyển chuỗi theo byte (Move string byte)

- Cú pháp: MOVSB

- Thực hiê ̣n: [ES*10H + DI] ← [DS * 10H + SI]

SI ← SI ± 1

DI ← DI ± 1 Dấu cô ̣ng khi cờ DF = 1, dấu trừ khi cờ DF = 0

• Di chuyển chuỗi theo byte (Move string byte)

- Cú pháp: MOVSW

- Thực hiê ̣n: [ES*10H + DI] ← [DS * 10H + SI]

[ES*10H + DI + 1] ← [DS * 10H + SI + 1]

SI ← SI ± 2

DI ← DI ± 2

Hình 3.6: Hoa ̣t đô ̣ng của lê ̣nh RCL Dest,Count

CF

Ngày đăng: 12/12/2013, 16:15

TỪ KHÓA LIÊN QUAN

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

w