Want to win a PS4? Go Premium and enter to win our High-Tech Treats giveaway. Enter to Win

x
Solved

# New to assembly and having trouble with doing some math

Posted on 2004-09-05
Medium Priority
241 Views
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
0
Question by:Corey_819
[X]
###### 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
• 4
• 2

LVL 7

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

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.
0

LVL 1

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.
0

LVL 7

Accepted Solution

aib_42 earned 100 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).
0

LVL 1

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 :)
0

LVL 7

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.
0

LVL 7

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."
0

## Featured Post

Question has a verified solution.

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

An overview of cyber security, cyber crime, and personal protection against hackers. Includes a brief summary of the Equifax breach and why everyone should be aware of it. Other subjects include: how cyber security has failed to advance with technol…
One of the most important things in an application is the query performance. This article intends to give you good tips to improve the performance of your queries.
In this episode Don builds upon the troubleshooting techniques by demonstrating how to properly monitor a vSphere deployment to detect problems before they occur. He begins the show using tools found within the vSphere suite as ends the show demonst…
We’ve all felt that sense of false security before—locking down external access to a database or component and feeling like we’ve done all we need to do to secure company data. But that feeling is fleeting. Attacks these days can happen in many w…
###### Suggested Courses
Course of the Month12 days, left to enroll