Thực hành Assembly - Bài 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 :
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 : 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 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 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 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 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 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 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. 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
File đính kèm:
- Thực hành Assembly - Bài 5 Làm việc với xâu kí tự.doc