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

Write an assembly language program to perform the following calculations: value1

ID: 3887190 • Letter: W

Question

Write an assembly language program to perform the following calculations:

value1 = a + b

value2 = a - b

value3 = a * b

value4 = value1 + value2 + value3

All data values (a and b) are word size. Allocate memory storage of appropriate sizes for value1, value2, value3, and value4. Test you program using the following data set (all values are in hex):

Data Set #

a

b

1

1

1

2

45

2

3

1111

2222

4

2222

1111

5

2

45

6

FFFF

25

7

0

65

8

1234

4321

9

4321

1234

10

ABCD

FF

11

FFFF

FFFF

Data Set #

a

b

1

1

1

2

45

2

3

1111

2222

4

2222

1111

5

2

45

6

FFFF

25

7

0

65

8

1234

4321

9

4321

1234

10

ABCD

FF

11

FFFF

FFFF

Explanation / Answer

Code for addition:

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