3 Levels of C in MIPS

The C Program

#include <stdio.h>

int main(){
  int r;
  r = 3;

  double x;
  x = 3.14 * r * r;
  printf("%f\n", x);
}

Assembly Language (MIPS)

        .file   1 "hello.c"
        .section .mdebug.abi32
        .previous
        .nan    legacy
        .module fp=xx
        .module nooddspreg
        .abicalls
        .text
        .rdata
        .align  2
$LC1:
        .ascii  "%f\012\000"
        .text
        .align  2
        .globl  main
        .set    nomips16
        .set    nomicromips
        .ent    main
        .type   main, @function
main:
        .frame  $fp,48,$31              # vars= 16, regs= 2/0, args= 16, gp= 8
        .mask   0xc0000000,-4
        .fmask  0x00000000,0
        .set    noreorder
        .set    nomacro
        addiu   $sp,$sp,-48
        sw      $31,44($sp)
        sw      $fp,40($sp)
        move    $fp,$sp
        lui     $28,%hi(__gnu_local_gp)
        addiu   $28,$28,%lo(__gnu_local_gp)
        .cprestore      16
        li      $2,3                    # 0x3
        sw      $2,28($fp)
        lw      $2,28($fp)
        mtc1    $2,$f0
        cvt.d.w $f2,$f0
        lui     $2,%hi($LC0)
        ldc1    $f0,%lo($LC0)($2)
        mul.d   $f2,$f2,$f0
        lw      $2,28($fp)
        mtc1    $2,$f0
        cvt.d.w $f0,$f0
        mul.d   $f0,$f2,$f0
        sdc1    $f0,32($fp)
        lw      $7,36($fp)
        lw      $6,32($fp)
        lui     $2,%hi($LC1)
        addiu   $4,$2,%lo($LC1)
        lw      $2,%call16(printf)($28)
        move    $25,$2
        .reloc  1f,R_MIPS_JALR,printf
1:      jalr    $25
        nop

        lw      $28,16($fp)
        move    $2,$0
        move    $sp,$fp
        lw      $31,44($sp)
        lw      $fp,40($sp)
        addiu   $sp,$sp,48
        jr      $31
        nop

        .set    macro
        .set    reorder
        .end    main
        .size   main, .-main
        .rdata
        .align  3
$LC0:
        .word   1074339512
        .word   1374389535
        .ident  "GCC: (Ubuntu 9.4.0-1ubuntu1~20.04) 9.4.0"

Machine Language (MIPS)

00000000: 7f45 4c46 0102 0100 0000 0000 0000 0000  ELF............
00000010: 0001 0008 0000 0001 0000 0000 0000 0000  ................
00000020: 0000 0348 7000 1007 0034 0000 0000 0028  ...Hp....4.....(
00000030: 0010 000f 0000 0000 0000 0000 0000 0000  ................
00000040: 27bd ffd0 afbf 002c afbe 0028 03a0 f025  '......,...(...%
00000050: 3c1c 0000 279c 0000 afbc 0010 2402 0003  <...'.......$...
00000060: afc2 001c 8fc2 001c 4482 0000 4680 00a1  ........D...F...
00000070: 3c02 0000 d440 0008 4620 1082 8fc2 001c  <....@..F ......
00000080: 4482 0000 4680 0021 4620 1002 f7c0 0020  D...F..!F ..... 
00000090: 8fc7 0024 8fc6 0020 3c02 0000 2444 0000  ...$... <...$D..
000000a0: 8f82 0000 0040 c825 0320 f809 0000 0000  .....@.%. ......
000000b0: 8fdc 0010 0000 1025 03c0 e825 8fbf 002c  .......%...%...,
000000c0: 8fbe 0028 27bd 0030 03e0 0008 0000 0000  ...('..0........
000000d0: f200 00d4 0000 0000 0000 000f 0000 0000  ................
000000e0: 0000 0000 0000 0000 0000 2002 0101 0005  .......... .....
000000f0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000100: 0000 0000 c000 0000 ffff fffc 0000 0000  ................
00000110: 0000 0000 0000 0030 0000 001e 0000 001f  .......0........
00000120: 2566 0a00 0000 0000 4009 1eb8 51eb 851f  %f......@...Q...
00000130: 0047 4343 3a20 2855 6275 6e74 7520 392e  .GCC: (Ubuntu 9.
00000140: 342e 302d 3175 6275 6e74 7531 7e32 302e  4.0-1ubuntu1~20.
00000150: 3034 2920 392e 342e 3000 4100 0000 0f67  04) 9.4.0.A....g
00000160: 6e75 0001 0000 0007 0405 0000 0000 0000  nu..............
00000170: 0000 0000 0000 0000 0000 0000 0000 0001  ................
00000180: 0000 0000 0000 0000 0400 fff1 0000 0000  ................
00000190: 0000 0000 0000 0000 0300 0001 0000 0000  ................
000001a0: 0000 0000 0000 0000 0300 0003 0000 0000  ................
000001b0: 0000 0000 0000 0000 0300 0004 0000 0000  ................
000001c0: 0000 0000 0000 0000 0300 0009 0000 0000  ................
000001d0: 0000 0000 0000 0000 0300 000a 0000 0000  ................
000001e0: 0000 0000 0000 0000 0300 0005 0000 0000  ................
000001f0: 0000 0000 0000 0000 0300 0006 0000 0000  ................
00000200: 0000 0000 0000 0000 0300 0007 0000 0000  ................
00000210: 0000 0000 0000 0000 0300 000b 0000 0000  ................
00000220: 0000 0000 0000 0000 0300 000c 0000 0009  ................
00000230: 0000 0000 0000 0090 1200 0001 0000 000e  ................
00000240: 0000 0000 0000 0000 1000 0000 0000 001d  ................
00000250: 0000 0000 0000 0000 1000 0000 0068 656c  .............hel
00000260: 6c6f 2e63 006d 6169 6e00 5f5f 676e 755f  lo.c.main.__gnu_
00000270: 6c6f 6361 6c5f 6770 0070 7269 6e74 6600  local_gp.printf.
00000280: 0000 0010 0000 0d05 0000 0014 0000 0d06  ................
00000290: 0000 0030 0000 0605 0000 0034 0000 0606  ...0.......4....
000002a0: 0000 0058 0000 0605 0000 005c 0000 0606  ...X.......\....
000002b0: 0000 0060 0000 0e0b 0000 0068 0000 0e25  ...`.......h...%
000002c0: 0000 0000 0000 0c02 002e 7379 6d74 6162  ..........symtab
000002d0: 002e 7374 7274 6162 002e 7368 7374 7274  ..strtab..shstrt
000002e0: 6162 002e 7265 6c2e 7465 7874 002e 6461  ab..rel.text..da
000002f0: 7461 002e 6273 7300 2e72 6567 696e 666f  ta..bss..reginfo
00000300: 002e 4d49 5053 2e61 6269 666c 6167 7300  ..MIPS.abiflags.
00000310: 2e72 656c 2e70 6472 002e 6d64 6562 7567  .rel.pdr..mdebug
00000320: 2e61 6269 3332 002e 726f 6461 7461 002e  .abi32..rodata..
00000330: 636f 6d6d 656e 7400 2e67 6e75 2e61 7474  comment..gnu.att
00000340: 7269 6275 7465 7300 0000 0000 0000 0000  ributes.........
00000350: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000360: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000370: 0000 001f 0000 0001 0000 0006 0000 0000  ................
00000380: 0000 0040 0000 0090 0000 0000 0000 0000  ...@............
00000390: 0000 0010 0000 0000 0000 001b 0000 0009  ................
000003a0: 0000 0040 0000 0000 0000 0280 0000 0040  ...@...........@
000003b0: 0000 000d 0000 0001 0000 0004 0000 0008  ................
000003c0: 0000 0025 0000 0001 0000 0003 0000 0000  ...%............
000003d0: 0000 00d0 0000 0000 0000 0000 0000 0000  ................
000003e0: 0000 0010 0000 0000 0000 002b 0000 0008  ...........+....
000003f0: 0000 0003 0000 0000 0000 00d0 0000 0000  ................
00000400: 0000 0000 0000 0000 0000 0010 0000 0000  ................
00000410: 0000 0030 7000 0006 0000 0002 0000 0000  ...0p...........
00000420: 0000 00d0 0000 0018 0000 0000 0000 0000  ................
00000430: 0000 0004 0000 0018 0000 0039 7000 002a  ...........9p..*
00000440: 0000 0002 0000 0000 0000 00e8 0000 0018  ................
00000450: 0000 0000 0000 0000 0000 0008 0000 0018  ................
00000460: 0000 004c 0000 0001 0000 0000 0000 0000  ...L............
00000470: 0000 0100 0000 0020 0000 0000 0000 0000  ....... ........
00000480: 0000 0004 0000 0000 0000 0048 0000 0009  ...........H....
00000490: 0000 0040 0000 0000 0000 02c0 0000 0008  ...@............
000004a0: 0000 000d 0000 0007 0000 0004 0000 0008  ................
000004b0: 0000 0051 0000 0001 0000 0000 0000 0000  ...Q............
000004c0: 0000 0120 0000 0000 0000 0000 0000 0000  ... ............
000004d0: 0000 0001 0000 0000 0000 005f 0000 0001  ..........._....
000004e0: 0000 0002 0000 0000 0000 0120 0000 0010  ........... ....
000004f0: 0000 0000 0000 0000 0000 0010 0000 0000  ................
00000500: 0000 0067 0000 0001 0000 0030 0000 0000  ...g.......0....
00000510: 0000 0130 0000 002a 0000 0000 0000 0000  ...0...*........
00000520: 0000 0001 0000 0001 0000 0070 6fff fff5  ...........po...
00000530: 0000 0000 0000 0000 0000 015a 0000 0010  ...........Z....
00000540: 0000 0000 0000 0000 0000 0001 0000 0000  ................
00000550: 0000 0001 0000 0002 0000 0000 0000 0000  ................
00000560: 0000 016c 0000 00f0 0000 000e 0000 000c  ...l............
00000570: 0000 0004 0000 0010 0000 0009 0000 0003  ................
00000580: 0000 0000 0000 0000 0000 025c 0000 0024  ...........\...$
00000590: 0000 0000 0000 0000 0000 0001 0000 0000  ................
000005a0: 0000 0011 0000 0003 0000 0000 0000 0000  ................
000005b0: 0000 02c8 0000 0080 0000 0000 0000 0000  ................
000005c0: 0000 0001 0000 0000                      ........


Clif Presser<cpresser@gettysburg.edu>
Last modified: Tue Apr 5 11:25:14 EDT 2022