汇编语言——算术运算类指令

算术运算类指令

知识回顾——几个重要标志位的含意

CF(进位标志) =1 算术操作最高位产生了进位或借位 =0 最高位无进位或借位 ;
PF(奇偶标志) =1 数据最低8位中1的个数为偶数 =0 数据最低8位中1的个数为奇数;
AF(辅助进位标志) =1 D3→D4位产生了进位或借位 =0 D3→D4位无进位或借位;
ZF(零标志) =1 操作结果为0 =0 结果不为0;
SF(符号标志) =1 结果最高位为1 =0 结果最高位为0;
OF(溢出标志) =1 此次运算发生了溢出 =0 无溢出。

加法指令
加法指令ADD
  • 格式
    ADD reg,imm/reg/mem ; reg<——reg+imm/reg/mem
    ADD mem,imm/reg ;mem<——mem+imm/reg
  • 例:设ADD AL, BL指令执行前,AL=66H,BL=20H,执行指令之后,AL=?,BL=?标志位影响情况为: CF=?,ZF=?,SF=?,AF=?, OF=?,PF=?

在这里插入图片描述

加法指令ADC
  • 格式
    ADC reg,imm/reg/mem;reg<-reg+imm/reg/mem+CF
    ADC mem,imm/reg;mem<-mem+imm/reg+CF
    低位+低位 ADD。高位+高位 ADC
  • 作用:ADC指令主要配合ADD,实现多字节或多精度数据的相加的运算
mov ax,4652h	;ax=4652h
mov dx,0234h	;dx=0234h
mov cx,0f0f0h      ;cx=0f0f0h
mov bx,0f0f0h      ;bx=0f0f0h
add ax,cx	;ax=3742h,CF=1
adc dx,bx	;dx=f325h,CF=0
增量指令INC

INC reg/mem ;reg/mem←reg/mem+1

  • INC指令对操作数加1(增量)
    INC指令不影响进位CF标志,按定义设置其他状态标志
    注意内存字节单元和内存字单元

  • 用途:循环循环程序中修改地址指针和循环次数等

  • 例子:inc bx
    inc byte ptr [bx]

加法调整指令DAA
  • 功能:将两个压缩BCD数之和(默认在AL中)调整为正确的BCD码
  • 注:BCD码:用4位2进制数来表示1位10进制数
    DAA指令之前必须执行ADD或ADC指令,
  • 调整方法:
    ①若AF=1或AL低4位是A-F,则AL+06H,AF置1
    ②若CF=1或AL高4位是A-F,则AL+60H,CF置1
    DAA指令对OF标志无定义,但影响其他标志位
    在这里插入图片描述

减法

减法指令SUB
  • 格式
  • SUB reg,imm/reg/mem ; reg<——reg+imm/reg/mem
    SUB mem,imm/reg ;mem<——mem+imm/reg
  • SUB功能:将目的操作数减去源操作数,结果送到目的操作数
    若减数>被减数,此时有借位则CF=1,否则CF=0。
    若两个数的符号相反,而结果的符号与减数相同则OF=1,除上述情况外OF=0
    在这里插入图片描述
带借位减法指令SBB
  • SBB功能:将目的操作数减去源操作数,再减去借位CF(进位),结果送到目的操作数。
    SBB指令主要与SUB配合,实现多精度减法运算
  • 格式:
    SBB reg,imm/reg/mem;reg<-reg-imm/reg/mem-CF
    SBB mem,imm/reg;mem<-mem-imm/reg-CF
mov ax,4652h	;ax=4652h
sub ax,0f0f0h	;ax=5562h,CF=1
mov dx,0234h	;dx=0234h
sbb dx,0f0f0h	;dx=1143h,CF=1
;DX-AX= 0234 4652H
  	    -F0F0 F0F0H
    	=1143 5562H
减量指令DEC
  • 格式:DEC reg/mem;reg/mem←reg/mem-1
  • INC指令和DEC指令都是单操作数指令。主要用于对计数器和地址指针的调整
比较指令CMP
  • 格式
    CMP reg, imm/reg/mem; reg一 imm/reg/mem
    CMP mem, imm/reg; mem - imm/reg
  • 功能:将目的操作数与源操作数内容相减,相减结果不回送目的操作数,仅根据结果影响标志位,对标志位的影响与SUB相同。
  • 例子:设AL=68H, CL =9AH,执行指令CMP AL,CL执行后,AL=?,CL=?,CF=?,ZF=?,SF=?,AF=?, OF=?,PF=?
    AL=68H,CL=9AH 标志位于SUB相同。
  • 例: 比较AL与100的大小,若AL<100,则跳转到BE处执行
CMP AL,100 ; AL←100
JB BE; AL<100, 跳转到BE处执行
SUB AL,100; AL>100, A←AL-100
INC AH; AH←AH+1
BE:
...

执行比较指令之后,可以根据标志判断两个数是否相等、大小关系等

压缩BCD码减法DAS
  • 注:DAS指令之前必须执行SUB或SBB指令
  • 调整方法是:
    ①若AF=1或AL低4位是A-F,则AL-06H,AF置1
    ②若CF=1或AL高4位是A-F,则AL-60H,CF置1
    DAS指令对OF标志无定义,但影响其他标志位
    在这里插入图片描述

乘法(操作数部分隐含)

无符号数乘法 MUL
  • 格式
  • MUL 源(reg/mem);AX<-AL * 源(字节乘)
    ;DX,AX<-AX * 源(字乘)
    若结果的高半部分(字节乘AH,字乘DX)不等于0.CF=OF=1;
    等于0. CF=OF=0;

  • MULDL; AX←AL X DL
    MULCX ; DX,AX← AX X CX
    MUL BYTE[SI] ; AX←-AL X 内存中字节
    MUL WORD[BX] ; DX,AX← AX X 内存中字
带符号数乘法指令IMUL
  • 格式:
    IMUL OPD
    操作与MUL相似,不同的是操作数为带符号数。
  • 例. 如(AL)=0B4H,(BL)=11H求执行指令IMUL BL 和 MUL BL
  • 解:(AL)=0B4H为无符号数的180D,带符号数的-76D
    (BL) =11H 为无符号数的17D, 带符号数的17D
    执行IMUL的结果为: (AX)=0FAF4H==-1292D
    执行MUL 的结果为: (AX)=0BF4H=3060D
    CF = OF =1

除法

无符号数除法指令
  • 格式
    除法指令
    DIV r8/m8;无符号字节除法。AL←-AX +r8/m8的商,AH←-AX : r8/m8的余数
    DIV r16/m16;无符号字除法。AX←-DX.AX: r16/m16的商,DX←-DX.AX+ r16/m16的余数
    除法指令对标志没有定义,但会产生除法溢出
  • 注:当opd即除数为8位,被除数在AX中(16位)
    当opd即除数为16位,被除数在DX,AX中(32位)。
    opd不能是立即数。
    除法指令对所有标志位均无定义,但会产生除法溢出。
带符号数除法指令
  • I格式:DIV opd (操作同DIV,但操作数必须是带符号数)

  • 例.设(AX)=0400H,(DL)=0B4H
    即(AX)为无符号数的1024D,带符号数的+1024D
    (DL)为无符号数的180D, 带符号数的-76D

  • 解:DIV DL的结果是: (AH) = 7CH = 124D 余数
    (AL)=05H=5D 商
    DIV DL的结果是: (AH)=24H=36D 余数
    (AL)=0F3H=-13D 商

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值