Welcome guest. Before posting on our computer help forum, you must register. Click here it's easy and free.

Author Topic: Assembly Language For the x86 Processor college problem  (Read 7167 times)

0 Members and 1 Guest are viewing this topic.

bob2mop

    Topic Starter


    Newbie

    • Experience: Beginner
    • OS: Windows 10
    Assembly Language For the x86 Processor college problem
    « on: February 20, 2019, 08:44:35 PM »
    I am taking a programming class in college, and I am having a lot of trouble with this assignment the teacher is not willing to help and I don't know where to go for help.

    These are the instructions

    This project has three loops.
    1. Create a DWORD integer array that is 16 elements long.
    2. The first loop: Ask the user to enter 16 numbers to fill the array.
    3. The second loop: Reverse the second half of the array.
    4. The third loop: Use a loop to display the array, to show that the second half was, indeed, reversed. As with step 1, the loop has to access the array from the first element to the last and display the numbers stored in memory. Use a message that reads "The array after the second half was reversed is: "
    Use the SIZEOF, TYPE, and LENGTHOF operators to make the program flexible to support the array size and type being changed in the future. If I change the array size in your code to any even number size, say 8, your program should still run correctly, reversing the last 4 elements of the array. Do not use hard-coded numbers like 16 or 8. Use registers and variables for these numbers.
    Here is an example:
    Please enter 16 numbers
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16

    The array after the second half was reversed is: "
    1
    2
    3
    4
    5
    6
    7
    8
    16
    15
    14
    13
    12
    11
    10
    9
     
    Commenting:
    You are required to comment every line of code you write. Failure to comment will force a grade  reduction of 25%
    A Strategy For Solving Problem
    This problem asks you to reverse a section of an array. This means that you are not supposed to copy numbers to another array. The best way to approach this is to have addressing that will refer to the first number of the array section to be reversed and addressing that will refer to the last number of the array. You simply swap the numbers at each location then increment the address at the front and decrement the address at the end at each loop pass.
    How to determine how much to loop when reversing? Simply divide the length of the array in half, because you need to reverse just the last half of the array. Then divide it again in half, because you swap pairs of numbers.
    Division
    Here is  how to do division:
    move into the eax the value you want divided
    move into another register the value you want to divide by.
    Then simply use div instruction.
    The result will be in the eax and the remainder will be in the edx. Since we have here only even numbers and the divide is by 2 or by 4 the reminder will be zero.
    Here is an example
    mov edx, 0
    mov eax 20
    mov ecx, 3
    div ecx       ;Divide eax by 3
    eax will have 6 and the the edx will have 2. 20 / 3 is 6 with a remainder of two.   



    This is what I have so far



    .data       ;// write your data in this section
       
       Numbers DWORD 16 DUP(?)
       count DWORD ?
       msg1 BYTE "Enter 16 numbers",0ah,0dh,0
       msg2 BYTE "The array after the second half was reversed is",0ah,0dh,0


    .code        ;// write your program here
    main proc
       
       L1:
    mov edx, OFFSET msg1 
       call WriteString

       mov edx, OFFSET Numbers
       mov ecx, 17
       call ReadString

       mov ebx, 0
       mov edx, OFFSET Numbers
        mov ecx, 17
       
       L2:
       mov count, ecx
       mov ecx, 1
       
       L3:
       mov eax, Numbers[ebx]
       call WriteChar
       inc ebx
       loop L3
       call crlf
       mov ecx, count
       loop L2


    The biggest thing I do not understand how I reverse the second half of the DWORD storage through the loop, but I am honestly confused with most of it. I have not had trouble with any assignments up till this point, but this one really has me stuck

    nil

    • Global Moderator


    • Intermediate
    • Thanked: 15
      • Experience: Experienced
      • OS: Linux variant
      Re: Assembly Language For the x86 Processor college problem
      « Reply #1 on: February 20, 2019, 09:15:06 PM »
      I don't believe anyone here wants to do your homework for you, but I want to encourage you by helping you find resources.

      If you have not already seen them, these online resources might help you.

      The Art of Assembly Language (16 and 32 bit): http://www.plantation-productions.com/Webster/www.artofasm.com/index.html

      Easy x86-64: http://ian.seyler.me/easy_x86-64/

      x86-64 Assembly Language Programming with Ubuntu: http://www.egr.unlv.edu/~ed/assembly64.pdf

      Good luck and I hope this helps.


      Do not communicate by sharing memory; instead, share memory by communicating.

      --Effective Go

      Geek-9pm


        Mastermind
      • Geek After Dark
      • Thanked: 1026
        • Gekk9pm bnlog
      • Certifications: List
      • Computer: Specs
      • Experience: Expert
      • OS: Windows 10
      Re: Assembly Language For the x86 Processor college problem
      « Reply #2 on: February 20, 2019, 11:00:45 PM »
      Have you no prior training in computer programming?
      Assembly language tends to lack apparent structure. Some, even many, educators think one should start with a tool that encourages one to think of the larger picture.

      Free programming  tutorials from Microsoft focus on high level  language with the option of using some assembly language for a few specific needs.
      Here is a good example:
      C# Fundamentals for Absolute Beginners

      To simplify your tech training journey, we are consolidating our learning resources and retiring Microsoft Virtual Academy in phases, with the next phase finishing on April 30, 2019. On that date, courses, learning paths and associated badging are retiring. Complete site retirement is scheduled for later in 2019. Check your MVA Dashboard frequently for courses you have started that are retiring. To earn your certificates of completion, be sure to finish any courses by April 30, 2019. For more learning options, check out Microsoft Learn.

      Years ago I did hard core assembly programming on the 8080 CPU using an Intel system. That was a very longtime ago.
      Even back then I l found using a higher level design saved a lot of development time and reduced errors. So we eventually used high level code whenever we could.

      bob2mop

        Topic Starter


        Newbie

        • Experience: Beginner
        • OS: Windows 10
        Re: Assembly Language For the x86 Processor college problem
        « Reply #3 on: February 21, 2019, 08:59:29 AM »
        Thank you for the links, I will check them out. Have a good day.