8086汇编 add指令学习

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]中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值