about summary refs log tree commit diff
path: root/mips
diff options
context:
space:
mode:
authorNguyễn Gia Phong <mcsinyx@disroot.org>2020-02-28 22:09:59 +0700
committerNguyễn Gia Phong <mcsinyx@disroot.org>2020-02-28 22:09:59 +0700
commit29cd51b76067e02683b9b95f4ce2582eac8669e4 (patch)
tree3c0ae6ffa9bdd7d48cedf29c4a4f05d301a85fac /mips
parent70c413d6c86cb01df2a3a5dd8b2bc8a80c3d4317 (diff)
downloadcp-29cd51b76067e02683b9b95f4ce2582eac8669e4.tar.gz
[mips] Finish chapter 3
Diffstat (limited to 'mips')
-rw-r--r--mips/chapter-3/exercise-10.s41
-rw-r--r--mips/chapter-3/exercise-11.s41
-rw-r--r--mips/chapter-3/exercise-13.s18
-rw-r--r--mips/chapter-3/exercise-14.s19
-rw-r--r--mips/chapter-3/exercise-15.s19
-rw-r--r--mips/chapter-3/exercise-16.s19
-rw-r--r--mips/chapter-3/exercise-3.s20
-rw-r--r--mips/chapter-3/exercise-4.s20
-rw-r--r--mips/chapter-3/exercise-6.s47
-rw-r--r--mips/chapter-3/exercise-7.s47
10 files changed, 291 insertions, 0 deletions
diff --git a/mips/chapter-3/exercise-10.s b/mips/chapter-3/exercise-10.s
new file mode 100644
index 0000000..f3ddeef
--- /dev/null
+++ b/mips/chapter-3/exercise-10.s
@@ -0,0 +1,41 @@
+# print -35 in 8-bit two-complement binary
+	.text
+main:
+	li	$t0,	-35		# t0 = -35
+	li	$t1,	0		# t1 = 0
+	li	$t8,	8		# t8 = 8
+
+reverse:
+	beqz	$t8,	prefix		# if (!t8) goto prefix
+	andi	$t2,	$t0,	1	# t2 = t0 & 1
+	sra	$t0,	$t0,	1	# t0 >>= 1
+	sll	$t1,	$t1,	1	# t1 <<= 1
+	add	$t1,	$t1,	$t2	# t1 += t2
+	addi	$t8,	$t8,	-1	# t8--
+	j	reverse			# goto reverse
+
+prefix:
+	li	$v0,	11		# print character
+	li	$a0,	48		# 0
+	syscall
+	li	$v0,	11		# print character
+	li	$a0,	98		# b
+	syscall
+	li	$t8,	8		# t8 = 8
+
+print:
+	beqz	$t8,	end		# if (!t8) goto end
+	li	$v0,	1		# print integre
+	andi	$a0,	$t1,	1	# a0 = t1 & 1
+	syscall
+	sra	$t1,	$t1,	1	# t1 >>= 1
+	addi	$t8,	$t8,	-1	# t8--
+	j	print			# goto print
+
+end:
+	li	$v0,	11		# print character
+	li	$a0,	10		# newline
+	syscall
+
+	li	$v0,	10		# terminate
+	syscall
diff --git a/mips/chapter-3/exercise-11.s b/mips/chapter-3/exercise-11.s
new file mode 100644
index 0000000..f47f29f
--- /dev/null
+++ b/mips/chapter-3/exercise-11.s
@@ -0,0 +1,41 @@
+# print -32 in 8-bit two-complement binary
+	.text
+main:
+	li	$t0,	-32		# t0 = -32
+	li	$t1,	0		# t1 = 0
+	li	$t8,	8		# t8 = 8
+
+reverse:
+	beqz	$t8,	prefix		# if (!t8) goto prefix
+	andi	$t2,	$t0,	1	# t2 = t0 & 1
+	sra	$t0,	$t0,	1	# t0 >>= 1
+	sll	$t1,	$t1,	1	# t1 <<= 1
+	add	$t1,	$t1,	$t2	# t1 += t2
+	addi	$t8,	$t8,	-1	# t8--
+	j	reverse			# goto reverse
+
+prefix:
+	li	$v0,	11		# print character
+	li	$a0,	48		# 0
+	syscall
+	li	$v0,	11		# print character
+	li	$a0,	98		# b
+	syscall
+	li	$t8,	8		# t8 = 8
+
+print:
+	beqz	$t8,	end		# if (!t8) goto end
+	li	$v0,	1		# print integre
+	andi	$a0,	$t1,	1	# a0 = t1 & 1
+	syscall
+	sra	$t1,	$t1,	1	# t1 >>= 1
+	addi	$t8,	$t8,	-1	# t8--
+	j	print			# goto print
+
+end:
+	li	$v0,	11		# print character
+	li	$a0,	10		# newline
+	syscall
+
+	li	$v0,	10		# terminate
+	syscall
diff --git a/mips/chapter-3/exercise-13.s b/mips/chapter-3/exercise-13.s
new file mode 100644
index 0000000..6779d11
--- /dev/null
+++ b/mips/chapter-3/exercise-13.s
@@ -0,0 +1,18 @@
+# print(int('204', 8))
+	.text
+main:
+	li	$t0,	0		# t0 = 0
+	addi	$t0,	$t0,	2	# t0 += 2
+	sll	$t0,	$t0,	6	# t0 *= 8 * 8
+	addi	$t0,	$t0,	4	# t0 += 4
+
+	li	$v0,	1		# print integer
+	move	$a0,	$t0		# at t0
+	syscall
+
+	li	$v0,	11		# print character
+	li	$a0,	10		# newline
+	syscall
+
+	li	$v0,	10		# terminate
+	syscall
diff --git a/mips/chapter-3/exercise-14.s b/mips/chapter-3/exercise-14.s
new file mode 100644
index 0000000..b01b76b
--- /dev/null
+++ b/mips/chapter-3/exercise-14.s
@@ -0,0 +1,19 @@
+# print(int('204', 7))
+	.text
+main:
+	li	$t0,	0		# t0 = 0
+	addi	$t0,	$t0,	2	# t0 += 2
+	li	$t1,	49		# t1 = 7 * 7
+	mul	$t0,	$t0,	$t1	# t0 *= t1
+	addi	$t0,	$t0,	4	# t0 += 4
+
+	li	$v0,	1		# print integer
+	move	$a0,	$t0		# at t0
+	syscall
+
+	li	$v0,	11		# print character
+	li	$a0,	10		# newline
+	syscall
+
+	li	$v0,	10		# terminate
+	syscall
diff --git a/mips/chapter-3/exercise-15.s b/mips/chapter-3/exercise-15.s
new file mode 100644
index 0000000..3a16b14
--- /dev/null
+++ b/mips/chapter-3/exercise-15.s
@@ -0,0 +1,19 @@
+# print(int('204', 6))
+	.text
+main:
+	li	$t0,	0		# t0 = 0
+	addi	$t0,	$t0,	2	# t0 += 2
+	li	$t1,	36		# t1 = 6 * 6
+	mul	$t0,	$t0,	$t1	# t0 *= t1
+	addi	$t0,	$t0,	4	# t0 += 4
+
+	li	$v0,	1		# print integer
+	move	$a0,	$t0		# at t0
+	syscall
+
+	li	$v0,	11		# print character
+	li	$a0,	10		# newline
+	syscall
+
+	li	$v0,	10		# terminate
+	syscall
diff --git a/mips/chapter-3/exercise-16.s b/mips/chapter-3/exercise-16.s
new file mode 100644
index 0000000..1aa9dec
--- /dev/null
+++ b/mips/chapter-3/exercise-16.s
@@ -0,0 +1,19 @@
+# print(int('204', 5))
+	.text
+main:
+	li	$t0,	0		# t0 = 0
+	addi	$t0,	$t0,	2	# t0 += 2
+	li	$t1,	25		# t1 = 5 * 5
+	mul	$t0,	$t0,	$t1	# t0 *= t1
+	addi	$t0,	$t0,	4	# t0 += 4
+
+	li	$v0,	1		# print integer
+	move	$a0,	$t0		# at t0
+	syscall
+
+	li	$v0,	11		# print character
+	li	$a0,	10		# newline
+	syscall
+
+	li	$v0,	10		# terminate
+	syscall
diff --git a/mips/chapter-3/exercise-3.s b/mips/chapter-3/exercise-3.s
new file mode 100644
index 0000000..cb2475c
--- /dev/null
+++ b/mips/chapter-3/exercise-3.s
@@ -0,0 +1,20 @@
+# t0 = 0b10101, using only bit shift and add
+	.text
+main:
+	li	$t0,	0		# t0 = 0
+	addi	$t0,	$t0,	1	# t0++
+	sll	$t0,	$t0,	2	# t0 <<= 2
+	addi	$t0,	$t0,	1	# t0++
+	sll	$t0,	$t0,	2	# t0 <<= 2
+	addi	$t0,	$t0,	1	# t0++
+
+	li	$v0,	1		# print integer
+	move	$a0,	$t0		# at t0
+	syscall
+
+	li	$v0,	11		# print character
+	li	$a0,	10		# newline
+	syscall
+
+	li	$v0,	10		# terminate
+	syscall
diff --git a/mips/chapter-3/exercise-4.s b/mips/chapter-3/exercise-4.s
new file mode 100644
index 0000000..29888f1
--- /dev/null
+++ b/mips/chapter-3/exercise-4.s
@@ -0,0 +1,20 @@
+# t0 = 0b11001, using only bit shift and add
+	.text
+main:
+	li	$t0,	0		# t0 = 0
+	addi	$t0,	$t0,	1	# t0++
+	sll	$t0,	$t0,	1	# t0 <<= 1
+	addi	$t0,	$t0,	1	# t0++
+	sll	$t0,	$t0,	3	# t0 <<= 3
+	addi	$t0,	$t0,	1	# t0++
+
+	li	$v0,	1		# print integer
+	move	$a0,	$t0		# at t0
+	syscall
+
+	li	$v0,	11		# print character
+	li	$a0,	10		# newline
+	syscall
+
+	li	$v0,	10		# terminate
+	syscall
diff --git a/mips/chapter-3/exercise-6.s b/mips/chapter-3/exercise-6.s
new file mode 100644
index 0000000..8c1b6fd
--- /dev/null
+++ b/mips/chapter-3/exercise-6.s
@@ -0,0 +1,47 @@
+# print(hex(0b10101))
+	.text
+main:
+	li	$t0,	21		# t0 = 0b10101
+	li	$t1,	0		# t1 = 0
+	li	$t9,	9		# t9 = 9
+
+reverse:
+	beqz	$t0,	done		# if (!t0) goto done
+	andi	$t2,	$t0,	0xf	# t2 = t0 & 0xf
+	sra	$t0,	$t0,	4	# t0 >>= 4
+	sll	$t1,	$t1,	4	# t1 <<= 4
+	add	$t1,	$t1,	$t2	# t1 += t2
+	j	reverse			# goto reverse
+done:
+
+	li	$v0,	11		# print character
+	li	$a0,	48		# 0
+	syscall
+	li	$v0,	11		# print character
+	li	$a0,	120		# x
+	syscall
+	bnez	$t1,	print		# if (!t1) goto print
+	li	$v0,	11		# print character
+	li	$a0,	48		# 0
+	syscall
+	j	end			# goto end
+
+print:
+	beqz	$t1,	end		# if (!t1) goto end
+	andi	$t2,	$t1,	0xf	# t2 = t1 & 0xf
+	sra	$t1,	$t1,	4	# t1 >>= 4
+	addi	$a0,	$t2,	48	# a0 = chr(t2), sort of
+	ble	$t2,	$t9,	put	# if (t2 <= 9) goto put
+	addi	$a0,	$a0,	7	# a0 += 7
+put:
+	li	$v0,	11		# print character at a0
+	syscall
+	j	print			# goto print
+end:
+
+	li	$v0,	11		# print character
+	li	$a0,	10		# newline
+	syscall
+
+	li	$v0,	10		# terminate
+	syscall
diff --git a/mips/chapter-3/exercise-7.s b/mips/chapter-3/exercise-7.s
new file mode 100644
index 0000000..924765d
--- /dev/null
+++ b/mips/chapter-3/exercise-7.s
@@ -0,0 +1,47 @@
+# print(hex(0b11001))
+	.text
+main:
+	li	$t0,	25		# t0 = 0b11001
+	li	$t1,	0		# t1 = 0
+	li	$t9,	9		# t9 = 9
+
+reverse:
+	beqz	$t0,	done		# if (!t0) goto done
+	andi	$t2,	$t0,	0xf	# t2 = t0 & 0xf
+	sra	$t0,	$t0,	4	# t0 >>= 4
+	sll	$t1,	$t1,	4	# t1 <<= 4
+	add	$t1,	$t1,	$t2	# t1 += t2
+	j	reverse			# goto reverse
+done:
+
+	li	$v0,	11		# print character
+	li	$a0,	48		# 0
+	syscall
+	li	$v0,	11		# print character
+	li	$a0,	120		# x
+	syscall
+	bnez	$t1,	print		# if (!t1) goto print
+	li	$v0,	11		# print character
+	li	$a0,	48		# 0
+	syscall
+	j	end			# goto end
+
+print:
+	beqz	$t1,	end		# if (!t1) goto end
+	andi	$t2,	$t1,	0xf	# t2 = t1 & 0xf
+	sra	$t1,	$t1,	4	# t1 >>= 4
+	addi	$a0,	$t2,	48	# a0 = chr(t2), sort of
+	ble	$t2,	$t9,	put	# if (t2 <= 9) goto put
+	addi	$a0,	$a0,	7	# a0 += 7
+put:
+	li	$v0,	11		# print character at a0
+	syscall
+	j	print			# goto print
+end:
+
+	li	$v0,	11		# print character
+	li	$a0,	10		# newline
+	syscall
+
+	li	$v0,	10		# terminate
+	syscall