We have C++ code and we need to be converted to MIPS assembly language. Any and
ID: 3708218 • Letter: W
Question
We have C++ code and we need to be converted to MIPS assembly language.
Any and all help is appreciated.
#include
using namespace std;
int main()
{
unsigned char s[] = "Jane Doe";
unsigned int T[256];
cout << s << ' ';
for (int i = 0; i < 256; i++) {
unsigned int temp = i;
for (int j= 0; j<8; j++) {
if (temp & 1)
temp = (temp >> 1)^0xEDB88320;
else temp >>= 1;
}
T[i] = temp;
//print T[i]
//cout << "T[" << dec << i << "]=" << hex << T[i] << " ";
}
unsigned int crc32 = 0xFFFFFFFF;
for (int i = 0; s[i] != 0; i++) {
unsigned int k = (crc32^s[i])&0xFF;
crc32 = (crc32 >> 8)^T[k];
}
crc32 ^= 0xFFFFFFFF;
cout << hex << crc32;
}
Explanation / Answer
//COMPILER INFORMATION: MIPS64 GCC5.4
//----------------------------- COMPLETE PROGRAM IN MIPS STARTS FROM HERE ---------------------------//
std::operator&(std::_Ios_Fmtflags, std::_Ios_Fmtflags):
daddiu $sp,$sp,-32
sd $fp,24($sp)
move $fp,$sp
move $3,$4
move $2,$5
sll $3,$3,0
sw $3,0($fp)
sll $2,$2,0
sw $2,4($fp)
lw $3,0($fp)
lw $2,4($fp)
and $2,$3,$2
move $sp,$fp
ld $fp,24($sp)
daddiu $sp,$sp,32
j $31
nop
std::operator|(std::_Ios_Fmtflags, std::_Ios_Fmtflags):
daddiu $sp,$sp,-32
sd $fp,24($sp)
move $fp,$sp
move $3,$4
move $2,$5
sll $3,$3,0
sw $3,0($fp)
sll $2,$2,0
sw $2,4($fp)
lw $3,0($fp)
lw $2,4($fp)
or $2,$3,$2
move $sp,$fp
ld $fp,24($sp)
daddiu $sp,$sp,32
j $31
nop
std::operator~(std::_Ios_Fmtflags):
daddiu $sp,$sp,-32
sd $fp,24($sp)
move $fp,$sp
move $2,$4
sll $2,$2,0
sw $2,0($fp)
lw $2,0($fp)
nor $2,$0,$2
move $sp,$fp
ld $fp,24($sp)
daddiu $sp,$sp,32
j $31
nop
std::operator|=(std::_Ios_Fmtflags&, std::_Ios_Fmtflags):
daddiu $sp,$sp,-48
sd $31,40($sp)
sd $fp,32($sp)
sd $28,24($sp)
move $fp,$sp
lui $28,%hi(%neg(%gp_rel(std::operator|=(std::_Ios_Fmtflags&, std::_Ios_Fmtflags))))
daddu $28,$28,$25
daddiu $28,$28,%lo(%neg(%gp_rel(std::operator|=(std::_Ios_Fmtflags&, std::_Ios_Fmtflags))))
sd $4,0($fp)
move $2,$5
sll $2,$2,0
sw $2,8($fp)
ld $2,0($fp)
lw $2,0($2)
lw $3,8($fp)
move $5,$3
move $4,$2
ld $2,%got_disp(std::operator|(std::_Ios_Fmtflags, std::_Ios_Fmtflags))($28)
move $25,$2
1: jalr $25
nop
move $3,$2
ld $2,0($fp)
sw $3,0($2)
ld $2,0($fp)
move $sp,$fp
ld $31,40($sp)
ld $fp,32($sp)
ld $28,24($sp)
daddiu $sp,$sp,48
j $31
nop
std::operator&=(std::_Ios_Fmtflags&, std::_Ios_Fmtflags):
daddiu $sp,$sp,-48
sd $31,40($sp)
sd $fp,32($sp)
sd $28,24($sp)
move $fp,$sp
lui $28,%hi(%neg(%gp_rel(std::operator&=(std::_Ios_Fmtflags&, std::_Ios_Fmtflags))))
daddu $28,$28,$25
daddiu $28,$28,%lo(%neg(%gp_rel(std::operator&=(std::_Ios_Fmtflags&, std::_Ios_Fmtflags))))
sd $4,0($fp)
move $2,$5
sll $2,$2,0
sw $2,8($fp)
ld $2,0($fp)
lw $2,0($2)
lw $3,8($fp)
move $5,$3
move $4,$2
ld $2,%got_disp(std::operator&(std::_Ios_Fmtflags, std::_Ios_Fmtflags))($28)
move $25,$2
1: jalr $25
nop
move $3,$2
ld $2,0($fp)
sw $3,0($2)
ld $2,0($fp)
move $sp,$fp
ld $31,40($sp)
ld $fp,32($sp)
ld $28,24($sp)
daddiu $sp,$sp,48
j $31
nop
std::ios_base::setf(std::_Ios_Fmtflags, std::_Ios_Fmtflags):
daddiu $sp,$sp,-64
sd $31,56($sp)
sd $fp,48($sp)
sd $28,40($sp)
sd $16,32($sp)
move $fp,$sp
lui $28,%hi(%neg(%gp_rel(std::ios_base::setf(std::_Ios_Fmtflags, std::_Ios_Fmtflags))))
daddu $28,$28,$25
daddiu $28,$28,%lo(%neg(%gp_rel(std::ios_base::setf(std::_Ios_Fmtflags, std::_Ios_Fmtflags))))
sd $4,16($fp)
move $3,$5
move $2,$6
sll $3,$3,0
sw $3,24($fp)
sll $2,$2,0
sw $2,28($fp)
ld $2,16($fp)
lw $2,24($2)
sw $2,0($fp)
ld $2,16($fp)
daddiu $16,$2,24
lw $2,28($fp)
move $4,$2
ld $2,%got_disp(std::operator~(std::_Ios_Fmtflags))($28)
move $25,$2
1: jalr $25
nop
move $5,$2
move $4,$16
ld $2,%got_disp(std::operator&=(std::_Ios_Fmtflags&, std::_Ios_Fmtflags))($28)
move $25,$2
1: jalr $25
nop
ld $2,16($fp)
daddiu $16,$2,24
lw $3,28($fp)
lw $2,24($fp)
move $5,$3
move $4,$2
ld $2,%got_disp(std::operator&(std::_Ios_Fmtflags, std::_Ios_Fmtflags))($28)
move $25,$2
1: jalr $25
nop
move $5,$2
move $4,$16
ld $2,%got_disp(std::operator|=(std::_Ios_Fmtflags&, std::_Ios_Fmtflags))($28)
move $25,$2
1: jalr $25
nop
lw $2,0($fp)
move $sp,$fp
ld $31,56($sp)
ld $fp,48($sp)
ld $28,40($sp)
ld $16,32($sp)
daddiu $sp,$sp,64
j $31
nop
std::hex(std::ios_base&):
daddiu $sp,$sp,-48
sd $31,40($sp)
sd $fp,32($sp)
sd $28,24($sp)
move $fp,$sp
lui $28,%hi(%neg(%gp_rel(std::hex(std::ios_base&))))
daddu $28,$28,$25
daddiu $28,$28,%lo(%neg(%gp_rel(std::hex(std::ios_base&))))
sd $4,0($fp)
li $6,74 # 0x4a
li $5,8 # 0x8
ld $4,0($fp)
ld $2,%got_disp(std::ios_base::setf(std::_Ios_Fmtflags, std::_Ios_Fmtflags))($28)
move $25,$2
1: jalr $25
nop
ld $2,0($fp)
move $sp,$fp
ld $31,40($sp)
ld $fp,32($sp)
ld $28,24($sp)
daddiu $sp,$sp,48
j $31
nop
.LC0:
.ascii "Jane Doe"
main:
daddiu $sp,$sp,-1104
sd $31,1096($sp)
sd $fp,1088($sp)
sd $28,1080($sp)
move $fp,$sp
lui $28,%hi(%neg(%gp_rel(main)))
daddu $28,$28,$25
daddiu $28,$28,%lo(%neg(%gp_rel(main)))
ld $2,%got_page(.LC0)($28)
ld $3,%got_ofst(.LC0)($2)
sd $3,24($fp)
daddiu $2,$2,%got_ofst(.LC0)
lbu $2,8($2)
sb $2,32($fp)
daddiu $2,$fp,24
move $5,$2
ld $4,%got_disp(std::cout)($28)
ld $2,%call16(std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, unsigned char const*))($28)
move $25,$2
1: jalr $25
nop
li $5,10 # 0xa
move $4,$2
ld $2,%call16(std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char))($28)
move $25,$2
1: jalr $25
nop
sw $0,0($fp)
.L21:
lw $2,0($fp)
slt $2,$2,256
beq $2,$0,.L16
nop
lw $2,0($fp)
sw $2,4($fp)
sw $0,8($fp)
.L20:
lw $2,8($fp)
slt $2,$2,8
beq $2,$0,.L17
nop
lw $2,4($fp)
andi $2,$2,0x1
beq $2,$0,.L18
nop
lw $2,4($fp)
srl $2,$2,1
move $3,$2
li $2,-306708480 # 0xffffffffedb80000
ori $2,$2,0x8320
xor $2,$3,$2
sw $2,4($fp)
b .L19
nop
.L18:
lw $2,4($fp)
srl $2,$2,1
sw $2,4($fp)
.L19:
lw $2,8($fp)
addiu $2,$2,1
sw $2,8($fp)
b .L20
nop
.L17:
lw $2,0($fp)
dsll $2,$2,2
daddu $2,$fp,$2
lw $3,4($fp)
sw $3,40($2)
lw $2,0($fp)
addiu $2,$2,1
sw $2,0($fp)
b .L21
nop
.L16:
li $2,-1 # 0xffffffffffffffff
sw $2,12($fp)
sw $0,16($fp)
.L23:
lw $2,16($fp)
daddu $2,$fp,$2
lbu $2,24($2)
beq $2,$0,.L22
nop
lw $2,16($fp)
daddu $2,$fp,$2
lbu $2,24($2)
lw $3,12($fp)
xor $2,$3,$2
andi $2,$2,0xff
sw $2,20($fp)
lw $2,12($fp)
srl $2,$2,8
move $3,$2
lwu $2,20($fp)
dsll $2,$2,2
daddu $2,$fp,$2
lw $2,40($2)
xor $2,$3,$2
sw $2,12($fp)
lw $2,16($fp)
addiu $2,$2,1
sw $2,16($fp)
b .L23
nop
.L22:
lw $2,12($fp)
nor $2,$0,$2
sw $2,12($fp)
ld $5,%got_disp(std::hex(std::ios_base&))($28)
ld $4,%got_disp(std::cout)($28)
ld $2,%call16(std::basic_ostream<char, std::char_traits<char> >::operator<<(std::ios_base& (*)(std::ios_base&)))($28)
move $25,$2
1: jalr $25
nop
move $3,$2
lw $2,12($fp)
move $5,$2
move $4,$3
ld $2,%call16(std::basic_ostream<char, std::char_traits<char> >::operator<<(unsigned int))($28)
move $25,$2
1: jalr $25
nop
move $2,$0
move $sp,$fp
ld $31,1096($sp)
ld $fp,1088($sp)
ld $28,1080($sp)
daddiu $sp,$sp,1104
j $31
nop
__static_initialization_and_destruction_0(int, int):
daddiu $sp,$sp,-48
sd $31,40($sp)
sd $fp,32($sp)
sd $28,24($sp)
move $fp,$sp
lui $28,%hi(%neg(%gp_rel(__static_initialization_and_destruction_0(int, int))))
daddu $28,$28,$25
daddiu $28,$28,%lo(%neg(%gp_rel(__static_initialization_and_destruction_0(int, int))))
move $3,$4
move $2,$5
sll $3,$3,0
sw $3,0($fp)
sll $2,$2,0
sw $2,4($fp)
lw $3,0($fp)
li $2,1 # 0x1
bne $3,$2,.L27
nop
lw $3,4($fp)
li $2,65535 # 0xffff
bne $3,$2,.L27
nop
ld $2,%got_page(std::__ioinit)($28)
daddiu $4,$2,%got_ofst(std::__ioinit)
ld $2,%call16(std::ios_base::Init::Init())($28)
move $25,$2
1: jalr $25
nop
ld $6,%got_disp(__dso_handle)($28)
ld $2,%got_page(std::__ioinit)($28)
daddiu $5,$2,%got_ofst(std::__ioinit)
ld $4,%got_disp(std::ios_base::Init::~Init())($28)
ld $2,%call16(__cxa_atexit)($28)
move $25,$2
1: jalr $25
nop
.L27:
nop
move $sp,$fp
ld $31,40($sp)
ld $fp,32($sp)
ld $28,24($sp)
daddiu $sp,$sp,48
j $31
nop
_GLOBAL__sub_I_main:
daddiu $sp,$sp,-32
sd $31,24($sp)
sd $fp,16($sp)
sd $28,8($sp)
move $fp,$sp
lui $28,%hi(%neg(%gp_rel(_GLOBAL__sub_I_main)))
daddu $28,$28,$25
daddiu $28,$28,%lo(%neg(%gp_rel(_GLOBAL__sub_I_main)))
li $5,65535 # 0xffff
li $4,1 # 0x1
ld $2,%got_page(__static_initialization_and_destruction_0(int, int))($28)
daddiu $2,$2,%got_ofst(__static_initialization_and_destruction_0(int, int))
move $25,$2
1: jalr $25
nop
move $sp,$fp
ld $31,24($sp)
ld $fp,16($sp)
ld $28,8($sp)
daddiu $sp,$sp,32
j $31
nop
//-------------------- PROGRAM ENDS -----------------------------//
Related Questions
drjack9650@gmail.com
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.