[Assembly] 程序的机器级表示(一)

来源:互联网 发布:天庭淘宝店txt 编辑:程序博客网 时间:2024/05/17 22:13

数据格式

C声明 Intel数据类型 汇编代码后缀 大小(字节) char 字节 b 1 short 字 w 2 int 双字 l 4 long 四字 q 8 char * 四字 q 8 float 单精度 s 4 double 双精度 l 8

寄存器

主要用途 64位寄存器名 32位寄存器名 16位寄存器名 8位寄存器名 存储返回值 %rax %eax %ax %al 被调用者保存 %rbx %ebx %bx %bl 第四个参数 %rcx %ecx %cx %cl 第三个参数 %rdx %edx %dx %dl 第二个参数 %rsi %esi %si %sil 第一个参数 %rdi %edi %di %dil 被调用者保存 %rbp %ebp %bp %bpl 栈指针 %rsp %esp %sp %spl 第五个参数 %r8 %r8d %r8w %r8b 第六个参数 %r9 %r9d %r9w %r9b 调用者保存 %r10 %r10d %r10w %r10b 调用者保存 %r11 %r11d %r11w %r11b 被调用者保存 %r12 %r12d %r12w %r12b 被调用者保存 %r13 %r13d %r13w %r13b 被调用者保存 %r14 %r14d %r14w %r14b 被调用者保存 %r15 %r15d %r15w %r15b

操作数指示符

  • 立即数:$ + C语言表示法的整数
    如: $ 0x2A $3000
  • 寄存器: % + 寄存器名
    如: %eax %rbp
  • 内存引用: Imm(Rb, Ri, s)
    其中Imm代表立即数,Rb是一个存储在寄存器中的偏移量,Ri也是存储在寄存器中的偏移量,S是Ri的偏移倍数(s必须是1、2、4、8),计算方法是:Imm + (Rb) + (Ri) * s。
    如:260(%rcx, %rdx) (%rbx)

    对于寄存器,%rax代表%rax寄存器存储的值,而(%rax)代表%rax寄存器指向的内存单元的值。

原创粉丝点击