一些常用的汇编语言指令

汇编语言常用指令

大家在做免杀或者破解软件的时候经常要用到汇编指令,本人整理出了常用的 希望对大家有帮助!

数据传送指令

MOV :寄存器之间传送注意,源和目的不能同时是段寄存器;代码段寄存器CS 不能作为目的;指令指针IP 不能作为源和目的。立即数不能直接传送段寄存器。源和目的操作数类型要一致;除了串操作指令外,源和目的不能同时是存储器操作数。

XCHG 交换指令:操作数可以是通用寄存器和存储单元,但不包括段寄存器,也不能同时是存储单元,还不能有立即数。

LEA 16位寄存器 存储器操作数 传送有效地址指令:必须是一个16位寄存器和存储器操作数。

LDS 16位寄存器 存储器操作数 传送存储器操作数32位地址,它的16位偏移地址送16位寄存器,16位段基值送入DS 中。

LES :同上,只是16位段基址送ES 中。

堆栈操作指令

PUSH 操作数,操作数不能使用立即数,

POP 操作数, 操作数不能是CS 和立即数

标志操作指令

LAHF :把标志寄存器低8位,符号SF ,零ZF ,辅助进位AF ,奇偶PF ,进位CF 传送到AH 指定的位。不影响标志位。

SAHF :与上相反,把AH 中的标志位传送回标志寄存器。

PUSHF :把标志寄存器内容压入栈顶。

POPF :把栈顶的一个字节传送到标志寄存器中。

CLC :进位位清零。

STC :进位位为1。

CMC :进位位取反。

CLD :使方向标志DF 为零,在执行串操作中,使地址按递增方式变化。

STD :DF 为1。

CLI :清中断允许标志IF 。Cpu 不相应来自外部装置的可屏蔽中断。

STI :IF 为1。

加减运算指令

注意: 对于此类运算只有通用寄存器和存储单元可以存放运算结果。如果参与运算的操作数有两个,最多只能有一个存储器操作数并且它们的类型必须一致。

ADD 。

ADC :把进位CF 中的数值加上去。

INC :加1指令

SUB 。

SBB :把进位CF 中数值减去。

DEC :减1指令。

NEG 操作数:取补指令,即用0减去操作数再送回操作数。

CMP :比较指令,完成操作数1减去操作数2,结果不送操作数1,但影响标志位。可根据ZF (零)是否被置1判断相等;如果两者是无符号数,可根据CF 判断大小;如果两者是有符号数,要根据SF 和OF 判断大小。

乘除运算指令

MUL 操作数 :无符号数乘法指令。操作数不能是立即数。操作数是字节与AL 中的无符号数相乘,16位结果送AX 中。若字节,则与AX 乘,结果高16送DX ,低16送AX 。如乘积高半部分不为零,则CF 、OF 为1,否则为0。所以CF 和OF 表示AH 或DX 中含有结果的有效数。 IMUL 操作数 :有符号数乘法指令。基本与MUL 相同。

DIV 操作数 :被除数是在AX (除数8位)或者DX 和AX (除数16位),操作数不能是立即数。如果除数是0,或者在8(16)位除数时商超过8(16)位,则认为是溢出,引起0号中断。IDIV :有符号除法指令,当除数为0,活着商太大,太小(字节超过127,-127字超过32767,-32767)时,引起0号中断。

符号扩展指令

CBW ,CWD : 把AL 中的符号扩展到寄存器AH 中,不影响各标志位。CWD 则把AX 中的符号扩展到DX ,同样不影响标志位。注意:在无符号数除之前,不宜用这两条指令,一般采用XOR 清高8位或高16位。

逻辑运算指令与位移指令

注意:只能有一个存储器操作数;只有通用寄存器或存储器操作数可作为目的操作数,用于存放结果;操作数的类型必须一致。

NOT :取反,不影响标志位。

AND 操作数1 操作数2:操作结果送错作数1,标志CF (进位)、OF (溢出)清0,PF (奇偶)ZF (0标志) SF(符号)反映运算结果,AF (辅助进位)未定义。自己与自己AND 值不变,她主要用于将操作数中与1相与的位保持不变,与0相与清0。(都为1时为1) OR 操作数1 操作数2:自己与自己OR 值不变,CF (进位)、OF (溢出)清0,PF (奇偶)ZF (0标志)SF (符号)反映运算结果,AF (辅助进位)未定义。她使用于将若干位置1:

与1相或为1,保持不变的位与0相或。(都为0时为0)

XOR 操作数1 操作数2:自己与自己异或结果为0,标志CF (进位)、OF (溢出)清0,PF (奇偶)ZF (0)SF (符号)反映运算结果,AF (辅助进位)未定义。主要用于将若干位取反的操作:与1异或取反,与0异或保持不变。(相同为0,不同为1)

TEST 操作数1 操作数2:测试指令,和AND 相同,但结果不送操作数1,各标志位同AND 操作。

位移指令

SAL/SHL 操作数 1或CL :算术左移与逻辑左移进行相同的动作,操作数是通用寄存器或者存储器操作数,位移数为1或为CL ;最高位移CF (进位),右边用0补位。左移一次相当源操作数乘2。

SAR 操作数 1或CL :算术右移,位移数为1或为CL ;操作数是通用寄存器或者存储器操作数,左符号位保持不变,移出最低位进CF (进位)。相当源操作数除2。

SHR 操作数 1或CL :逻辑右移,操作数是通用寄存器或者存储器操作数,位移数为1或为CL ;左边用0补足,移出的最低位进CF (进位)对于无符号数,右移一位相当于除2。 ROL/ROR 操作数 1或CL : 不带进位左移/右移,操作数是通用寄存器或者存储器操作数,位移数为1或为CL 。

RCL/RCR 操作数 1或CL : 带进位左移/右移,CF (进位)参与循环。操作数是通用寄存器或者存储器操作数,位移数为1或为CL 。

转移指令

注意:由于代码段可分为多个段,所以根据转移时是否重置代码段寄存器CS 内容,可分为段内转移和段间转移。段内转移仅重置IP 的转移,转移后指令仍在同一代码段中。段间转移重置CS ,所以转移后继续执行的指令在另一个段中。

JMP 标号 :无条件跳转到标号位置执行,段内直接转移指令。地址差用一个字节表示为短转移,用一个字表示为近转移。

JMP 通用寄存器/存储单元:无条件段间间接转移指令,操作数给定的是目标地址处。 JMP FAR PTR 标号:无条件段间直接转移指令,她的具体动作是把指令中包含的目标地址的段值和偏移分别置茹CS 和IP 。

JMP 操作数:无条件段间间接转移指令,操作数是双字存储单元,给定目标地址,低字节送IP ,高字节送CS 。

条件转移指令:所有的条件转移指令都是段内转移。她是由J 加上相应的含义字母组合成。有符号数关系G (大于),E (等于),L (小于);无符号数关系A (高于)、E (等于)和B (低于);字母N 表示“不”:NB (不小于),NE (不等于)。

循环指令

LOOP 标号:她使寄存器CX 减1,若结果不等于0则转到标号,否则顺序执行LOOP 指令后的指令。最多循环65536次。

LOOPE/LOOPZ 标号:等于/全零循环指令。CX 的值减1,如果结果不等于0,并且ZF (0标志)等于1,则转移到标号。

LOOPNE/LOOPNZ 标号:不等于/非零循环指令,CX 的值减1,如果结果不等于0,并且ZF (0标志)等于0,则跳转到标号。

JCXZ 标号: 该指令实现当寄存器CX 的值等于0转移到标号,否则顺序执行。通常该指令用在循环开始前,以便在循环次数位0时,跳过循环体。

汇编语言常用指令

大家在做免杀或者破解软件的时候经常要用到汇编指令,本人整理出了常用的 希望对大家有帮助!

数据传送指令

MOV :寄存器之间传送注意,源和目的不能同时是段寄存器;代码段寄存器CS 不能作为目的;指令指针IP 不能作为源和目的。立即数不能直接传送段寄存器。源和目的操作数类型要一致;除了串操作指令外,源和目的不能同时是存储器操作数。

XCHG 交换指令:操作数可以是通用寄存器和存储单元,但不包括段寄存器,也不能同时是存储单元,还不能有立即数。

LEA 16位寄存器 存储器操作数 传送有效地址指令:必须是一个16位寄存器和存储器操作数。

LDS 16位寄存器 存储器操作数 传送存储器操作数32位地址,它的16位偏移地址送16位寄存器,16位段基值送入DS 中。

LES :同上,只是16位段基址送ES 中。

堆栈操作指令

PUSH 操作数,操作数不能使用立即数,

POP 操作数, 操作数不能是CS 和立即数

标志操作指令

LAHF :把标志寄存器低8位,符号SF ,零ZF ,辅助进位AF ,奇偶PF ,进位CF 传送到AH 指定的位。不影响标志位。

SAHF :与上相反,把AH 中的标志位传送回标志寄存器。

PUSHF :把标志寄存器内容压入栈顶。

POPF :把栈顶的一个字节传送到标志寄存器中。

CLC :进位位清零。

STC :进位位为1。

CMC :进位位取反。

CLD :使方向标志DF 为零,在执行串操作中,使地址按递增方式变化。

STD :DF 为1。

CLI :清中断允许标志IF 。Cpu 不相应来自外部装置的可屏蔽中断。

STI :IF 为1。

加减运算指令

注意: 对于此类运算只有通用寄存器和存储单元可以存放运算结果。如果参与运算的操作数有两个,最多只能有一个存储器操作数并且它们的类型必须一致。

ADD 。

ADC :把进位CF 中的数值加上去。

INC :加1指令

SUB 。

SBB :把进位CF 中数值减去。

DEC :减1指令。

NEG 操作数:取补指令,即用0减去操作数再送回操作数。

CMP :比较指令,完成操作数1减去操作数2,结果不送操作数1,但影响标志位。可根据ZF (零)是否被置1判断相等;如果两者是无符号数,可根据CF 判断大小;如果两者是有符号数,要根据SF 和OF 判断大小。

乘除运算指令

MUL 操作数 :无符号数乘法指令。操作数不能是立即数。操作数是字节与AL 中的无符号数相乘,16位结果送AX 中。若字节,则与AX 乘,结果高16送DX ,低16送AX 。如乘积高半部分不为零,则CF 、OF 为1,否则为0。所以CF 和OF 表示AH 或DX 中含有结果的有效数。 IMUL 操作数 :有符号数乘法指令。基本与MUL 相同。

DIV 操作数 :被除数是在AX (除数8位)或者DX 和AX (除数16位),操作数不能是立即数。如果除数是0,或者在8(16)位除数时商超过8(16)位,则认为是溢出,引起0号中断。IDIV :有符号除法指令,当除数为0,活着商太大,太小(字节超过127,-127字超过32767,-32767)时,引起0号中断。

符号扩展指令

CBW ,CWD : 把AL 中的符号扩展到寄存器AH 中,不影响各标志位。CWD 则把AX 中的符号扩展到DX ,同样不影响标志位。注意:在无符号数除之前,不宜用这两条指令,一般采用XOR 清高8位或高16位。

逻辑运算指令与位移指令

注意:只能有一个存储器操作数;只有通用寄存器或存储器操作数可作为目的操作数,用于存放结果;操作数的类型必须一致。

NOT :取反,不影响标志位。

AND 操作数1 操作数2:操作结果送错作数1,标志CF (进位)、OF (溢出)清0,PF (奇偶)ZF (0标志) SF(符号)反映运算结果,AF (辅助进位)未定义。自己与自己AND 值不变,她主要用于将操作数中与1相与的位保持不变,与0相与清0。(都为1时为1) OR 操作数1 操作数2:自己与自己OR 值不变,CF (进位)、OF (溢出)清0,PF (奇偶)ZF (0标志)SF (符号)反映运算结果,AF (辅助进位)未定义。她使用于将若干位置1:

与1相或为1,保持不变的位与0相或。(都为0时为0)

XOR 操作数1 操作数2:自己与自己异或结果为0,标志CF (进位)、OF (溢出)清0,PF (奇偶)ZF (0)SF (符号)反映运算结果,AF (辅助进位)未定义。主要用于将若干位取反的操作:与1异或取反,与0异或保持不变。(相同为0,不同为1)

TEST 操作数1 操作数2:测试指令,和AND 相同,但结果不送操作数1,各标志位同AND 操作。

位移指令

SAL/SHL 操作数 1或CL :算术左移与逻辑左移进行相同的动作,操作数是通用寄存器或者存储器操作数,位移数为1或为CL ;最高位移CF (进位),右边用0补位。左移一次相当源操作数乘2。

SAR 操作数 1或CL :算术右移,位移数为1或为CL ;操作数是通用寄存器或者存储器操作数,左符号位保持不变,移出最低位进CF (进位)。相当源操作数除2。

SHR 操作数 1或CL :逻辑右移,操作数是通用寄存器或者存储器操作数,位移数为1或为CL ;左边用0补足,移出的最低位进CF (进位)对于无符号数,右移一位相当于除2。 ROL/ROR 操作数 1或CL : 不带进位左移/右移,操作数是通用寄存器或者存储器操作数,位移数为1或为CL 。

RCL/RCR 操作数 1或CL : 带进位左移/右移,CF (进位)参与循环。操作数是通用寄存器或者存储器操作数,位移数为1或为CL 。

转移指令

注意:由于代码段可分为多个段,所以根据转移时是否重置代码段寄存器CS 内容,可分为段内转移和段间转移。段内转移仅重置IP 的转移,转移后指令仍在同一代码段中。段间转移重置CS ,所以转移后继续执行的指令在另一个段中。

JMP 标号 :无条件跳转到标号位置执行,段内直接转移指令。地址差用一个字节表示为短转移,用一个字表示为近转移。

JMP 通用寄存器/存储单元:无条件段间间接转移指令,操作数给定的是目标地址处。 JMP FAR PTR 标号:无条件段间直接转移指令,她的具体动作是把指令中包含的目标地址的段值和偏移分别置茹CS 和IP 。

JMP 操作数:无条件段间间接转移指令,操作数是双字存储单元,给定目标地址,低字节送IP ,高字节送CS 。

条件转移指令:所有的条件转移指令都是段内转移。她是由J 加上相应的含义字母组合成。有符号数关系G (大于),E (等于),L (小于);无符号数关系A (高于)、E (等于)和B (低于);字母N 表示“不”:NB (不小于),NE (不等于)。

循环指令

LOOP 标号:她使寄存器CX 减1,若结果不等于0则转到标号,否则顺序执行LOOP 指令后的指令。最多循环65536次。

LOOPE/LOOPZ 标号:等于/全零循环指令。CX 的值减1,如果结果不等于0,并且ZF (0标志)等于1,则转移到标号。

LOOPNE/LOOPNZ 标号:不等于/非零循环指令,CX 的值减1,如果结果不等于0,并且ZF (0标志)等于0,则跳转到标号。

JCXZ 标号: 该指令实现当寄存器CX 的值等于0转移到标号,否则顺序执行。通常该指令用在循环开始前,以便在循环次数位0时,跳过循环体。


相关内容

  • 微型计算机系统的组成
  • 第2章 微型计算机系统的组成(15-20%) 2.1计算机系统概述 2.1.1 计算机系统的基本组成 目前计算机的基本体系结构和基本作用机制仍然沿袭着冯·诺伊曼的最初构思和设计,我们把这种计算机统称为冯氏机(Von Neumann Computer): (1)把计算机要执行的指令和要处理的数据都采用 ...

  • 三年级英语.目标2
  • 一级目标: 对英语有好奇心,喜欢听他人说英语. 能根据教师的简单指令做动作.做游戏.做事情(如涂颜色.连线).能做简单的角色表演.能唱简单的英文歌曲,说简单的英语歌谣.能在图片的帮助下听懂和读懂简单的小故事.能交流简单的个人信息,表达简单的感觉和情感.能模仿范例书写词句. 在学习中乐于模仿,敢于表达 ...

  • 程序设计基础(知识点)
  • 第三部分 程序设计基础 3.1 程序.程序设计.程序设计语言的定义 ⑴程序:计算机程序,是指为了得到某种结果而可以由计算机等具有信息处理能力的装置执行的代码化指令序列,或者可以被自动转换成代码化指令序列的符号化指令序列或者符号化语句序列. ⑵程序设计:程序设计是给出解决特定问题程序的过程,是软件构造 ...

  • 简明x86汇编语言教程
  • 简明x86汇编语言教程(2) 第二章 认识处理器 中央处理器(CPU)在微机系统处于"领导核心"的地位.汇编语言被编译成机器语言之后,将由处理器来执行.那么,首先让我们来了解一下处理器的主要作用,这将帮助你更好地驾驭它. 典型的处理器的主要任务包括 从内存中获取机器语言指令,译码 ...

  • 嵌入式试题及答案
  • <嵌入式开发>期中试卷 试卷适用范围:2011级计算机科学与技术(本)1.2班 一.填空题(每空1分,共46分) 习 题 1 1.填空题 (1)嵌入式系统是以应用为中心.以 计算机技术 为基础,软.硬件可裁剪,适应于应用系统对功能.可靠性.成本.体积.功耗等方面有特殊要求的专用计算机系统 ...

  • 三菱PLC控制的机械手系统
  • 作者:洪玉红 自动化系自0101班 摘 要:本文介绍了如何利用PLC (可编程控制器)的自动控制和逻辑运算的优点改变PLC 的程序及参数,达到灵活控制设备运行的目的, 从而使设备操作变得更方便,更富有人性化.它充分体现了工控自动化在实际生产中的重要作用.通过对物料搬运机械手装置结构与功能的介绍,给出 ...

  • 国网职称计算机考试题库3
  • 1. 计算机文化特征是什么?计算机文化知识为什么应该成为当代人们知识结构的重要组成部分? 答:所谓"计算机文化"也被称为人类在书本世界之外的第二文化.这是信息时代的特征文化,它不是属于某一国家,某一民族的一种地域文化,而是一种时域文化,是人类社会发展到一定阶段的时代文化. 计算机 ...

  • 制作机器人常用的单片机性能特点及使用经验
  • 栏 目 树 形 导 航 | 网站首页 | 新手入门 | 新闻资讯 | 厂商及产品评测专区 | 网友作品选播 | 下载中心 | 留言板 | 亿趣论坛 | 最新公告:     欢迎大家投稿: [email protected] 亿趣的发展需要大家的支持  [admin  2010年3月19日]    ...

  • 中级程序员考试大纲
  • 中级程序员考试大纲 考试对象与要求 能按照软件设计规格说明书编写程序的技术人员 具有初级技术职务(助理工程师)的实际工作能力和业务知识 考试范围 一.程序编制能力 程序语言 能熟练使用下列程序语言中的一种 C(美国标准) FORTRAN(国家标准GB3057-82) 根据软件设计规格说明书,画出流程 ...