Nhóm 10 it012 m12 cncl

63 1 0
Nhóm 10   it012 m12 cncl

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Nhóm 10 it012 m12 cnclNhóm 10 it012 m12 cnclNhóm 10 it012 m12 cnclNhóm 10 it012 m12 cnclNhóm 10 it012 m12 cnclNhóm 10 it012 m12 cnclNhóm 10 it012 m12 cnclNhóm 10 it012 m12 cnclNhóm 10 it012 m12 cnclNhóm 10 it012 m12 cnclNhóm 10 it012 m12 cnclNhóm 10 it012 m12 cnclNhóm 10 it012 m12 cncl

ĐẠI HỌC QUỐC GIA TP HỒ CHÍ MINH TRƯỜNG ĐẠI HỌC CƠNG NGHỆ THƠNG TIN KHOA KĨ THUẬT MÁY TÍNH TÊN MƠN HỌC: Tổ chức Cấu trúc Máy tính II SINH VIÊN THỰC HIỆN Nguyễn Thanh Hiếu – 20521328 Nguyễn Huy Hoàng – 20521343 GIẢNG VIÊN HƯỚNG DẪN: BÙI PHÙNG HỮU ĐỨC LỚP: IT012.M12.CNCL TP HỒ CHÍ MINH, 2021 MỤC LỤC DANH MỤC HÌNH VẼ i DANH MỤC BẢNG BIỂU ii LAB 1: HƯỚNG DẪN SỬ DỤNG LOGISIM 1) Thực hành 1.1 Mô chức cổng luận lý: 1.2 Mô thiết bị lưu trữ 2) Bài tập 2.1 Mô mạch tổ hợp 2.2 Mô mạch 3) Bài tập bổ sung 3.1 chức nguyên lý hoạt động D-Flipflop, Thanh ghi 3.2 Sự khác mạch tổ hợp mạch 3.3 Clock( xung nhịp) CPU gì, trạng thái clock 3.4 Mô mạch 3.5 Thiết kế lại ghi tập 3.2 với 16 bit liệu 11 LAB 2: ALU VÀ REGISTER FILES 12 1) Thực hành 12 1.1 Mô ALU 12 1.2 Mô Register Files gồm ghi bit 12 2) Bài tập 13 2.1 Cải tiến ALU với phép toán: A + B, A + 1, A – B, A – 1, A AND B, A OR B, NOT A, A XOR B 13 2.2 Thiết kế mô lại Register Files với địa xuất riêng với địa ghi? 13 3) Bài tập bổ sung 14 3.1 Phân biệt Mux Demux? Thiết kế mux 4to1 demux 2to4 cổng luận lý 14 3.2: Thiết kế lại cộng có chức cộng số bit 16 3.3: Thiết kế mạch có chức so sánh hai input bit có hay không? Trường hợp nhau, output ngược lại output 17 LAB 3: MARS – CHƯƠNG TRÌNH MƠ PHỎNG HỢP NGỮ MIPS 18 1) Thực hành 18 1.1 Một số lệnh assembly MIPS 18 1.2 Mơ chương trình ý nghĩa chương trình: 20 2) Bài Tập 21 2.1 Khai báo xuất cửa sổ I/O chuỗi 21 2.2 Biểu diễn nhị phân chuỗi nhớ 22 2.3 Xuất lại chuỗi nhập 22 2.4 Nhập vào số nguyên sau xuất tổng số nguyên 23 3) Bài tập bổ sung 24 3.1 Assembly gì? Trình bày q trình chương trình viết ngơn ngữ C/C++ thực máy tính? 24 3.2 Trình bày kiểu liệu MIPS32 kích thước kiểu liệu kiểu liệu: 25 3.3 Trình bày cấu trúc nhớ chương trình C++(layout memory) 25 3.4 Viết chương trình hợp ngữ nhập vào ba số a,b,c Kiểm tra in số lớn nhất, số bé nhất(khơng dùng vịng lặp) 25 3.5 Viết chương trình hợp ngữ nhập vào số nguyên a,b In kết phép cộng, trừ nhân, chia 30 3.6 Viết chương trình hợp ngữ in địa chuỗi “Hello UIT” biến var_a kiểu word có giá trị 10 nhớ dạng thập lục phân (ví dụ 0x1001000) 32 3.7 in chẵn lẻ 33 LAB 4: TỔNG QUÁT VỀ HỢP NGỮ VÀ KIẾN TRÚC MIPS 35 1) Thực hành 35 1.1 Chuyển đoạn code sang mips 35 2) Bài tập 36 2.1 Nhập vào ký tự, xuất cửa sổ I/O MARS theo yêu cầu sau: 36 3) Bài tập bổ sung 38 3.1 Con trỏ gì? Chức trỏ? Mảng gì? Chức mảng? 38 3.2 Thủ tục gì? Trình bày luồng hoạt động thủ tục MIPS? 39 3.3 Ngăn xếp(stack gì)? Trình bày cấu trúc ngăn xếp kể tên ứng dụng ngăn xếp ? 40 3.4 Viết chương trình nhập vào số nguyên dương A Kiểm tra số phải số nguyên tố hay không? 40 3.5 Viết chương trình hợp ngữ nhập vào số nguyên a,b In kết phép cộng, trừ nhân, chia với số lớn 42 3.6 Viết chương trình in N(N>2) số fibonaci 42 LAB 5: THAO TÁC VỚI MẢNG VÀ CON TRỎ TRONG MIPS 45 1) Bài tập (chỉ sử dụng trỏ) 45 1.1 Xuất giá trị lớn nhỏ mảng 45 1.2 Tổng tất phần tử mảng 47 1.3 Người sử dụng nhập vào số phần tử giá trị phần tử in cửa sổ 49 1.4 Nhập mảng số nguyên n phần tử (nhập vào số phần tử giá trị phần tử) 51 2) Bài tập bổ sung 51 2.1 Viết chương trình hợp ngữ nhập mảng gồm N phần tử Sắp xếp mảng theo thứ tự giảm dần 52 2.2 Viết chương trình hợp ngữ nhập vào N mang gồm N phần tử In mảng đảo ngược mảng vừa nhập 54 DANH MỤC HÌNH VẼ Hình 1- 1: Mạch (ABC+AC+AB+BC)C Hình 1- 2: Mạch (AD+ABC+ABD+ACD) (¬A) + (¬A)B + (¬C)D 10 Hình 1- 3: Hình ghi 16 bit 11 Hình 2- 1: mô ALU 12 Hình 2- 2: mơ Register Files 12 Hình 2- 3: ALU với phép toán 13 Hình 2- 4: Register Files với địa xuất riêng 14 Hình 2- 5: Hình Mux 1to4 15 Hình 2- 6: Hình Demux 2to4 16 Hình 2- 7: cộng có chức cộng số bit 17 Hình 2- 8: mạch so sánh hai input bit 17 Hình 3- 1: Biểu diễn nhị phân chuỗi nhớ 22 Hình 3- 2: lưu đồ thuật toán in số lớn nhất, số bé 26 Hình 4- 1: Lưu đồ thuật toán Ký tự liền trước liền sau ký tự nhập vào + Ký tự nhập vào phép ba loại: số, chữ thường chữ hoa 36 Hình 4- 2: Lưu đồ thuật toán kiểm tra số nguyên tố 40 Hình 4- 3: Lưu đồ thuật tốn in N số fibonaci 43 Hình 5- 1: Lưu đồ thuật tốn Xuất giá trị lớn nhỏ mảng 45 Hình 5- 2: Lưu đồ thuật toan tính tổng tất phần tử mảng 48 Hình 5- 3: in vị trí phần tử cửa sổ 50 DANH MỤC BẢNG BIỂU Bảng 1- 1: Bảng Mô chức cổng luận lý Bảng 1- 2: Bảng mô D-latch Bảng 1- 3: Bảng mô D-flipflop Bảng 1- 4: Bảng mô ghi Bảng 1- 5: Bảng mô ghi Bảng 1- 6: Bảng mô mạch Bảng 1- 7: Bảng khác mạch tổ hợp mạch Bảng 1- 8: Mô mạch (ABC+AC+AB+BC)C Bảng 1- 9: Mơ mạch (AD+ABC+ABD+ACD) (¬A) + (¬A)B + (¬C)D 11 Bảng 2- 1: Phân biệt Mux Demux 14 Bảng 3- 1: Một số lệnh assembly MIPS 19 LAB 1: HƯỚNG DẪN SỬ DỤNG LOGISIM 1) Thực hành 1.1 Mô chức cổng luận lý: Code data input_num: asciiz"a = " IsPrime: asciiz " la so nguyen to" IsNotPrime: asciiz " khong la so nguyen to" text li $v0,4 la $a0,input_num syscall li $v0, syscall move $t0, $v0 ble $t0, 1, isNotPrime addi $t1, $zero, Loop: beq $t1, $t0, isPrime div $t0, $t1 mfhi $s0 beq $s0, $zero, isNotPrime addi $t1, $t1, j Loop isNotPrime: li $v0, add $a0, $zero, $t0 syscall li $v0, la $a0, IsNotPrime syscall j exit isPrime: li $v0, add $a0, $zero, $t0 syscall li $v0, la $a0, IsPrime syscall exit: 41 Giải thích #Khai báo vùng nhớ data #Khai báo input # # # # # $v0 = -> in # # # # $v0 = -> Nhập # input number # dịch $v0 sang $t0 # # $t1 isNotPrime # $t1 = # # # t1 in địa # # # # # $v0 = -> in số nguyên # # # $v0 = - > in địa # # 3.5 Viết chương trình hợp ngữ nhập vào số nguyên a,b In kết phép cộng, trừ nhân, chia với số lớn Code data nhap1: asciiz "a = " nhap2: asciiz "b = " text main: la $a0,nhap1 add $v0,$0,4 syscall Giải thích # # # # # #a0=nhap1 # v0=4 ->in # # # # # # # # # # # # # # #a+b # # # a-b # # #a*b # # $v0 = print real number # # a/b # # li $v0, syscall mov.s $f1, $f0 la $a0,nhap2 add $v0,$0,4 syscall li $v0, syscall mov.s $f2, $f0 #a+b add.s $f12, $f1, $f2 syscall #a-b sub.s $f12, $f1, $f2 syscall #a*b mul.s $f12, $f1, $f2 li $v0, syscall #a/b div.s $f12, $f1, $f2 syscall 3.6 Viết chương trình in N(N>2) số fibonaci 42 Hình 4- 3: Lưu đồ thuật tốn in N số fibonaci Code Giải thích #Khai báo vùng nhớ data #Code # v0 = -> nhập # # s0 = v0 # s0 = s0-2 #loop counter # # # # # #print space # data text li $v0, syscall move $s0, $v0 sub $s0, $s0, li $s1, li $a1,1 li $a2,1 li $a0, li $v0, syscall li $a0, 32 li $v0, 11 43 syscall # in kí tự # # # # # # # # # # # # a1=1, a2=1,a3 (a3=temp) #print space # # # # # # # # #swap # # # # # counter +1 # # # # # li $a0, li $v0, syscall jal while j end while: beq $s1, $s0, end_loop li $a0, 32 li $v0, 11 syscall add $a1, $a1, $a2 move $a0, $a1 li $v0, syscall #swap move $a3, $a1 move $a1, $a2 move $a2, $a3 addi $s1, $s1, j while end_loop: jr $ra end: 44 LAB 5: THAO TÁC VỚI MẢNG VÀ CON TRỎ TRONG MIPS 1) Bài tập (chỉ sử dụng trỏ) 1.1 Xuất giá trị lớn nhỏ mảng Hình 5- 1: Lưu đồ thuật tốn Xuất giá trị lớn nhỏ mảng 45 Code data array1: space 200 size1: word 200 Max: asciiz "\n Max: " Min: asciiz "\n Min: " string1: asciiz "Moi nhap so luong phan tu: " string2: asciiz "Nhap gia tri cac phan tu: \n" text li $v0, la $a0, string1 syscall li $v0, syscall la $s1, size1 sw $v0, 0($s1) li $v0, la $a0, string2 syscall la $a1, array1 lw $a2, size1 add $t1, $a1, $0 add $t2, $a1, $a2 NHAP: li $v0, syscall sb $v0, 0($t1) addi $t1, $t1, slt $t3, $t1, $t2 bne $t3, $0, NHAP j Tim_Min_Max Tim_Min_Max: la $a1, array1 lw $a2, size1 add $t0, $a1, $0 add $t1, $a1, $a2 lb $s0, 0($t0) lb $s1,0($t0) FIND: lb $t3, 0($t0) slt $t4, $s0, $t3 46 Giải thích #Khai báo vùng nhớ data #mảng array có kích thước 200 byte # # # # # # #v0 = -> in chuỗi # a0 = string1 # # v0=5 -> Nhập int # # s1 = size1 # # # v0=4 -> in chuỗi # a0=string2 # #nap dia chi cua mang array1 vao $a1 #nap n vao $a2 #Tao tro chi vao mang array1[0] #Tao tro chi vao mang array1[size1] # # # # #Tang tro len don vi #Xem tro co chay den cuoi mang chua # # # # #Nap dia chi mang Array1 cho $a1 #nap gia tri size1 cho $a2 #Khoi tao tro chi vao mang Array[0] #Khoi tao tro chi vao mang Array[size1] #$s0=array1[0] , luu gia tri Max tam #$s0=array1[0] , luu gia tri Min tam # #$t3=array1[0] #if( $s0 in string # a0 = phantu # #v0 =5 -> nhập int # #index #counter #a1[10] # label loop1 #t0 = s0-> end_loop1 # v0=5-> nhập int # #input a[i] #i=i+1 data phantu: asciiz "Nhap so phan tu: " tong: asciiz "\nTong: " arr: word 0:10 text li $v0, la $a0, phantu syscall li $v0, syscall move $s0, $v0 li $t0, la $a1, arr loop1: beq $t0, $s0, end_loop1 li $v0, syscall sw $v0, ($a1) addi $t0, $t0, 48 addi $a1, $a1, j loop1 end_loop1: li $t0, la $a1, arr li $t3, loop2: beq $t0, $s0, end_loop2 lw $t2, ($a1) add $t3, $t3, $t2 addi $t0, $t0, addi $a1, $a1, j loop2 end_loop2: li $v0, la $a0, tong syscall move $a0, $t3 li $v0, syscall #a[i+1] # # # # #sum # # # t3=t3+t2 # i++ # a[i+1] # # # # v0 =4 # a0 = tong # # a0 = t3 # # 1.3 Người sử dụng nhập vào số phần tử giá trị phần tử in cửa sổ 49 Hình 5- 3: in vị trí phần tử cửa sổ Code Giải thích #Khai báo vùng nhớ data # # # mảng arr[10] #code # v0 = -> in string # a0 = phantu # #v0 =5 -> nhập int # #index #counter #a1[10] data phantu: asciiz "Nhap so phan tu: " input: "Nhap phan tu can in: " arr: word 0:10 text li $v0, la $a0, phantu syscall li $v0, syscall move $s0, $v0 li $t0, la $a1, arr loop1: beq $t0, $s0, end_loop1 #t0 = s0-> end_loop1 50 li $v0, syscall sw $v0, ($a1) addi $t0, $t0, addi $a1, $a1, j loop1 end_loop1: li $t0, la $a1, arr # v0=5-> nhập int # #input a[i] #i=i+1 #a[i+1] # # # # # # v0 =4 # # # v0=5 # # s2 = v0-4 # a1 = a1+a2 # Lệnh chuyển liệu từ a1 vào t2 # a0=t2 # # in kí tự li $v0, la $a0, input syscall li $v0, syscall mul $a2, $v0, add $a1, $a1, $a2 lw $t2, ($a1) move $a0, $t2 li $v0, syscall 1.4 Nhập mảng số nguyên n phần tử (nhập vào số phần tử giá trị phần tử) Code C Code MIPS Giải Thích if (i end_loop1 #a[i+1] # # #counter # #n-1 for soft loop # # # # # #print space # # # #i++ # #a[i+1] loop1: li $v0, syscall sw $v0, ($a1) addi $t0, $t0, beq $t0, $s0, end_loop1 addi $a1, $a1, j loop1 end_loop1: li $t0,0 la $a1, arr addi $s1, $s0, -1 jal soft loop2: lw $a0, ($a1) li $v0, syscall li $a0, 32 li $v0, 11 syscall addi $t0, $t0, beq $t0, $s0, end_loop2 addi $a1, $a1, j loop2 52 end_loop2: li $v0, 10 syscall # # # # # # # # counter for max loop # # # # #a1 not chage, #a2 change $a3 = max address # # v1 compare # # # # v1 change # # # a3=a2 # # t1=s1+1 #t1=s0->end_max # a2=a2+4 # # # # # # increase counter #t0=t0+1 #t0=s1-> end_soft #a[i+1] # # #counter # # soft: move $t1, $t0 lw $v0, ($a1) move $a2, $a1 move $a3, $a1 max: lw $v1, ($a2) bgt $v1, $v0, compare j continue compare: lw $k0, ($a3) bgt $v1, $k0, change j continue change: move $a3, $a2 continue: addi $t1, $t1, beq $t1, $s0, end_max addi $a2, $a2, j max end_max: lw $k0, ($a3) sw $k0, ($a1) sw $v0, ($a3) addi $t0, $t0, beq $t0, $s1, end_soft addi $a1, $a1, j soft end_soft: li $t0,0 la $a1, arr jr $ra 53 2.2 Viết chương trình hợp ngữ nhập vào N mang gồm N phần tử In mảng đảo ngược mảng vừa nhập Code data phantu: asciiz "N = " input: asciiz "\nARR = " out: asciiz "\noutput = " arr: word 0:10 text li $v0, la $a0, phantu syscall Giải thích #Khai báo vùng nhớ data # nhập n # mảng arr[i] # xuất output # mảng arr 10 phần tử # code # v0=4 # a0= phantu # xuất string # #v0=5 -> nhập int # #index # # v0=4 #a0=input # #counter #a1[10] # # #t0=s0 -> end_loop1 # v0=5 # #input a[i] # i=i+1 #a[i+1] # # # # # # # a1= a1+4 # # # t0=s0 -> end_loop2 # load a1 vào a0 # v0=1 -> in int li $v0, syscall move $s0, $v0 li $v0, la $a0, input syscall li $t0, la $a1, arr loop1: beq $t0, $s0, end_loop1 li $v0, syscall sw $v0, ($a1) addi $t0, $t0, addi $a1, $a1, j loop1 end_loop1: li $t0, li $v0, la $a0, out syscall subi $a1, $a1, syscall loop2: beq $t0, $s0, end_loop2 lw $a0, ($a1) li $v0,1 54 syscall li $a0, 32 li $v0,11 syscall addi $t0, $t0, subi $a1, $a1, j loop2 end_loop2: end_program: # #print space # # #i++ #a[i-1] # # # 55 ... chuỗi “Hello UIT” biến var_a kiểu word có giá trị 10 nhớ dạng thập lục phân (ví dụ 0x10 0100 0) 32 Code Giải thích data # var_a: word 10 # Biến var_a = 10 chuoi: asciiz "Hello UIT" # chuoi = "Hello... chương trình hợp ngữ in địa chuỗi “Hello UIT” biến var_a kiểu word có giá trị 10 nhớ dạng thập lục phân (ví dụ 0x10 0100 0) 32 3.7 in chẵn lẻ 33 LAB 4: TỔNG QUÁT VỀ HỢP NGỮ VÀ KIẾN... + (¬A)B + (¬C)D Input A Input B Input C Input D Output F 0 0 0 0 1 0 0 0 1 0 0 1 1 1 1 1 1 0 0 10 0 1 1 0 1 1 0 1 1 1 0 1 1 Bảng 1- 9: Mơ mạch (AD+ABC+ABD+ACD) (¬A) + (¬A)B + (¬C)D 3.5 Thiết

Ngày đăng: 01/03/2023, 00:55

Tài liệu cùng người dùng

Tài liệu liên quan