零基础小白逆袭汇编代码

目录

一、基础汇编指令

二、高级指令

三、内存访问指令

四、其他控制指令

五、标志位相关指令

六、逻辑和条件指令


一、基础汇编指令

  1. MOV - 数据传输指令

    • 功能:将一个操作数的值复制到另一个操作数。

    • 格式MOV 目标, 源

    • 示例MOV AX, 100(将立即数100复制到AX寄存器)

    • 作用:用于在寄存器之间、内存和寄存器之间传输数据。

  2. ADD - 算术指令

    • 功能:将两个操作数相加,并将结果存储在第一个操作数中。

    • 格式ADD 目标, 源

    • 示例ADD AX, BX(将AX和BX中的值相加,结果存入AX)

    • 作用:用于执行加法运算,同时更新标志寄存器。

  3. SUB - 算术指令

    • 功能:从第一个操作数中减去第二个操作数,并将结果存储在第一个操作数中。

    • 格式SUB 目标, 源

    • 示例SUB AX, BX(从AX中减去BX的值,结果存入AX)

    • 作用:用于执行减法运算,同时更新标志寄存器。

  4. MUL - 算术指令

    • 功能:将两个操作数相乘。

    • 格式MUL 源

    • 示例MUL BX(将AX和BX中的值相乘,结果存入AX和DX中;对于8位数据,结果存入AL和AH中)

    • 作用:用于执行无符号乘法,结果根据操作数的大小存放在特定寄存器中。

  5. DIV - 算术指令

    • 功能:执行无符号数除法。

    • 格式DIV 除数

    • 示例DIV BX(EAX中的值除以BX,商存放在EAX中,余数存放在EDX中;对于8位数据,AL中的值除以DL,商存放在AL中,余数存放在AH中)

    • 作用:用于执行无符号除法,结果根据操作数的大小存放在特定寄存器中。

  6. INC - 算术指令

    • 功能:将指定操作数增加1。

    • 格式INC 操作数

    • 示例INC AX(AX中的值加1)

    • 作用:用于增加操作数的值,更新相关标志位。

  7. DEC - 算术指令

    • 功能:将指定操作数减少1。

    • 格式DEC 操作数

    • 示例DEC AX(AX中的值减1)

    • 作用:用于减少操作数的值,更新相关标志位。

  8. AND - 逻辑指令

    • 功能:对两个操作数执行按位与操作。

    • 格式AND 目标, 源

    • 示例AND AX, BX(执行AX和BX的按位与操作,结果存入AX)

    • 作用:用于执行按位与运算,更新标志寄存器。

  9. OR - 逻辑指令

    • 功能:对两个操作数执行按位或操作。

    • 格式OR 目标, 源

    • 示例OR AX, BX(执行AX和BX的按位或操作,结果存入AX)

    • 作用:用于执行按位或运算,更新标志寄存器。

  10. XOR - 逻辑指令

    • 功能:对两个操作数执行按位异或操作。

    • 格式XOR 目标, 源

    • 示例XOR AX, BX(执行AX和BX的按位异或操作,结果存入AX)

    • 作用:用于执行按位异或运算,更新标志寄存器。

  11. NOT - 逻辑指令

    • 功能:对操作数执行按位取反操作。

    • 格式NOT 操作数

    • 示例NOT AX(AX中的值按位取反)

    • 作用:用于执行按位取反运算,更新标志寄存器。

  12. CMP - 比较指令

    • 功能:比较两个操作数,但不存储结果,只设置标志位。

    • 格式CMP 操作数1, 操作数2

    • 示例CMP AX, BX(比较AX和BX的值)

    • 作用:用于比较,更新标志寄存器,以便后续条件跳转指令使用。

  13. JMP - 无条件跳转指令

    • 功能:无条件跳转到指定的内存地址继续执行代码。

    • 格式JMP 目标地址

    • 示例JMP label(跳转到标签处执行)

    • 作用:用于改变程序执行流程,跳到指定位置。

  14. JE/JZ - 条件跳转指令

    • 功能:如果上一个比较指令的结果为相等(零标志位为1),则跳转。

    • 格式JE/JZ 目标地址

    • 示例JE label(如果零标志位为1,则跳转)

    • 作用:用于条件跳转,零标志位为1时执行跳转。

  15. JNE/JNZ - 条件跳转指令

    • 功能:如果上一个比较指令的结果不相等(零标志位为0),则跳转。

    • 格式JNE/JNZ 目标地址

    • 示例JNE label(如果零标志位为0,则跳转)

    • 作用:用于条件跳转,零标志位为0时执行跳转。

  16. JL/JNGE - 条件跳转指令

    • 功能:如果上一个比较指令的结果为小于(带符号小于),则跳转。

    • 格式JL/JNGE 目标地址

    • 示例JL label(如果符号标志位和零标志位指示小于,则跳转)

    • 作用:用于条件跳转,带符号小于条件满足时执行跳转。

  17. JLE/JNG - 条件跳转指令

    • 功能:如果上一个比较指令的结果为小于或等于(带符号小于或等于),则跳转。

    • 格式JLE/JNG 目标地址

    • 示例JLE label(如果符号标志位和零标志位指示小于等于,则跳转)

    • 作用:用于条件跳转,带符号小于等于条件满足时执行跳转。

  18. JG/JNLE - 条件跳转指令

    • 功能:如果上一个比较指令的结果为大于(带符号大于),则跳转。

    • 格式JG/JNLE 目标地址

    • 示例JG label(如果符号标志位和零标志位指示大于,则跳转)

    • 作用:用于条件跳转,带符号大于条件满足时执行跳转。

  19. JGE/JNL - 条件跳转指令

    • 功能:如果上一个比较指令的结果为大于或等于(带符号大于或等于),则跳转。

    • 格式JGE/JNL 目标地址

    • 示例JGE label(如果符号标志位和零标志位指示大于等于,则跳转)

    • 作用:用于条件跳转,带符号大于等于条件满足时执行跳转。

  20. JA/JNBE - 无符号大于条件跳转指令

    • 功能:如果上一个比较指令的结果为无符号大于,则跳转。

    • 格式JA/JNBE 目标地址

    • 示例JA label(如果无符号大于,则跳转)

    • 作用:用于条件跳转,无符号大于条件满足时执行跳转。

  21. JB/JNAE - 无符号小于条件跳转指令

    • 功能:如果上一个比较指令的结果为无符号小于,则跳转。

    • 格式JB/JNAE 目标地址

    • 示例JB label(如果无符号小于,则跳转)

    • 作用:用于条件跳转,无符号小于条件满足时执行跳转。

  22. JAE/JNB - 无符号大于等于条件跳转指令

    • 功能:如果上一个比较指令的结果为无符号大于等于,则跳转。

    • 格式JAE/JNB 目标地址

    • 示例JAE label(如果无符号大于等于,则跳转)

    • 作用:用于条件跳转,无符号大于等于条件满足时执行跳转。

  23. JBE/JNA - 无符号小于等于条件跳转指令

    • 功能:如果上一个比较指令的结果为无符号小于等于,则跳转。

    • 格式JBE/JNA 目标地址

    • 示例JBE label(如果无符号小于等于,则跳转)

    • 作用:用于条件跳转,无符号小于等于条件满足时执行跳转。

  24. CALL - 调用指令

    • 功能:调用子程序,保存返回地址。

    • 格式CALL 目标地址

    • 示例CALL label(调用子程序,并将返回地址压入堆栈)

    • 作用:用于调用子程序,程序执行跳转到子程序后,可以通过RET指令返回。

  25. RET - 返回指令

    • 功能:从子程序返回到调用它的程序。

    • 格式RET

    • 示例RET(从子程序返回,并从堆栈中弹出返回地址)

    • 作用:用于从子程序返回,程序执行跳转回调用指令之前的位置。

  26. PUSH - 堆栈操作指令

    • 功能:将一个操作数压入堆栈。

    • 格式PUSH 操作数

    • 示例PUSH AX(将AX的值压入堆栈)

    • 作用:用于将数据保存到堆栈中,供以后使用。

  27. POP - 堆栈操作指令

    • 功能:从堆栈中弹出一个操作数。

    • 格式POP 操作数

    • 示例POP AX(从堆栈弹出数据到AX中)

    • 作用:用于从堆栈中恢复数据,将其存入指定位置。

  28. PUSHAD - 堆栈操作指令

    • 功能:将所有通用寄存器压入堆栈。

    • 格式PUSHAD

    • 示例PUSHAD(将EAX, ECX, EDX, EBX, ESP, EBP, ESI, EDI依次压入堆栈)

    • 作用:用于保存当前寄存器状态,以便程序执行其他操作后恢复。

  29. POPAD - 堆栈操作指令

    • 功能:从堆栈中弹出所有通用寄存器。

    • 格式POPAD

    • 示例POPAD(从堆栈弹出数据依次恢复到EDI, ESI, EBP, ESP, EBX, EDX, ECX, EAX)

    • 作用:用于恢复之前保存的寄存器状态。

  30. INT - 中断指令

    • 功能:调用中断处理程序。

    • 格式INT 中断号

    • 示例INT 21h(调用DOS中断处理程序)

    • 作用:用于请求系统的中断服务,如处理输入输出、内存管理等。

  31. IRET - 中断返回指令

    • 功能:从中断程序返回到被中断的程序。

    • 格式IRET

    • 示例IRET(从中断程序返回,并恢复标志寄存器和EIP)

    • 作用:用于恢复中断前的程序状态,继续执行被中断的程序。

  32. HLT - 停止指令

    • 功能:停止CPU。

    • 格式HLT

    • 示例HLT(停止CPU执行指令)

    • 作用:用于暂停CPU执行,通常在程序结束时使用。

  33. NOP - 无操作指令

    • 功能:占位或空操作。

    • 格式NOP

    • 示例NOP(执行空操作,不改变任何状态)

    • 作用:用于占位或创建延时循环。

  34. LEA - 加载有效地址指令

    • 功能:将操作数的地址加载到指定的寄存器。

    • 格式LEA 寄存器, 操作数

    • 示例LEA EAX, [EBX + ECX*4 + 10](将EBX + ECX*4 + 10的地址加载到EAX)

    • 作用:用于计算内存地址,而不进行实际的数据读取或写入。

  35. LAHF - 加载AH寄存器标志位指令

    • 功能:将标志寄存器的低字节加载到AH寄存器。

    • 格式LAHF

    • 示例LAHF(将标志寄存器的低字节加载到AH中)

    • 作用:用于保存标志寄存器的部分状态,以便之后使用。

  36. SAHF - 存储AH寄存器标志位指令

    • 功能:将AH寄存器的低字节存储到标志寄存器。

    • 格式SAHF

    • 示例SAHF(将AH中的值存储到标志寄存器的低字节)

    • 作用:用于恢复标志寄存器的部分状态。

  37. TEST - 测试指令

    • 功能:对两个操作数进行按位与操作,但不存储结果,只设置标志位。

    • 格式TEST 操作数1, 操作数2

    • 示例TEST AX, AX(执行AX和AX的按位与操作,只更新标志位)

    • 作用:用于测试特定位是否为1,更新标志寄存器以供条件判断。

  38. SHL - 移位指令

    • 功能:将操作数的位左移指定的位数。

    • 格式SHL 操作数, 移位数

    • 示例SHL AX, 2(将AX的值左移2位)

    • 作用:用于将数据左移,相当于乘以2的幂次。

  39. SHR - 移位指令

    • 功能:将操作数的位右移指定的位数。

    • 格式SHR 操作数, 移位数

    • 示例SHR AX, 2(将AX的值右移2位)

    • 作用:用于将数据右移,相当于除以2的幂次。

  40. SAL - 算术左移指令

    • 功能:与SHL相同,算术左移。

    • 格式SAL 操作数, 移位数

    • 示例SAL AX, 2(将AX的值算术左移2位)

    • 作用:用于执行算术左移,与SHL相同。

  41. SAR - 算术右移指令

    • 功能:与SHR相同,但保留符号位。

    • 格式SAR 操作数, 移位数

    • 示例SAR AX, 2(将AX的值算术右移2位)

    • 作用:用于执行算术右移,保持符号位不变。

  42. NEG - 求反指令

    • 功能:将操作数取反(变为相反数)。

    • 格式NEG 操作数

    • 示例NEG AX(将AX的值取反)

    • 作用:用于将正数变为负数,更新标志寄存器。

  43. PUSHF - 堆栈操作指令

    • 功能:将标志寄存器压入堆栈。

    • 格式PUSHF

    • 示例PUSHF(将标志寄存器的值压入堆栈)

    • 作用:用于保存当前的标志寄存器状态。

  44. POPF - 堆栈操作指令

    • 功能:将标志寄存器从堆栈弹出。

    • 格式POPF

    • 示例POPF(从堆栈弹出数据恢复到标志寄存器)

    • 作用:用于恢复之前保存的标志寄存器状态。

  45. CMC - 补码指令

    • 功能:将进位标志位取反。

    • 格式CMC

    • 示例CMC(将CF标志位取反)

    • 作用:用于在加法和减法之间切换,常用于有符号数的运算。

  46. STC - 设置进位标志位指令

    • 功能:将进位标志位设置为1。

    • 格式STC

    • 示例STC(将CF标志位设置为1)

    • 作用:用于手动设置进位标志位,常用于无符号数的运算。

  47. CLC - 清除进位标志位指令

    • 功能:将进位标志位设置为0。

    • 格式CLC

    • 示例CLC(将CF标志位设置为0)

    • 作用:用于手动清除进位标志位,常用于无符号数的运算。


二、高级指令

  1. ADC - 带进位加法指令,用于将两个操作数相加,并加上进位标志位,结果存储在第一个操作数中。

  2. SBB - 带借位减法指令,用于从第一个操作数中减去第二个操作数,并减去借位标志位,结果存储在第一个操作数中。

  3. ROL/RROL - 旋转指令,用于将操作数中的位左旋转或右旋转指定的位数。

  4. ROR/RROR - 旋转指令,与ROL相同,但方向相反。

  5. RCR - 带进位右旋转指令,用于将操作数中的位右旋转,并带上进位标志位。

  6. RCL - 带进位左旋转指令,用于将操作数中的位左旋转,并带上进位标志位。

  7. SHLD - 双精度左移指令,用于将两个操作数视为一个双精度数左移。

  8. SHRD - 双精度右移指令,用于将两个操作数视为一个双精度数右移。

  9. BSWAP - 字节交换指令,用于交换寄存器中字的高低字节。

  10. MUL - 无符号乘法指令,用于无符号数相乘。

  11. IMUL - 有符号乘法指令,用于有符号数相乘。

  12. IDIV - 有符号除法指令,用于有符号数除法。

  13. ADC - 带进位加法指令,用于无带进位加法。

  14. CMOVB/CMOVNAE - 条件移动指令,如果进位标志位为1,则移动操作数。

  15. CMOVZ/CMOVE - 条件移动指令,如果零标志位为1,则移动操作数。

  16. CMOVL/CMOVNGE - 条件移动指令,如果符号标志位与进位标志位不一致,则移动操作数。

  17. CMOVLE/CMOVNG - 条件移动指令,如果符号标志位与进位标志位不一致或零标志位为1,则移动操作数。

  18. CMOVG/CMOVNLE - 条件移动指令,如果符号标志位与进位标志位一致且零标志位为0,则移动操作数。

  19. CMOVA/CMOVNBE - 条件移动指令,如果进位标志位和零标志位均为0,则移动操作数。

  20. CMOVL/CMOVNGE - 条件移动指令,如果符号标志位与进位标志位不一致,则移动操作数。

  21. CMOVLE/CMOVNG - 条件移动指令,如果符号标志位与进位标志位不一致或零标志位为1,则移动操作数。

  22. CMOVS - 条件移动指令,如果符号标志位为1,则移动操作数。

  23. CMOVP/CMOVPE - 条件移动指令,如果奇偶标志位为1,则移动操作数。

  24. CMOVC/CMOVNAE - 条件移动指令,如果进位标志位为1,则移动操作数。

  25. CMOVAE/CMOVNB - 条件移动指令,如果进位标志位为0,则移动操作数。


三、内存访问指令

  1. PUSH - 压入堆栈指令,用于将操作数压入堆栈。

  2. POP - 弹出堆栈指令,用于将操作数从堆栈弹出。

  3. LEA - 加载有效地址指令,用于将地址值加载到寄存器中,但不进行内存访问。

  4. XCHG - 交换指令,用于交换两个寄存器或寄存器与内存操作数的值。


四、其他控制指令

  1. INT - 中断指令,用于生成一个中断请求。

  2. IRET - 中断返回指令,用于从中断服务程序返回到中断前的程序位置。

  3. HLT - 停止指令,用于暂停CPU的执行。

  4. NOP - 无操作指令,用于在程序中插入一个空操作。


五、标志位相关指令

  1. CMC - 补码指令,用于将进位标志位取反。

  2. STC - 设置进位标志位指令,用于将进位标志位设置为1。

  3. CLC - 清除进位标志位指令,用于将进位标志位设置为0。


六、逻辑和条件指令

  1. TEST - 测试指令,用于对两个操作数进行按位与操作,但不存储结果,只设置标志位。

  2. SETCC - 设置条件指令,用于将条件码设置为1或0,以响应某个条件。

  3. CMPS - 比较字符串指令,用于按字节或字比较两个字符串。

  4. CMPSB/CMPSD/CMPSW - 比较字符串指令,用于按字节、双字或字比较两个字符串。

  5. CMOVxx - 条件移动指令,根据条件码将源操作数移动到目标操作数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阳阳大魔王

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值