Đề bài : Chuyen Soruce Code viet bang C trong slide bai giang ly thuyet thanh Source Code viet bang hop ngu MIPS yeu cau dung thu tu - ham

Tải code tai đây
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155

# De Bai : Chuyen Soruce Code viet bang C trong slide bai giang ly thuyet thanh Source Code viet bang hop ngu MIPS yeu cau dung thu tu - ham .
# Source Code viet bang C trong slide bai giang:

# int mult(int mcand,int mlier)
# {
#	int product=0;
#	while(mlier>0)
#	{
#		product=product+mcand;
#		mlier=mlier-1;
#	}
#	return product;
# }

# void main()
# {
#	int i,j,k,m; 
#	...
#	i=mult(j,k); ...
#	m=mult(i,i); ...
# }
# -----------------------------------------------------------------------------------------------------------------------------------

# --------------------------------------------------------- Bai Lam -----------------------------------------------------------------

.data
	Nhapj:.asciiz "Nhap Vao So Nguyen j = "
	Nhapk:.asciiz "Nhap Vao So Nguyen k = "
	KetQua:.asciiz "Ket Qua Tra Ve m = "
.text
main:
	# Xuat thong bao Nhapj 
	li $v0,4
	la $a0,Nhapj
	syscall

	# Nhap vao so nguyên j .
	li $v0,5
	syscall

	# Luu so nguyen j vua nhap vao thanh ghi luu tru $s0 (giu gia tri trong suot qua trinh goi ham ) .
	move $s0,$v0

	# Yeu cau cua chuong trinh la mlier > 0 roi moi tiep tuc di tinh product (product duoc khoi tao bang 0).Neu mlier <=0 => product tra ve gia tri khoi tao ban dau = 0 => noi cach khac o day neu 1 trong 2 gia tri j,k hay ca 2 gia tri cung bang 0 => tra ve product = 0.
	# Cach lam:Ta thuc hien phep so sanh kiem tra dieu kien neu gia tri j >= 0 => nhay den nhan "NhapTiepK" de tiep tuc nhap k roi lai tiep tuc thuc hien phep so sanh 1 lan nua xem k co >=0 hay khong ? Neu co thi nhay den nhan "XuLyDuLieu" di tinh va in ra ket qua cuoi cung,neu khong thi nhay den nhan "TraVeKetQua0" de tra ve ket qua m = 0 . Con neu gia tri j ban dau < 0 => nhay den nhan "TiepTucNhapKMacDuCuoiCungTraVeKetQua0" de tiep tuc nhap k theo nhu dung thong le roi sau do nhay tiep den nhan "TraVeKetQua0" de tra ve ket qua m = 0 .
	
	# Truong hop j >=0 => nhay den nhan "NhapTiepK"
	bgez $s0,NhapTiepK
	
	# Truong hop j < 0 => nhay den nhan "TiepTucNhapKMacDuCuoiCungTraVeKetQua0" de tiep tuc nhap k roi sau do nhay tiep den nhan "TraVeKetQua0" de in ra ket qua m = 0 .
	bltz $s0,TiepTucNhapKMacDuCuoiCungTraVeKetQua0

NhapTiepK:	
	# Xuat thong bao Nhapk
	li $v0,4
	la $a0,Nhapk
	syscall

	# Nhap vao so nguyen k .
	li $v0,5
	syscall

	# Luu so nguyen k vua nhap vao thanh ghi luu tru $s1 (giu gia tri trong suot qua trinh goi ham ) .
	move $s1,$v0
	
	# Truong hop k >= 0 => nhay den nhan "XuLyDuLieu" roi di tinh in ra ket qua .
	bgez $s1,XuLyDuLieu
	
	# Truong hop k < 0 => nhay thang luon den nhan "TraVeKetQua0" de in ra ket qua m = 0 .
	bltz $s1,TraVeKetQua0
	
XuLyDuLieu:	
	# Xu Ly i=mult(j,k) .
	move $a0,$s0 
	move $a1,$s1 
	jal mult # Luu dia chi tro ve vao $ra va nhay den nhan "mult"

	# Xu Ly m=mult(i,i) .
	move $a0,$v0
	move $a1,$v0
	jal mult # Luu dia chi tro ve vao $ra va nhay den nhan "mult"
	
	move $s2,$v0 # Luu gia tri cua m vao thanh ghi $s2 .

	# Xuat KetQua .
	li $v0,4
	la $a0,KetQua
	syscall

	# Xuat ra ket qua m .
	li $v0,1
	move $a0,$s2 # Luu gia tri cua m trong thanh ghi $s2 vao thanh ghi $a0 .
	syscall
	
	j Exit # Nhay den nhan "Exit" .

TiepTucNhapKMacDuCuoiCungTraVeKetQua0:
	# Xuat thong bao Nhapk
	li $v0,4
	la $a0,Nhapk
	syscall

	# Nhap vao so nguyen k .
	li $v0,5
	syscall

	# Luu so nguyen k vua nhap vao thanh ghi luu tru $s1 (giu gia tri trong suot qua trinh goi ham ) .
	move $s1,$v0
	
	j TraVeKetQua0 # Nhay tiep den nhan "TraVeKetQua0" de tra ve ket qua m = 0 .

TraVeKetQua0:	
	# Xuat KetQua .
	li $v0,4
	la $a0,KetQua
	syscall
	
	li $t3,0 # Khoi tao thanh ghi tam $t3 = 0 .
	move $a0,$t3 # Luu gia tri thanh ghi tam $t3 vao thanh ghi $a0 .
	
	# In ra ket qua
	li $v0,1
	syscall
	
Exit:
	# Thoat chuong trinh .
	li $v0,10
	syscall

mult:
	# Dau Thu Tuc :
	addi $sp,$sp,-4 # Khai bao kich thuoc cho stack .
	sw $ra,0($sp) # Cat dia chi tra ve cua thu tuc trong $ra vao ngan xep .

	# Than Thu Tuc : 
	
	# Khoi tao vong lap .
	move $t0,$a0 # Luu gia tri cua mcand trong thanh ghi $a0 vao thanh ghi tam $t0 .
	move $t1,$a1 # Luu gia tri cua mlier trong thanh ghi $a1 vao thanh ghi tam $t1 .
	li $t2,0 # Khoi tao product = 0 .

Lap:
	beq $t1,$0,KetThucLap # Dieu kien dau vao la mlier > 0 . Neu thoa roi moi tiep tuc tinh nhung dong lenh ben duoi và moi lan tinh xong thi mlier giam xuong (mlier = mlier - 1 ) roi lai lap lai qua trinh so sanh tren . Nen ta dat dieu kien neu mlier giam xuong mà bang 0 => ket thuc qua trinh lap .
	add $t2,$t2,$t0 # product = product + mcand
	sub $t1,$t1,1 # mlier = mlier - 1 
	j Lap # Lap lai qua trinh tren .

KetThucLap:
	# Cuoi Thu Tuc .
	move $v0,$t2 
	lw $ra,0($sp) # Lay dia chi tra ve $ra
	addi $sp,$sp,4
	jr $ra

# ---------------------------------------------------- THE END -------------------------------------------------------------------------

Nhận xét

Bài đăng phổ biến từ blog này

Bài 17 : Viết chương trình nhập số nguyên lớn N (khai báo:long N) có k chữ số

Bài Tập Cây Nhị Phân Tìm Kiếm

Bài 22 : Viết chương trình nhập vào số nguyên dương n gồm 5 chữ số,kiểm tra xem các chữ số n có phải là số đối xứng hay không ?