Bài tập vi xử lý có lời giải năm 2024

Bài tập vi xử lý có lời giải năm 2024

1.087 lượt xem 174 download

Bài tập vi xử lý có lời giải năm 2024
DownloadVui lòng tải xuống để xem tài liệu đầy đủ

Bài tập vi xử lý có lời giải năm 2024

Nội dung Text: Giải bài tập môn Vi xử lý

  1. VNPT --- HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG TP.HỒ CHÍ MINH Giải bài tập Vi xử lý 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 … … SS 4200H + PUSH AX SP 00FEH 06H 00FFH 20H 0100H … … SS 4200H 1
  2. + PUSH BX SP 00FCH 34H 00FDH 12H 00FEH 06H 00FFH 20H 0100H … … SS 4200H + POP DX SP 00FEH 06H 00FFH 20H 0100H … … SS 4200H + 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 00FEH 06H 00FFH 20H 0100H … … SS 4200H 2
  3. 3
  4. 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
  5. 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
  6. 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 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ỉ: A19 A18 A17 A16 A15 A14 A13 A12 A11 A10 A9 A8 A7 A6 A5 A4 A3 A2 A1 A0 IO/M 1 1 1 1 1 1 1 1 1 0 000000000 0 IC1 1 1 1 1 1 1 1 1 1 0 011111111 1 1 1 1 1 1 1 1 1 1 0 100000000 0 IC2 1 1 1 1 1 1 1 1 1 0 111111111 1 1 1 1 1 1 1 1 1 1 1 000000000 0 0 IC3 1 1 1 1 1 1 1 1 1 1 011111111 1 1 1 1 1 1 1 1 1 1 1 100000000 0 IC4 1 1 1 1 1 1 1 1 1 1 111111111 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
  7. 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 A0 IO/M 1 0 1 0 1 0 1 0 0 0 000000000 0 IC1 1 0 1 0 1 0 1 1 1 1 111111111 1 1 0 1 0 1 1 0 0 0 0 000000000 0 IC2 0 1 0 1 0 1 1 0 1 1 1 111111111 1 1 0 1 0 1 1 1 0 0 0 000000000 0 IC3 1 0 1 0 1 1 1 1 1 1 111111111 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
  8. 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
  9. 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
  10. 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 M A1 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: ;đưa CWR vào DX MOV DX,CWR ;từ điều khiển chứa trong AL MOV AL,CW ;đưa từ điều khiển ra CWR OUT DX,AL 10
  11. 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. ;Gán BH=41H (kí tự ‘A’) MOV BH,41H MOV BL,4 ;Gán BL=4 MOV AH,2 ;Gán AH=2 LAP: MOV CX,5 ;Gán CX=5 LAI: ;Chuyển nội dung BH vào DL MOV DL,BH ;Gọi ngắt 21H, in ra màn hình kí tự trong DL(=BH) INT 21H ;Lặp lại việc in ra màn hình kí tự trong DL 5 lần (CX=5) LOOP LAI MOV DL,’_’ ;Gán DL= kí tự ‘_’ ;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 INT 21H ;Tăng BH 1 INC BH ;Giảm BL 1 DEC BL ;Nhảy tới nhãn LAP nếu cờ ZF chưa bật JNZ LAP 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 ;Gán BH=48 (kí tự ‘0’) MOV BH,48 MOV BL,4 ;Gán BL=4 FO1: MOV CX,5 ;Gán CX=5 MOV AH,2 ;Gán AH=2 FO2: ;Chuyển nội dung BH vào DL MOV DL,BH ;Gọi ngắt 21H, in ra màn hình kí tự trong DL (=BH) INT 21H ;Tăng DL 1 INC DL ;Lặp lại việc in ra màn hình kí tự trong DL 5 lần LOOP FO2 MOV DL,0AH ;Gán DL=0AH (LF) ;Gọi ngắt 21H, in kí tự điều khiển LF (tạo một dòng mới) INT 21H MOV DL,0DH ;Gán DL=0DH (CR) ;Gọi ngắt 21H, in kí tự điều khiển CR (về đầu dòng) INT 21H ;Tăng BH 1 INC BH ;Giảm BL 1 DEC BL ;Nhảy tới nhã FO1 nếu cờ ZF chưa bật JNZ FO1 Kết quả trên màn hình: 00000 11111 22222 33333 11
  12. 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) ;BX trỏ tới M1 LEA BX,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
  13. 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 ;BX trỏ tới M1 LEA BX,M1 MOV CX,6 ;Gán CX = 6 LAP: ;[BX] -= AL = [BX] – 20H (chữ thường thành chữ hoa) SUB [BX],AL ADD BX,1 ;BX += 1 ;Lặp lại 6 lần LOOP LAP ................................... 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] ;In ra màn hình kí tự trong DL INT 21H ;Tăng BX 1 INC BX ;Lặp lại quá trình trên 8 lần (CX = 8) LOOP LAI 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
  14. 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 ;Gán BH = 41H (kí tự ‘A’) MOV BH,41H MOV BL,4 ;Gán BL = 4 MOV AH,2 ;Gán AH = 2 LAP: MOV CX,5 ;Gán CX = 5 LAI: ;Chuyển nội dung BH vào DL MOV DL,BH ;Gọi ngắt 21H, in ra màn hình kí tự trong DL INT 21H ;DL OR 20H (chuyển chữ hoa thành chữ thường) OR DL,20H ;Gọi ngắt 21H, in ra màn hình kí tự trong DL INT 21H ;Lặp lại quá trình trên 5 lần (CX = 5) LOOP LAI MOV DL,’_’ ;Gán DL = ‘_’ ;Gọi ngắt 21H 3 lần, in ra 3 lần kí tự ‘_’ INT 21H INT 21H INT 21H ;Tăng BH 1 INC BH ;Giảm BL 1 DEC BL ;Nhảy tới nhãn LAP nếu cờ ZF bật JNZ LAP …………………. Kết quả trên màn hình: AaAaAaAaAa___BbBbBbBbBb___CcCcCcCcCc___DdDdDdDdDd___ 14
  15. 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 ;Gán BH = 0AH (kí tự điều khiển LF) MOV BH,0AH ;Gán DL = 39H (kí tự ‘9’) MOV DL,39H ;DL += BH = 39H + 0AH = 43H (kí tự ‘C’) ADD DL,BH MOV CX,5 ;Gán CX = 5 MOV AH,2 ;Gán AH = 2 LAP: ;Gọi ngắt 21H, in ra màn hình kí tự trong DL INT 21H ;Lặp lại quá trình trên 5 lần (CX = 5) LOOP LAP ;Đổi chỗ giá trị trong BH và DL (BH = 43H, DL = 0AH) XCHG BH,DL ;Gọi ngắt 21H, in ra màn hình kí tự trong DL (kí tự LF) INT 21H ;Gán DL = 0DH (kí tự điều khiển CR) MOV DL,0DH ;Gọi ngắt 21H, in ra màn hình kí tự trong DL (kí tự CR) INT 21H 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 ;Quay trái DL qua cờ CF 1, LSB = CF RCL DL,1 ;DL += 30H (đổi số thành mã ASCII) ADD DL,30H ;Gọi ngắt 21H, in ra màn hình kí tự trong DL INT 21H ;Lặp lại quá trình trên 8 lần (CX = 8) LOOP MA Kết quả trên màn hình: CCCCC 01000011 15
  16. B. 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 'Vao mot dong chu bat ki: $’ S1 DB ‘Khong co chu hoa$’ S2 DB 0AH,0DH,’$’ S3 DB .CODE MAIN PROC MOV AX,@DATA ;Khởi tạo DS MOV DS,AX ;In ra thông báo để vào một dòng chữ bất kì MOV AH,9 LEA DX,S1 INT 21H ;Bắt đầu đọc kí tự vào MOV AH,1 ;CX chứa số chữ hoa trong dòng XOR CX,CX LAP1: ;Đọc một kí tự INT 21H ;Xem có phải là Enter không? CMP AL,0DH ;Nếu là Enter thì nhảy tới nhãn TIEP1 JE TIEP1 ;Xem có ’Z’ không? CMP AL,5AH ;Nếu lớn hơn thì nhảy tới nhãn NOTUPPER JG NOTUPPER ;Nếu
  17. ;Xem CX có bằng 0 không? CMP CX,0 ;Nếu CX = 0, nhảy tới nhã NOUPPER JE NOUPPER ; Nếu CX 0, chuyển số chữ hoa trong CX sang DX MOV DX,CX ;Đổi sang kí tự số ADD DL,30H MOV AH,2 ;In ra số chữ hoa INT 21H ;Nhảy tới nhãn EXIT JMP EXIT NOUPPER: ;Nếu không có chữ hoa, in ra thông báo S2 MOV AH,9 LEA DX,S2 INT 21H EXIT: ;Trả lại điều khiển cho hệ thống MOV AH,4CH INT 21H MAIN ENDP END MAIN 17
  18. 2. Cho một mảng số liệu có tên M1 gồm 50 phần tử cỡ WORD. Viết chương trình hợp ngữ đầy đủ đếm và hiển thị số lượng phần tử là số âm lên màn hình. (Giả thiết có chương trình con hiển thị số hệ 10 tên là IN_DEC, số cần hiển thị để trong AX.) Giải: .MODEL SMALL .STACK 100H .DATA M1 DW -10,-9,2,-3,5,45 DUP(-1) .CODE MAIN PROC MOV AX,@DATA ;Khởi tạo DS MOV DS,AX ;CX chứa số số âm XOR CX,CX ;BX đóng vai trò chỉ số khi chạy trong mảng XOR BX,BX ;SI trỏ vào đầu mảng M1 LEA SI,M1 LAP1: ;So sánh BX với 50 CMP BX,50 ;Nếu BX = 50 nhảy tới nhãn TIEP1 JE TIEP1 ;AX = phần tử trỏ bởi SI MOV AX,[SI] ;So sánh AX với 0 CMP AX,0 ;Nếu AX>=0, nhảy tới nhãn SO_DUONG JGE SO_DUONG ;Nếu AX=0, nhảy tới SODUONG JGE SODUONG ;Nếu AX
  19. INT 21H ;Lấy lại số âm trong AX POP AX ;Rồi đổi dấu số âm trong AX thành số dương NEG AX SODUONG: ;CX chứa số chữ số của số cần in XOR CX,CX MOV BX,10 ;Gán BX = 10 LAY_SO_DU: ;Chuẩn bị cho phép chia DXAX cho 10 XOR DX,DX DIV BX ;Chia AX cho 10 ;Số dư cất vào Stack PUSH DX ;Tăng số chữ số lên 1 INC CX ;So sánh thương với 0 CMP AX,0 ;Nếu 0 thì lặp lại quá trình chia DXAX cho 10 JNE LAY_SO_DU ;In ra các chữ số của AX MOV AH,2 IN_SO_DU: ;Lấy các số dư khi chia DXAX cho 10 POP DX ;Đổi thành kí tự số trong bảng ASCII OR DL,30H INT 21H ;In ra ;Lặp lại số lần bằng số chữ số của AX LOOP IN_SO_DU ;Khôi phục các thanh ghi POP DX POP CX POP BX POP AX RET IN_DEC ENDP END MAIN 19
  20. 3. Cho một mảng số liệu có tên M1 gồm 80 phần tử, mỗi phần tử cỡ 1 BYTE chứa 1 kí tự. Viết chương trình hợp ngữ đầy đủ làm các công việc sau: + Vào một dòng kí tự lưu trong mảng. + Đếm và hiển thị những kí tự là chữ số ở dòng tiếp theo. Giải: .MODEL SMALL .STACK 100H .DATA M1 DB 80 DUP(0) ‘Vao mot dong ki tu: $’ S1 DB ‘So chu so: $’ S2 DB ‘Cac chu so: $’ S3 DB 13,10,’$’ CRLF DB .CODE MAIN PROC MOV AX,@DATA ;Khởi tạo DS MOV DS,AX ;In ra thông báo vào một dòng kí tự MOV AH,9 LEA DX,S1 INT 21H ;CX chứa số chữ số XOR CX,CX ;SI trỏ vào đầu mảng M1 LEA SI,M1 MOV AH,1 LAP1: ;Đọc các kí tự nhập vào INT 21H ;Xem có phải phím Enter không CMP AL,0DH ;Nếu đúng thì nhảy đến nhãn TIEP1 JE TIEP1 ;Lưu kí tự đọc được vào ô nhớ trỏ bởi SI MOV [SI],AL ;Tăng SI 1 (do các phần tử trong mảng kiểu BYTE) INC SI ;So sánh kí tự nhập vào với ‘0’ CMP AL,48 ;Nếu nhỏ hơn thì đọc kí tự tiếp theo JL LAP1 ;So sánh kí tự nhập vào với ‘9’ CMP AL,57 ;Nếu lớn hơn thì đọc kí tự tiếp theo JG LAP1 ;Nếu < ‘9’ thì tăng số chữ số lên 1 INC CX ;Đọc kí tự tiếp theo JMP LAP1 TIEP1: MOV [SI],’$’ ;Gán cho kí tự cuối cùng của xâu là ‘$’ ;In ra chuỗi CRLF, xuống dòng MOV AH,9 LEA DX,CRLF 20

Bài tập vi xử lý có lời giải năm 2024

Bài tập vi xử lý có lời giải năm 2024

65 tài liệu

2397 lượt tải