- Where is the asm_io.inc file referred to
in the tutorial?
It's not listed anywhere in the tutorial; however, it is in the source zip files. The asm_io object file that asm_io.inc requires is also in the source zip files.
- Why does the example code generate segmentation fault/coredumps
on RedHat 7.1?
Red Hat 7.1 includes an rpm for version 0.98.xx of NASM. However, this is not a stable release! Get version 0.97 or a more recent 0.98 version and all will be fine.
- Can I use the examples with the Windows cygwin port of gcc?
The Cygwin gcc compiler port seems to use the same object file format as Microsoft's Visual C/C++ compiler. So the Microsoft examples should work with the Cygwin compiler. One person has confirmed that it does, but I have not installed the Cygwin compiler to confirm this myself.
- Can I use the examples with the Windows MinGW port of gcc?
Yes, but it will take some work. Like Cygwin, you will need to use the Microsoft examples and use -f win32 when assembling your code. However, NASM will by default create an object file with a .obj extension. MinGW needs an extension of .o instead. So you can either rename the files yourself or tell NASM to when it generates them. Example,
nasm -f win32 -o file.o file.asm
You can change lines 16 and 17 lines of the Makefile to be:
.asm.obj: $(AS) $(ASFLAGS) -o $*.o $*.asm
to fix it to automatically do this.
- How can I compile the example code as 32-bit on a 64-bit Linux OS?
Yes, the makefile for Linux should work for 64-bit Linux now. However, you will need to 32-bit C library support. On debian-based systems, the following should work:
sudo apt-get install g++-multilib libc6-dev-i386
- Is something wrong with Figure 1.1?
It seems that this figure was misleading. The figure shows 8 separate one bit additions, not 2 4-bit ones. This is hopefully fixed in the current edition.
- Does the tutorial cover structures or C++?
Yes, a new edition of the tutorial added a chapter covering these topics.
- Is the tutorial available as HTML?
Unfortunately not. It is written in LaTeX, but uses some packages that the latex2html does not support. If I was starting today, I would probably use DocBook which can output many different formats. However, it would be a very difficult job to convert the existing files to DocBook as it does not support some features I used in LaTeX.
- Does the tutorial cover MMX or SSE instructions?
No, it doesn't and probably never will. I don't know how to use these newer instructions. I'm not a real assembly programmer. The tutorial is meant to be an introduction to assembly for C/C++ programmers like myself. I try to stress the ideas from assembly that I use all the time in my C/C++ programming. I do not really see any great advantage to adding another chapter covering these instructions. After finishing my tutorial, it shouldn't be too difficult to learn how to use these newer instructions from other sources.
- Do you take unsolicited questions?
Questions, comments and corrections about the tutorial are welcome and I will reply as promptly as I can. Questions on how to write your own OS, etc. will probably be ignored unless I feel qualified on the subject and find the question interesting. Homework questions will be ignored and get your e-mail address added to my block list!
- Can I translate your tutorial to another language?
Yes, I've put up the LaTeX source on GitHub, so you can get what I used to generate the English (and the other translations). Just fork and create a directory for your language, then send me a pull request when you are done.
The GitHub page is at https://github.com/pacman128/pcasm
- What are some other resources for PC assembly on the net?