Where can I find the packages mentioned in Art of Intel x86 Assembly?

In summary, Assembly language is a low-level programming language used to communicate with computer hardware. Learning Assembly can improve understanding of computer architecture and result in more efficient code. It can be challenging to learn, but with practice and resources such as tutorials and books, it can be mastered. The best way to improve Assembly skills is through practice and experimentation, and while it is not commonly used in modern software development, it can still have valuable applications and improve overall programming abilities.
  • #1
MathematicalPhysicist
Gold Member
4,699
371
I want to teach myself Assembly language, so I downloaded the next text:
http://www.ic.unicamp.br/~pannain/mc404/aulas/pdfs/Art Of Intel x86 Assembly.pdf
and the next software:
http://flatassembler.net/

Do I need to download anything else?
in the first link it says the packages that are used in the text can be downloaded from the website:
ftp.cs.ucr.edu

but the latter ftp site doesn't seem to work anymore.
Does someone know where may I found the packages that were in this site?

Thanks in advance.
 
Technology news on Phys.org
  • #2
MathematicalPhysicist said:
I want to teach myself Assembly language, so I downloaded the next text:
http://www.ic.unicamp.br/~pannain/mc404/aulas/pdfs/Art Of Intel x86 Assembly.pdf
First of all: Thank you for the link. I've missed it.

I don't think that you can make some usable program, only using assembler code ( all this Windows-XX ). But you can include assembler-code in some inner loop in a high-level-language like C or Fortran, speeding up the calculations very much. You can do anything with assembler ( also bugs ).

In some languages you can just write:

high-level
high-level
asm
pop eax
pop ebx
sub eax,ebx
jnz somewhere
etc.
endasm

high-level

Also you can link assembler-coded functions/procedures/libraries into the high-level language, where a binary-to-object converter is needed.

What I'm saying is: Consult the high-level language to be used as for the output-format from the assembler to be accepted. Many high-level languages are included in an "IDE" that contains what is needed.

Hope you will enjoy it.
 
  • #3
Does the book above compatible (with the syntax) with flat assembler?

I have quite a long list of stuff to learn this summer... :-D
 
  • #4
MathematicalPhysicist said:
Does the book above compatible (with the syntax) with flat assembler?
As for the "machine instructions" the syntax must be the same.

There may be some difference as for pseudo instructions, but if you have some "mismatch" ( the assembler will tell you ), just look the correct syntax up as for the flat assembler in its manual. That's the least problem.

Just start with a small loop, or even a simple high-level statement. Substitute it by assembler, make it work, and expand the substitutions from here.
 
  • #5
If you have Microsoft Visual Studio, you can write assembly code either inline or as standalone files. If you're concerned about the cost, the Express version is free.

The example below has two functions that take two args and return the sum of the passed args. The second function (mySumOfInts) is coded in inline assembly. Writing just the body of the function eliminates a lot of extra work that normally has to be done when you write pure assembly, such as keeping track of the stack frame and copying the parameters from the stack.

Note: I'm using VS 2013, in which scanf is obsolete, so I'm using the MS-specific scanf_s function.

C:
#include<stdio.h>

int SumOfInts(int, int);
int mySumOfInts(int, int);

int main(void)
{
   int sum;
   int a, b;
   printf("Enter a: ");
   scanf_s("%d", &a);
   printf("Enter b: ");
   scanf_s("%d", &b);
   sum = SumOfInts(a, b);
   printf("The sum is %d\n", sum);
   sum = mySumOfInts(a, b);
   printf("The sum is %d", sum);
   return 0;
}

int SumOfInts(int first, int second)
{
   return first + second;
}

// Assembly version of the above function
// This function copies the first argument to the EAX register and then adds the second argument.
// When the function returns, the result is in EAX, which is where the caller expects it to be.
int mySumOfInts(int primero, int segundo)
{
   _asm {
   mov eax, dword ptr[primero]
   add eax, dword ptr[segundo]
}
 
Last edited:
  • #7
@256bits , does the software in the last link in the website you gave correspond to the version being used in the book I gave a link here?
 
  • #8
If you use an assembler make sure the linker recognizes your files. You will get an error if you use a linker to link an object file with a different format.
 
  • #9

Related to Where can I find the packages mentioned in Art of Intel x86 Assembly?

1. What is Assembly language and why should I learn it?

Assembly language is a low-level programming language that is used to directly communicate with the computer's hardware. It is important to learn Assembly because it gives you a better understanding of how computers work and allows you to write more efficient and optimized code.

2. Is Assembly difficult to learn?

Assembly can be challenging to learn because it requires a different mindset and a strong understanding of computer architecture. However, with practice and dedication, it can be mastered like any other programming language.

3. What resources are available for teaching myself Assembly?

There are many online tutorials, books, and courses available for learning Assembly. Some popular resources include "Assembly Language Step-by-Step" by Jeff Duntemann and "Programming from the Ground Up" by Jonathan Bartlett. Additionally, many universities offer courses on Assembly programming.

4. What is the best way to practice and improve my Assembly skills?

The best way to practice Assembly is to write code and experiment with different instructions and concepts. You can also try to reverse engineer programs written in Assembly or work on programming challenges to improve your skills.

5. Can I use Assembly in modern software development?

While Assembly is not commonly used in modern software development, it is still used in some specialized areas such as embedded systems and operating systems. Additionally, learning Assembly can improve your understanding of other programming languages and make you a better programmer overall.

Back
Top