New to assembly and having trouble with doing some math

Posted on 2004-09-05
Last Modified: 2006-11-17
Good evening, how are you doing? I am sorry to bother everyone, however I am new to programming in assembly and there seems to be to much magic going on in my text book I am reading. What I want to understand is if a user inputs lets say Width =2, Lenght =3, and Height=4 and I want to know what they entered in each indvidual one to do some math, such as multiplying adding and etc...... How would I do that in assembly. All the book keeps showing me is one input not more then one. Thanks
Question by:Corey_819
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 4
  • 2

Expert Comment

ID: 11986296
First of all, the method reading user input would depend on the platform/environment you're running your assembly program on. For example, a program running on no operating system at all (ie an OS in itself) might use BIOS to access the keyboard (and the monitor) and get input and display it to the user. An assembly program using a CRT (C Runtime) Library might use the ever-popular printf and scanf functions. An assembly program running in Windows might display a textbox for the user to fill in, or hook the keyboard and monitor it for keypresses! Getting the numerical value of an input would depend on the environment as well.

Now for doing math, you have the best source reserved for you: The CPU! Before/while learning assembly, you should also learn about the CPU and how to use it. For example, if you knew how it worked, you would know that it does standard integer arithmetic using _registers_ as temporary storage and _instructions_ for... well, instructing what arithmetic operation to do :). Here is a very basic x86 assembly program:

mov ax, 0010
add ax, 0010

This would load '10' - whatever that means, for for some assemblers, it means 10 decimal and for others, it means 10 hexadecimal, which is 16 decimal, check your assembler documentation for syntax details - to the register ax with the first instruction. It would then add 10 (decimal or hexadecimal depending on how your assembler sees and encodes it) to it with the second instruction, and you would have ax equaling 20. (again, 20 or 32)

I don't have any links to any assembly tutorials handy, but go give google a try. Other experts might give you links as well.

Author Comment

ID: 11993605
Thanks for the help aib_42. What I am trying to do is the user will run it from a dos window type the compiled exe and then enter the length, height, and widht. What I am confused is in assembly how do you know what values the user entered in the height, width, and length. I mean in c++ you would have variables. How would you do that in assembly. I understand the registers. I am just having a hard time understanding this first part. Thanks again.

Accepted Solution

aib_42 earned 25 total points
ID: 11997376
Well, depending on the functions you use, data may be stored on a fixed location in memory, it may be returned on some registers, or may be put on an arbitary location on memory whose address is returned in a register.

Take the malloc() call from the C Runtime Library, for example. Its mission is to allocate memory. It takes its one parameter from the stack, the size of memory to allocate, allocates that many amount of bytes, and returns the address of the allocated memory in eax (or 0 on failure).

Take scanf() for another example. With scanf(), you supply it the location(s) to store the user input. Before calling it, you push on the stack a pointer to a string which specifies WHAT you want it to read, along with memory locations of WHERE you want it to read them.

Again, INT 16h Func=00h returns the key the user pressed in AL as far as I can remember... It all depends on the function/interface being used, but common places for passing information are: memory, registers and stack (which is memory).
Free Tool: Site Down Detector

Helpful to verify reports of your own downtime, or to double check a downed website you are trying to access.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.


Author Comment

ID: 12009380
Thank aib_42 you gave me some ideas on what I need to do. Thanks for taking the time to help :)

Expert Comment

ID: 12013046
I am sorry I couldn't be of any more help. Instruction decoding is a rather hard thing (which I'm inexperienced at), and we all know that even commercial debuggers don't get it right all the time.

Expert Comment

ID: 12013056
Umm, ignore that last post. What it basically said is, "it's 7:20 in the morning and my mind has stopped working."

Featured Post

Enroll in June's Course of the Month

June's Course of the Month is now available! Every 10 seconds, a consumer gets hit with ransomware. Refresh your knowledge of ransomware best practices by enrolling in this month's complimentary course for Premium Members, Team Accounts, and Qualified Experts.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

In this post we will be converting StringData saved within a text file into a hash table. This can be further used in a PowerShell script for replacing settings that are dynamic in nature from environment to environment.
We take a look at some of the most common obstacles that IT teams run into as they work relentlessly to keep all the alarms and sirens from going off at once.
There are cases when e.g. an IT administrator wants to have full access and view into selected mailboxes on Exchange server, directly from his own email account in Outlook or Outlook Web Access. This proves useful when for example administrator want…
Michael from AdRem Software explains how to view the most utilized and worst performing nodes in your network, by accessing the Top Charts view in NetCrunch network monitor ( Top Charts is a view in which you can set seve…

707 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question