Assembly Language using Irvine 32 library, Must be assembly, not c/c++/java Writ
ID: 3574750 • Letter: A
Question
Assembly Language using Irvine 32 library, Must be assembly, not c/c++/java
Write a program that reads 16 numbers (range, 0-200) from standard input (user is prompted for input) and displays them on a screen as a 4x4 matrix. These numbers are to be stored in an array and the contents of the array is then manipulated. Treat this array as a two-dimensional array and use base index addressing to simplify the solutions to the following requirements.
Right Justify the number and leave a blank line between rows
Example:
0 50 2 200
66 21 54 20
1 3 4 6
129 35 45 67
Use at least one procedure to perform each of the following operations:
a.) Prompt for a row and then display the sum of this row
b.) Prompft for a column and then display the sum of this column
c.) Count and display the number of values
d.) Wait for a key to be pressed, then using ESI and EDI as offsets, interchange rows one and three and re-display the matrix
Explanation / Answer
Program:
.LC0:
.string "enter the numbers"
.LC1:
.string "%d"
.LC2:
.string "%d "
.align 8
.LC3:
.string "enter the row from(0-3) to be added"
.align 8
.LC4:
.string "Sum of elements in row %d is %d "
.align 8
.LC5:
.string "enter the column from (0-3) to be added"
.align 8
.LC6:
.string "Sum of elements in column %d is %d "
.LC7:
.string "no of values are %d "
.align 8
.LC8:
.string "enter any key to interchange row 1 and 3 "
.text
.globl main
.type main, @function
main:
.LFB0:
.cfi_startproc
pushq %rbp
.cfi_def_cfa_offset 16
.cfi_offset 6, -16
movq %rsp, %rbp
.cfi_def_cfa_register 6
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $88, %rsp
.cfi_offset 15, -24
.cfi_offset 14, -32
.cfi_offset 13, -40
.cfi_offset 12, -48
.cfi_offset 3, -56
movq %fs:40, %rbx
movq %rbx, -56(%rbp)
xorl %ebx, %ebx
movq %rsp, %rcx
movq %rcx, %r15
movl $4, -96(%rbp)
movl $4, -92(%rbp)
movl -92(%rbp), %ecx
movl -96(%rbp), %r12d
movslq %ecx, %rbx
subq $1, %rbx
movq %rbx, -80(%rbp)
movslq %ecx, %rbx
movq %rbx, %r13
movl $0, %r14d
movslq %ecx, %rbx
salq $2, %rbx
movslq %r12d, %r13
subq $1, %r13
movq %r13, -72(%rbp)
movslq %ecx, %r13
movq %r13, %r10
movl $0, %r11d
movslq %r12d, %r13
movq %r13, %rax
movl $0, %edx
movq %r11, %r14
imulq %rax, %r14
movq %rdx, %r13
imulq %r10, %r13
addq %r14, %r13
mulq %r10
leaq 0(%r13,%rdx), %r10
movq %r10, %rdx
movslq %ecx, %rax
movq %rax, %r8
movl $0, %r9d
movslq %r12d, %rax
movq %rax, %rsi
movl $0, %edi
movq %r9, %rdx
imulq %rsi, %rdx
movq %rdi, %rax
imulq %r8, %rax
leaq (%rdx,%rax), %r10
movq %r8, %rax
mulq %rsi
leaq (%r10,%rdx), %rsi
movq %rsi, %rdx
movslq %ecx, %rdx
movslq %r12d, %rax
imulq %rdx, %rax
salq $2, %rax
leaq 3(%rax), %rdx
movl $16, %eax
subq $1, %rax
addq %rdx, %rax
movl $16, %edi
movl $0, %edx
divq %rdi
imulq $16, %rax, %rax
subq %rax, %rsp
movq %rsp, %rax
addq $3, %rax
shrq $2, %rax
salq $2, %rax
movq %rax, -64(%rbp)
movl $.LC0, %edi
call puts
movl $0, -112(%rbp)
jmp .L2
.L5:
movl $0, -108(%rbp)
jmp .L3
.L4:
movq %rbx, %rcx
shrq $2, %rcx
movl -108(%rbp), %eax
movslq %eax, %rdx
movl -112(%rbp), %eax
cltq
imulq %rcx, %rax
addq %rdx, %rax
leaq 0(,%rax,4), %rdx
movq -64(%rbp), %rax
addq %rdx, %rax
movq %rax, %rsi
movl $.LC1, %edi
movl $0, %eax
call __isoc99_scanf
addl $1, -108(%rbp)
.L3:
movl -108(%rbp), %eax
cmpl -92(%rbp), %eax
jl .L4
addl $1, -112(%rbp)
.L2:
movl -112(%rbp), %eax
cmpl -96(%rbp), %eax
jl .L5
movl $0, -112(%rbp)
jmp .L6
.L9:
movl $0, -108(%rbp)
jmp .L7
.L8:
movq %rbx, %rsi
shrq $2, %rsi
movq -64(%rbp), %rax
movl -108(%rbp), %edx
movslq %edx, %rcx
movl -112(%rbp), %edx
movslq %edx, %rdx
imulq %rsi, %rdx
addq %rcx, %rdx
movl (%rax,%rdx,4), %eax
movl %eax, %esi
movl $.LC2, %edi
movl $0, %eax
call printf
addl $1, -108(%rbp)
.L7:
movl -108(%rbp), %eax
cmpl -92(%rbp), %eax
jl .L8
movl $10, %edi
call putchar
addl $1, -112(%rbp)
.L6:
movl -112(%rbp), %eax
cmpl -96(%rbp), %eax
jl .L9
movl $.LC3, %edi
call puts
movl $0, -104(%rbp)
movl $0, -100(%rbp)
leaq -120(%rbp), %rax
movq %rax, %rsi
movl $.LC1, %edi
movl $0, %eax
call __isoc99_scanf
movl $0, -108(%rbp)
jmp .L10
.L11:
movq %rbx, %rsi
shrq $2, %rsi
movl -120(%rbp), %edx
movq -64(%rbp), %rax
movl -108(%rbp), %ecx
movslq %ecx, %rcx
movslq %edx, %rdx
imulq %rsi, %rdx
addq %rcx, %rdx
movl (%rax,%rdx,4), %eax
addl %eax, -104(%rbp)
addl $1, -108(%rbp)
.L10:
movl -108(%rbp), %eax
cmpl -92(%rbp), %eax
jl .L11
movl -120(%rbp), %eax
movl -104(%rbp), %edx
movl %eax, %esi
movl $.LC4, %edi
movl $0, %eax
call printf
movl $.LC5, %edi
call puts
leaq -116(%rbp), %rax
movq %rax, %rsi
movl $.LC1, %edi
movl $0, %eax
call __isoc99_scanf
movl $0, -112(%rbp)
jmp .L12
.L13:
movq %rbx, %rsi
shrq $2, %rsi
movl -116(%rbp), %edx
movq -64(%rbp), %rax
movslq %edx, %rcx
movl -112(%rbp), %edx
movslq %edx, %rdx
imulq %rsi, %rdx
addq %rcx, %rdx
movl (%rax,%rdx,4), %eax
addl %eax, -100(%rbp)
addl $1, -112(%rbp)
.L12:
movl -112(%rbp), %eax
cmpl -96(%rbp), %eax
jl .L13
movl -116(%rbp), %eax
movl -100(%rbp), %edx
movl %eax, %esi
movl $.LC6, %edi
movl $0, %eax
call printf
movl -96(%rbp), %eax
imull -92(%rbp), %eax
movl %eax, %esi
movl $.LC7, %edi
movl $0, %eax
call printf
movl $.LC8, %edi
movl $0, %eax
call printf
call getchar
movl %eax, -88(%rbp)
cmpl $0, -88(%rbp)
je .L14
movl $0, -112(%rbp)
jmp .L15
.L16:
movq %rbx, %rcx
shrq $2, %rcx
movq -64(%rbp), %rax
movl -112(%rbp), %edx
movslq %edx, %rdx
addq %rcx, %rdx
movl (%rax,%rdx,4), %eax
movl %eax, -84(%rbp)
movq %rbx, %rsi
shrq $2, %rsi
movq %rbx, %rcx
shrq $2, %rcx
movq -64(%rbp), %rax
movl -112(%rbp), %edx
movslq %edx, %rdx
addq %rcx, %rcx
addq %rcx, %rdx
movl (%rax,%rdx,4), %edx
movq -64(%rbp), %rax
movl -112(%rbp), %ecx
movslq %ecx, %rcx
addq %rsi, %rcx
movl %edx, (%rax,%rcx,4)
movq %rbx, %rcx
shrq $2, %rcx
movq -64(%rbp), %rax
movl -112(%rbp), %edx
movslq %edx, %rdx
addq %rcx, %rcx
addq %rdx, %rcx
movl -84(%rbp), %edx
movl %edx, (%rax,%rcx,4)
addl $1, -112(%rbp)
.L15:
movl -112(%rbp), %eax
cmpl -96(%rbp), %eax
jl .L16
.L14:
movl $0, -112(%rbp)
jmp .L17
.L20:
movl $0, -108(%rbp)
jmp .L18
.L19:
movq %rbx, %rsi
shrq $2, %rsi
movq -64(%rbp), %rax
movl -108(%rbp), %edx
movslq %edx, %rcx
movl -112(%rbp), %edx
movslq %edx, %rdx
imulq %rsi, %rdx
addq %rcx, %rdx
movl (%rax,%rdx,4), %eax
movl %eax, %esi
movl $.LC2, %edi
movl $0, %eax
call printf
addl $1, -108(%rbp)
.L18:
movl -108(%rbp), %eax
cmpl -92(%rbp), %eax
jl .L19
movl $10, %edi
call putchar
addl $1, -112(%rbp)
.L17:
movl -112(%rbp), %eax
cmpl -96(%rbp), %eax
jl .L20
movl $0, %eax
movq %r15, %rsp
movq -56(%rbp), %rdi
xorq %fs:40, %rdi
je .L22
call __stack_chk_fail
.L22:
leaq -40(%rbp), %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
.cfi_def_cfa 7, 8
ret
.cfi_endproc
Related Questions
drjack9650@gmail.com
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.