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

Write an SRC assembly code to work both multiplication (*) and division (/). Ope

ID: 3565092 • Letter: W

Question

Write an SRC assembly code to work both multiplication (*) and division (/). Operands are defined as constants, and the operator is defined as an ASCII character as follows: Character ASCII * 42 / 47 op1 * op2 OR op1 / op2 Your program must read first operand, the operator, and then the second operand as above. Store the result in the memory location for result. When the operation is division (/), the result is the integer part of the division (e.g., 9/4 = 2). If the second operand in division is zero, store -1 in the result. You may start with the following template. ; ; Multiplication and division (integer division) using addition and ; subtraction in SRC assembly language. ; If the second operand in division is zero, store -1 in the result. ; .org 1000 ld r1, op1 ; r1 holds operand1 ld r2, op2 ; r2 holds operand2 ld r3, operator ; r3 holds the operator lar r4, result ; r4 points to the location of result lar r8, end lar r10, multiplication lar r12, division addi r5,r3,-42 ; check for multiplication operation brzr r10,r5 ; if yes, branch to multiplication addi r5,r3,-47 ; check for division operation brzr r12,r5 ; if yes, branch to division br r8 multiplication: lar r13, aa lar r14, bb lar r15, loop1 lar r16, store la r20, 0 ; r20: number of negative values in op1 and op2 brpl r13,r1 ; check the sign of the first operand neg r1,r1 ; if the sign is negative, make it to be positive addi r20,r20,1 ; aa: ; DEFINE YOUR CODE ; check the sign of the second operand ; DEFINE YOUR CODE ; if the sign is negative, make it to be positive ; bb: addi r22,r2, 0 ;save the second operand as counter la r6, 0 loop1: add ; DEFINE YOUR CODE addi ; DEFINE YOUR CODE ; decrement the value of r22 ; DEFINE YOUR CODE ; if r22s value is nonzero, go to loop1 addi r20, r20, -1 ; r20's possible value was 0, 1, or 2 brnz r16,r20 ; if r20 = 0, neg ; DEFINE YOUR CODE ; one operand was negative and the other was positive store: st ; DEFINE YOUR CODE br ; DEFINE YOUR CODE division: ; ; CONTINUE YOUR CODING FOR DIVISION ; end: stop ; exit .org 3000 op1: .dc 20 ; it can be any integer value. operator: .dc "*" ; it can be either * or / op2: .dc -7 ; it can be any integer value. result: .dw 1 ; storage for result ; ; end of the program ;

Explanation / Answer

Look at the following simple program to understand the use of registers in assembly programming. This program displays 9 stars on the screen along with a simple message:

When the above code is compiled and executed, it produces the following result:

Assembly - System Calls

System calls are APIs for the interface between user space and kernel space. We have already used the system calls sys_write and sys_exit for writing into the screen and exiting from the program, respectively.

Linux System Calls

You can make use of Linux system calls in your assembly programs. You need to take the following steps for using Linux system calls in your program:

Put the system call number in the EAX register.

Store the arguments to the system call in the registers EBX, ECX, etc.

Call the relevant interrupt (80h).

The result is usually returned in the EAX register.

There are six registers that store the arguments of the system call used. These are the EBX, ECX, EDX, ESI, EDI, and EBP. These registers take the consecutive arguments, starting with the EBX register. If there are more than six arguments, then the memory location of the first argument is stored in the EBX register.

The following code snippet shows the use of the system call sys_exit:

The following code snippet shows the use of the system call sys_write:

All the syscalls are listed in /usr/include/asm/unistd.h, together with their numbers (the value to put in EAX before you call int 80h).

The following table shows some of the system calls used in this tutorial:

Example

%eax Name %ebx %ecx %edx %esx %edi 1 sys_exit int - - - - 2 sys_fork struct pt_regs - - - - 3 sys_read unsigned int char * size_t - - 4 sys_write unsigned int const char * size_t - - 5 sys_open const char * int int - - 6 sys_close unsigned int - - - -
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