c语言的f=g-A[B[4]]怎么转换成mips指令
来源:学生作业帮 编辑:神马作文网作业帮 分类:综合作业 时间:2024/10/05 12:28:11
c语言的f=g-A[B[4]]怎么转换成mips指令
首先,A[B][4]的定义不明确,A是int,short还是什么.因为类型决定memory的大小,会影响寻址.
j假如A是int数组.
mips中的寄存器用法你应该知道吧.
zero, at, v0,v1(返回值寄存器) a0-a3(参数寄存器),t0-t7(临时寄存器),s0-s7(方法调用时需要压栈保存的寄存器).t8,t9, gp,sp,fp, ra.等自己查下资料.
ldr t0, A的地址
ldr t1, B的值
sll t1, 4 //第一次乘以4,每个int占4个字节,再乘以4,相当于左移4位.
add t0, t1
ldr t0, [t0]
ldr t1 g的值
sub t1, t0
再问: 书上就是用的是A[B[4]],A,B都是数组,就当它们都是int型的,麻烦再解答一下
再答: 我刚刚看成A[B][4]了。不好意思。 ldr t1, [B], #16 //因为4个int,相当于偏移16个字节。 ldr t2, [t1] //此时t2寄存器中存放了A[B[4]]的值。 rsb t2, t2, g //如果g不是寄存器数还需要先加载到寄存器中才行哦。 另外 rsb指令是反向减法,也就是相当于 g-t2. 你也可以用sub来做。
再问: 对于第二行不是很明白,为什么“此时t2寄存器中存放了A[B[4]]的值。”谢谢解答~~
再答: 你可以看下mips的寻址方式。网上搜索一下,然后你就全知道了。通常汇编程序就是寻址方式麻烦一些。不过mips的很简单,不想8086那么多的寻址方式。得到A[B[4]]就相当于两次寄存器间接寻址。第一条指令得到了B[4],第二条和第一条本质上是一样的。
j假如A是int数组.
mips中的寄存器用法你应该知道吧.
zero, at, v0,v1(返回值寄存器) a0-a3(参数寄存器),t0-t7(临时寄存器),s0-s7(方法调用时需要压栈保存的寄存器).t8,t9, gp,sp,fp, ra.等自己查下资料.
ldr t0, A的地址
ldr t1, B的值
sll t1, 4 //第一次乘以4,每个int占4个字节,再乘以4,相当于左移4位.
add t0, t1
ldr t0, [t0]
ldr t1 g的值
sub t1, t0
再问: 书上就是用的是A[B[4]],A,B都是数组,就当它们都是int型的,麻烦再解答一下
再答: 我刚刚看成A[B][4]了。不好意思。 ldr t1, [B], #16 //因为4个int,相当于偏移16个字节。 ldr t2, [t1] //此时t2寄存器中存放了A[B[4]]的值。 rsb t2, t2, g //如果g不是寄存器数还需要先加载到寄存器中才行哦。 另外 rsb指令是反向减法,也就是相当于 g-t2. 你也可以用sub来做。
再问: 对于第二行不是很明白,为什么“此时t2寄存器中存放了A[B[4]]的值。”谢谢解答~~
再答: 你可以看下mips的寻址方式。网上搜索一下,然后你就全知道了。通常汇编程序就是寻址方式麻烦一些。不过mips的很简单,不想8086那么多的寻址方式。得到A[B[4]]就相当于两次寄存器间接寻址。第一条指令得到了B[4],第二条和第一条本质上是一样的。
a<b<c转换成C语言表达式
C语言小问题 if (a>b) t=a; a=b; b=t; 就是搞不懂这个怎么转换的
我知道a=b c=0 f>g其他的怎么比较呢
c语言中 a>b?g=a:g=b 书上说是错误的 应改成 a>b?g=a:(g=b)
下列哪个是用来衡量计算机运算速度的指标?A、CAI B、MIPS C、DS D、ID 选哪个?
A-B=C C+H=G E*F=G A/D=E 将英文字母转换成数字填在算式中,使算式成立.
c语言,int a=3,b=4; (a++)*b++等于多少 怎么算的
常用的算法描述方式有:流程图、________、高级语言.A.汇编语言 B.伪语言 C.宏指令 D.Petri网
已知U={a,b,c,d,e,f,g,h} 已知A的补集交B的补集={A,B,C,E,F,G,H},
mips是百万指令每秒的意思,但为什么经常在后每年加个”/MHZ“,比如0.9MIPS/MHZ,
已知全集U={A,B,C,D,E,F,G},A的补集交B的补集={A,B,C,E,F,G},A的补集交B={C,G},B
C语言 point(char*pt); main() {char b[4]={'a','c','s','f'},*pt=