3.1 Standard Data Types C declaration Intel data type GAS suffix Size (bytes) char Byte b 1 short Word w 2 int Double Word l 4 unsigned Double Word l 4 long int Double Word l 4 unsigned long Double Word l 4 char * Double Word l 4 float Single Precision s 4 double Double Precision l 8 long double Extended Precision t 10/12 3.2 Integer registers (note the 24 different names) bit 31 15 7 0 +-------------------------------+---------------+---------------+ %eax| | %ah | %al |%ax +-------------------------------+---------------+---------------+ %ecx| | %ch | %cl |%cx +-------------------------------+---------------+---------------+ %edx| | %dh | %dl |%dx +-------------------------------+---------------+---------------+ %ebx| | %bh | %bl |%bx +-------------------------------+---------------+---------------+ %esi| | |%si +-------------------------------+-------------------------------+ %edi| | |%di +-------------------------------+-------------------------------+ %esp| | |%sp +-------------------------------+-------------------------------+ %ebp| | |%bp +-------------------------------+-------------------------------+ Status Registers +-------------------------------+-------------------------------+ %eip| | |%ip +-------------------------------+-------------------------------+ +-------------------------------+-------------------------------+ eflg| | |flg +-------------------------------+-------------------------------+ Operand Forms Type Form Operand value Name Immediate $Imm Imm Immediate Register %reg R[reg] Register Memory Imm M[Imm] Absolute Memory (%reg) M[R[reg]] Indirect Memory Imm(%reg) M[Imm + R[reg]] Base + displacement Memory (%reg, %reg) M[R[reg] + R[reg]] Indexed Memory Imm(%reg, %reg) M[Imm + R[reg] + R[reg]] Indexed Memory (, %reg, s) M[R[reg] * s] Scaled index Memory (Imm, %reg, s) M[Imm + R[reg] * s] Scaled index Memory (%reg, %reg, s) M[R[reg] + R[reg]*s] Scaled index Memory Imm(%reg, %reg, s) M[Imm + R[reg] + R[reg]*s] Scaled index Data Movement Instructions Instruction Effect Description movl S, D D <- S Move double word movw S, D D <- S Move word movb S, D D <- S Move byte movsbl S, D D <- SignExtend(S) Move sign-extended byte movzbl S, D D <- ZeroExtend(S) Move zero-extended byte pushl S R[%esp] <- R[%esp] - 4 Push M[R[%esp]] <- S popl D D <- M[R[%esp]] Pop R[%esp] <- R[%esp] + 4 Examples movl $0x4050,%eax movl %ebp,%esp movl (%edi,%ecx),%eax movl $-17,(%esp) movl %eax,-12(%ebp) movb $0x80,%al movsbl $0x80,%eax movzbl $0x80,%eax colosus:~/download>