计算机体系结构实验4和实验5代码解读

本文展示了两个实验,实验4涉及双精度浮点数的加法运算,通过LDF和ADDD指令处理数组A和B中的数字。实验5则展示了一个数组A中的数值与数组B首地址数值相加并写回的过程,使用LWR,ADDR,SWR指令更新A数组。
摘要由CSDN通过智能技术生成

实验4

    /*首先,A右移16位和0xFFFF相与,然后将得到的结果的高16位赋给R2,
	此时 R2=0,再将A赋值给R2
	同理,R3 值为 B*/
	LHI      R2, (A>>16)&0xFFFF  
    ADDUI    R2, R2, A&0xFFFF
    //上面两个为R2指向第一个数字
    LHI      R3, (B>>16)&0xFFFF  
    ADDUI    R3, R3, B&0xFFFF
    ADDU     R4, R0, R3;R4=R0+R3 
    //寄存器 R2,R3 的初始值为数组 A、B的初始地址
loop:  
    LD     F0, 0(R2)   //把R2这个位置的数字存到F0
    LD     F4, 0(R3)   //把R3这个位置的数字存到F4
    ADDD   F0, F0, F4  //浮点运算,两个周期,结构相关 
					   //ADDD = ADD Double双精度浮点加
    ADDD   F2, F0, F2  //F2=F2+F0
	; <- A stall is found (an example of how to answer your questions)
    ADDI   R2, R2, #8  //后移,R2指向后一个数字
    ADDI   R3, R3, #8  //后移,R3指向后一个数字
    SUB    R5, R4, R2  //R5=R4-R2
    BNEZ   R5, loop    //条件跳转,R5与0
    TRAP   #0          ; Exit <- this is a comment !! 
A:    .double 1, 2, 3, 4, 5, 6, 7, 8, 9, 10  
B:    .double 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 

实验5

	/*首先,A右移16位和0xFFFF相与,然后将得到的结果的高16位赋给R2,
	此时 R2=0,再将A赋值给R2
	同理,R3 值为 B*/
	//给 R2,R3 赋 A、B 数组的首地址
	LHI     R2, (A>>16) & 0xFFFF  
    ADDUI   R2, R2, A & 0xFFFF  
    //上面两个为 R2 指向第一个数字,这里为数组A中第一个数字0 
    LHI     R3, (B>>16)&0xFFFF  
    ADDUI   R3, R3, B&0xFFFF  
    //上面两个为 R3 指向第一个数字,这里为数组B中第一个数字9
/*取数组 A 里的数加上 B 的首地址再写回 A*/
loop:  
    LW     R1, 0(R2)   //从存储器中读取一个字的数据到寄存器中 
    ADD    R1, R1, R3  //将R1,R3中的值相加,然后存入R1寄存器
    SW     0(R2), R1   //把一个字的数据从寄存器存储到存储器中 
    LW     R5, 0(R1)   //从存储器中读取一个字的数据到寄存器中
    ADDI   R5, R5, #10 //R5=R5加10
    ADDI   R2, R2, #4  //R2=R2加四
    SUB    R4, R3, R2  //R4=R3-R2减法 
    BNEZ   R4, loop    //条件跳转,R4与0
    TRAP   #0  
A: .word 0, 4, 8, 12, 16, 20, 24, 28, 32, 36  
B: .word 9, 8, 7, 6, 5, 4, 3, 2, 1, 0  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值