首页 汇编指令手册

汇编指令手册

举报
开通vip

汇编指令手册数据传送指令 通用传送指令 MOV MOVSX MOVZX LEA 指针传送指令 LDS LES LFS LOS LSS 标志寄存器传送指令 LAHF SAFH 交换指令 XCHG 字节交换指令  BSWAP 查表指令  XLAT 堆栈操作指令 进栈指令  PUSH 出栈指令  POP 16位标志寄存器栈操作 进栈指令 PUSHF 出栈指令 POPF 32位标志寄存器栈操作 进栈指令 PUSHFD 出栈指令 POPFD 16位通用寄存器栈操作 进栈指令 PUSHA 出栈指令 POPA 32位通用寄存器栈操作 进栈...

汇编指令手册
数据传送指令 通用传送指令 MOV MOVSX MOVZX LEA 指针传送指令 LDS LES LFS LOS LSS 标志寄存器传送指令 LAHF SAFH 交换指令 XCHG 字节交换指令  BSWAP 查表指令  XLAT 堆栈操作指令 进栈指令  PUSH 出栈指令  POP 16位标志寄存器栈操作 进栈指令 PUSHF 出栈指令 POPF 32位标志寄存器栈操作 进栈指令 PUSHFD 出栈指令 POPFD 16位通用寄存器栈操作 进栈指令 PUSHA 出栈指令 POPA 32位通用寄存器栈操作 进栈指令 PUSHAD 出栈指令 POPAD 通用传送指令 指令名 格式 功能描述 影响标志位 注意事项 MOV MOV DST, SRC (DST) ←(SRC) 将一个字节或一个字操作数从源地址传送至目的地址。 MOV指令不改变源操作数,也不影响标志位 1)源和目的操作数不能同时为存储器操作数 例:MOV [DI],[SI];是非法指令 2)立即数不能作为目的操作数 例:MOV 1234H,AX ;是非法指令 3)不能将立即数直接传送到段寄存器 例:MOV DS,1000H;是非法指令 4)源和目的操作数的数据位应等长,即同为字节、字或双字。 必须用PTR运算符说明目的操作数的属性(可以是BYTE、WORD、DWORD)。 MOV BYTE PTR [BX],12H 5)以CS为目标的一切转送都是非法的。 MOVSX MOVSX DST,SRC Move with Sign Extend (386+) 将SRC的符号位向高位扩展,使其与目标操作数字长相同,再送到DST,而SRC保持不变。 MOV指令不改变源操作数,也不影响标志位 (1)DST为REG16或REG32,SRC为小于等于DST的立即数或存储器操作数或寄存器操作数。 (2)对于带符号数的补码,扩展前后的真值相等,只有补码的位数不同。 例: MOV DL,-16 ; DL=0F0H MOVSX BX,DL ; BX=0FFF0H, DL不变 MOVZX MOVZX DST,SRC Move with Zero Extend (386+) 将SRC的高位用0补充,使其与目标操作数字长相同,再送到DST,而SRC保持不变。 MOV指令不改变源操作数,也不影响标志位 (1)DST为REG16或REG32,SRC为小于等于DST的立即数或存储器操作数或寄存器操作数。 (2)对于无符号数的真值不变。 例: MOVZX EAX,CX LEA 有效地址送寄存器指令 LEA REG,SRC; MOV DES, OFFSET SRC LEA:Load Effective Address REG ←(EA OF SRC) 把源操作数的有效地址送到指定的寄存器。 SRC为内存操作数。 REG为16位或32位寄存器(除段寄存器) LEA等效于MOV OFFSET 所以不影响标志位             指令名 格式 功能描述 影响标志位 注意事项 指针传送指令 LDS LES LSS LFS LOS 操作码助记符 REG,SRC LDS等英文含义: Load to DataSegReg 其后两位字母表段寄存器, 它们是隐含的目标寄存器. 将源操作数高16位送隐含的目标段寄存器; 不影响标志位 若源操作数是32位内存操作数, 则将低16位送目标通用寄存器. 若源操作数是48位内存操作数, 则将低32位送目标通用寄存器. 标志寄存器传送指令 LAHF 操作数为隐含的AH和标志寄存器。 LAHF:Load to AH with Flag AH ←(PSW的低位字节) 不影响标志位 PSW的低位字节包括 SF符号标志 ZF零标志 AF半进位标志 PF奇偶标志 CF进位标志 SAHF 操作数为隐含的AH和标志寄存器。 SAHF:Sent AH to Flag (PSW低位字节)←(AH) 这不是废话吗!   交换指令XCHG XCHG OPR1,OPR2 XCHG:exchange 交换 (OPR1 ) <=> (OPR2) 不影响标志位。 OPR1与OPR2须是等长操作数, OPR1,OPR2必须有一个是寄存器。(段寄存器不能作为XCHG的操作数) 查表指令 XLAT XLAT 表头变量名 AL←(DS:[BX+AL] ) AL ←(DS:[EBX+AL]) 把一种码转换为另一种码 不影响标志位 使用方法: 1、建立表格,将表格的首地址预先存入BX或EBX。 2、要转换的代码与表格首地址的偏移量存入AL。 3、执行换码指令, (DS:[BX+AL] )→AL 示例: 第一步:在数据段按字形0~F的顺序设置一张字形编码表。 TAB DB 3FH,06H,5BH,4FH, NUM DB 02H; 第二步:在代码段设置如下指令: MOV DS,数据段段基址 MOV BX,OFFSET TAB; (LEA BX, TAB) MOV AL,NUM XLAT TAB BSWAP BSWAP REG32 Byte Swap (486+) 将32位REG的 位31~位24 与 位7~位0交换, 位23~位16与位15~位8交换。 不影响标志位             堆栈操作指令 指令名 格式 功能描述 影响标志位 注意事项 进栈指令PUSH PUSH SRC 执行时, 首先调整堆栈指针,然后把源操作数压栈。 执行操作: 16位:(SP) ←(SP)-2 ((SP)+1,(SP)) ←(SRC) 32位:(ESP) ←(ESP)-4 ((ESP)+3 ~ (ESP)) ←(SRC) 不影响标志位 内存操作数若不是直接寻址, 则必须用PTR运算符来说明其属性。 例, PUSH WORD PTR [BX] 堆栈操作的基本单位是字! 出栈指令POP POP DST 先将栈顶弹出2个或4个字节,送目标操作数, 然后调整堆栈指针。 执行操作: 16位: ((SP)+1,(SP))→(DST) (SP) ←(SP) + 2 32位: ((ESP)+3~(SP)) →(DST) (ESP) ←(ESP) +4 不影响标志位 跟上面是一样的。要知道他们是双子星。 16位标志寄存器 进栈PUSHF出栈POPF PUSHF (Push Flag) POPF (Pop Flag) PUSHF: SP = SP –2 SS:[SP] ← Flag 的低16位 POPF: Flag 的低16位←SS:[SP] SP = SP +2 PUSHF 不改变标志位 POPF:这也是废话 当然会啦!   32位标志寄存器 进栈 PUSHFD 出栈 POPFD PUSHFD POPFD PUSHFD ESP = ESP –4 SS:[ESP] ←32位EFLAGE POPFD 32位EFLAGE ←SS:[ESP] ESP = ESP +4 PUSHFD 不改变标志位 POPFD:这也是废话 当然会啦!   16位通用寄存器 进栈PUSA 出栈POPA 32位通用寄存器 进栈PUSAD 出栈POPAD PUSHA (Push AX) POPA (Pop AX) PUSHAD POPAD PUSHA:(PUSHAD) SP = SP –16 (32) 再依次将(E)AX,CX,DX,BX,SP,BP,SI,DI 入栈。 POPA:(POPA) 将栈内的内容依次弹出至(E)DI,SI,BP,SP,BX,DX,CX,AX SP = SP +16 (32) 不改变标志位 进栈与出栈通用寄存器顺序时相反的             算术运算指令 加法指令   ADD ADC INC XADD 减法指令 SUB SBB DEC NEG CMPXCHG 乘法指令 MUL IMUL 除法运算 DIV IDIV 符号扩展指令 字节转换为字指令CBW 字转换为双字指令CWD 十进制调整指令 压缩BCD码调整指令 加法调整指令 DAA 减法调整指令 DAS 非压缩BCD码调整指令 加法调整指令 AAA 减法调整指令 AAS 乘法调整指令 AAM 除之前调整指令 AAD 加法指令与减法指令 指令名 格式 功能描述 影响标志位 注意事项 加法指令 ADD ADD DST,SRC DST←(DST) + (SRC) 影响的标志位:CF,OF,SF,ZF,PF,AF (1)两个操作数不能同时为存储器操作数; (2)如果SRC是立即数,DST是存储器操作数,则DST必须用PTR说明是字节还是字型或是双字型,否则汇编时会出错. 带进位的加法指令 ADC ADC DST,SRC DST←(DST)+(SRC)+CF CF是上一条指令执行后产生的C标志。 影响的标志位:CF,OF,SF,ZF,PF,AF 同ADD 加1指令 INC INC OPR (OPR)←(OPR) + 1 INC指令不影响CF标志,但影响AF,OF,PF,SF,ZF (1)INC指令的操作数不能是立即数 (2)当INC的操作数是存储器操作数时,必须用PTR说明符说明其属性. 交换加法指令 XADD XADD DST,SRC 首先SRC与DST互换,然后(SRC+DST)→(DST) 目的操作数和源操作数相加,并使源操作数保存目的操作数的值 设置 CF PF AF SF ZF OF 与ADD的区别就是ADD指令会使DST的值被取代,SRC的值被保留,而XADD的功能刚好相反 DST是寄存器操作数或内存操作数, SRC 只能是与DST等长的寄存器操作数。 减法指令SUB SUB DST,SRC DST←(DST)–(SRC) CF,OF,SF,ZF,PF,AF 同ADD 带借位减法指令 SBB SBB DST,SRC DST←(DST)–(SRC)–CF CF,OF,SF,ZF,PF,AF 同ADD 减1指令DEC DEC OPR (OPR)←(OPR)–1 不影响CF标志,但影响AF、OF、 PF、SF、ZF ②DEC指令的操作数不能是立即数 ③当DEC的操作数是存储器操作数时,必须用PTR说明符说明其属性。 求补指令NEG NEG OPR OPR←?(OPR) NEG指令影响AF、OF、PF、SF、ZF、CF。 ③对CF的影响: 只有当(OPR) = 0时,执行完NEG后CF = 0,其他情况CF=1; ④对OF的影响: 当(OPR) = -128或(OPR) = -32768时OF = 1,其他情况OF = 0。 NGE求OPR的相反数; 若原OPR为正,在执行NEG后,变为补码表示的负数。 若原OPR为补码表示的负数, 则执行完NEG后, 变为正数。 比较指令CMP CMP DST,SRC (DST) – (SRC) 执行的结果不回送DST, 而是根据结果去影响的标志位: CF,OF,SF,ZF,PF,AF。 CMP常用于转移指令之前。 当SRC为立即数时, DST为非直接寻址的内存操作数寻址时, 须用PTR指明DST属性。 比较并交换指令 CMPXCHG CMPXCHG DST,SRC 将DST与AL/AX/EAX比较,若相等,则将SRC送DST;若不等,则将DST送AL/AX/EAX. 根据结果去影响的标志位: CF,OF,SF,ZF,PF,AF。             乘除法指令 指令名 格式 功能描述 影响标志位 注意事项 无符号数乘法指令 MUL MUL SRC 乘数和被乘数须是等长的无符号二进制数, 乘积为双倍长; 被乘数默认在累加器中(AL/AX/EAX)。 执行的操作: 字节操作: (AX)←(AL) * (SRC) 字操作: (DX,AX)←(AX) * (SRC) 双字操作: (EDX,EAX)←(EAX) * (SRC) 影响CF、OF标志位, 其他无定义。 (1)源操作数是除立即数之外的寻址方式。 (2)如果乘积的高半部分为0, (即AH = 0、DX = 0或 EDX=0 ) 则CF=OF = 0, 否则 CF = OF = 1 带符号数乘法指令 IMUL 格式1 IMUL SRC 字节操作: (AX)←(AL) * (SRC) 字操作: (DX,AX)←(AX) * (SRC) 双字操作: (EDX,EAX)←(EAX) * (SRC) 标志位的影响:CF、OF, 其他无定义。 ①源操作数是除了立即数之外的寻址方式。 ②如果乘积的高一半是低一半的符号扩展则 CF=OF = 0, 否则 CF = OF = 1 格式2 IMUL DST, SRC (DST) ← (DST) * (SRC) ①如果乘积的高一半是低一半的符号扩展则 CF=OF = 0, 否则 CF = OF = 1。 格式3 IMUL DST,SRC,DATA DST← DATA * (SRC) ①如果乘积的高一半是低一半的符号扩展则 CF=OF = 0, 否则 CF = OF = 1。 DIV 无符号数的除法指令 DIV SRC 字节操作: 16 位被除数放在AX中,8位除数为源操作数。结果的8位商在AL中,8位的余数在AH中。 表示为: (AL)← (AX)/(SRC)的商 (AH)← (AX)/(SRC)的余数 字操作: 32 位被除数在DX,AX中,16位除数为源操作数。结果的16位商在AX中,16位的余数在DX中。 表示为: (AX)←(DX,AX)/(SRC)的商 (DX)←(DX,AX)/(SRC)的余数 双字操作: 64 位被除数在EDX,EAX中,32位除数为源操作数。结果的32位商在EAX中,32位的余数在EDX中。 表示为: (EAX)←(EDX,EAX)/(SRC)的商 (EDX)←(EDX,EAX)/(SRC)的余数 执行DIV,运算后对标志位无确定影响,都没有意义。 商超过规定的范围,去执行0型中断。 (系统会报错) IDIV有符号数的除法指令 IDIV SRC 同上 运算后对标志位无确定影响 ①除数、被除数和商值都是有符号补码数。 ②若被除数与除数等长时,须先将被除数符号扩展。 字节转换为字CBW CBW 将AL的符号位扩展到AH。 不影响标志位   字转换为双字CWD CWD AX的符号位扩展到DX 不影响标志位            
本文档为【汇编指令手册】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_281650
暂无简介~
格式:doc
大小:69KB
软件:Word
页数:0
分类:互联网
上传时间:2019-08-24
浏览量:19