Bài giảng Lập trình hợp ngữ - Chương 13: Lập trình xử lý mảng và chuỗi

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  
Chương 14 Lập trình XL Chuỗi  
1
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.  
Chương 14 Lập trình XL Chuỗi  
2
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  
Chương 14 Lập trình XL Chuỗi  
3
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  
Chương 14 Lập trình XL Chuỗi  
4
5
➔ 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  
Chứa địa chỉ chuỗi nguồn  
DS:SI  
ES:DI  
Chứa địa chỉ chuỗi đích  
Chương 14 Lập trình XL Chuỗi  
6
CÁC THAO TÁC XỬ LÝ CHUỖI  
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.  
Chương 14 Lập trình XL Chuỗi  
7
Chương 14 Lập trình XL Chuỗi  
8
NHẬP CHUỖI  
Chương 14 Lập trình XL Chuỗi  
9
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)  
CHUYỂN NỘI DUNG AL  
ĐẾN BYTE ĐƯỢC TRỎ  
BỞI ES:DI.  
LƯU CHUỖI CÁC BYTES  
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  
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 STOSW.  
STOSW (STORE STRING WORD)  
CHUYỂN NỘI DUNG AX  
ĐẾN WORD ĐƯỢC TRỎ  
BỞI ES:DI.  
LƯU CHUỖI CÁC WORD  
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  
11  
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  
; 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  
MAIN ENDP  
END MAIN  
Chương 14 Lập trình XL Chuỗi  
12  
THÍ DỤ  
.
READSTR PROC  
ELSE1 :  
READ :  
Giải thích :  
STOSB  
INC BX  
PUSH AX  
PUSH DI  
CLD  
XOR BX,BX  
MOV AH,1  
INT 21H  
LAP:  
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  
INT 21H  
JMP LAP  
ENDLAP :  
Đúng → lùi con trỏ DI  
giảm số ký tự nhập được  
POP DI  
POP AX  
CMP AL,0DH RET  
JE ENDLAP READSTR ENDP  
CMP AL,8H  
JNE ELSE1  
DEC DI  
DEC BX  
JMP READ  
Chương 14 Lập trình XL Chuỗi  
13  
NHẬP XUẤT CHUỖI  
HiỂN THỊ CHUỖI  
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.  
Chương 14 Lập trình XL Chuỗi  
14  
CÁC THAO TÁC XỬ LÝ CHUỔI  
For counter Do  
Nạp chuổi cần hiển thị  
HiỂN THỊ CHUỖI  
vào AL  
Chuyển vào DL  
Hiển thị ký tự  
EndFor  
Nạp 1 chuổi  
Chương 14 Lập trình XL Chuỗi  
15  
LODSB (LOAD STRING BYTE)  
NẠP 1 CHUỖI CÁC BYTES  
CHUYỂN BYTE TẠI ĐỊA CHỈ DS:SI ➔ AL  
SI TĂNG 1 NẾU DF=0  
SI GiẢM 1 NẾU DF =1  
Chương 14 Lập trình XL Chuỗi  
16  
THÍ DỤ  
STRING1 DB ‘ABC’  
MOV AX,@DATA  
MOV DS,AX  
LEA SI, STRING1  
CLD  
LODSB  
NẠP BYTE THỨ 1 VÀ THỨ 2 ➔ AL  
LODSB  
…….  
Chương 14 Lập trình XL Chuỗi  
17  
LODSW (LOAD STRING WORD)  
NẠP 1 CHUỖI CÁC WORD  
CHUYỂN WORD TẠI ĐỊA CHỈ DS:SI ➔ AX  
SI TĂNG HAY GiẢM TÙY TRẠNG THÁI DF  
Chương 14 Lập trình XL Chuỗi  
18  
THÍ DỤ  
Hiển thị chuỗi nhập  
DISPSTR PROC  
PUSH AX  
PUSH BX  
PUSH CX  
PUSH DX  
PUSH SI  
MOV CX, BX  
JCXZ EXIT  
CLD  
EXIT :  
POP SI  
POP DX  
POP CX  
POP BX  
POP AX  
RET  
MOV AH,2  
LAP :  
LODSB  
DISPSTR ENDP  
MOV DL, AL  
INT 21H  
LOOP LAP  
Chương 14 Lập trình XL Chuỗi  
19  
CHƯƠNG TRÌNH HÒAN CHỈNH  
Viết chương trình nhập 1 chuỗi ký tự tối đa 80 ký tự, hiển thị 15 ký tự của  
chuỗi đã nhập ở dòng kế.  
.MODEL SMALL  
.STACK 100H  
.DATA  
STRING1 DB 80 DUP(0)  
XDONG DB 0DH,0AH,’$’  
.CODE  
MAIN PROC  
MOV AX,@DATA  
MOV DS,AX  
LEA SI, STRING1  
MOV BX, 15  
CALL DISPSTR  
MOV AX,4C00H  
INT 21H  
MAIN ENDP  
; READSTR PROC  
……………  
; DISPSTR PROC  
………………  
END MAIN  
MOV ES,AX  
LEA DI, STRING1  
CALL READSTR  
LEA DX,XDONG  
MOV AH,9  
INT 21H  
Chương 14 Lập trình XL Chuỗi  
20  
Tải về để xem bản đầy đủ
ppt 46 trang baolam 20280 Free
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Lập trình hợp ngữ - Chương 13: Lập trình xử lý mảng và chuỗi", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

File đính kèm:

  • pptbai_giang_lap_trinh_hop_ngu_chuong_13_lap_trinh_xu_ly_mang_v.ppt