Bài giảng Cấu trúc máy tính - 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

 

ppt46 trang | Chuyên mục: Kiến Trúc Máy Tính | Chia sẻ: yen2110 | Lượt xem: 276 | Lượt tải: 0download
Tóm tắt nội dung Bài giảng Cấu trúc máy tính - Chương 13: Lập trình xử lý mảng & chuỗi, để xem tài liệu hoàn chỉnh bạn click vào nút "TẢI VỀ" ở trên
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 
1 
Chương 14 Lập trình XL Chuỗi 
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. 
2 
Chương 14 Lập trình XL Chuỗi 
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 
3 
Chương 14 Lập trình XL Chuỗi 
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 
4 
Chương 14 Lập trình XL Chuỗi 
5 
Chương 14 Lập trình XL Chuỗi 
 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:SIES:DI 
Chứa địa chỉ chuỗi đích 
Chứa địa chỉ chuỗi nguồn 
6 
Chương 14 Lập trình XL 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. 
CÁC THAO TÁC XỬ LÝ CHUỖI 
7 
Chương 14 Lập trình XL Chuỗi 
8 
Chương 14 Lập trình XL Chuỗi 
NHẬP CHUỖI 
9 
Chương 14 Lập trình XL Chuỗi 
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 ( STO RE S TRING B YTE) 
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ỰCHiỆN DI TĂNG 1 NẾU DF=0HoẶC GiẢM 1 NẾU DF =1 
10 
Chương 14 Lập trình XL Chuỗi 
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 ( STO RE S TRING W ORD) 
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ỰCHiỆN DI TĂNG HAY GiẢM 2TÙY VÀO DF. 
11 
Chương 14 Lập trình XL Chuỗi 
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 
12 
Chương 14 Lập trình XL Chuỗi 
THÍ DỤ 
. 
READSTR PROC 
PUSH AXPUSH DICLDXOR BX,BXMOV AH,1INT 21HLAP: 
	CMP AL,0DH	JE ENDLAP	CMP AL,8H	JNE ELSE1	DEC DI	DEC BX	JMP READ 
ELSE1 :	STOSB	INC BXREAD : 	INT 21H	JMP LAPENDLAP :	POP DI	POP AXRET READSTR ENDP 
Giải thích : 
DI chứa offset của chuỗiBX chứa số ký tự nhập8H mã ASCII của Backspacekhông  lưu nó vào chuỗităng số ký tự lên 1Đúng  lùi con trỏ DIgiảm số ký tự nhập được 
13 
Chương 14 Lập trình XL 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. 
NHẬP XUẤT CHUỖI 
HiỂN THỊ CHUỖI 
14 
Chương 14 Lập trình XL Chuỗi 
Nạp 1 chuổi 
CÁC THAO TÁC XỬ LÝ CHUỔI 
HiỂN THỊ CHUỖI 
For counter Do 
 Nạp chuổi cần hiển thị vào AL Chuyển vào DL Hiển thị ký tựEndFor 
15 
Chương 14 Lập trình XL Chuỗi 
LODSB (LOAD STRING BYTE) 
NẠP 1 CHUỖI CÁC BYTES 
CHUYỂN BYTE TẠI ĐỊA CHỈ DS:SI  ALSI TĂNG 1 NẾU DF=0 SI GiẢM 1 NẾU DF =1 
16 
Chương 14 Lập trình XL Chuỗi 
THÍ DỤ 
STRING1 DB ‘ABC’MOV AX,@DATAMOV DS,AXLEA SI, STRING1CLDLODSBLODSB. 
NẠP BYTE THỨ 1 VÀ THỨ 2  AL 
17 
Chương 14 Lập trình XL Chuỗi 
LODSW (LOAD STRING WORD) 
NẠP 1 CHUỖI CÁC WORD 
CHUYỂN WORD TẠI ĐỊA CHỈ DS:SI  AXSI TĂNG HAY GiẢM TÙY TRẠNG THÁI DF 
18 
Chương 14 Lập trình XL Chuỗi 
THÍ DỤ 
Hiển thị chuỗi nhập 
DISPSTR PROCPUSH AXPUSH BXPUSH CXPUSH DXPUSH SIMOV CX, BXJCXZ EXITCLDMOV AH,2LAP :LODSBMOV DL, ALINT 21HLOOP LAP 
EXIT :POP SI 
POP DXPOP CXPOP BXPOP AXRETDISPSTR ENDP 
19 
Chương 14 Lập trình XL Chuỗi 
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ủachuỗi đã nhập ở dòng kế. 
.MODEL SMALL.STACK 100H.DATASTRING1 DB 80 DUP(0)XDONG DB 0DH,0AH,’$’.CODEMAIN PROCMOV AX,@DATAMOV DS,AXMOV ES,AXLEA DI, STRING1CALL READSTRLEA DX,XDONGMOV AH,9INT 21H 
LEA SI, STRING1MOV BX, 15CALL DISPSTRMOV AX,4C00HINT 21HMAIN ENDP; READSTR PROC ; DISPSTR PROCEND MAIN 
20 
Chương 14 Lập trình XL Chuỗi 
MOVSB chỉ chuyển 1 byte. Vậy cả chuỗita làm thế nào ? 
CÁC THAO TÁC XỬ LÝ CHUỔI 
Chuyển một BYTE : MOVSB 
chuyển nội dung của byte được định bởi DS:SI đến byte được chỉ bởi ES: DI. Sau đó SI và DI tự động tăng lên 1 nếu cờ DF = 0 hay giảm 1 nếu DF = 1. 
21 
Chương 14 Lập trình XL Chuỗi 
DF 
0 
22 
Chương 14 Lập trình XL Chuỗi 
MOVSW 
Chuyển một chuỗi các word (2 bytes) 
DS:SI trỏ đến chuỗi nguồnES:DI trỏ đến chuỗi đích 
Sau khi đã chuyển 1 word củachuỗi cả SI và DI cùng tănglên 2 nếu DF=0 hoặc cùng giảmđi 2 nếu DF=1 
23 
Chương 14 Lập trình XL Chuỗi 
LODSB (Load String Byte) 
Chuyển byte chỉ bởi DS:SI  ALtăng SI lên 1 nếu DF=0giảm SI xuống 1 nếu DF=1 
24 
Chương 14 Lập trình XL Chuỗi 
3A 
DS:SI 
DS:SI 
LODSB 
3A 
0 
DF 
AL 
25 
Chương 14 Lập trình XL Chuỗi 
26 
Chương 14 Lập trình XL Chuỗi 
STOSB (LƯU CHUỖI BYTE) 
27 
Chương 14 Lập trình XL Chuỗi 
STOSW (LƯU CHUỖI WORD) 
28 
Chương 14 Lập trình XL Chuỗi 
29 
Chương 14 Lập trình XL Chuỗi 
30 
Chương 14 Lập trình XL Chuỗi 
31 
Chương 14 Lập trình XL Chuỗi 
32 
Chương 14 Lập trình XL Chuỗi 
33 
Chương 14 Lập trình XL Chuỗi 
REP 
Khởi tạo CX với số byte cần chuyển 
Sau đó thực hiện lệnh REP MOVSB 
Sau mỗi lệnh MOVSB, CX giảm 1 cho đếnkhi nó =0  hết chuỗi. 
34 
Chương 14 Lập trình XL Chuỗi 
THÍ DỤ MINH HỌA 
.DATASTRING1 DB ‘HELLO’STRING2 DB 5 DUP(?)..CLDLEA SI, STRING1LEA DI, STRING2MOV CX, 5REP MOVSB 
Bài tập :Viết đoạn chương trình chép chuỗi STRING1 ở thí dụ trước vàochuỗi STRING2 nhưng theo thứtự ngược lại. 
35 
Chương 14 Lập trình XL Chuỗi 
THÍ DỤ MINH HỌA 
Cho mảng sau ARR DW 10,20,40,50,60,?Viết các lệnh để chèn 30 vào giữa 20 và 40 ( giả sử rằng DS và ESđã chứa địa chỉ đoạn dữ liệu) 
10,20, ,40,50,60 
30 
Dời 40,50,60 ra sau 1 vị trí 
Sau đó chèn 30 vào 
36 
Chương 14 Lập trình XL Chuỗi 
STDLEA SI, ARR+8HLEA DI, ARR+AHMOV CX, 3REP MOVSWMOV WORD PTR[DI],30 
37 
Chương 14 Lập trình XL Chuỗi 
MẢNG 1 CHIỀU 
Một dãy các phần tử có cùng kiểu dữ liệu, có cùng 1 tên gọi. 
Khai báo 
MKT DB ‘abcdef’ ; mảng ký tự 
MNB Dw 10h,20h,30h,40h,50h,60h ; mảng số 
ArrA DB 100 DUP(0) ; khai báo mảng có 100 phần tử có giá trị khởi tạo bằng 0. 
38 
Chương 14 Lập trình XL Chuỗi 
39 
Chương 14 Lập trình XL Chuỗi 
40 
Chương 14 Lập trình XL Chuỗi 
BÀI TẬP 
Bài 1 : Viết chương trình nhập 1 số từ 1-12, in ra tên tháng tương ứng. 
Bài 2 : Viết chương trình nhập 1 số từ 1-7, in ra tên thứ tương ứng. 
41 
Chương 14 Lập trình XL Chuỗi 
MỘT SỐ BÀI TẬP MINH HỌA LẬP TRÌNHXỬ LÝ CHUỖI 
Nhập 1 chuỗi dài tối đa 255 ký tự từ bàn phím. Cho phép dùng phím BackSpaceđể sửa khi nhập sai và kết thúc nhập khi gỏ phím Enter. 
Hướng dẫn : 
Dùng hàm 0AH INT 21H để nhập chuổi 
DS:DX địa chỉ của buffer đệm lưu chuỗi. 
Byte 0 : số byte tối đa có thể nhập. 
Byte 1 : chứa giá trị 0 
Byte 2 trở đi : để trống (lưu các ký tự sẽ nhập) 
Để nhập 1 chuỗi ký tự vào Bufferđệm ta khai báo như sau : 
.DATA 
BUFFERN DB 80,0,80 DUP(?) 
42 
Chương 14 Lập trình XL Chuỗi 
B1. Viết chương trình nhập vào 1 từ, sau đó in từng ký tự trong từ theo chiều dọc.Thí dụ Nhập CONGXuất : C 
 O 
 N G 
B2. Viết chương trình nhập vào 1 chuỗi, sau đó đổi tất cả chuỗi thành chữ hoa 
và in chuỗi ra màn hình ở dòng kế. 
B3.Viết chương trình nhập hai chuỗi ký tự , kiểm tra xem chuỗi thứ hai có xuất hiện trong chuỗi thứ nhất hay không. 
 Ví dụ : Nhập chuỗi thứ nhất : computer information 
	 Nhập chuỗi thứ hai : compute 
	 Xuất: Chuỗi thứ hai có xuất hiện trong chuỗi thứ nhất. 
43 
Chương 14 Lập trình XL Chuỗi 
B4. Viết chương trình nhập 1 chuỗi ký tự viết hoa các ký tự nguyên âm, viết thường các ký tự phụ âm. 
 Ví dụ : Nhập chuỗi : “aBcdE” 
	 Xuất chuỗi: “AbCdE” 
B5. Viết chương trình nhập vào 2 chuỗi ký tự s1, s2 và 1 số nguyên dương n. Chèn chuỗi s2 vào chuỗi s1 ở vị trí ký tự thứ n trong chuỗi s1 . 
 Ví dụ : Nhập chuỗi s1 : “abcde” 
	 Nhập chuỗi s2 : “fgh”	 
	 Nhập n = 3 	 
	 Xuất kết quả : “abcfghde” 
B6. Viết chương trình nhập vào từ bàn phím 1 chuỗi và tính số lần xuất hiện của các nguyên âm (a,e,i,o,u, y), cac phu am, cac khoang trang, trong chuỗi tương ứng. 
 Ví dụ : Nhập chuỗi : “dai hoc khoa hoc tu nhien thanh pho ho chi minh” 
	 Xuất : Số lần xuất hiện của các nguyên âm là : 14 , phu am la: 24, khoang trang la: 9 
44 
Chương 14 Lập trình XL Chuỗi 
B7. Viết chương trình nhập vào từ bàn phím 1 chuỗi gồm các ký tự trong bảng chữ cái. Đếm xem trong chuỗi có bao nhiêu từ. 
 Ví dụ : Nhập chuỗi : “ hO Chi mINh ” 
	 Xuất : chuỗi gồm có 3 từ 
B8. Viết chương trình nhập vào từ bàn phím 4 số . Xuất ra màn hình 4 số đó theo thứ tự tăng dần . 
 Ví dụ : Nhập : 14 7 26 11 
	 Xuất : 7 11 14 26 
B9. Viết chương trình nhập vào từ bàn phím 4 số và sau đó xuất số lớn nhất và nhỏ nhất ra màn hình. 
 Ví dụ : Nhập : 13 21 1 49 
	 Xuất : Số lớn nhất : 49 
	 Số nhỏ nhất : 1	 
45 
Chương 14 Lập trình XL Chuỗi 
46 
Chương 14 Lập trình XL Chuỗi 

File đính kèm:

  • pptbai_giang_cau_truc_may_tinh_chuong_13_lap_trinh_xu_ly_mang_c.ppt