这篇算是一个复习,将前两篇文章所学到的知识结合起来,从屏幕读取两个数将其运算之后再输出到屏幕上
求两个无符号数的和
.data
n1: .asciiz "Enter the 1st number:"
n2: .asciiz "Enter the 2nd number:"
nn: .asciiz "The sum ="
C: .word 0
CR: .word32 0x10000
DR: .word32 0x10008
.text
main:
lwu r1,CR(r0)
lwu r2,DR(r0)
daddi r8,r0,4
daddi r9,r0,8
daddi r6,r0,n1
daddi r7,r0,n2
sd r6,(r2) ;屏幕输出提示
sd r8,(r1)
sd r9,(r1) ;读取第一个数字
lbu r4,(r2)
sd r7,(r2) ;屏幕输出提示
sd r8,(r1)
sd r9,(r1) ;读取第二个数字
lbu r5,(r2)
daddu r3,r4,r5 ;加法运算
sd r3,C(r0)
daddi r11,r0,nn
sd r11,(r2)
sd r8,(r1)
daddi r10,r0,1 ;屏幕输出结果
sd r3,(r2)
sd r10,(r1)
halt
实验课我写了实验报告,但是不知道为什么代码从word文档粘贴过来会损失许多格式,苦恼,如果出错了只能日后修改了。
基本都是之前两节知识的汇总应用。
求两个数的商
.data
n1: .asciiz "Enter the 1st number:"
n2: .asciiz "Enter the 2nd number:"
nn1: .asciiz "divided by"
nn2: .asciiz "="
nnw: .asciiz "divide by 0!"
C: .word 0
CR: .word32 0x10000
DR: .word32 0x10008
.text
main:
lwu r1,CR(r0)
lwu r2,DR(r0)
daddi r8,r0,4
daddi r9,r0,8
daddi r6,r0,n1
daddi r7,r0,n2
sd r6,(r2) ;屏幕输出提示
sd r8,(r1)
sd r9,(r1) ;读取第一个数字
ld r4,(r2)
sd r7,(r2) ;屏幕输出提示
sd r8,(r1)
sd r9,(r1) ;读取第二个数字
ld r5,(r2)
beqz r5,name ;若为0则跳了
ddivu r3,r4,r5
daddi r10,r0,1 ;屏幕输出数字1
sd r4,(r2)
sd r10,(r1)
daddi r11,r0,nn1
sd r11,(r2)
sd r8,(r1)
daddi r10,r0,1 ;屏幕输出数字2
sd r5,(r2)
sd r10,(r1)
daddi r11,r0,nn2 ; 屏幕输出等于号
sd r11,(r2)
sd r8,(r1)
daddi r10,r0,1 ;屏幕输出结果
sd r3,(r2)
sd r10,(r1)
halt
name:
daddi r12,r0,nnw
sd r12,(r2)
sd r8,(r1)
halt
beqz r5,name
将上一个代码进行些许的修改即可,不过要注意我们要对除数进行判零,如果为零则需跳过,所以这里我们使用了beqz
来判断是否为零,然后再代码末尾写下直接输出结果并结束的程序。
ddivu r3,r4,r5
这里我们使用了ddivu
来对两个数字进行无符号除法。
巧妙的利用halt
来结束程序
结语
相信看到这里的都能感觉到博主的水平实在是很差,我也很头痛于各种rxx的选用,基本都是看哪个是空的用哪个,变量名规划的也是一塌糊涂(因为都是用上道题程序的代码改改就用了,最终成为超级缝合怪),不过到现在运行的结果倒还可接受,如果有错希望大家能够指正