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

Chương 4 - Các chỉ thị chuỗi, dữ liệu nhị phân và ÁC II pdf

18 185 0
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

Định dạng
Số trang 18
Dung lượng 735,96 KB

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

Nội dung

Các đặc trưng của chỉ thị chuỗi Chương 4: Các chỉ thị chuỗi, dữ liệu nhị phân và ASCII - Một chỉ thị chuỗi cĩ thể xử lý trên một byte, một từ hay từ kép - Các chỉ thị chuỗi sử dụng các

Trang 1

Các đặc trưng của chỉ thị chuỗi

Chương 4: Các chỉ thị chuỗi, dữ liệu nhị phân và ASCII

- Một chỉ thị chuỗi cĩ thể xử lý trên một byte, một từ hay từ kép

- Các chỉ thị chuỗi sử dụng các thanh ghi DS:SI hoặc ES:DI, trong đĩ SI và

DI chứa địa chỉ offset

- 5 chỉ thị chuỗi thường sử dụng:

MOVS di chuyển 1 byte, từ hoặc từ kép từ vi trí này đến vị trí khác trong bộ

nhớ LODS nạp từ bộ nhớ 1 byte vào AL, một từ vào AX, hoặc từ kép vào EAX STOS cất nội dung các thanh ghi AL,AX hoặc EAX vào bộ nhớ

CMPS So sánh các vùng nhớ trong bộ nhớ theo byte, từ hay từ kép

SCAS So sánh nội dung của các thanh ghi AL,AX,EAX với nội dung của

một vùng nhớ

Trang 2

Chỉ thị MOVS

* Chức năng: Di chuyển chuỗi (sao chép nội dung chuỗi)

* Ví dụ: Chép nội dung của chuỗi N1 vào N2 (với N2 là chuỗi rỗng)

.MODEL SMALL

.DATA

N1 DB 'Assembler$'

N2 DB 10 DUP(' ')

MSG5 DB 0Ah,0Dh,'Chuoi thu nhat=$'

MSG6 DB 0Ah,0Dh,'Chuoi thu hai=$'

.CODE

MOV AX,@DATA MOV DS,AX

MOV ES,AX

CALL DICHUYEN CALL INKETQUA

MOV AH,1 INT 21h

MOV AH,4Ch INT 21h

Chương 4: Các chỉ thị chuỗi, dữ liệu nhị phân và ASCII

Trang 3

Chỉ thị MOVS

DICHUYEN PROC NEAR

MOV CX,10

LEA DI,N2

LEA SI,N1

REP MOVSB

RET

DICHUYEN ENDP

INKETQUA PROC NEAR

MOV AH,9

LEA DX,MSg5 INT 21h

LEA DX,N1 INT 21h

LEA DX,MSG6 INT 21h

LEA DX,N2 INT 21h

RET

INKETQUA ENDP

Demo

Chương 4: Các chỉ thị chuỗi, dữ liệu nhị phân và ASCII

Trang 4

Các chỉ thị thay đổi cờ hướng DF

- Cờ hướng DF xác định hướng mà chỉ thị chuỗi được lặp lại (0: trái sang phải, 1=phải sang trái)

- Các chỉ thị thiết lập cờ hướng:

* Chỉ thị CLD: Xĩa DF về 0

* Chỉ thị STD: Thiết lập cờ DF lên 1

Ví dụ:

MOV CX,20

Chương 4: Các chỉ thị chuỗi, dữ liệu nhị phân và ASCII

Trang 5

Tiền tố lặp lại - REP

- Cho phép lặp lại việc thực thi chỉ thị dựa trên giá trị CX

- Sau mỗi lần lặp, CX giảm đi 1 cho đến khi CX=0

- Cờ hướng DF xác định hướng mà chuỗi lặp lại:

* Xử lý từ trái sang phải: dùng chỉ thị CLD xĩa cờ DF về 0

* Xử lý từ phải sang trái: dùng chỉ thị STD để thiết lập cờ DF về 1

Ví dụ:

CLD MOV CX,20 LEA DI,STRING2 LEA SI,STRING1

REP MOVSB  JCXZ LABEL2

LABEL1:

MOV AL,[SI]

MOV [DI],AL INC DI

INC SI LOOP LABEL1 LABEL2:

- Các lệnh khác: REPE/REPZ – REPNE/REPNZ ( Điều kiện bởi Cờ ZF)

Chương 4: Các chỉ thị chuỗi, dữ liệu nhị phân và ASCII

Trang 6

Chỉ thị LODS

* Chức năng: Nạp chuỗi

- Nạp từ bộ nhớ vào AL (byte), vào AX (từ)

- Địa chỉ vùng dữ liệu được nạp vào DS:SI

- Giảm/tăng nội dung SI bởi 1 (nạp byte), bởi 2 (nạp từ) với cờ DF

* Ví dụ: Chép nội dung của chuỗi N1 vào N2 theo thứ tự ngược lại (với N2 là

MOV CX,10 LEA SI,N1 LEA DI,N2+9

LAP:

LODSB MOV [DI],AL DEC DI

LOOP LAP

Chương 4: Các chỉ thị chuỗi, dữ liệu nhị phân và ASCII

Trang 7

Chỉ thị STOS

* Chức năng: Lưu chuỗi

- Nạp nội dung AL (byte), AX (từ) vào bộ nhớ

- Địa chỉ vùng lưu dữ liệu được chứa vào ES:DI

- Giảm/tăng nội dung DI bởi 1 (lưu byte), bởi 2 (lưu từ) với cờ DF

* Ví dụ: Lặp 5 lần việc lưu một từ chứa giá trị 2020h vào N1

CLD MOV CX,5 MOV AX,2020h

LEA DI,N1 REP STOSW

Chương 4: Các chỉ thị chuỗi, dữ liệu nhị phân và ASCII

Trang 8

Chỉ thị CMPS

* Chức năng: So sánh chuỗi

- So sánh nội dung vùng nhớ tại DS:SI và ES:DI

- Giảm/tăng nội dung SI, DI bởi 1 (lưu byte), bởi 2 (lưu từ) với cờ DF

- Chỉ so sánh các giá trị ASCII

* Ví dụ: So sánh hai chuỗi N1 và N2

CLD MOV CX,10

LEA SI,N1 LEA DI,N2 REPE CMPSB

Chương 4: Các chỉ thị chuỗi, dữ liệu nhị phân và ASCII

Trang 9

Các chỉ thị xử lý dữ liệu nhị phân

Dữ liệu cĩ dấu và khơng dấu

- Các chỉ thị ADD, SUB khơng phân biệt dữ liệu cĩ dấu/khơng dấu và khơng tác động lên cờ CF và OF

- Ví dụ:

Chương 4: Các chỉ thị chuỗi, dữ liệu nhị phân và ASCII

Số nhớ

- Phép cộng tạo ra số nhớ từ việc cộng 2 bit cực trái

- Ví dụ:

Trang 10

Các chỉ thị xử lý dữ liệu nhị phân

Phép nhân nhị phân

- Chỉ thị MUL thực hiện nhân dữ liệu khơng dấu

- Chỉ thị IMUL thực hiện nhân dữ liệu cĩ dấu

- Ảnh hưởng cờ CF và OF

- Cú pháp: MUL/IMUL <thanhghi/bộ nhớ>

Chương 4: Các chỉ thị chuỗi, dữ liệu nhị phân và ASCII

Nhân byte với byte

- Số hạng bị nhân lưu trong AL

- Số nhân lưu trong 1 byte bộ nhớ hoặc 1 thanh ghi khác

- Kết quả được chứa trong AX

(Số bị nhân)

AX (Chứa tích số) Trước khi nhân

Sau khi nhân

Trang 11

Các chỉ thị xử lý dữ liệu nhị phân

Chương 4: Các chỉ thị chuỗi, dữ liệu nhị phân và ASCII

Nhân từ với từ

- Số hạng bị nhân lưu trong AX

- Số nhân lưu trong 1 từ bộ nhớ hoặc 1 thanh ghi khác

- Kết quả được chứa trong DX:AX, với phần thấp chứa trong AX và phần cao chứa trong DX

(Số bị nhân) Trước khi nhân

Sau khi nhân Phần cao DX

AX Phần thấp Tích số

Trang 12

Các chỉ thị xử lý dữ liệu nhị phân

Chương 4: Các chỉ thị chuỗi, dữ liệu nhị phân và ASCII

Nhân nhiều từ

- Điều gì xảy ra khi nhân 1365 x 12?

Nhân từng 2 số hiệu với nhau, nghĩa là: nhân 13 và 65 cho 12, ta cĩ:

13 x 12=156 và 65x12=780

 Cộng các tích số (với 13 ở vị trí hàng trăm nên được x 100)

15600 + 780 = 16380

- Ứng dụng kỷ thuật này để thực hiện các phép nhân giữa các kiểu dữ liệu khác nhau

Trang 13

Các chỉ thị xử lý dữ liệu nhị phân

Chương 4: Các chỉ thị chuỗi, dữ liệu nhị phân và ASCII

Nhân bằng cách dịch bit

Nhân một số với lũy thừa của 2 (2,4,8, )  Dịch trái số bị nhân một số bit tương ứng

Ví dụ:

- Nhân với 2 (dịch trái 1 bit): SHL AX,01

- Nhân với 8 (dịch trái 3 bit): MOV CL,3

Trang 14

Các chỉ thị xử lý dữ liệu nhị phân

Phép chia nhị phân

- Chỉ thị DIV thực hiện chia dữ liệu khơng dấu

- Chỉ thị IDIV thực hiện chia dữ liệu cĩ dấu

- Các phép chia cơ bản: Chia từ/byte, Từ kép/từ,

- Ảnh hưởng cờ CF và OF

- Cú pháp: DIV/IDIV <thanhghi/bộ nhớ>

Chương 4: Các chỉ thị chuỗi, dữ liệu nhị phân và ASCII

Chia từ cho byte

- Số bị chia lưu trong AX

- Số chia lưu trong 1 byte bộ nhớ hoặc 1 thanh ghi khác

- Kết quả được chứa trong AL và dư số chứa trong AH

AH

Dư số

AL Thương số

AX

Số bị chia Trước khi chia

Sau khi chia

Trang 15

Các chỉ thị xử lý dữ liệu nhị phân

Chương 4: Các chỉ thị chuỗi, dữ liệu nhị phân và ASCII

Chia từ kép cho từ

- Số bị chia lưu trong DX:AX

- Số chia lưu trong 1 từ bộ nhớ hoặc 1 thanh ghi khác

- Kết quả được chứa trong AX và dư số chứa trong DX

DX

Dư số

AX Thương số

DX:AX

Số bị chia Trước khi chia

Sau khi chia

Trang 16

Các chỉ thị xử lý dữ liệu nhị phân

Chương 4: Các chỉ thị chuỗi, dữ liệu nhị phân và ASCII

Chia bằng cách dịch bit

Chia một số với lũy thừa của 2 (2,4,8, )  Dịch phải số bị chia một số bit tương ứng

Ví dụ:

- Chia với 2 (dịch phải 1 bit): SHR AX,01

- Chia với 8 (dịch phải 3 bit): MOV CL,3

Trang 17

Chỉ thị xử lý dữ liệu ASCII

Chương 4: Các chỉ thị chuỗi, dữ liệu nhị phân và ASCII

- Các chỉ thị AAA, AAS trực tiếp hiệu chỉnh trên dữ liệu ASCII

- Hiệu chỉnh giá trị trong AL và lưu kết quả trong AX

- AAA được dùng hiệu cỉnh sau khi thực hiện phép cộng

- AAS được dùng hiệu cỉnh sau khi thực hiện phép trừ

- Cú pháp: AAA/AAS

- Ví dụ:

MOV AL,35h

Tương đương:

MOV AL,35h AAA

- Để lấy lại kết quả ban đầu dạng ASCII, chèn số 3 vào trước số bên trái

AH và AL:

Trang 18

Một số ví dụ ứng dụng các chỉ thị

Chương 4: Các chỉ thị chuỗi, dữ liệu nhị phân và ASCII

Ví dụ: Chuyển đổi một số N (0255) sang hệ nhị phân 8 bit

Demo

Ngày đăng: 28/07/2014, 06:20

TỪ KHÓA LIÊN QUAN

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

w