Thứ Năm, 23 tháng 1, 2014

Tài liệu Hợp ngữ ASM-Chương 13-Lập Trình Chuỗi-Phần 1- Hướng DF docx

Chương 14 Lập trình XL Chuỗi 1
Chương 13 :LẬP TRÌNH XỬ LÝ MẢNG & CHUỔI
• GiỚI THIỆU
• CỜ HƯỚNG DF
• CÁC LỆNH THIẾT LẬP VÀ XÓA CỜ HƯỚNG
• CÁC LỆNH THAO TÁC TRÊN CHUỔI
• MỘT SỐ THÍ DỤ MINH HỌA
•THƯ ViỆN LIÊN QUAN ĐẾN CHUỔI
Create PDF files without this message by purchasing novaPDF printer (http://www.novapdf.com)
Chương 14 Lập trình XL Chuỗi 2
GiỚI THIỆU CHUỖI
Trong ASM 8086 khái niệm chuỗi bộ nhớ hay chuỗi
là 1 mảng các byte hay word.
 Các lệnh thao tác với chuỗi cũng được thiết kế cho
các thao tác với mảng.
Create PDF files without this message by purchasing novaPDF printer (http://www.novapdf.com)
Chương 14 Lập trình XL Chuỗi 3
Cờ hướng DF
Cờ định hướng (Direction Flag) : xác định hướng
cho các thao tác chuỗi.
DF=0 chuỗi được xử lý theo chiều tăng tức địa chỉ vùng nhớ chứa
chuỗi tăng dần.
(chuỗi được xử lý từ trái qua phải).
DF=1 chuỗi được xử lý theo chiều tăng tức địa chỉ vùng nhớ chứa
chuỗi giảm dần.
(chuỗi được xử lý từ phải qua trái).
Trong DEBUG DF=0 ký hiệu là UP DF=1 ký hiệu là DN
Create PDF files without this message by purchasing novaPDF printer (http://www.novapdf.com)
Chương 14 Lập trình XL Chuỗi 4
LỆNH LIÊN QUAN ĐẾN CỜ HƯỚNG
CLD (CLEAR DIRECTION FLAG)
XÓA CỜ HƯỚNG DF =0
STD (SET DIRECTION FLAG)
THIẾT LẬP CỜ HƯỚNG DF=1
Create PDF files without this message by purchasing novaPDF printer (http://www.novapdf.com)
Chương 14 Lập trình XL Chuỗi 5
Create PDF files without this message by purchasing novaPDF printer (http://www.novapdf.com)
Chương 14 Lập trình XL Chuỗi 6
 Trước khi sử dụng các lệnh xử lý chuỗi, ta phải xác định
hướng xử lý chuỗi bằng cách set hay clear cờ hướng.
Lệnh đặt cờ hướng :
CLD : xóa cờ hướng, chuổi được xử lý từ trái  phải
STD : đặt cờ hướng, chuổi được xử lý từ phải  trái
CON TRỎ CHUỖI
DS:SI
ES:DI
Chứa địa chỉ chuỗi đích
Chứa địa chỉ chuỗi nguồn
Create PDF files without this message by purchasing novaPDF printer (http://www.novapdf.com)
Chương 14 Lập trình XL Chuỗi 7
NHẬP CHUỔI
Input : AH = 0AH, ngắt 21H
DS:DX = địa chỉ của buffer, trong đó buffer[0]
là kích thước tối đa của chuỗi,
buffer[1] sẽ là kích thước dữ liệu nhập.
Output : Chuỗi buffer chứa nội dung nhập vào từ
buffer[2] trở đi
Yêu cầu xem thêm các chức năng AH = 3FH và AH = 40H của ngắt 21H.
CÁC THAO TÁC XỬ LÝ CHUỖI
Create PDF files without this message by purchasing novaPDF printer (http://www.novapdf.com)
Chương 14 Lập trình XL Chuỗi 8
Create PDF files without this message by purchasing novaPDF printer (http://www.novapdf.com)
Chương 14 Lập trình XL Chuỗi 9
NHẬP CHUỖI
Create PDF files without this message by purchasing novaPDF printer (http://www.novapdf.com)
Chương 14 Lập trình XL Chuỗi 10
NHẬP CHUỔI
Ta cũng có thễ dùng hàm 1 INT 21h đọc 1 ký tự từ bàn
phím để nhập 1 chuỗi bằng cách dùng vòng lặp và lưu
chuổi bằng lệnh STOSB.
STOSB (STORE STRING BYTE)
LƯU CHUỖI CÁC BYTES
CHUYỂN NỘI DUNG AL
ĐẾN BYTE ĐƯỢC TRỎ
BỞI ES:DI.
SAU KHI LỆNH ĐƯỢC THỰC
HiỆN DI TĂNG 1 NẾU DF=0
HoẶC GiẢM 1 NẾU DF =1
Create PDF files without this message by purchasing novaPDF printer (http://www.novapdf.com)
Chương 14 Lập trình XL Chuỗi 11
NHẬP CHUỔI
Ta cũng có thễ dùng hàm 1 Int 21h đọc 1 ký tự từ bàn
phím để nhập 1 chuỗi bằng cách dùng vòng lặp và lưu
chuổi bằng lệnh STOSW.
STOSW (STORE STRING WORD)
LƯU CHUỖI CÁC WORD
CHUYỂN NỘI DUNG AX
ĐẾN WORD ĐƯỢC TRỎ
BỞI ES:DI.
SAU KHI LỆNH ĐƯỢC THỰC
HiỆN DI TĂNG HAY GiẢM 2
TÙY VÀO DF.
Create PDF files without this message by purchasing novaPDF printer (http://www.novapdf.com)
Chương 14 Lập trình XL Chuỗi 12
THÍ DỤ
.MODEL SMALL
.STACK 100H
.DATA
STRING1 DB 'HELLO'
.CODE
MAIN PROC
MOV AX,@DATA
MOV ES,AX
LEA DI, STRING1
CLD
MOV AL,'A'
STOSB
STOSB
MOV AH,4CH
INT 21H
MAIN ENDP
END MAIN
; khởi tạo ES
; xử lý từ trái  phải
; AL chứa ký tự cần lưu
; lưu ký tự ‘A’
; lưu ký tự thứ 2
Create PDF files without this message by purchasing novaPDF printer (http://www.novapdf.com)
Chương 14 Lập trình XL Chuỗi 13
THÍ DỤ
.
READSTR PROC
PUSH AX
PUSH DI
CLD
XOR BX,BX
MOV AH,1
INT 21H
LAP:
CMP AL,0DH
JE ENDLAP
CMP AL,8H
JNE ELSE1
DEC DI
DEC BX
JMP READ
ELSE1 :
STOSB
INC BX
READ :
INT 21H
JMP LAP
ENDLAP :
POP DI
POP AX
RET
READSTR ENDP
Giải thích :
DI chứa offset của chuỗi
BX chứa số ký tự nhập
8H mã ASCII của Backspace
không  lưu nó vào chuỗi
tăng số ký tự lên 1
Đúng  lùi con trỏ DI
giảm số ký tự nhập được
Create PDF files without this message by purchasing novaPDF printer (http://www.novapdf.com)
Chương 14 Lập trình XL Chuỗi 14
AH = 09, ngắt 21H
Vào : DX = địa chỉ offset của chuỗi.
Chuỗi phải kết thúc bằng kí tự ‘$’.
Chú ý : thay vì dùng lệnh MOV
OFFSET ta có thể dùng lệnh LEA.
NHẬP XUẤT CHUỖI
HiỂN THỊ CHUỖI
Create PDF files without this message by purchasing novaPDF printer (http://www.novapdf.com)

Không có nhận xét nào:

Đăng nhận xét