Assembly Language For this program you will find the largest

Assembly Language

For this program you will find the largest element in an array of DWORDs. The output of your program will be: The Largest Integer In the Array is: +6 where, for the example I used, the largest element in the array is 6. You will make up your own array of integers with at least 6 integers, and including some duplicate values. You will do all of your work using registers, i.e. NO variables appear in your code except to initialize registers once. You code must include: meaningful simultaneous use of EAX, EBX, ECX, EDX at least three jump instructions at least two compare instructions at least one meaningful use of LENGTHOF at least one meaningful use of TYPE at least one meaningful use of OFFSET at least one meaningful use of indirect addressing use of WriteString and WriteInt from the Irvine library

Solution

Assembly Language code to find largest number in the array: (output details also included below)

section .data
    larg_msg db \'Largest Number is::\'
    larg_len: equ $-larg_msg

    nwline db 10

    array dd 0fa100001h,0b2000002h,0ffffffffh,0d400004h, 0500005h        ;array elements
    arrcnt dd 05h

section .bss
    dnum_buff resb 8
    large resd 1

%macro dispmsg 2
    mov eax,4    ;System call for write
    mov ebx,1    ;standard output stream
    mov ecx,%1    ;message start address
    mov edx,%2    ;message length
    int 80h
%endmacro

section .text
    global _start
        global break
_start:
    mov esi,0
    mov ecx,[arrcnt]
break1:    mov eax,0

lup1:    cmp eax,[array+esi*4]    ;Compare accumulator with array element
    ja lskip1        ;If accumulator is greater go to skip
    mov eax,[array+esi*4]    ;Else move array element in accumulator
lskip1:    inc esi            ;Point to next element
    loop lup1

    mov [large],eax

    dispmsg larg_msg,larg_len
    mov ebx,[large]
    call disp_num

    dispmsg nwline,1

exit:    mov eax,01
    mov ebx,0
    int 80h

disp_num:
    mov edi,dnum_buff    ;point esi to buffer

    mov ecx,8        ;load number of digits to display
dispup1:
    rol ebx,4        ;rotate number left by four bits
    mov dl,bl        ;move lower byte in dl
    and dl,0fh        ;mask upper digit of byte in dl
    add dl,30h        ;add 30h to calculate ASCII code
    cmp dl,39h        ;compare with 39h
    jbe dispskip1        ;if less than 39h akip adding 07 more
    add dl,07h        ;else add 07
dispskip1:
    mov [edi],dl        ;store ASCII code in buffer
    inc edi            ;point to next byte
    loop dispup1        ;decrement the count of digits to display
                ;if not zero jump to repeat
    dispmsg dnum_buff,8
   
    ret

---------------------------------------------------------------------------------------------------------------------------------------------------------------------

;Output
;[apcoer@localhost ~]$ nasm -f elf64 32h.asm
;[apcoer@localhost ~]$ ld -o 32h 32h.o
;[apcoer@localhost ~]$ ./32h
;Largest Number is::FFFFFFFF

Assembly Language For this program you will find the largest element in an array of DWORDs. The output of your program will be: The Largest Integer In the Array
Assembly Language For this program you will find the largest element in an array of DWORDs. The output of your program will be: The Largest Integer In the Array

Get Help Now

Submit a Take Down Notice

Tutor
Tutor: Dr Jack
Most rated tutor on our site