首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将C语句翻译成MIPS汇编指令?

将C语句翻译成MIPS汇编指令?
EN

Stack Overflow用户
提问于 2014-02-11 10:58:45
回答 1查看 1.3K关注 0票数 1

我还有另一个家庭作业问题,就像我在这个网站上问的最后一个问题一样,老师和教科书都没有很好地解释。下面是问题:

将此C语句转换为MIPS汇编指令:

代码语言:javascript
运行
复制
   B[8] = A[i-j];

假设变量f、g、h、i和j分别分配给寄存器$s0、$s1、$s2、$s3和$s4。假设数组A和B的基地址分别位于寄存器$s6和$s7中。

现在,我遇到的问题是将两个变量相加,并将结果用作偏移量。到目前为止,我有以下几点:

代码语言:javascript
运行
复制
sub $t0, $s3, $s4 # add values to get offset amount, store in $t0
sll $t1, $t0,2    # multiply the offset by 4, store in $t1

现在,我不知道是否可以使用$t1作为偏移量来访问该数组元素。看起来教科书只使用数字(例如4($s7))而不使用寄存器(例如$t1($s7)),我下一步该怎么办?

EN

回答 1

Stack Overflow用户

发布于 2014-02-19 22:16:22

编译器只能翻译完整的程序,所以这里有一个完整的程序,其中包括你的指令,并将其翻译成MIPS指令。我希望你能研究一下这里正在做的事情,并得出一些结论。

代码语言:javascript
运行
复制
int main() {

int i = 3;
int j = 2;
int B[3] = {10, 20, 30};
int A[3] = {100, 200, 300};

B[8] = A[i-j];
}

以上操作的MIPS:

代码语言:javascript
运行
复制
    .file   1 "Cprogram.c"

 # -G value = 8, Cpu = 3000, ISA = 1
 # GNU C version cygnus-2.7.2-970404 (mips-mips-ecoff) compiled by GNU C version cygnus-2.7.2-970404.
 # options passed:  -msoft-float
 # options enabled:  -fpeephole -ffunction-cse -fkeep-static-consts
 # -fpcc-struct-return -fcommon -fverbose-asm -fgnu-linker -msoft-float
 # -meb -mcpu=3000

gcc2_compiled.:
__gnu_compiled_c:
    .rdata
    .align  2
$LC0:
    .word   10
    .word   20
    .word   30
    .align  2
$LC1:
    .word   100
    .word   200
    .word   300
    .text
    .align  2
    .globl  main
    .ent    main
main:
    .frame  $fp,64,$31      # vars= 40, regs= 2/0, args= 16, extra= 0
    .mask   0xc0000000,-4
    .fmask  0x00000000,0
    subu    $sp,$sp,64
    sw  $31,60($sp)
    sw  $fp,56($sp)
    move    $fp,$sp
    jal __main
    li  $2,3            # 0x00000003
    sw  $2,16($fp)
    li  $2,2            # 0x00000002
    sw  $2,20($fp)
    addu    $2,$fp,24
    la  $3,$LC0
    lw  $4,0($3)
    lw  $5,4($3)
    lw  $6,8($3)
    sw  $4,0($2)
    sw  $5,4($2)
    sw  $6,8($2)
    addu    $2,$fp,40
    la  $3,$LC1
    lw  $4,0($3)
    lw  $5,4($3)
    lw  $6,8($3)
    sw  $4,0($2)
    sw  $5,4($2)
    sw  $6,8($2)
    lw  $2,16($fp)
    lw  $3,20($fp)
    subu    $2,$2,$3
    move    $3,$2
    sll $2,$3,2
    addu    $3,$fp,16
    addu    $2,$2,$3
    addu    $3,$2,24
    lw  $2,0($3)
    sw  $2,56($fp)
$L1:
    move    $sp,$fp         # sp not trusted here
    lw  $31,60($sp)
    lw  $fp,56($sp)
    addu    $sp,$sp,64
    j   $31
    .end    main
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21692159

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档