java 翻译成mips_MIPS:将C代码转换为汇编

如果这是一个本地数组,则在堆栈上为它分配空间,然后从代码初始化它 . C代码的可能asm转换可能如下所示:

addi $sp, $sp, -12 # allocate space for 3 words, $sp is now the address of the array

addi $t0, $zero, 2

sw $t0, ($sp) # ary[0]=2

addi $t0, $zero, 3

sw $t0, 4($sp) # ary[1]=3

addi $t0, $zero, 4

sw $t0, 8($sp) # ary[2]=4

addi $t0, $zero, 0 # initialize i=0

Start:

sll $t1, $t0, 2 # i*4 for element size

add $t1, $t1, $sp # add base address of array, $t1 is now &ary[i]

lw $t2, ($t1) # load ary[i]

sll $t2, $t2, 1 # mutiply by 2

sw $t2, ($t1) # store back to ary[i]

addi $t0, $t0, 1 # i++

addi $t1, $t0, -3 # check if i<3 by doing (i-3)<0

bltz $t1, Start

addi $sp, $sp, 12 # free the array

您的asm代码采用了稍微不同的方法,C版本看起来像:

int* end = &ary[3];

for(int* ptr = ary; ptr != end; ptr++)

{

*ptr = *ptr * 2;

}

固定的asm版本是:

addi $t1, $sp, 12 # end=&ary[3]

addi $t0, $sp, 0 # ptr=ary

Start:

lw $t2, ($t0) # load ary[i]

sll $t2, $t2, 1 # mutiply by 2

sw $t2, ($t0) # store back to ary[i]

addi $t0, $t0, 4 # ptr++ (note it is incremented by 4 due to element size)

bne $t0, $t1, Start # ptr!=end

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值