1 ADD 指令
ADD,是Intel x86平台的汇编加法指令,MEM代指操作数为内存或寄存器,REG代指操作数为寄存器,IMM代指立即数,SEG代指操作数为段寄存器。
形式和示例如下;
ADD MEM8,REG8 ADD DS:[BX+SI],AL
ADD MEM16,REG16 ADD BP,BX
ADD REG8,MEM8 ADD CH,DS:[0E8B]
ADD REG16,MEM16 ADD BP,BX
ADD AL,IMM8 ADD AL,12
ADD AX,IMM16 ADD AX,1234
ADD MEM8,IMM8 ADD BYTE DS:[BX+SI],12
ADD MEM16,IMM16 ADD WORD DS:[1234],5678
ADD MEM8,IMM8 ADD CL,12
ADD MEM16,IMM8 (有符号) ADD WORD DS:[BX+SI],-02 | ADD SP,+0A
我记不清有没有单独写过一篇add指令的博文;再学习一下;
我也记不住影响的标志位;
加法指令运算的结果对CF、SF、OF、PF、ZF、AF都会有影响,以上标志也称为结果标志,或者叫状态标志。
CF:进位标志,加法时最高位出现进位或减法时最高位出现借位,该位为1.
PF:奇偶标志,当运算结果的低8位中1的个数是偶数时,该位为1.
AF:半进位标志,作字节加法时,若低4位有向高4位的进位,或减法时,低4位有向高4位的借位,该位为1.
ZF:零标志,运算结果是0,该位为1.
SF:符号标志,运算结果最高位为1该位是1.
OF:溢出标志,有溢出,该位是1.
2 寄存器加立即数
下面看一个例子;
两加数符号位都为0,结果符号位变为1,OF = 1;
结果最高位为1,SF = 1;
结果不为0,ZF = 0;
第4位3与7相加时未向高位进位,辅助进位标志 AF = 0;
结果(低8位)为1011 1010共5个1,PF = 0;
相加结果未发生进位,CF = 0;
3 寄存器加寄存器
add bp, bx ; 运行如下图;1221的十六进制是04C5;BP一开始是0000;
我也记不清在什么情况会用到这样的;
4 [bx+si]寻址方式
运行如下;初始,
执行完以后,
指令是正确的;我也记不清什么情况会用到这样的;
汇编语言[bx+si]和[bx+di]方式寻址
[bx+si]和[bx+di]方式指定地址
[bx+si]表示一个内存单元
偏移地址为(bx)+(si)(即bx中的数值加上si中的数值)
指令mov ax,[bx+si]的含义
将一个内存单元的内容送入ax
这个内存单元的长度为2个字节(字单元),存放一个字
偏移地址为bx中的数值加上si中的数值
段地址在ds中
因为[bx+si]默认的段寄存器是ds,所以ADD [BX+SI],AL相当于add ds:[bx+si],al
就是把al的值与ds:[bx+si]的值相加,然后将结果放到ds:[bx+si]中。