汇编语言期末复习攻略——重要知识点概述(二)
数据传送指令
传送指令MOV
格式如下:MOV Reg/Mem,Reg/Mem/Imm
寄存器Reg 存储器Mem 立即数Imm
注意:①两个操作数的数据类型要相同,要同为8位、16位
②两个操作数不能同时为段寄存器,
③代码段寄存器CS不能为目的操作数,但可作为源操作数
④立即数不能直接传给段寄存器
⑤立即数不能作为目的操作数
⑥指令指针IP,不能作为MOV指令的操作数
⑦两个操作数不能同时是存储单元
传送—— 填充指令
是把位数短的数据传送给位数长的目的操作数
MOVSX/MOVZX Reg/Mem, Reg/Mem/Imm
MOVSX用符号位填充,MOVZX用0来填充
交换指令XCHG
XCHG Reg/Mem,Reg/Mem
作用是交换两个寄存器,寄存器不能是段寄存器,两个操作数不能同时为内存变量
取有效地址指令LEA
指令LEA是把一个内存变量的有效地址送给指定的寄存器,格式:LEA Reg,Mem
LEA指令和OFFSET的联系与区别
相同:都是取偏移指令的操作
注意事项:1.lea、offset指令的源操作数必须是内存操作数
2.lea、offset指令的目的操作数必须是16位寄存器
3.lea指令不影响状态标志寄存器内容。
区别:
4.offset指令的源操作数不能是下标(类似数组),lea可以。
5.offset在汇编时生效,lea在指令执行时才生效。
取段寄存器指令
LDS/LES Reg,Mem
该组指令的功能是把内存单元的一个低字传送给指令中指定的16位寄存器,把随后的一个高字传给相应的段寄存器。
若Reg是16位寄存器,那么Mem必须是32位指针
进栈操作
PUSH Reg/Mem
出栈操作
POP Reg/Mem
转换指令XLAT
无操作数,但有两个隐含操作数BX和AL
指令格式如下:XLAT/XLATB,其功能是把BX的值作为内存字节数首地址,下标为AL的数组元素的值传送给AL
FLAG寄存器
- ZF标志,零标志:计算结果为0置1,不为0置0
- PF标志,奇偶标志:计算结果二进制数有奇数个1还是偶数个1,奇数个1写0,偶数个1写1
- SF标记,符号标记:运算结果为正,置0;为负,置1
- CF标志,进位标志:最高位是否有进位或错误,有置1,没有置0
- OF标志,溢出标志:8位数是否超过-128到127,是溢出置1
- AF标志,辅助进位标志,低4位是否向高4位进位或借位,是置1,否置0
算术运算指令
加法指令
1.ADD加法指令:把源操作数的值加到目的操作数
2.ADC带进位加指令:把源操作数和进位标志CF一起加到目的操作数
3.INC指令:操作数的值加1
4.交换加指令XADD:先交换两个操作数的值,在镜像加法运算
减法指令
1.SUB减法指令:从目的操作数中减去源操作数
2.SBB带借位减法:把源操作数和标志位CF的值从目的操作数中一起减去
3.DEC减法:把源操作数的值减去1
4.求补指令NEG:改变操作数的正负号
乘法指令
MUL指令:隐含目的操作数,把源操作数和AL(AX)的值相乘保存到AX(DX+AX)中
除法指令
DIV指令:
类型转换指令
系统提供了四条数据类型转换指令:CBW、CWD、CWDE、CDQ
CBW字节转换为字指令:隐含操作数AH和AL,其功能是用AL的符号位去填充AH
CWD字转换为双字指令:隐含操作数DX和AX,其功能是用AX的符号位去填充DX
逻辑运算指令
逻辑与指令
指令格式:AND Reg/Mem,Reg/Mem/Imm
逻辑或指令
指令格式:OR Reg/Mem,Reg/Mem/Imm
逻辑非
指令格式:NOT Reg/Mem
TEST指令
格式:TEST Reg/Mem,Reg/Mem/Imm
功能是对两个操作数进行逻辑与运算,但结果不送至目的操作数,只是影响状态标志
作用是检测一些条件是否满足,但又不希望改变操作数,即使用于检查一个字节或字中的某些特定位是否有一位为1
移位指令
1.SHL指令(逻辑左移)
相当于将数倍增
2.SHR指令(逻辑右移)
将一个无符号数向右移动,左边出现空位补0,右边低位移至CF
3.SAL指令(算术左移)
SAL指令同SHL,实际上SHL和SAL是同一条指令的两种助记符,它们执行的操作完全一样。
4.SAR指令(算术右移)
SAR类似于SHR,SAR同SHR的区别是:SHR连同符号位一起右移,左边最高位出现的空位补0;而SAR右移时符号位不动,左边出现的空位补上符号位的值。
其中值得注意的一点是:如果目的操作数是负数,且其中具有1的位数移出后,则SAR指令产生的结果与用整数IDIV指令产生的结果不一样。
例如:-5经SAR右移之后得-3,IDIV之后为-2
5.ROL指令(循环左移)
功能:每执行一次,把最高位移到最低位,同时还把最高位移到CF
6.ROR指令(循环右移)
与ROL指令类似
7.RCL指令(通过进位循环左移)
RCL指令对目的操作数1字节或字中的各位循环左移,进位标志CF被看作目的操作数的“一部分”。每执行一次,CF的值循环移入目的操作数的低位,而目的操作数的最高位移入CF。
8.RCR指令(通过进位循环右移)
RCR与RCL类似,
比较指令CMP
功能:用第二个操作数去减第一个操作数,并根据所得的差设置有关标志位,为随后的条件转移指令提供条件,但并不保存该差,所以不会改变指令中的操作数。
循环指令
CX寄存器中存放循环次数,一般循环跳转是,CX先减1,后判断CX是否为0
LOOP 标号
相等或为零循环指令
LOOPE/LOOPZ 标号
LOOPNE/LOOPNZ 标号
循环计数器为零转指令
转移指令
1.无条件转移指令JMP
格式:JMP 标号
2.条件转移指令
字符串操作指令
字符串操作指令的实质是对一片连续存储单元进行处理,这片存储单元是隐含指针DS:SI或ES:DI来指定的。
字符串操作指令可对内存单元按字节、字或双字进行处理,并能根据操作对象的字节数使变址寄存器SI和DI增减1、2、4.
具体规定如下:
(1)当DF=0时,变