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

Can Someone answer this quickly its due TONIGHT. I just dont have the time to do

ID: 3915636 • Letter: C

Question

Can Someone answer this quickly its due TONIGHT. I just dont have the time to do it cause i have an Exam. **In Assembly Code***

1. (15 marks) Convert the following program into assembly. The main method should be in one module, and the factorial and power procedures in another Do NOT use global variables (ie, a data section),unless defined globally in the pseudo-code below. Pass parameters via the stack only. Return values should use eax. Remember to preserve the register values INSIDE your functions String intPrompt"Please enter an integer value:'" String hexPrompt = "Please enter a hex value: String error = "Value too large for multiplication" main Display(intPrompt) unsigned int a = Read!nt() Display (hexPrompt) unsigned int bReadHex ) unsigned int result-factorial (a) if result1 Display (error) else Display(result) unsigned int powerpower a, b) Display (power) unsigned int factorial unsigned int n ) unsigned int result-1; while (n> 0 result *= n; if ( result > 32-bit max value ? { return-l ni return result unsigned int power unsigned int base, unsigned int exp if exp0) return base return base power base, exp 1

Explanation / Answer

segment .data

;declaring string data

intMsg db 'Please enter an integer value:'

hexMsg db 'Please enter an hex value:'

errMsg db 'Value too large for multiplocation'

len_intMsg equ $ - intMsg

len_hexMsg equ $ - hexMsg

len_errMsg equ $ - errMsg

segment .bss

;declaring variables to store integer and hex value

numInt resb 2

numHex resb 2

segment .text

global _start

_start:

;displaying prompt for integer

mov eax, 4

mov ebx, 1

mov ecx, intMsg

mov edx, len_intMsg

int 0x80

;reading integer from user input

mov eax, 3

mov ebx, 2

mov ecx, numInt

mov edx, 2

int 0x80

;showing error message if value is too large

JO ERROR_LARGE

;displaying prompt for hexadecimal

mov eax, 4

mov ebx, 1

mov ecx, hexMsg

mov edx, len_hexMsg

int 0x80

;reading hexadecimal from user input

mov eax, 3

mov ebx, 2

mov ecx, numHex

mov edx, 2

int 0x80

;showing error message if value is too large

JO ERROR_LARGE

;performing factorial of integer

Factorial:

mov al, numInt ;copying integer to accumulator

mov [res], numInt ;copying integer to res

loop_F:

dec res

JZ Factorial_complete ;see if res = 0 after decrement

mul al, res ;multiplying al and res in loop

JMP loop_F ;looping

;displying output after factorial is completed

Factorial_complete:

mov res, al

mov eax, 3

mov ebx, 2

mov ecx, res

mov edx, 2

int 0x80

;performing power of integer to hexadecimal

Power_AB:

mov eax, numInt ;copy integer to eax

mov ebx, numHex ;copying hexadecimal to ebx

cmp numHex, 0 ;checking id hexadecimal = 0

JE Power_Zero ;if 0, dispay 1

;performing power operation if hexadecimal not 0

LOOP_POW:

mul eax,eax ;multiplying eax and eax in loop

dec ebx ;decrement ebx

JNZ LOOP_POW ;looping

;print result

mov [res],eax

mov eax, 4

mov ebx, 1

mov ecx, res

mov edx, 2

int 0x80

JMP EXIT

Power_Zero:

;print 1

mov [res], 1

mov eax, 4

mov ebx, 1

mov ecx, res

mov edx, 2

int 0x80

JMP EXIT

ERROR_LARGE:

mov eax, 4

mov ebx, 1

mov ecx, errMsg

mov edx, len_errMsg

int 0x80

EXIT:

mov eax, 1

mov ebx, 0

int 0x80

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