nasm x86 assembly quick reference
2013-07-02 11:50
381 查看
nasm x86 Assembly Quick Reference ("Cheat Sheet")
Instructions
| Stack Frame(example without ebp or local variables)
mov eax,[esp+4] ret (example when using ebp and two local variables)
push ebp # Prologue mov ebp, esp mov eax, [ebp+8] mov esp, ebp # Epilogue pop ebp ret | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Constants, Registers, Memory"12" means decimal 12; "0xF0" is hex. "some_function" is the address of the first instruction of a label.Memory access (use register as pointer): "[esp]". Same as C "*esp". Memory access with offset (use register + offset as pointer): "[esp+4]". Same as C "*(esp+4)". Memory access with scaled index (register + another register * scale): "[eax + 4*ebx]". Same as C "*(eax+ebx*4)". Subroutines are basically just labels. Here's how you declare labels for the linker: "extern some_function;" declares some_function as being outside the current file. You'll get a "symbol undefined" compile error if you call or jump to a label you never declare. In C++, be sure to declare the corresponding function as being 'extern "C"'! "global my_function;" exposes the label my_function so it can be called from outside. (In MASM, it's "PUBLIC my_function"). Again, your C++ prototype better be 'extern "C"'! Differences with C: "010" means decimal ten in NASM, but *octal* eight in C/C++! Write octal by ending with letter 'o', like "10o". In NASM, you can write binary constants by ending with the letter 'b', like "mov eax,00101111b;". "1+(7<<13)/15" is evaluated at compile time, and it's a constant. "3+eax" can't be evaluated in NASM--it's not a constant. | Registersesp is the stack pointerebp is the stack frame pointer Return value in eax Arguments are on the stack Free for use (no save needed): eax, ecx, edx Must be saved: ebp, esp, esi, edi ebx must be saved in a shared library, but is otherwise free for use. 8 bit: ah (high 8 bits) and al (low 8 bits) 16 bit: ax 32 bit: eax 64 bit: rax |
for Windows/Linux/whatever), YASM (adds 64-bit support to NASM), MASM(the
Microsoft/Macro Assembler), and the official Intel documentation below. See the NASM documentation or MASM
documentation for details on constants, labels and macros. Paul Carter has a good x86 assembly tutorial using
the Intel syntax. The other, nastier syntax out there is the AT&T/GNU syntax, which
I can't recommend. The machine code in all cases is identical.
The Intel Software Developer's Manuals are
incredibly long, boring, and complete--they give all the nitty-gritty details. Volume 1 lists
the processor registers in Section 3.4.1. Volume 2 lists all the x86 instructions
in Section 3.2. Volume 3 gives the performance monitoring registers in Section. For Linux,
the System V ABI gives the calling convention on page 39. Also see the Intel hall
of fame for historical info. Sandpile.org has a good
opcode table.
Ralph Brown's Interrupt List is the aging but definitive reference
for all PC software interrupt functions. See just the BIOS interruptsfor interrupt-time code.
相关文章推荐
- Intel X86 assembly language reference
- assembly language for x86 processors
- SSAS Quick Reference: Attribute Key Cannot Be Found
- Undefined symbols for architecture x86_64: "_OBJC_CLASS_$_CTTelephonyNetworkInfo", referenced from
- Cocos2dx开发解决undefined reference to 'atof'和x86平台下报internal compiler error的错误
- Quick reference to HTTP headers
- J2ME in a nutshell: a desktop quick reference
- CSAPP3e - x86-64 assembly code analysis - Bomb Lab: phase 1
- unity3d ArgumentException: The Assembly System.Configuration is referenced by System.Data.
- SVN Quick Reference
- [译]AMQP 0-9-1 Quick Reference : basic
- The Pragmatic Programmer Quick Reference Guide
- Quick Reference to Patch Numbers for Database PSU, SPU(CPU), Bundle Patches and Patchsets
- objective-c Quick Reference
- Quick Reference Guide for Intel® Core™ Processor Graphics
- Wireshark filter quick reference
- Real-time Linux Software Quick Reference Guide
- WebLogic 11g interactive quick reference
- MathJax basic tutorial and quick reference(LaTex数学公式语法)
- Lesson2.2 & 2.3 Maya command reference & quick help