Thứ Hai, 20 tháng 1, 2014

Lập trình chuỗi

Chương 14 Lập trình XL Chuỗi 5
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
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
Chương 14 Lập trình XL Chuỗi 8
Chương 14 Lập trình XL Chuỗi 9
NHẬP CHUỖI
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
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.
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
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
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

Xem chi tiết: Lập trình chuỗi


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

Đăng nhận xét