汇编指令笔记

来源:互联网 发布:java断点快捷键 编辑:程序博客网 时间:2024/05/24 06:24

有符号比较与无符号比较

有符号比较用 l(less)、g(great) 来表示,无符号比较用 a(above)、b(below)来表示

如下代码:

int _tmain(int argc, _TCHAR* argv[]){    unsigned int nVar_1;    int nVar_2;    scanf("%d%d", &nVar_1, &nVar_2);    if (nVar_2 < 2)    {        printf("Hello\r\n");    }    if (nVar_1 < 2)    {        printf("Hello\r\n");    }}

反汇编代码如下,nVar_2 为有符号变量,使用了 g(greate);uVar_2 为无符号变量,使用了 b(below):

这里写图片描述

leave 指令

通常出现再函数的结束位置,相当于:

mov esp, ebppop ebp

movsb/movsw/movsd 指令

作用:移动字符串数据,复制由 ESI 寄存器寻址的内存地址处的数据至 EDI 寻址的内存地址处

区别

  • movsb 每次移动一个字节
  • movsw 每次移动一个字
  • movsd 每次移动一个双字

通常和 rep 指令组合应用,用 ecx 表示重复的次数,伪代码示例:

     cld  ;方向标志     mov   esi, 内存地址1     ;(源内存地址)     mov   edi, 内存地址2     ;(要移动到目的处的地址)     mov   ecx, 要移动的数量 ;     rep   movsb