Hãy cho biết đoạn lệnh sau ( … mov dl,97 mov ah,2 int 21h …. ) hiện kết quả ra màn hình

Giải bài tập Vi xử lý – BachDH – TTM K51 v1.0 Phần 1: Kỹ thuật vi xử lý 1. Bộ vi xử lý 8088 được khởi tạo đoạn ngăn xếp tại SS = 4200H. Giả thiết tại một thời điểm BP=00FCH, BX=1234H, AX= 2006H, CX= 5566H, SP=0100H đang trỏ vào đỉnh ngăn xếp. Hãy tính địa chỉ và nội dung các byte nhớ trong ngăn xếp sau các lệnh sau: PUSH AX PUSH BX POP DX PUSH CX MOV DL,[BP] POP SI Giải: Coi độ lớn Stack là 1 byte và lưu trữ theo Little endian. + Ban đầu: Địa chỉ Nội dung SP  0100H … 4200H … 00FEH 06H 00FFH 0100H … 4200H 20H SS  + PUSH AX SP  SS  + PUSH BX SP 00FCH  00FDH 00FEH … 34H 12H 06H 1 00FFH 0100H … 4200H 20H 00FEH 06H 00FFH 0100H … 4200H 20H 00FEH 06H 00FFH 20H … SS  + POP DX SP  … SS  + PUSH CX SP 00FCH 66H  00FDH 55H 00FEH 06H 00FFH 20H 0100H … … SS 4200H  + MOV DL,[BP] – ngăn xếp không thay đổi SP 00FCH 66H  00FDH 55H 00FEH 06H 00FFH 20H 0100H … … SS 4200H  + POP SI SP  2 SS  0100H … 4200H … 3 2. Bộ vi xử lý 8088 được khởi tạo đoạn dữ liệu tại DS = 4200H. Giả thiết tại một thời điểm BX=ABF8H, SI=4E5CH, DI= 13C2H. Hãy tính địa chỉ toán hạng nguồn của các lệnh sau : a] MOV AL,[BX]+5 b] ADD AL,[3A5CH] c] MOV CL,[DI+7] d] MOV BX,[SI+BX+0FH] Giải: a] Chế độ địa chỉ tương đối cơ sở 4200H:ABFDH = 4CBFDH b] Chế độ địa chỉ trực tiếp 4200H:3A5CH = 45A5CH c] Chế độ địa chỉ tương đối chỉ số 4200H:13C9H = 433C9H d] Chế độ địa chỉ tương đối chỉ số cơ sở 4200H:FA63H = 51A63H 4 3. Cho nội dung các thanh ghi trong của 8088 như sau. AX= 94B3H ; BX=5AE4H ; CX= A4B7H ; DX= EA8DH. Hãy cho biết kết quả các phép toán sau và nội dung các cờ CF,OF,ZF sau mỗi phép toán a] ADD AX,BX b] SUB BX,CX c] ADD CL,DL d] OR BH,AL Giải: a] Kết quả: 94B3H 1001 0100 1011 0011 ADD 5AE4H 0101 1010 1110 0100 AX = EF97H 1110 1111 1001 0111 Cờ: CF = 0, OF = 0, ZF = 0 b] Kết quả: A4B7H 1010 0100 1011 0111 bù 1 0101 1011 0100 1000 bù 2 0101 1011 0100 1001 ADD 5AE4H 0101 1010 1110 0100 BX = B62DH 1011 0110 0010 1101 Cờ: CF = 0, OF = 1, ZF = 0 c] Kết quả: B7H 1011 0111 ADD 8DH 1000 1101 44H CL = 0100 0100 Cờ: CF = 1, OF = 1, ZF = 0 d] Kết quả: 5AH 0101 1010 OR B3H 1011 0011 FBH BH = 1111 1011 Cờ: CF = 0, OF = 0, ZF = 0 5 4. a] Hãy sử dụng các mạch giải mã 1/4, các mạch logic, các vi mạch EPROM 512B thiết IC 1 IC 2 IC 3 IC 4 A19 A18 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 kế bộ nhớ 2kB đặt địa chỉ cuối cùng là FFFFFH . b] Liệt kê địa chỉ của từng vi mạch EPROM. Giải: Dung lượng EPROM = 512B = 29B = 200H  9 chân địa chỉ [A0 – A8] Dung lượng bộ nhớ = 2kB = 211B = 4.29B = 800H  phải dùng 4 vi mạch EPROM 512B Địa chỉ đầu của bộ nhớ = Địa chỉ cuối của bộ nhớ - [Dung lượng bộ nhớ - 1] = FFFFFH – [800H – 1] = FF800H Mỗi vi mạch EPROM có dung lượng 200H nên địa chỉ của từng vi mạch EPROM là: IC 1: Địa chỉ đầu = FF800H Địa chỉ cuối = FF9FFH IC2: Địa chỉ đầu = FFA00H Địa chỉ cuối = FFBFFH IC3: Địa chỉ đầu = FFC00H Địa chỉ cuối = FFDFFH IC4: Địa chỉ đầu = FFE00H Địa chỉ cuối = FFFFFH Sơ đồ địa chỉ: A17 A16 A15 A14 A13 A12 A11 A10 A9 A8 A7 A6 A5 A4 A3 A2 A1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 địa chỉ địa chỉ mô đun nhớ nối // add bus IC Chọn mạch giải mã 1/4 [74LS139] Sơ đồ ghép nối: 6 A0 IO/M 0 1 0 1 0 0 1 0 1 IC 1 IC 2 IC 3 5. Thiết kế bộ nhớ dung lượng 24KB từ các vi mạch ROM 8KB và bộ giải mã 74138 [1/8] ghép nối với bộ vi xử lý 8088 [Chế độ MIN] với địa chỉ đầu từ AA000H. Giải: Dung lượng ROM = 8KB = 213B = 2000H  13 chân địa chỉ [A0 – A12] Dung lượng bộ nhớ = 24KB = 6000H  cần dùng 3 vi mạch ROM để thiết kế Địa chỉ đầu bộ nhớ = AA000H Địa chỉ cuối bộ nhớ = Địa chỉ đầu + [Dung lượng – 1] = AA000H + 6000H – 1 = AFFFFH Mỗi vi mạch ROM có dung lượng 2000H nên địa chỉ đầu và cuối của mỗi vi mạch là: IC1: Địa chỉ đầu = AA000H Địa chỉ cuối = ABFFFH IC2: Địa chỉ đầu = AC000H Địa chỉ cuối = ADFFFH IC3: Địa chỉ đầu = AE000H Địa chỉ cuối = AFFFFH Sơ đồ địa chỉ: A19 A18 A17 A16 A15 A14 A13 A12 A11 A10 A9 A8 A7 A6 A5 A4 A3 A2 A1 1 0 1 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 địa chỉ mô đun nhớ địa chỉ IC nối // add bus Chọn mạch giải mã 1/8 [74LS138] Sơ đồ nối: 7 A0 IO/M 0 1 0 0 1 0 1 6. Thiết kế mạch giải mã địa chỉ cho 8 cổng ra có địa chỉ 3A8H – 3AFH dùng các mạch giải mã 74139 [1/4]. Giải: Mỗi mạch giải mã 1/4 có 4 cổng ra  cần dùng 2 mạch giải mã 1/4 để thiết kế. Sơ đồ địa chỉ: A9 A8 A7 A6 A5 A4 A3 A2 A1 A0 IO/M 3A8H 1 1 1 0 1 0 1 0 0 0 3A9H 1 1 1 0 1 0 1 0 0 1 3AAH 1 1 1 0 1 0 1 0 1 0 3ABH 1 1 1 0 1 0 1 0 1 1 1 3ACH 1 1 1 0 1 0 1 1 0 0 3ADH 1 1 1 0 1 0 1 1 0 1 3AEH 1 1 1 0 1 0 1 1 1 0 3AFH 1 1 1 0 1 0 1 1 1 1 Địa chỉ cổng Chọn mạch giải mã 1/4 [74LS139] Sơ đồ nối: 8 7. Hệ vi xử lý 8088 có 2 vi mạch cổng PPI 8255A [Mỗi vi mạch có 4 địa chỉ].Hãy thiết kế mạch giải mã địa chỉ biết địa chỉ cơ sở của vi mạch 1 là 2B0H còn vi mạch 2 là 2B4H. Giải: Sơ đồ địa chỉ: A9 A8 A7 A6 A5 A4 A3 A2 A1 A0 IO/M 2B0H 1 0 1 0 1 1 0 0 0 0 2B1H 1 0 1 0 1 1 0 0 0 1 2B2H 1 0 1 0 1 1 0 0 1 0 2B3H 1 0 1 0 1 1 0 0 1 1 1 2B4H 1 0 1 0 1 1 0 1 0 0 2B5H 1 0 1 0 1 1 0 1 0 1 2B6H 1 0 1 0 1 1 0 1 1 0 2B7H 1 0 1 0 1 1 0 1 1 1 Địa chỉ cổng Sơ đồ nối: 9 8. Cho vi mạch cổng 8255A có 4 cổng PA, PCA, PB, PCB. Hãy Viết đoạn chương trình đặt cấu hình cho các cổng ở mode 0 như sau: PA, PCA là cổng vào, còn PB, PCB là cổng ra. Giải: Vì ở mode 0 nên  MA1MA0 = 00 MB = 0 Vì PA, PCA là cổng vào  A = CA = 1 Vì PB, PCB là cổng ra  B = CB = 0 Vậy từ điều khiển là: IO/M MA1 MA0 A CA MB B CB 1 0 0 1 1 0 0 0  Từ điều khiển = 98H Đoạn chương trình đặt cấu hình cho các cổng: Định nghĩa các hằng: CW EQU 98H Cấu hình cho 8255A: MOV DX,CWR ;đưa CWR vào DX MOV AL,CW ;từ điều khiển chứa trong AL OUT DX,AL ;đưa từ điều khiển ra CWR 10 Phần 2: Lập trình hợp ngữ A. Giải thích chương trình 1. Cho đoạn chương trình hợp ngữ sau, hãy giải thích từng lệnh [theo ngữ cảnh] và cho biết kết quả trên màn hình. MOV BH,41H ;Gán BH=41H [kí tự ‘A’] MOV BL,4 ;Gán BL=4 MOV AH,2 ;Gán AH=2 LAP: MOV CX,5 ;Gán CX=5 LAI: MOV DL,BH ;Chuyển nội dung BH vào DL INT 21H ;Gọi ngắt 21H, in ra màn hình kí tự trong DL[=BH] LOOP LAI ;Lặp lại việc in ra màn hình kí tự trong DL 5 lần [CX=5] MOV DL,’_’ ;Gán DL= kí tự ‘_’ INT 21H ;Gọi ngắt 21H 3 lần, in ra màn hình 3 kí tự ‘_’ liên tiếp INT 21H INT 21H INC BH ;Tăng BH 1 DEC BL ;Giảm BL 1 JNZ LAP ;Nhảy tới nhãn LAP nếu cờ ZF chưa bật Kết quả trên màn hình: AAAAA___BBBBB___CCCCC___DDDDD___ 2. Giải thích từng lệnh và viết kết quả trên màn hình của đoạn chương trình sau MOV BH,48 ;Gán BH=48 [kí tự ‘0’] MOV BL,4 ;Gán BL=4 FO1: MOV CX,5 ;Gán CX=5 MOV AH,2 ;Gán AH=2 FO2: MOV DL,BH ;Chuyển nội dung BH vào DL INT 21H ;Gọi ngắt 21H, in ra màn hình kí tự trong DL [=BH] INC DL ;Tăng DL 1 LOOP FO2 ;Lặp lại việc in ra màn hình kí tự trong DL 5 lần MOV DL,0AH ;Gán DL=0AH [LF] INT 21H ;Gọi ngắt 21H, in kí tự điều khiển LF [tạo một dòng mới] MOV DL,0DH ;Gán DL=0DH [CR] INT 21H ;Gọi ngắt 21H, in kí tự điều khiển CR [về đầu dòng] INC BH ;Tăng BH 1 DEC BL ;Giảm BL 1 JNZ FO1 ;Nhảy tới nhã FO1 nếu cờ ZF chưa bật Kết quả trên màn hình: 00000 11111 22222 33333 11 3. Cho đoạn chương trình hợp ngữ sau. .................................... .DATA M1 DB 0Bh,10h,15h,2DUP[?] B1 DB 10 .CODE Thu proc ................................... MOV AL,B1 ;AL = B1 = 10 [= 0Ah] LEA BX,M1 ;BX trỏ tới M1 ADD [BX+2],AL ;[BX+2] += AL [= M1[2] = 15h + 0Ah = 1Fh] ADD AL,[BX]+1 ;AL += [BX+1] [= 0Ah + 10h = 1Ah] MOV BX,3 ;BX = 3 MOV M1[BX],AL ;M1[3] = AL = 1Ah SUB B1,10h ;B1 -= 0Ah - 10h = FAh MOV AL,B1 ;AL = B1 = FAh INC BX ;BX += 1 = 4 MOV M1[BX],AL ;M1[4] = AL = FAh .................................. Hãy cho biết giá tri mới của mảng M1 sau các lệnh trên. M1: 0Bh,10h,1Fh,1Ah,FAh 12 4. Cho đoạn chương trình hợp ngữ sau. ................................. .DATA M1 DB ‘t’,’h’,’i’,’l’,’a’,’i’,2 DUP[‘*’] B1 DB 20H .CODE ................................... MOV AL,B1 ;Gán AL = B1 = 20H LEA BX,M1 ;BX trỏ tới M1 MOV CX,6 ;Gán CX = 6 LAP: SUB [BX],AL ;[BX] -= AL = [BX] – 20H [chữ thường thành chữ hoa] ADD BX,1 ;BX += 1 LOOP LAP ;Lặp lại 6 lần ................................... MOV AH,2 ;Gán AH = 2 MOV BX,0 ;Gán BX = 0 MOV CX,8 ;Gán CX = 8 LAI: MOV DL,M1[BX] ;Gán DL = M1[BX] INT 21H ;In ra màn hình kí tự trong DL INC BX ;Tăng BX 1 LOOP LAI ;Lặp lại quá trình trên 8 lần [CX = 8] Hãy cho biết giá tri mới của mảng M1 sau các lệnh trên và kết quả trên màn hình. M1: ‘T’,’H’,’I’,’L’,’A’,’I’,’*’,’*’ Kết quả trên màn hình: THILAI** 13 5. Giải thích từng lệnh và viết kết quả trên màn hình của đoạn chương trình sau MOV BH,41H ;Gán BH = 41H [kí tự ‘A’] MOV BL,4 ;Gán BL = 4 MOV AH,2 ;Gán AH = 2 LAP: MOV CX,5 ;Gán CX = 5 LAI: MOV DL,BH ;Chuyển nội dung BH vào DL INT 21H ;Gọi ngắt 21H, in ra màn hình kí tự trong DL OR DL,20H ;DL OR 20H [chuyển chữ hoa thành chữ thường] INT 21H ;Gọi ngắt 21H, in ra màn hình kí tự trong DL LOOP LAI ;Lặp lại quá trình trên 5 lần [CX = 5] MOV DL,’_’ ;Gán DL = ‘_’ INT 21H ;Gọi ngắt 21H 3 lần, in ra 3 lần kí tự ‘_’ INT 21H INT 21H INC BH ;Tăng BH 1 DEC BL ;Giảm BL 1 JNZ LAP ;Nhảy tới nhãn LAP nếu cờ ZF bật …………………. Kết quả trên màn hình: AaAaAaAaAa___BbBbBbBbBb___CcCcCcCcCc___DdDdDdDdDd___ 14 6. Giải thích từng lệnh và viết kết quả trên màn hình của đoạn chương trình sau MOV BH,0AH ;Gán BH = 0AH [kí tự điều khiển LF] MOV DL,39H ;Gán DL = 39H [kí tự ‘9’] ADD DL,BH ;DL += BH = 39H + 0AH = 43H [kí tự ‘C’] MOV CX,5 ;Gán CX = 5 MOV AH,2 ;Gán AH = 2 LAP: INT 21H ;Gọi ngắt 21H, in ra màn hình kí tự trong DL LOOP LAP ;Lặp lại quá trình trên 5 lần [CX = 5] XCHG BH,DL ;Đổi chỗ giá trị trong BH và DL [BH = 43H, DL = 0AH] INT 21H ;Gọi ngắt 21H, in ra màn hình kí tự trong DL [kí tự LF] MOV DL,0DH ;Gán DL = 0DH [kí tự điều khiển CR] INT 21H ;Gọi ngắt 21H, in ra màn hình kí tự trong DL [kí tự CR] MOV CX,8 ;Gán CX = 8 MA: XOR DL,DL ;DL XOR DL [Xóa DL = 0] ROL BH,1 ;Quay trái BH 1, CF = MSB RCL DL,1 ;Quay trái DL qua cờ CF 1, LSB = CF ADD DL,30H ;DL += 30H [đổi số thành mã ASCII] INT 21H ;Gọi ngắt 21H, in ra màn hình kí tự trong DL LOOP MA ;Lặp lại quá trình trên 8 lần [CX = 8] Kết quả trên màn hình: CCCCC 01000011 15 Bài tập lập trình 1. Viết chương trình hợp ngữ đầy đủ thực hiện công việc sau - Thông báo để vào một dòng chữ bất kỳ, kết thúc bằng Enter. - Vào một dòng chữ. - Đếm số chữ hoa trong dòng. - Nếu không có chữ hoa hiển thị thông báo “Không có chữ hoa”. - Ngược lại hiển thị số chữ hoa lên màn hình.[giả thiết số chữ hoa không quá 9]. - Về DOS. Giải: .MODEL SMALL .STACK 100H .DATA S1 DB 'Vao mot dong chu bat ki: $’ S2 DB ‘Khong co chu hoa$’ S3 DB 0AH,0DH,’$’ .CODE MAIN PROC MOV AX,@DATA ;Khởi tạo DS MOV DS,AX MOV AH,9 LEA DX,S1 INT 21H MOV AH,1 XOR CX,CX LAP1: INT 21H CMP AL,0DH JE TIEP1 CMP AL,41H JL NOTUPPER CMP AL,5AH JG NOTUPPER INC CX NOTUPPER: JMP LAP1 TIEP1: MOV AH,9 LEA DX,S3 INT 21H ;In ra thông báo để vào một dòng chữ bất kì ;Bắt đầu đọc kí tự vào ;CX chứa số chữ hoa trong dòng ;Đọc một kí tự ;Xem có phải là Enter không? ;Nếu là Enter thì nhảy tới nhãn TIEP1 ;Xem có ’Z’ không? ;Nếu lớn hơn thì nhảy tới nhãn NOTUPPER ;Nếu =0, nhảy tới nhãn SO_DUONG ;Nếu AX=0, nhảy tới SODUONG ;Nếu AX’9’ thì nhảy tới nhãn NOT_NUMBER ;Nếu =0, nhảy tới SODUONG ;Nếu AX9 hãy trừ đi 10 và in ra số 1, Đổi a ra chữ số và hiển thị. ] + Về DOS. Giải: .MODEL SMALL .STACK 100H .DATA S1 DB ‘Vao cac chu so tu 0 – 9: $’ S2 DB ‘b = $’ S3 DB ‘c = $’ S4 DB ‘Tong cua b va c la: $’ CRLF DB 13,10,’$’ .CODE MAIN PROC MOV AX,@DATA ;Khởi tạo DS MOV DS,AX MOV AH,9 LEA DX,S1 INT 21H LEA DX,CRLF INT 21H LEA DX,S2 INT 21H ;In ra thông báo vào các chữ số MOV AH,1 INT 21H ;Nhập giá trị cho b SUB AL,30H MOV BL,AL ;Đổi b thành số và chứa trong BL MOV AH,9 LEA DX,CRLF INT 21H LEA DX,S3 INT 21H ;Xuống dòng MOV AH,1 ;Nhập giá trị cho c ;Xuống dòng ;In ra thông báo nhập b = ;In ra thông báo nhập c = 23 INT 21H SUB AL,30H ADD BL,AL MOV AH,9 LEA DX,CRLF INT 21H LEA DX,S4 INT 21H ;Đổi c thành số ;Thực hiện b + c và chứa kết quả trong BL ;Xuống dòng ;In ra thông báo tổng của b và c là CMP BL,10 JL NHO_HON_10 MOV AH,2 MOV DL,’1’ INT 21H SUB BL,10 NHO_HON_10: MOV AH,2 MOV DL,BL ADD DL,30H INT 21H ;So sánh tổng với 10 ;Nếu nhỏ hơn thì nhảy tới nhãn NHO_HON_10 ;Nếu lớn hơn 10 thì ;In ra số 1 MOV AH,4CH INT 21H MAIN ENDP END MAIN ;Trả lại điều khiển cho hệ thống ;Và trừ tổng đi 10 ;Gán DL = BL ;Đổi ra mã ASCII của chữ số tương ứng ;In ra chữ số trong BL 24 5. Viết chương trình hợp ngữ đầy đủ thực hiện công việc sau - Thông báo để vào một từ bất kỳ.[ Từ dài nhất cũng không quá 15 kí tự] - Vào một từ và lưu trong mảng có tên Name [ Đếm số chữ]. - Nếu chữ đầu là chữ thường đổi thành chữ hoa. - Nếu các chữ tiếp theo là hoa đổi thành thường. - Hiển thị từ đã sửa ở dòng tiếp theo. - Về DOS. Ví dụ: Bạn hãy vào một cái tên: BiNH Tên đã sửa: Binh Giải: .MODEL SMALL .STACK 100H .DATA S1 DB ‘Ban hay vao mot cai ten: $‘ S2 DB ‘Ten da sua: $‘ S3 DB 15 DUP[0] CRLF DB 13,10,’$’ .CODE MAIN PROC MOV AX,@DATA ;Khởi tạo DS MOV DS,AX MOV AH,9 LEA DX,S1 INT 21H XOR CX,CX LEA SI,S3 MOV AH,1 LAP1: INT 21H CMP AL,13 JE TIEP1 MOV [SI],AL INC CX INC SI JMP LAP1 TIEP1: MOV [SI],’$’ MOV AH,9 ;In ra thông báo vào một cái tên ;CX chứa số chữ cái của xâu nhập vào ;SI trỏ vào đầu mảng S3 ;Đọc một kí tự ;Xem có ấn phím Enter không? ;Nếu là phím Enter, nhảy tới nhãn TIEP1 ;Lưu kí tự vừa nhập vào mảng ;Tăng số chữ cái lên 1 ;Tăng SI 1 ;Đọc kí tự tiếp theo ;Gán kí tự cuối cùng của xâu là ‘$’ ;Xuống dòng 25 LEA DX,CRLF INT 21H LEA DX,S2 INT 21H ;In ra thông báo “Tên đã sửa: “ LEA SI,S3 MOV AL,[SI] CMP AL,’a’ JL NOT_LOWER CMP AL,’z’ JG NOT_LOWER SUB AL,20H NOT_LOWER: MOV AH,2 MOV DL,AL INT 21H DEC CX LAP2: INC SI MOV AL,[SI] CMP AL,’A’ JL NOT_UPPER CMP AL,’Z’ JG NOT_UPPER ADD AL,20H NOT_UPPER: MOV AH,2 MOV DL,AL INT 21H LOOP LAP2

;SI trỏ vào đầu mảng S3 ;Gán AL = [SI] ;So sánh kí tự đầu với ‘a’ ;Nếu =’a’ thì so sánh với ‘z’ ;Nếu >’z’ thì nhảy tới nhãn NOT_LOWER ;Nếu ’Z’ thì nhảy đến nhãn NOT_UPPER ;Nếu ’z’ thì nhảy đến nhãn NOT_LOWER ;Nếu

Video liên quan

Chủ Đề