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 :

 

doc2 trang | Chuyên mục: Vi Xử Lý – Vi Điều Khiển | Chia sẻ: dkS00TYs | Lượt xem: 13974 | Lượt tải: 1download
Tóm tắt nội dung Thực hành Assembly - Bài 5: Làm việc với xâu kí tự, để xem tài liệu hoàn chỉnh bạn click vào nút "TẢI VỀ" ở trên
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:

  • docThực hành Assembly - Bài 5 Làm việc với xâu kí tự.doc