kevins86 said:
I've never programmed before but I recently downloaded the book "Programming from the Ground Up" and I plan to start studying it in 2012.
The book seems to be OK to use as a learning tool. The main issue with assembly programs is that you'll be writing code with minimal functionality compared to what you would start off with in a higher level language. However I don't see any harm in following a few of the examples shown in that book.
Side note - the syntax for the GCC assembler reverses the destination and source operands versus Intel and Microsoft assemblers, which have the destination first:
opcode ... destination,source. Also the operand size is specifed by the opcode with the GCC assembler, while it's specified in the operands for Intel and Microsoft assemblers. Microsoft also added some extensions to assembly language in version 6 (first released in 1992), that include some higher language type directives such as .if / .else / .endif, .repeat / .until, .break / .if, ... . I don't know if the current Intel assemblers have the version 6 extensions added by Microsoft.
Unless you can get a hold of an old set of Microsoft tools that run in a dos console window or perhaps MSDOS installed on a virtual PC under Windows, you would need to use Microsoft Visual C++ express (it's free), which includes ml.exe, the current Microsft assembler. You have to manually create a "custom build step" for the .asm source file in a VS project to tell Visual Studio to run ml.exe to create .obj files from .asm files.
kevins86 said:
Also, I'd like to know one other thing, how do I actually get started with programming in Assembly? What do I need to download onto my Ubuntu OS etc? (the book doesn't say)
The books states to get the GCC tool set, which apparently includes the assembler. Do a web search for "GCC", and you should find a link where you can download the toolset. Someone here may be able to give you a direct link.
kevins86 said:
I've heard that many programmers who learn to program in Assembly don't see a need to use anything else besides this programming language. Is this true.
This isn't true any more. There may have been a time when there were no decent high level languages for some computer types, but I doubt this is true for anything other than a classroom type environment.
As far as higher level languages go, C / C++ is probably the most popular (if you consider all the embeded software / firmware in consumer devices or computer peripherals). I'm not familiar with Python, but it seems to be more popular in some (or most?) schools. Java is also popular. Fortran is still used in some scientific environments, and Cobol is still used in business environments.
Assembly is mostly used for portions of operating systems and device drivers that have to deal with context (task / thread) switching, low level hardware I/O, interrupt handling, and other hardware related tasks, such as setting up virtual memory. The rest of many operating systems is written in C / C++.