Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

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 -----------------------------//

Hire Me For All Your Tutoring Needs
Integrity-first tutoring: clear explanations, guidance, and feedback.
Drop an Email at
drjack9650@gmail.com
Chat Now And Get Quote