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

oppose the the MIPS ISA which has 32 registers) write an assembly program using

ID: 3739896 • Letter: O

Question

oppose the the MIPS ISA which has 32 registers) write an assembly program using our own instructions from the instruction set.pdf document which fulfills the following tasks and turn in the assembly code: . Initialize address 0x9 and 0x10 of Data Memory with values 0xFE and 0x11 respectively. . Detect the sign of numbers that you stored in address 0x9 and 0x10 of Data Memory and store a flag indicating their sign in address 0x11 and 0x12 of Data Memory respectively. For negative sign store 0x80 and for positive sign store 0x00 as sign indicator flag. ·XOR the sign flags together and store the result in address 0x13 of Data Memory. . Take the absolute value of the negative number (0xFE). Store the result in address 0x14 of Data Memory. Please note that the numbers are in two's complement format. Also, since you not have yet created the hardware unit for branching, you are not allowed to use j-type instruction like beq and bne in your code for this prelab.

Explanation / Answer

Answer:

Assembly Language Code :

.LC0:

.string " Find one's complement of a binary value: "

.LC1:

.string "---------------------------------------------- "

.LC2:

.string " Input a "

.LC3:

.string " bit binary value: "

.LC4:

.string "Invalid Input. Input the value of assign bits."

.LC5:

.string " The original binary = "

.LC6:

.string " After ones complement the number = "

main:

push rbp

mov rbp, rsp

sub rsp, 32

mov DWORD PTR [rbp-8], 0

mov esi, OFFSET FLAT:.LC0

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:.LC1

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:.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, 8

mov rdi, rax

call std::basic_ostream<char, std::char_traits<char> >::operator<<(int)

mov esi, OFFSET FLAT:.LC3

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*)

lea rax, [rbp-17]

mov rsi, rax

mov edi, OFFSET FLAT:std::cin

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 DWORD PTR [rbp-4], 0

.L6:

cmp DWORD PTR [rbp-4], 7

jg .L2

mov eax, DWORD PTR [rbp-4]

cdqe

movzx eax, BYTE PTR [rbp-17+rax]

cmp al, 49

jne .L3

mov eax, DWORD PTR [rbp-4]

cdqe

mov BYTE PTR [rbp-26+rax], 48

jmp .L4

.L3:

mov eax, DWORD PTR [rbp-4]

cdqe

movzx eax, BYTE PTR [rbp-17+rax]

cmp al, 48

jne .L5

mov eax, DWORD PTR [rbp-4]

cdqe

mov BYTE PTR [rbp-26+rax], 49

jmp .L4

.L5:

mov esi, OFFSET FLAT:.LC4

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 DWORD PTR [rbp-8], 1

jmp .L2

.L4:

add DWORD PTR [rbp-4], 1

jmp .L6

.L2:

mov BYTE PTR [rbp-18], 0

cmp DWORD PTR [rbp-8], 0

jne .L7

mov esi, OFFSET FLAT:.LC5

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 rdx, rax

lea rax, [rbp-17]

mov rsi, rax

mov rdi, rdx

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 esi, OFFSET FLAT:.LC6

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 rdx, rax

lea rax, [rbp-26]

mov rsi, rax

mov rdi, rdx

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> >&))

.L7:

mov eax, 0

leave

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 .L11

cmp DWORD PTR [rbp-8], 65535

jne .L11

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

.L11:

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