Tải bản đầy đủ (.doc) (2 trang)

Bài thực hành số 5: Làm việc với xâu kí tự

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (133.71 KB, 2 trang )

Bài thực hành số 5
Làm việc với xâu kí tự
Mục đích
 Biết sử dụng các phép toán trên chuỗi
 Biết làm một số thao tác với xâu kí tự (tìm kiếm, đếm từ, chuyển hoa / thường …. )
Tóm tắt lý thuyết
 Cờ hướng DF (Direction Flag) : xác định hướng xử lí chuỗi. Khi DF = 0 (dùng lệnh CLD)
chuỗi được xử lí tăng dần, ngược lại DF = 1 (lệnh STD) chuỗi được xử lí giảm dần.
 Con trỏ chuỗi: DS:SI – địa chỉ nguồn và ES:DI – địa chỉ đích
 Các lệnh trên chuỗi :
1. MOVSB (MOVSW) : chuyển nội dung của byte (word) được định bởi DS:SI đến
byte (word) được chỉ bởi ES: DI. Sau đó SI và DI tự động tăng lên 1 (hoặc 2) nếu cờ
DF = 0 hay giảm 1 (hoặc 2) nếu DF = 1
Ví dụ: giả sử cần chép nội dung chuỗi thứ nhất : ‘HELLO’ vào chuỗi
thứ hai theo thứ tự ngược lại ta làm như sau :
.DATA
STR1 DB ‘HELLO’
STR2 DB 5 DUP(‘?’)
.CODE
MOV AX, @DATA
MOV DS, AX
MOV ES, AX
LEA SI, STR1+4 ; cuối STR1
LEA DI, STR2 ; đầu STR2
STD ; định hướng xử lí giảm
MOV CX, 5
move :
MOVSB
ADD DI,2 ; + 2 do DI bị giảm
; 1 sau lệnh MOVSB
LOOP move



2. STOSB (STOSW): chuyển nội dung của thanh ghi AL (AX) đến byte
(word) được định bởi ES:DI. Sau đó DI tự động tăng lên 1 (hoặc 2) nếu
cờ DF = 0 hay giảm 1 (hoặc 2) nếu DF = 1.
Ví dụ: Đọc và lưu một chuỗi kí tự bằng chức năng AH = 1, ngắt 21H
NhapChuoi PROC
;Vào: DI = chứa offset của chuỗi
;Ra: DI = nội dung chuỗi vừa nhập
; BX = kích thước chuỗi
CLD ; đặt cờ DF theo hướng tăng
XOR BX, BX ; gán BX = 0
MOV AH, 1
INT 21H
while1 :
CMP AL, 13 ; nếu gõ ENTER
JE end_while1 ; kết thúc nhập
CMP AL, 8 ; nếu gõ BS
JNE else1 ;không phải lưu chuỗi
DEC DI ;ngược lại lùi 1 kí tự
DEC BX ;giảm kích thước chuỗi
JMP read ; đọc kí tự khác
else1:
STOSB
INC BX
read:
INT 21H
JMP while1
end_while1: ; thoát khỏi vòng lặp
4. LODSB (LODSW) : chuyển nội dung của byte (word) được định bởi
DS:SI vào AL (hoặc AX) sau đó tăng (hoặc giảm) SI 1 (hoặc 2) đơn vị.

5. SCASB (SCASW): tìm nội dung chứa trong AL (hoặc AX) có trong chuỗi
định bởi ES:DI hay không. Nếu tìm thấy thì cờ ZF sẽ được bật. Sau mỗi
lần thực hiện con trỏ DI sẽ tăng hoặc giảm 1 (hoặc 2) đơn vị.
6. CMPSB (CMPSW) : so sánh byte tại DS:SI và byte tại ES:DI, sau đó tăng
(hoặc giảm) SI và DI 1 (hoặc 2) đơn vị.
Bài tập
1. VCT nhập một chuỗi kí tự và in ra chuỗi theo thứ tự ngược lại. In chiều dài chuỗi.
Ví dụ : Nhập chuỗi : abcd Chuỗi kết quả: dcba Chiều dài chuỗi: 4
2. VCT nhập họ tên .Sau đó biến tất cả thành chữ hoa rồi in ra. Biến tất cả thành chữ thường rồi in
ra.
Ví dụ: Nhập vào chuỗi : Thanh cHi khanG Chuỗi Hoa : THANH CHI KHANG
Chuỗi kết quả thường: thanh chi khang
3. Nhập một chuỗi kí tự tính tần số xuất hiện của các nguyên âm.
Ví dụ : Nhập chuỗi : Thanh Chi Khang Số lần xuất hiện của các nguyên âm là: 3
4. VCT nhập hai chuỗi, liệt kê các kí tự có mặt trong hai chuỗi.
Ví dụ: Nhập chuỗi: computer và chuỗi : informatic
Các kí tự có mặt trong hai chuỗi : o, m, t, r
5. Nhập vào hai chuỗi kí tự, so sánh hai chuỗi (= > < ).
Ví dụ: Chuỗi thứ nhất: forn Chuỗi thứ hai : form
Kết quả : Chuỗi thứ nhất > chuỗi thứ hai.
6. Nhập vào hai chuỗi kí tự, kiểm tra chuỗi thứ nhất là chuỗi con chuỗi tthứ hai không, không phân
biệt hoa thường.
Ví dụ: Chuỗi thứ nhất : form Chuỗi thứ hai: inFoRMatic
Kết quả : Chuỗi thứ nhất là con chuỗi thư hai

×