Translate this C++ code into MIPS. Please make sure there are comments and try t
ID: 3594489 • Letter: T
Question
Translate this C++ code into MIPS. Please make sure there are comments and try to run it. Thank you.
#include<iostream>
#include<iomanip>
#include<fstream>
#include<string>
using namespace std;
//named constants - residential customers
const double RES_BILL_PROC_FEES = 4.50;
const double RES_BASIC_SERV_COST = 20.50;
const double RES_COST_PREM_CHANNEL = 7.50;
//named constants - bussiness customers
const double BUS_BILL_PROC_FEES = 15.00;
const double BUS_BASIC_SERV_COST = 75.00;
const double BUS_BASIC_CONN_COST = 5.00;
const double BUS_COST_PREM_CHANNEL = 50.00;
int main()
{
//varible declaration
int accountNumber;
int numOfPremChannels;
int numOfBasicServConn;
int countBillOfResidential = 0;
int countBillOfBussiness = 0;
double amountDue = 0.00;
double totalAmountResidential = 0.00;
double totalAmountBussiness = 0.00;
char customerType;
//read the file
ifstream inFile;
inFile.open("data.txt");
//check the input file exist
if(inFile.fail())
{
cout << "The file doesn't exist!" <<endl;
exit(1);
}
//create and write to another file
ofstream outFile;
outFile.open("Billing.txt");
outFile << fixed << showpoint;
outFile << setprecision(2);
outFile << "Customer Type" << setw (20) << "Account Number"
<< setw(35) << "Number of Service Connection"
<< setw(25) << "Number of Channel"
<< setw(20) << "Amount Due" << endl;
outFile << "----------------------------------------------------------------------------------------------------------------" <<endl;
while(!inFile.eof())
{
inFile >> customerType >> accountNumber >> numOfBasicServConn >> numOfPremChannels;
if (customerType == 'R' || customerType == 'r')
{
amountDue = RES_BILL_PROC_FEES + RES_BASIC_SERV_COST + (numOfPremChannels * RES_COST_PREM_CHANNEL);
outFile << "Residential"
<< setw(17) << accountNumber
//<< setw(27) << numOfBasicServConn
<< setw(55) << numOfPremChannels
<< setw(22) << "$" << amountDue <<endl;
countBillOfResidential++;
totalAmountResidential += amountDue;
}
else if (customerType == 'B' || customerType == 'b')
{
amountDue = 0.00;
if(numOfBasicServConn <= 10)
{
amountDue = BUS_BILL_PROC_FEES + BUS_BASIC_SERV_COST + (BUS_COST_PREM_CHANNEL * numOfPremChannels);
}
else
{
amountDue = BUS_BILL_PROC_FEES + BUS_BASIC_SERV_COST
+ ((numOfBasicServConn - 10) * BUS_BASIC_CONN_COST) + (BUS_COST_PREM_CHANNEL * numOfPremChannels);
}
outFile << "Bussiness"
<< setw(19) << accountNumber
<< setw(27) << numOfBasicServConn
<< setw(28) << numOfPremChannels
<< setw(22) << "$" << amountDue <<endl;
countBillOfBussiness++;
totalAmountBussiness += amountDue;
}
else
{
outFile << "Invalid Customer Type!" <<endl;
}
}
outFile << endl;
outFile << "SUMMARY INFORMATION" << endl;
outFile << "----------------------------------------------------------------------------------------------------------------" <<endl;
outFile << "Customer Type" << setw (20) << "Number of Bill"
<< setw(20) << "Total Amount"
<<setw(20) << "Average Amount" << endl;
outFile << "----------------------------------------------------------------------------------------------------------------" <<endl;
outFile << "Residential" << setw(16) << countBillOfResidential
<< setw(17) << "$" << totalAmountResidential
<< setw(15) << "$" << totalAmountResidential / countBillOfResidential << endl;
outFile << "Bussiness" << setw(18) << countBillOfBussiness
<< setw(17) << "$" << totalAmountBussiness
<< setw(14) << "$" << totalAmountBussiness / countBillOfBussiness << endl;
inFile.close();
outFile.close();
cout << "Waiting for computing." << endl;
return 0;
}
Here is the input file name data.text
B12345 16 4
R44212 0 3
B22314 12 5
R23341 0 2
B84772 8 1
B74682 5 2
R87864 0 4
R74621 0 11
B33123 10 7
B53622 7 4
R49124 0 8
B78747 15 5
R67232 0 14
R23427 0 4
B37834 7 12
Explanation / Answer
std::operator&(std::_Ios_Fmtflags, std::_Ios_Fmtflags):
push rbp
mov rbp, rsp
mov DWORD PTR [rbp-4], edi
mov DWORD PTR [rbp-8], esi
mov eax, DWORD PTR [rbp-4]
and eax, DWORD PTR [rbp-8]
pop rbp
ret
std::operator|(std::_Ios_Fmtflags, std::_Ios_Fmtflags):
push rbp
mov rbp, rsp
mov DWORD PTR [rbp-4], edi
mov DWORD PTR [rbp-8], esi
mov eax, DWORD PTR [rbp-4]
or eax, DWORD PTR [rbp-8]
pop rbp
ret
std::operator~(std::_Ios_Fmtflags):
push rbp
mov rbp, rsp
mov DWORD PTR [rbp-4], edi
mov eax, DWORD PTR [rbp-4]
not eax
pop rbp
ret
std::operator|=(std::_Ios_Fmtflags&, std::_Ios_Fmtflags):
push rbp
mov rbp, rsp
sub rsp, 16
mov QWORD PTR [rbp-8], rdi
mov DWORD PTR [rbp-12], esi
mov rax, QWORD PTR [rbp-8]
mov eax, DWORD PTR [rax]
mov edx, DWORD PTR [rbp-12]
mov esi, edx
mov edi, eax
call std::operator|(std::_Ios_Fmtflags, std::_Ios_Fmtflags)
mov edx, eax
mov rax, QWORD PTR [rbp-8]
mov DWORD PTR [rax], edx
mov rax, QWORD PTR [rbp-8]
leave
ret
std::operator&=(std::_Ios_Fmtflags&, std::_Ios_Fmtflags):
push rbp
mov rbp, rsp
sub rsp, 16
mov QWORD PTR [rbp-8], rdi
mov DWORD PTR [rbp-12], esi
mov rax, QWORD PTR [rbp-8]
mov eax, DWORD PTR [rax]
mov edx, DWORD PTR [rbp-12]
mov esi, edx
mov edi, eax
call std::operator&(std::_Ios_Fmtflags, std::_Ios_Fmtflags)
mov edx, eax
mov rax, QWORD PTR [rbp-8]
mov DWORD PTR [rax], edx
mov rax, QWORD PTR [rbp-8]
leave
ret
std::operator|(std::_Ios_Openmode, std::_Ios_Openmode):
push rbp
mov rbp, rsp
mov DWORD PTR [rbp-4], edi
mov DWORD PTR [rbp-8], esi
mov eax, DWORD PTR [rbp-4]
or eax, DWORD PTR [rbp-8]
pop rbp
ret
std::ios_base::setf(std::_Ios_Fmtflags):
push rbp
mov rbp, rsp
sub rsp, 32
mov QWORD PTR [rbp-24], rdi
mov DWORD PTR [rbp-28], esi
mov rax, QWORD PTR [rbp-24]
mov eax, DWORD PTR [rax+24]
mov DWORD PTR [rbp-4], eax
mov rax, QWORD PTR [rbp-24]
lea rdx, [rax+24]
mov eax, DWORD PTR [rbp-28]
mov esi, eax
mov rdi, rdx
call std::operator|=(std::_Ios_Fmtflags&, std::_Ios_Fmtflags)
mov eax, DWORD PTR [rbp-4]
leave
ret
std::ios_base::setf(std::_Ios_Fmtflags, std::_Ios_Fmtflags):
push rbp
mov rbp, rsp
sub rsp, 32
mov QWORD PTR [rbp-24], rdi
mov DWORD PTR [rbp-28], esi
mov DWORD PTR [rbp-32], edx
mov rax, QWORD PTR [rbp-24]
mov eax, DWORD PTR [rax+24]
mov DWORD PTR [rbp-4], eax
mov eax, DWORD PTR [rbp-32]
mov edi, eax
call std::operator~(std::_Ios_Fmtflags)
mov edx, eax
mov rax, QWORD PTR [rbp-24]
add rax, 24
mov esi, edx
mov rdi, rax
call std::operator&=(std::_Ios_Fmtflags&, std::_Ios_Fmtflags)
mov edx, DWORD PTR [rbp-32]
mov eax, DWORD PTR [rbp-28]
mov esi, edx
mov edi, eax
call std::operator&(std::_Ios_Fmtflags, std::_Ios_Fmtflags)
mov edx, eax
mov rax, QWORD PTR [rbp-24]
add rax, 24
mov esi, edx
mov rdi, rax
call std::operator|=(std::_Ios_Fmtflags&, std::_Ios_Fmtflags)
mov eax, DWORD PTR [rbp-4]
leave
ret
std::showpoint(std::ios_base&):
push rbp
mov rbp, rsp
sub rsp, 16
mov QWORD PTR [rbp-8], rdi
mov rax, QWORD PTR [rbp-8]
mov esi, 1024
mov rdi, rax
call std::ios_base::setf(std::_Ios_Fmtflags)
mov rax, QWORD PTR [rbp-8]
leave
ret
std::fixed(std::ios_base&):
push rbp
mov rbp, rsp
sub rsp, 16
mov QWORD PTR [rbp-8], rdi
mov rax, QWORD PTR [rbp-8]
mov edx, 260
mov esi, 4
mov rdi, rax
call std::ios_base::setf(std::_Ios_Fmtflags, std::_Ios_Fmtflags)
mov rax, QWORD PTR [rbp-8]
leave
ret
std::setprecision(int):
push rbp
mov rbp, rsp
mov DWORD PTR [rbp-4], edi
mov eax, DWORD PTR [rbp-4]
pop rbp
ret
std::setw(int):
push rbp
mov rbp, rsp
mov DWORD PTR [rbp-4], edi
mov eax, DWORD PTR [rbp-4]
pop rbp
ret
.LC1:
.string "data.txt"
.LC2:
.string "The file doesn't exist!"
.LC3:
.string "Billing.txt"
.LC4:
.string "Customer Type"
.LC5:
.string "Account Number"
.LC6:
.string "Number of Service Connection"
.LC7:
.string "Number of Channel"
.LC8:
.string "Amount Due"
.LC9:
.string "----------------------------------------------------------------------------------------------------------------"
.LC12:
.string "Residential"
.LC13:
.string "$"
.LC17:
.string "Bussiness"
.LC18:
.string "Invalid Customer Type!"
.LC19:
.string "SUMMARY INFORMATION"
.LC20:
.string "Number of Bill"
.LC21:
.string "Total Amount"
.LC22:
.string "Average Amount"
.LC23:
.string "Waiting for computing."
main:
push rbp
mov rbp, rsp
push rbx
sub rsp, 1112
mov DWORD PTR [rbp-20], 0
mov DWORD PTR [rbp-24], 0
pxor xmm0, xmm0
movsd QWORD PTR [rbp-32], xmm0
pxor xmm0, xmm0
movsd QWORD PTR [rbp-40], xmm0
pxor xmm0, xmm0
movsd QWORD PTR [rbp-48], xmm0
lea rax, [rbp-592]
mov rdi, rax
call std::basic_ifstream<char, std::char_traits<char> >::basic_ifstream()
lea rax, [rbp-592]
mov edx, 8
mov esi, OFFSET FLAT:.LC1
mov rdi, rax
call std::basic_ifstream<char, std::char_traits<char> >::open(char const*, std::_Ios_Openmode)
lea rax, [rbp-592]
add rax, 256
mov rdi, rax
call std::basic_ios<char, std::char_traits<char> >::fail() const
test al, al
je .L26
mov esi, OFFSET FLAT:.LC2
mov edi, OFFSET FLAT:std::cout
call std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)
mov esi, OFFSET FLAT:std::basic_ostream<char, std::char_traits<char> >& std::endl<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&)
mov rdi, rax
call std::basic_ostream<char, std::char_traits<char> >::operator<<(std::basic_ostream<char, std::char_traits<char> >& (*)(std::basic_ostream<char, std::char_traits<char> >&))
mov edi, 1
call exit
.L26:
lea rax, [rbp-1104]
mov rdi, rax
call std::basic_ofstream<char, std::char_traits<char> >::basic_ofstream()
mov esi, 32
mov edi, 16
call std::operator|(std::_Ios_Openmode, std::_Ios_Openmode)
mov edx, eax
lea rax, [rbp-1104]
mov esi, OFFSET FLAT:.LC3
mov rdi, rax
call std::basic_ofstream<char, std::char_traits<char> >::open(char const*, std::_Ios_Openmode)
lea rax, [rbp-1104]
mov esi, OFFSET FLAT:std::fixed(std::ios_base&)
mov rdi, rax
call std::basic_ostream<char, std::char_traits<char> >::operator<<(std::ios_base& (*)(std::ios_base&))
mov esi, OFFSET FLAT:std::showpoint(std::ios_base&)
mov rdi, rax
call std::basic_ostream<char, std::char_traits<char> >::operator<<(std::ios_base& (*)(std::ios_base&))
mov edi, 2
call std::setprecision(int)
mov edx, eax
lea rax, [rbp-1104]
mov esi, edx
mov rdi, rax
call std::basic_ostream<char, std::char_traits<char> >& std::operator<< <char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, std::_Setprecision)
lea rax, [rbp-1104]
mov esi, OFFSET FLAT:.LC4
mov rdi, rax
call std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)
mov rbx, rax
mov edi, 20
call std::setw(int)
mov esi, eax
mov rdi, rbx
call std::basic_ostream<char, std::char_traits<char> >& std::operator<< <char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, std::_Setw)
mov esi, OFFSET FLAT:.LC5
mov rdi, rax
call std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)
mov rbx, rax
mov edi, 35
call std::setw(int)
mov esi, eax
mov rdi, rbx
call std::basic_ostream<char, std::char_traits<char> >& std::operator<< <char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, std::_Setw)
mov esi, OFFSET FLAT:.LC6
mov rdi, rax
call std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)
mov rbx, rax
mov edi, 25
call std::setw(int)
mov esi, eax
mov rdi, rbx
call std::basic_ostream<char, std::char_traits<char> >& std::operator<< <char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, std::_Setw)
mov esi, OFFSET FLAT:.LC7
mov rdi, rax
call std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)
mov rbx, rax
mov edi, 20
call std::setw(int)
mov esi, eax
mov rdi, rbx
call std::basic_ostream<char, std::char_traits<char> >& std::operator<< <char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, std::_Setw)
mov esi, OFFSET FLAT:.LC8
mov rdi, rax
call std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)
mov esi, OFFSET FLAT:std::basic_ostream<char, std::char_traits<char> >& std::endl<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&)
mov rdi, rax
call std::basic_ostream<char, std::char_traits<char> >::operator<<(std::basic_ostream<char, std::char_traits<char> >& (*)(std::basic_ostream<char, std::char_traits<char> >&))
lea rax, [rbp-1104]
mov esi, OFFSET FLAT:.LC9
mov rdi, rax
call std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)
mov esi, OFFSET FLAT:std::basic_ostream<char, std::char_traits<char> >& std::endl<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&)
mov rdi, rax
call std::basic_ostream<char, std::char_traits<char> >::operator<<(std::basic_ostream<char, std::char_traits<char> >& (*)(std::basic_ostream<char, std::char_traits<char> >&))
.L35:
lea rax, [rbp-592]
add rax, 256
mov rdi, rax
call std::basic_ios<char, std::char_traits<char> >::eof() const
xor eax, 1
test al, al
je .L27
lea rdx, [rbp-61]
lea rax, [rbp-592]
mov rsi, rdx
mov rdi, rax
call std::basic_istream<char, std::char_traits<char> >& std::operator>><char, std::char_traits<char> >(std::basic_istream<char, std::char_traits<char> >&, char&)
mov rdx, rax
lea rax, [rbp-52]
mov rsi, rax
mov rdi, rdx
call std::basic_istream<char, std::char_traits<char> >::operator>>(int&)
mov rdx, rax
lea rax, [rbp-60]
mov rsi, rax
mov rdi, rdx
call std::basic_istream<char, std::char_traits<char> >::operator>>(int&)
mov rdx, rax
lea rax, [rbp-56]
mov rsi, rax
mov rdi, rdx
call std::basic_istream<char, std::char_traits<char> >::operator>>(int&)
movzx eax, BYTE PTR [rbp-61]
cmp al, 82
je .L28
movzx eax, BYTE PTR [rbp-61]
cmp al, 114
jne .L29
.L28:
mov eax, DWORD PTR [rbp-56]
cvtsi2sd xmm0, eax
movsd xmm1, QWORD PTR .LC10[rip]
mulsd xmm0, xmm1
movsd xmm1, QWORD PTR .LC11[rip]
addsd xmm0, xmm1
movsd QWORD PTR [rbp-32], xmm0
lea rax, [rbp-1104]
mov esi, OFFSET FLAT:.LC12
mov rdi, rax
call std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)
mov rbx, rax
mov edi, 17
call std::setw(int)
mov esi, eax
mov rdi, rbx
call std::basic_ostream<char, std::char_traits<char> >& std::operator<< <char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, std::_Setw)
mov rdx, rax
mov eax, DWORD PTR [rbp-52]
mov esi, eax
mov rdi, rdx
call std::basic_ostream<char, std::char_traits<char> >::operator<<(int)
mov rbx, rax
mov edi, 55
call std::setw(int)
mov esi, eax
mov rdi, rbx
call std::basic_ostream<char, std::char_traits<char> >& std::operator<< <char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, std::_Setw)
mov rdx, rax
mov eax, DWORD PTR [rbp-56]
mov esi, eax
mov rdi, rdx
call std::basic_ostream<char, std::char_traits<char> >::operator<<(int)
mov rbx, rax
mov edi, 22
call std::setw(int)
mov esi, eax
mov rdi, rbx
call std::basic_ostream<char, std::char_traits<char> >& std::operator<< <char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, std::_Setw)
mov esi, OFFSET FLAT:.LC13
mov rdi, rax
call std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)
mov rdx, rax
mov rax, QWORD PTR [rbp-32]
mov QWORD PTR [rbp-1112], rax
movsd xmm0, QWORD PTR [rbp-1112]
mov rdi, rdx
call std::basic_ostream<char, std::char_traits<char> >::operator<<(double)
mov esi, OFFSET FLAT:std::basic_ostream<char, std::char_traits<char> >& std::endl<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&)
mov rdi, rax
call std::basic_ostream<char, std::char_traits<char> >::operator<<(std::basic_ostream<char, std::char_traits<char> >& (*)(std::basic_ostream<char, std::char_traits<char> >&))
add DWORD PTR [rbp-20], 1
movsd xmm0, QWORD PTR [rbp-40]
addsd xmm0, QWORD PTR [rbp-32]
movsd QWORD PTR [rbp-40], xmm0
jmp .L30
.L29:
movzx eax, BYTE PTR [rbp-61]
cmp al, 66
je .L31
movzx eax, BYTE PTR [rbp-61]
cmp al, 98
jne .L32
.L31:
pxor xmm0, xmm0
movsd QWORD PTR [rbp-32], xmm0
mov eax, DWORD PTR [rbp-60]
cmp eax, 10
jg .L33
mov eax, DWORD PTR [rbp-56]
cvtsi2sd xmm0, eax
movsd xmm1, QWORD PTR .LC14[rip]
mulsd xmm0, xmm1
movsd xmm1, QWORD PTR .LC15[rip]
addsd xmm0, xmm1
movsd QWORD PTR [rbp-32], xmm0
jmp .L34
.L33:
mov eax, DWORD PTR [rbp-60]
sub eax, 10
cvtsi2sd xmm0, eax
movsd xmm1, QWORD PTR .LC16[rip]
mulsd xmm0, xmm1
movsd xmm1, QWORD PTR .LC15[rip]
addsd xmm1, xmm0
mov eax, DWORD PTR [rbp-56]
cvtsi2sd xmm0, eax
movsd xmm2, QWORD PTR .LC14[rip]
mulsd xmm0, xmm2
addsd xmm0, xmm1
movsd QWORD PTR [rbp-32], xmm0
.L34:
lea rax, [rbp-1104]
mov esi, OFFSET FLAT:.LC17
mov rdi, rax
call std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)
mov rbx, rax
mov edi, 19
call std::setw(int)
mov esi, eax
mov rdi, rbx
call std::basic_ostream<char, std::char_traits<char> >& std::operator<< <char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, std::_Setw)
mov rdx, rax
mov eax, DWORD PTR [rbp-52]
mov esi, eax
mov rdi, rdx
call std::basic_ostream<char, std::char_traits<char> >::operator<<(int)
mov rbx, rax
mov edi, 27
call std::setw(int)
mov esi, eax
mov rdi, rbx
call std::basic_ostream<char, std::char_traits<char> >& std::operator<< <char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, std::_Setw)
mov rdx, rax
mov eax, DWORD PTR [rbp-60]
mov esi, eax
mov rdi, rdx
call std::basic_ostream<char, std::char_traits<char> >::operator<<(int)
mov rbx, rax
mov edi, 28
call std::setw(int)
mov esi, eax
mov rdi, rbx
call std::basic_ostream<char, std::char_traits<char> >& std::operator<< <char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, std::_Setw)
mov rdx, rax
mov eax, DWORD PTR [rbp-56]
mov esi, eax
mov rdi, rdx
call std::basic_ostream<char, std::char_traits<char> >::operator<<(int)
mov rbx, rax
mov edi, 22
call std::setw(int)
mov esi, eax
mov rdi, rbx
call std::basic_ostream<char, std::char_traits<char> >& std::operator<< <char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, std::_Setw)
mov esi, OFFSET FLAT:.LC13
mov rdi, rax
call std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)
mov rdx, rax
mov rax, QWORD PTR [rbp-32]
mov QWORD PTR [rbp-1112], rax
movsd xmm0, QWORD PTR [rbp-1112]
mov rdi, rdx
call std::basic_ostream<char, std::char_traits<char> >::operator<<(double)
mov esi, OFFSET FLAT:std::basic_ostream<char, std::char_traits<char> >& std::endl<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&)
mov rdi, rax
call std::basic_ostream<char, std::char_traits<char> >::operator<<(std::basic_ostream<char, std::char_traits<char> >& (*)(std::basic_ostream<char, std::char_traits<char> >&))
add DWORD PTR [rbp-24], 1
movsd xmm0, QWORD PTR [rbp-48]
addsd xmm0, QWORD PTR [rbp-32]
movsd QWORD PTR [rbp-48], xmm0
jmp .L30
.L32:
lea rax, [rbp-1104]
mov esi, OFFSET FLAT:.LC18
mov rdi, rax
call std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)
mov esi, OFFSET FLAT:std::basic_ostream<char, std::char_traits<char> >& std::endl<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&)
mov rdi, rax
call std::basic_ostream<char, std::char_traits<char> >::operator<<(std::basic_ostream<char, std::char_traits<char> >& (*)(std::basic_ostream<char, std::char_traits<char> >&))
.L30:
jmp .L35
.L27:
lea rax, [rbp-1104]
mov esi, OFFSET FLAT:std::basic_ostream<char, std::char_traits<char> >& std::endl<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&)
mov rdi, rax
call std::basic_ostream<char, std::char_traits<char> >::operator<<(std::basic_ostream<char, std::char_traits<char> >& (*)(std::basic_ostream<char, std::char_traits<char> >&))
lea rax, [rbp-1104]
mov esi, OFFSET FLAT:.LC19
mov rdi, rax
call std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)
mov esi, OFFSET FLAT:std::basic_ostream<char, std::char_traits<char> >& std::endl<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&)
mov rdi, rax
call std::basic_ostream<char, std::char_traits<char> >::operator<<(std::basic_ostream<char, std::char_traits<char> >& (*)(std::basic_ostream<char, std::char_traits<char> >&))
lea rax, [rbp-1104]
mov esi, OFFSET FLAT:.LC9
mov rdi, rax
call std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)
mov esi, OFFSET FLAT:std::basic_ostream<char, std::char_traits<char> >& std::endl<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&)
mov rdi, rax
call std::basic_ostream<char, std::char_traits<char> >::operator<<(std::basic_ostream<char, std::char_traits<char> >& (*)(std::basic_ostream<char, std::char_traits<char> >&))
lea rax, [rbp-1104]
mov esi, OFFSET FLAT:.LC4
mov rdi, rax
call std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)
mov rbx, rax
mov edi, 20
call std::setw(int)
mov esi, eax
mov rdi, rbx
call std::basic_ostream<char, std::char_traits<char> >& std::operator<< <char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, std::_Setw)
mov esi, OFFSET FLAT:.LC20
mov rdi, rax
call std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)
mov rbx, rax
mov edi, 20
call std::setw(int)
mov esi, eax
mov rdi, rbx
call std::basic_ostream<char, std::char_traits<char> >& std::operator<< <char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, std::_Setw)
mov esi, OFFSET FLAT:.LC21
mov rdi, rax
call std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)
mov rbx, rax
mov edi, 20
call std::setw(int)
mov esi, eax
mov rdi, rbx
call std::basic_ostream<char, std::char_traits<char> >& std::operator<< <char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, std::_Setw)
mov esi, OFFSET FLAT:.LC22
mov rdi, rax
call std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)
mov esi, OFFSET FLAT:std::basic_ostream<char, std::char_traits<char> >& std::endl<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&)
mov rdi, rax
call std::basic_ostream<char, std::char_traits<char> >::operator<<(std::basic_ostream<char, std::char_traits<char> >& (*)(std::basic_ostream<char, std::char_traits<char> >&))
lea rax, [rbp-1104]
mov esi, OFFSET FLAT:.LC9
mov rdi, rax
call std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)
mov esi, OFFSET FLAT:std::basic_ostream<char, std::char_traits<char> >& std::endl<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&)
mov rdi, rax
call std::basic_ostream<char, std::char_traits<char> >::operator<<(std::basic_ostream<char, std::char_traits<char> >& (*)(std::basic_ostream<char, std::char_traits<char> >&))
lea rax, [rbp-1104]
mov esi, OFFSET FLAT:.LC12
mov rdi, rax
call std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)
mov rbx, rax
mov edi, 16
call std::setw(int)
mov esi, eax
mov rdi, rbx
call std::basic_ostream<char, std::char_traits<char> >& std::operator<< <char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, std::_Setw)
mov rdx, rax
mov eax, DWORD PTR [rbp-20]
mov esi, eax
mov rdi, rdx
call std::basic_ostream<char, std::char_traits<char> >::operator<<(int)
mov rbx, rax
mov edi, 17
call std::setw(int)
mov esi, eax
mov rdi, rbx
call std::basic_ostream<char, std::char_traits<char> >& std::operator<< <char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, std::_Setw)
mov esi, OFFSET FLAT:.LC13
mov rdi, rax
call std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)
mov rdx, rax
mov rax, QWORD PTR [rbp-40]
mov QWORD PTR [rbp-1112], rax
movsd xmm0, QWORD PTR [rbp-1112]
mov rdi, rdx
call std::basic_ostream<char, std::char_traits<char> >::operator<<(double)
mov rbx, rax
mov edi, 15
call std::setw(int)
mov esi, eax
mov rdi, rbx
call std::basic_ostream<char, std::char_traits<char> >& std::operator<< <char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, std::_Setw)
mov esi, OFFSET FLAT:.LC13
mov rdi, rax
call std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)
cvtsi2sd xmm0, DWORD PTR [rbp-20]
movsd xmm1, QWORD PTR [rbp-40]
divsd xmm1, xmm0
movapd xmm0, xmm1
mov rdi, rax
call std::basic_ostream<char, std::char_traits<char> >::operator<<(double)
mov esi, OFFSET FLAT:std::basic_ostream<char, std::char_traits<char> >& std::endl<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&)
mov rdi, rax
call std::basic_ostream<char, std::char_traits<char> >::operator<<(std::basic_ostream<char, std::char_traits<char> >& (*)(std::basic_ostream<char, std::char_traits<char> >&))
lea rax, [rbp-1104]
mov esi, OFFSET FLAT:.LC17
mov rdi, rax
call std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)
mov rbx, rax
mov edi, 18
call std::setw(int)
mov esi, eax
mov rdi, rbx
call std::basic_ostream<char, std::char_traits<char> >& std::operator<< <char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, std::_Setw)
mov rdx, rax
mov eax, DWORD PTR [rbp-24]
mov esi, eax
mov rdi, rdx
call std::basic_ostream<char, std::char_traits<char> >::operator<<(int)
mov rbx, rax
mov edi, 17
call std::setw(int)
mov esi, eax
mov rdi, rbx
call std::basic_ostream<char, std::char_traits<char> >& std::operator<< <char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, std::_Setw)
mov esi, OFFSET FLAT:.LC13
mov rdi, rax
call std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)
mov rdx, rax
mov rax, QWORD PTR [rbp-48]
mov QWORD PTR [rbp-1112], rax
movsd xmm0, QWORD PTR [rbp-1112]
mov rdi, rdx
call std::basic_ostream<char, std::char_traits<char> >::operator<<(double)
mov rbx, rax
mov edi, 14
call std::setw(int)
mov esi, eax
mov rdi, rbx
call std::basic_ostream<char, std::char_traits<char> >& std::operator<< <char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, std::_Setw)
mov esi, OFFSET FLAT:.LC13
mov rdi, rax
call std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)
cvtsi2sd xmm0, DWORD PTR [rbp-24]
movsd xmm1, QWORD PTR [rbp-48]
divsd xmm1, xmm0
movapd xmm0, xmm1
mov rdi, rax
call std::basic_ostream<char, std::char_traits<char> >::operator<<(double)
mov esi, OFFSET FLAT:std::basic_ostream<char, std::char_traits<char> >& std::endl<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&)
mov rdi, rax
call std::basic_ostream<char, std::char_traits<char> >::operator<<(std::basic_ostream<char, std::char_traits<char> >& (*)(std::basic_ostream<char, std::char_traits<char> >&))
lea rax, [rbp-592]
mov rdi, rax
call std::basic_ifstream<char, std::char_traits<char> >::close()
lea rax, [rbp-1104]
mov rdi, rax
call std::basic_ofstream<char, std::char_traits<char> >::close()
mov esi, OFFSET FLAT:.LC23
mov edi, OFFSET FLAT:std::cout
call std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)
mov esi, OFFSET FLAT:std::basic_ostream<char, std::char_traits<char> >& std::endl<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&)
mov rdi, rax
call std::basic_ostream<char, std::char_traits<char> >::operator<<(std::basic_ostream<char, std::char_traits<char> >& (*)(std::basic_ostream<char, std::char_traits<char> >&))
mov ebx, 0
lea rax, [rbp-1104]
mov rdi, rax
call std::basic_ofstream<char, std::char_traits<char> >::~basic_ofstream()
lea rax, [rbp-592]
mov rdi, rax
call std::basic_ifstream<char, std::char_traits<char> >::~basic_ifstream()
mov eax, ebx
jmp .L41
mov rbx, rax
lea rax, [rbp-1104]
mov rdi, rax
call std::basic_ofstream<char, std::char_traits<char> >::~basic_ofstream()
jmp .L38
mov rbx, rax
.L38:
lea rax, [rbp-592]
mov rdi, rax
call std::basic_ifstream<char, std::char_traits<char> >::~basic_ifstream()
mov rax, rbx
mov rdi, rax
call _Unwind_Resume
.L41:
add rsp, 1112
pop rbx
pop rbp
ret
__static_initialization_and_destruction_0(int, int):
push rbp
mov rbp, rsp
sub rsp, 16
mov DWORD PTR [rbp-4], edi
mov DWORD PTR [rbp-8], esi
cmp DWORD PTR [rbp-4], 1
jne .L44
cmp DWORD PTR [rbp-8], 65535
jne .L44
mov edi, OFFSET FLAT:std::__ioinit
call std::ios_base::Init::Init()
mov edx, OFFSET FLAT:__dso_handle
mov esi, OFFSET FLAT:std::__ioinit
mov edi, OFFSET FLAT:std::ios_base::Init::~Init()
call __cxa_atexit
.L44:
nop
leave
ret
_GLOBAL__sub_I_main:
push rbp
mov rbp, rsp
mov esi, 65535
mov edi, 1
call __static_initialization_and_destruction_0(int, int)
pop rbp
ret
.LC10:
.long 0
.long 1075707904
.LC11:
.long 0
.long 1077477376
.LC14:
.long 0
.long 1078525952
.LC15:
.long 0
.long 1079410688
.LC16:
.long 0
.long 1075052544
Related Questions
drjack9650@gmail.com
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.