Nhóm lệnh chuyển dữ liệu

Một phần của tài liệu Kỹ thuật vi xử lý (Trang 48 - 55)

Lệnh MOV - Move a Word or Byte (Chuyển 1 từ hoặc 1 byte) Cú pháp: MOV Đích, Nguồn

Đặc điểm:

 Dùng để chuyển nội dung của toán hạng nguồn vào cất trong toán hạng đích. Trong đó 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 có cùng độ dài và không được phép đồng thời là 2 ô nhớ hoặc 2 thanh ghi đoạn.

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

Ví dụ:

MOV AX , BX MOV AH , 'A' MOV AL , [5678h]

Lệnh MOVS/MOVSB/MOVSW - Move String Byte or String Word (Chuyển 1 phần tử của một chuỗi sang một chuỗi khác)

Cú pháp: MOVS Chuỗi đích, Chuỗi gốc MOVSB

MOVSW Đặc điểm:

 Dùng để chuyển nội dung của từng byte hay từng từ của chuỗi gốc sang chuỗi đích trong đó DS : SI chứa địa chỉ của phần tử trong chuỗi gốc còn DS : DI chứa địa chỉ của phần tử trong chuỗi đích.

41

 Sau mỗi lần chuyển SI ± 1  SI, DI ± 1  DI hoặc SI ± 2  SI, DI ± 2 một cách tự động tùy thuộc cờ hướng DF là 0/1 và chuỗi đó là chuỗi byte hoặc chuỗi từ.

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

Ví dụ:

MOV DI , OFFSET chuỗi đích ; lấy địa chỉ độ lệch của chuỗi đích vào DI trong ES

MOV SI , OFFSET chuỗi gốc ; lấy địa chỉ độ lệch của chuỗi gốc vào SI trong DS

CLD ; làm việc với chuỗi theo chiều →

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

Lệnh LODS/LODSB/LODSW - Load String Byte or String Word into AL/AX (Nạp vào AL/AX một phần tử của chuỗi Byte/Word)

Cú pháp: LODS Chuỗi gốc LODSB

LODSW Đặc điểm:

 Lệnh LODS nạp vào AL/AX 1 byte/từ (một phần tử của chuỗi đã được định nghĩa trước là chuỗi gồm các byte hoặc từ) do SI chỉ ra trong đoạn DS, sau đó SI tự động tăng/giảm để chỉ vào phần tử tiếp theo tùy theo cờ hướng.

 Khi phải dịch lệnh LODS Chuỗi gốc, chương trình dịch dùng tên chuỗi gốc để xác định xem lúc khai báo thì chuỗi gốc có các phần tử là byte hay từ. Muốn chỉ rõ cho trường trìnhhợp ngữ rằng làm việc với các chuỗi byte hoặc từ thì ta cũng có thể dùng lệnh LODSB hoặc LODSW.

 Sau mỗi lần chuyển SI ± 1  SI, DI ± 1  DI hoặc SI ± 2  SI, DI ± 2 một cách tự động tùy thuộc cờ hướng DF là 0/1 và chuỗi đó là chuỗi byte thì AL  phần tử hiện thời hoặc chuỗi từ thì AX  phần tử hiện thời.

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

Ví dụ:

CLD ; làm việc với chuỗi theo chiều 

LEA SI, STRI ; SI chỉ vào đầu chuỗi STRI để tại đoạn dữ liệu DS

42

LODS STRI ; Nạp vào Acc một phần tử

Lệnh XCHG - Exchange 2 Operands (Đổi nội dung hai toán hạng) Cú pháp: XCHG Đích, Nguồn

Đặc điểm:

 Dùng để nội dung của 2 toán hạng Đích và Nguồn. Sau khi thực hiện lệnh toán hạng Đích chứa nội dung của toán hạng Nguồn và ngược lại.

 Toán hạng đích và nguồn 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.

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

Ví dụ:

XCHG AH , AL ; trao đổi nội dung của phần cao và thấp thanh ghi AX XCHG AL, [BP] ; trao đổi nội dung thanh ghi AL và ô nhớ SS : BP Lệnh LEA - Load Effective Address (Nạp địa chỉ hiệu dụng vào thanh ghi)

Cú pháp: LEA Đích, Nguồn Đặc điểm:

 Đích thường là một trong các thanh ghi: BX, CX, DX, BP, SI, DI.

 Nguồn là tên biến trong đoạn DS được chỉ rõ trong lệnh hoặc ô nhớ cụ thể.

 Mô tả: Đích  Địa chỉ độ lệch của nguồn hoặc Đích  Địa chỉ hiệu dụng của nguồn.

 Đâ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 đã được chọn trước.

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

Ví dụ:

LEA DX , MSG ; nạp địa chỉ độ lệch của bản tin MSG vào DX LEA CX, [BX] [SI] ; nạp địa chỉ độ lệch BP + SI của ô nhớ trong đoạn

DS vào CX

Lệnh LES - Load Register and ES with Words from Memory (Nạp một từ từ bộ nhớ vào thanh ghi cho trong lệnh và một từ tiếp theo vào ES).

Cú pháp: LES Đích, Nguồn

43

Đặc điểm:

 Đích thường là một trong các thanh ghi: BX, CX, DX, BP, SI, DI.

 Nguồn là ô nhớ trong đoạn DS được chỉ rõ trong lệnh.

 Mô tả: Đích  Nguồn, ES  Nguồn + 2

 Đây là lệnh để nạp 4 ô nhớ liên tiếp vào thanh ghi đã chọn và vào ES.

 Một trong những ứng dụng của lệnh này là làm sao cho DI và ES chỉ vào địa chỉ đầu của vùng nhớ chứa chuỗi nguồn 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ụ:

LES DI, [BX] ; Nạp vào DI nội dung 2 ô nhớ DS : BX và DS : BX + 1 và nạp vào ES nội dung 2 ô nhớ là DS : BX + 2 và DS : BX + 3

Lệnh LDS - Load Register and DS with Words from Memory (Nạp một từ từ bộ nhớ vào thanh ghi cho trong lệnh và một từ tiếp theo vào DS).

Cú pháp: LDS Đích, Nguồn Đặc điểm:

 Đích thường là một trong các thanh ghi: BX, CX, DX, BP, SI, DI.

 Nguồn là ô nhớ trong đoạn DS được chỉ rõ trong lệnh.

 Mô tả: Đích  Nguồn, DS  Nguồn + 2

 Đây là lệnh để nạp 4 ô nhớ liên tiếp vào thanh ghi đã chọn và vào DS.

 Một trong những ứng dụng của lệnh này là làm sao cho SP và DS chỉ vào địa chỉ đầu của vùng nhớ chứa chuỗi nguồn 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_PTR ; Nạp vào SI nội dung 2 ô nhớ STR_PDR và STR_PDR + 1 và nạp vào DS nội dung 2 ô nhớ STR_PDR + 2 và STR_PDR + 3.

Lệnh PUSH - Push Word on the Stack (Cất 1 từ vào ngăn xếp)

Cú pháp: PUSH Nguồn

Đặc điểm:

44

 Toán hạng nguồn có thể tìm được theo các chế độ địa chỉ khác nhau: có thể là các thanh ghi đa năng, thanh ghi đoạn hoặc ô nhớ. Lệnh này thường dùng với lệnh POP như là một cặp lệnh để xử lý các dữ liệu và trạng thái của chương trình chính (CTC) khi vào/ra chương trình con (ctc).

 Khi cất 1 từ vào ngăn xếp thì SP  SP - 2 và dữ liệu của nguồn sẽ cất trong [SP] (ô nhớ SS : SP).

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

Ví dụ:

PUSH BX ; cất nội dung của thanh ghi BX vào 2 ngăn nhớ liên tiếp do SP chỉ ra

Lệnh PUSHF - Push Flag register on the Stack (Cất thanh ghi cờ vào ngăn xếp)

Cú pháp: PUSHF

Đặc điểm:

 Cất nội dung thanh ghi cờ vào ngăn xếp

 Khi cất vào ngăn xếp thì SP  SP - 2 và dữ liệu của thanh ghi cờ sẽ cất trong [SP] (ô nhớ SS : SP).

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

Lệnh POP - Pop Word off the Stack (Lấy 1 từ từ ngăn xếp)

Cú pháp: POP Đích

Đặc điểm:

 Toán hạng đích có thể tìm được theo các chế độ địa chỉ khác nhau: có thể là các thanh ghi đa năng, thanh ghi đoạn (không được là thanh ghi đoạn mã CS) hoặc ô nhớ. Giữ liệu để tại ngăn xếp không thay đổi. Giá trị của SS không thay đổi.

 Khi lấy 1 từ từ ngăn xếp thì đích sẽ chứa dữ liệu [SP] (ô nhớ SS : SP) và SP  SP + 2

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

Ví dụ:

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

Lệnh POPF - Pop Flag register off the Stack (lấy một từ từ đỉnh ngăn xếp đưa vào thanh ghi cờ)

Cú pháp: POPF

45

Đặc điểm:

 Lấy dữ liệu từ đỉnh ngăn xếp đưa vào thanh ghi cờ

 Thanh ghi cờ chứa dữ liệu của [SP] (SS : SP) và SP  SP + 2

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

Lệnh IN - Input a Byte or Word from a Port (Đọc dữ liệu từ cồng vao thanh ghi chứa Accumulator - Acc)

Cú pháp: IN Acc, Port Đặc điểm:

 Trong đó Port là địa chỉ 8 bit của cổng. Port có các giá trị trong khoảng 00h .. FFh. Như vậy ta có các khả năng:

 Nếu Acc là thanh ghi AL thì dữ liệu 8 bit được đưa vào từ cổng có địa chỉ Port.

 Nếu Acc là thanh ghi AX thì dữ liệu 16 bit được đưa vào từ cổng có địa chỉ Port và Port + 1.

 Có một cách để biểu diễn địa chỉ cổng 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 hóa dễ dàng hơn. Lúc này địa chỉ cổng nằm trong dải từ 0000h đến FFFFh và ta phải viết lệnh theo dạng:

 MOV DX, Địa chỉ cổng

 IN Acc , DX

 Lệnh này không tác động đến các cờ Ví dụ:

IN AL, 0AH ; Nhận dữ liệu từ thiết bị ngoại vi được kết nối thông qua cổng có địa chỉ 0AH vào thanh ghi AL.

MOV DX, 1F0H IN AL, DX

; Copy giá trị địa chỉ 01F0H vào thanh ghi DX

; Nhận dữ liệu từ thiết bị ngoại vi được kết nối thông qua cổng có địa chỉ chứa trong DX vào thanh ghi AL.

IN AX, 0AH ; Nhận dữ liệu từ thiết bị ngoại vi được kết nối thông qua cổng có địa chỉ 0AH vào thanh ghi AL và 0BH vào thanh ghi AH.

MOV DX, 7000H IN AX, DX

; Copy giá trị địa chỉ 7000H vào thanh ghi DX

; Nhận dữ liệu từ thiết bị ngoại vi được kết nối thông qua cổng có địa chỉ 7000H vào thanh ghi AL và 7001H vào thanh ghi AH.

46

Lệnh OUT - Output a Byte or Word to a Port (Ghi dữ liệu từ thanh ghi chứa Acc ra cổng)

Cú pháp: OUT Port , Acc Đặc điểm:

 Trong đó Port là địa chỉ 8 bit của cổng. Port có các giá trị trong khoảng 00h .. FFh. Như vậy ta có các khả năng:

 Nếu Acc là thanh ghi AL thì dữ liệu 8 bit được đưa ra cổng có địa chỉ Port.

 Nếu Acc là thanh ghi AX thì dữ liệu 16 bit được đưa ra cổng có địa chỉ Port và Port + 1.

 Có một cách để biểu diễn địa chỉ cổng 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 hóa dễ dàng 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:

 MOV DX , Địa chỉ cổng

 OUT DX, Acc

 Lệnh này không tác động đến các cờ Ví dụ:

OUT 0AH, AL ; Chuyển dữ liệu từ thanh ghi AL ra thiết bị ngoại vi được kết nối thông qua cổng có địa chỉ 0AH.

MOV DX, 1F0H OUT DX, AL

; Copy giá trị địa chỉ 01F0H vào thanh ghi DX

; Chuyển dữ liệu từ thanh ghi AL ra thiết bị ngoại vi được kết nối thông qua cổng có địa chỉ chứa trong DX.

OUT 0AH, AX ; Chuyển dữ liệu ra thiết bị ngoại vi được kết nối thông qua cổng có địa chỉ 0AH từ thanh ghi AL và 0BH từ thanh ghi AH.

MOV DX, 7000H OUT DX, AX

; Copy giá trị địa chỉ 7000H vào thanh ghi DX

; Chuyển dữ liệu ra thiết bị ngoại vi được kết nối thông qua cổng có địa chỉ chứa trong DX từ thanh ghi AL và 0BH từ thanh ghi AH.

47

Một phần của tài liệu Kỹ thuật vi xử lý (Trang 48 - 55)

Tải bản đầy đủ (PDF)

(251 trang)