I have a question about the x86 assembly, namely what are the names of all of the registers? When I looked this up, it seemed to be that there are 14 of them (with 4 of them named ax, bx..), but when I decompiled a program to check the assembly, I get that the registers include eax, ebp, and others. Can anyone give me a heads up to this please?
hey
there are ax,bx,cx.... 16bits registers for DOS progs
when ure using ax,bx,cx.... 32 bits registers u are leading with 32bits platform as Window 95,98,XP,200,NT ....
for more extended info about assembly check the /masm32/help from the Masm32 package ( Win32 Assembler )
www.masm32.com
there are a lot of .hlp files in that directory that certain may help
there are ax,bx,cx.... 16bits registers for DOS progs
when ure using ax,bx,cx.... 32 bits registers u are leading with 32bits platform as Window 95,98,XP,200,NT ....
for more extended info about assembly check the /masm32/help from the Masm32 package ( Win32 Assembler )
www.masm32.com
there are a lot of .hlp files in that directory that certain may help
EAX, EBX, ECX, EDX, ESI, EDI, EBP, ESP, EIP (and FLAGS) are 32-bit registers
EIP is instruction pointer (manipulated by ops such as jmp, call, and ret)
ESP is the stack pointer; you'll probably most often use it to access local variables or through PUSH/POP/etc.
EAX,EBX,ECX,EDX,ESI, and EDI are general purpose registers in win32asm, though ops may have some of these as implicit operands (like DIV, LOOP, or REP).
These 32-bit registers can be divided in half (the upper and lower 16 bits). The lower half can be addressed independently by using the register without the E-prefix (e.g. AX, SI, or IP). The lower 16-bits of AX-DX can be addressed byte-wise, once again divided in half. The upper, or "higher" half (AH, BH, CH, DH) and the lower half (AL, BL, CL, DL).
Thus, a register like EAX can be decomposed as follows:
bits 0-31: EAX
bits 0-15: AX
bits 0-7: AL
bits 8-15: AH
Also, there are floating point registers and MMX registers (which, AFAIK share the same circuitry so you need to be initialize these when mixing MMX and FP code)
Hope that helps :)
EIP is instruction pointer (manipulated by ops such as jmp, call, and ret)
ESP is the stack pointer; you'll probably most often use it to access local variables or through PUSH/POP/etc.
EAX,EBX,ECX,EDX,ESI, and EDI are general purpose registers in win32asm, though ops may have some of these as implicit operands (like DIV, LOOP, or REP).
These 32-bit registers can be divided in half (the upper and lower 16 bits). The lower half can be addressed independently by using the register without the E-prefix (e.g. AX, SI, or IP). The lower 16-bits of AX-DX can be addressed byte-wise, once again divided in half. The upper, or "higher" half (AH, BH, CH, DH) and the lower half (AL, BL, CL, DL).
Thus, a register like EAX can be decomposed as follows:
bits 0-31: EAX
bits 0-15: AX
bits 0-7: AL
bits 8-15: AH
Also, there are floating point registers and MMX registers (which, AFAIK share the same circuitry so you need to be initialize these when mixing MMX and FP code)
Hope that helps :)
MMX registers are mm0 - mm7
FPU registers are st0 - st7
Of course there's 8 SSE registers too
xmm0 - xmm7
FPU registers are st0 - st7
Of course there's 8 SSE registers too
xmm0 - xmm7
here are some more like
debug register dr0 to dr3
debug control register dr7
debug status register dr6
eflags register
control registers
a good reading would be art of assembly by randall hyde to get some of these informations
debug register dr0 to dr3
debug control register dr7
debug status register dr6
eflags register
control registers
a good reading would be art of assembly by randall hyde to get some of these informations
You will want this:
http://developer.intel.com/design/pentium4/manuals/index_new.htm
and this:
http://www.madwizard.org/dl.php?file=tutors.win32asm
http://developer.intel.com/design/pentium4/manuals/index_new.htm
and this:
http://www.madwizard.org/dl.php?file=tutors.win32asm