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