• 忘掉天地
  • 仿佛也想不起自己
bingliaolongBingliaolong  2023-08-07 23:43 Aet 隐藏边栏 |   抢沙发  8 
文章评分 1 次,平均分 5.0

大小端

  1. 可以将内存想象为一个大数组。它包含字节。
  2. 每个地址存储内存“数组”的一个元素。每个元素都是一个字节。
  3. 例如我们有 4 个字节:AA 56 AB FF

小端字节序

  1. 低地址存低位字节

大段字节序

  1. 高地址存低位字节

汇编程序组成

  1. data
    1. 用于声明初始化数据或常量
  2. bss
    1. 用于声明未初始化的变量
  3. text
    1. 用于代码

数据类型

  1. 字节
    1. 一个字节8个位
    2. byte ptr
    1. 一个字两个字节
    2. word ptr
  2. 双字
    1. 一个双字是 4 个字节
    2. dword ptr
  3. 四字
    1. 一个四字是 8 个字节
    2. qword ptr
  4. 双四字
    1. 一个双四字是 16 个字节
    2. 也就是有128位

示例1

  1. 数据段
  2. 3个常量num1,num2,num3

声明数据

声明初始化数据

  1. db
  2. dw
  3. dd
  4. dq
  5. dt
  6. do
  7. dy
  8. dz

声明未初始化的变量

  1. resb
  2. resw
  3. resd
  4. resq
  5. rest
  6. reso
  7. resy
  8. resz

包括外部二进制文件

  1. incbin

定义常数

  1. equ

重复指令或数据

  1. times

算术运算

  1. add:整数相加
  2. sub:减去
  3. mul:无符号乘法
  4. imul:有符号乘法
  5. div:无符号除法
  6. idiv:有符号除法
  7. inc:递增
  8. dec:递减
  9. neg:求补

控制流

  1. je:如果相等
  2. jz:如果为零
  3. jne:如果不等于
  4. jnz:如果不为零
  5. jg:如果第一个操作数大于第二个操作数
  6. jge:如果第一个操作数大于或等于第二个操作数
  7. ja:与jg相同,但执行无符号比较
  8. jae:与jge相同,但执行无符号比较

  1. jmp:无条件跳转

示例2

寄存器和栈

  1. 我们有rax,rbx,rcx,rdx,rdi,rsi,rbp,rsp,以及r8-r1516个通用寄存器可以用,严格来说还是比较少
  2. 但是我们可以使用栈,堆栈是内存中特殊区域,运行原理为后进先出

参数

  1. rdi: 第一个参数
  2. rsi: 第二个参数
  3. rdx: 第三个参数
  4. rcx: 第四个参数
  5. r8: 第五个参数
  6. r9: 第六个参数
  7. 超过6个的参数将在堆栈中传递

堆栈指针

rbp寄存器

  1. 堆栈的基址指针寄存器,它指向当前堆栈帧的基址

rsp寄存器

  1. 堆栈指针,指向当前堆栈帧的顶部

push and pop

  1. 递增堆栈指针(RSP)并将参数存储在堆栈指针指向的位置

  1. 将数据从堆栈指针指向的位置复制到参数,RSP会自动增加,指向新的栈顶位置

示例3

本文为原创文章,版权归所有,欢迎分享本文,转载请保留出处!

bingliaolong
Bingliaolong 关注:0    粉丝:0 最后编辑于:2023-08-08
Everything will be better.

发表评论

表情 格式 链接 私密 签到
扫一扫二维码分享