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

Write a complete assembly file main.s, which does the following task: a) Put thr

ID: 3666776 • Letter: W

Question

Write a complete assembly file main.s, which does the following task: a) Put three unsigned integers into three registers R0, R1, R2. b) Call a function MyFind that finds the max number out of those three numbers in the above three registers. c) In MyFind function, store the max number on the stack, and store the sum of those three numbers in R0. d) Once MyFind function call returns, store the max number (which is the top element on the stack) into a variable named M, and store the sum into a variable N. These two variables M and N should be allocated via SPACE instruction.

Explanation / Answer

Each personal computer has a microprocessor that manages the computer's arithmetical, logical, and control activities.

Each family of processors has its own set of instructions for handling various operations such as getting input from keyboard, displaying information on screen and performing various other jobs. These set of instructions are called 'machine language instructions'.

A processor understands only machine language instructions, which are strings of 1's and 0's. However, machine language is too obscure and complex for using in software development. So, the low-level assembly language is designed for a specific family of processors that represents various instructions in symbolic code and a more understandable form.

SYS_EXIT equ 1
SYS_READ equ 3
SYS_WRITE equ 4
STDIN equ 0
STDOUT equ 1

segment .data

msg1 db "Enter a digit ", 0xA,0xD
len1 equ $- msg1

msg2 db "Please enter a second digit", 0xA,0xD
len2 equ $- msg2

msg3 db "The sum is: "
len3 equ $- msg3

segment .bss

num1 resb 2
num2 resb 2
res resb 1

section   .text
global _start ;must be declared for using gcc
  
_start: ;tell linker entry point
mov eax, SYS_WRITE   
mov ebx, STDOUT   
mov ecx, msg1   
mov edx, len1
int 0x80

mov eax, SYS_READ
mov ebx, STDIN
mov ecx, num1
mov edx, 2
int 0x80

mov eax, SYS_WRITE
mov ebx, STDOUT   
mov ecx, msg2
mov edx, len2   
int 0x80

mov eax, SYS_READ
mov ebx, STDIN
mov ecx, num2
mov edx, 2
int 0x80

mov eax, SYS_WRITE   
mov ebx, STDOUT   
mov ecx, msg3
mov edx, len3   
int 0x80

; moving the first number to eax register and second number to ebx
; and subtracting ascii '0' to convert it into a decimal number
  
mov eax, [num1]
sub eax, '0'
  
mov ebx, [num2]
sub ebx, '0'

; add eax and ebx
add eax, ebx
; add '0' to to convert the sum from decimal to ASCII
add eax, '0'

; storing the sum in memory location res
mov [res], eax

; print the sum
mov eax, SYS_WRITE
mov ebx, STDOUT
mov ecx, res   
mov edx, 1
int 0x80

exit:

mov eax, SYS_EXIT   
xor ebx, ebx
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