You are on page 1of 8

ĐẠI HỌC QUỐC GIA TP.

HỒ CHÍ MINH
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN

THỰC HÀNH KIẾN TRÚC MÁY TÍNH


LỚP: CE119.M22.MTCL.1

BÁO CÁO BÀI TẬP THỰC HÀNH SỐ 2

Giảng Viên: Nguyễn Thành Nhân

Sinh Viên: Trần Trương Trọng


MSSV: 18521543
2. Thực hành

Giải:
bne $s3,$s4,Else                     # if i != j
add $s0, $s1, $s2                   #f = g + h (skip if i != j)
j exit                                              # Exit
Else: sub $s0, $s1, $s2        # f = g – h (skip if i = j)
exit:

3. bài tập
a. Nhập vào một ký tự, xuất ra cửa sổ I/O của MARS theo từng yêu cầu sau:

✓ Ký tự liền trước và liền sau của ký tự nhập vào

Code:

.data   
    Nhap: .asciiz "Nhap vao 1 ki tu: "
    XTruoc: "\nKi tu dung truoc "
    XSau: "\nKi tu dung sau "
    La: .asciiz " la "
.text   
main:   
    la $a0, Nhap   
    jal printf   
    addi $v0, $0, 12   
    syscall   
    addi $s0, $v0, 0   
    la $a0, XTruoc   
    jal printf   
    addi $a0, $s0, 0   
    addi $v0, $0, 11   
    syscall   
    la $a0, La   
    jal printf   
    addi $a0, $s0, -1   
    addi $v0, $0, 11   
    syscall   
    la $a0, XSau   
    jal printf   
    addi $a0, $s0, 0   
    addi $v0, $0, 11   
    syscall   
    la $a0, La   
    jal printf   
    addi $a0, $s0, 1   
    addi $v0, $0, 11   
    syscall   
exit:   
    addi $v0, $0, 10   
    syscall     
printf:   
    addi $v0, $0, 4   
    syscall   
    jr $ra

b. Nhập từ bàn phím 2 số nguyên, in ra cửa sổ I/O của MARS theo từng yêu cầu sau:

✓ Số lớn hơn

✓ Tổng, hiệu, tích và thương của hai số

Code :

.data   
    a: .asciiz "a= "
    b: .asciiz "b= "
    Min: .asciiz "\nMin= "
    Max: .asciiz "\nMax= "
    Cong: .asciiz "\na+b="
    Tru: .asciiz "\na-b="
    Nhan: .asciiz "\na.b="
    Chia: .asciiz "\na:b="
.text   
li $v0, 4
la $a0, a
syscall
li $v0, 5
syscall
move $t0,$v0
li $v0, 4
la $a0, b
syscall
li $v0, 5
syscall
move $t1,$v0
move $t2, $v0
move $s0, $t0
move $s1, $t0
bgt $t0, $t1, Dung
move $s1, $t1
j IFMAX
Dung:
move $s0, $s1
IFMAX:
bgt $s1, $t2, IFMIN
move $s1, $t2
j IFMIN
IFMIN:
blt $s0, $t2, continue
move $s0, $t2
j continue
continue:
li $v0, 4
la $a0 ,Max
syscall
li $v0, 1
move $a0, $s1
syscall
li $v0, 4
la $a0, Min
syscall
li $v0, 1
move $a0, $s0
syscall
li $v0, 4
la $a0, a
syscall
li $v0, 5
syscall
move $t0,$v0
li $v0, 4
la $a0, b
syscall
li $v0, 5
syscall
move $t1,$v0
add $s0,$t0, $t1
sub $s1, $t0, $t1
li $v0, 4
la $a0, Cong
syscall
li $v0, 1
move $a0, $s0
syscall
li $v0, 4
la $a0, Tru
syscall
li $v0, 1
move $a0, $s1
syscall
mult $t0,$t1
mflo $s2
li $v0,4
la $a0 ,Nhan
syscall
li $v0, 1
move $a0, $s2
syscall
div $t0, $t1
mflo $s3
li $v0, 4
la $a0, Chia
syscall
li $v0, 1
move $a0, $s3
syscall l
Giải thích:
- Khai báo vùng nhớ data
- Khai báo các chuỗi cần thiết
- Xuất chuỗi a. Nhập số nguyên a từ bàn phím
- Lưu số a vào $t0.
- Xuất chuỗi b. Nhập số nguyên a từ bàn phím
- Lưu số a vào $t1
- Xuất chuỗi b.
- Xem $s0 như là min và lưu vào số a vào min. Xem $s1 như là max và lưu vào số b vào max.
- Nếu a>b thì đi đến label Dung. Ngược lại thì max=b. Đi đến label IFMAX lable Dung min =b
- Sau đó lưu a+b vào $s0
- Lưu a-b vào $s1

You might also like