ASM16

算术运算类指令

  • 四则运算是计算机经常进行的一种操作。算术运算指令实现二进制(和十进制)数据的四则运算
  • 请注意算术运算类指令对标志的影响
    • 掌握:ADD/ADC/INC、SUB/SBB/DEC/NEG/CMP
    • 熟悉:MUL/IMUL、DIV/IDIV
    • 理解:CBW/CWD、DAA/DAS、AAA/AAS/AAM/AAD

加法指令ADD

  • ADD指令将源与目的操作数相加,结果送到目的操作数
  • ADD指令按状态标志的定义相应设置
1
2
3
4
5
6
7
8
ADD  reg,imm/reg/mem
; reg<-reg+imm/reg/mem
ADD mem,imm/reg
; mem<-mem+imm/reg

mov ax,1
mov bx,2
add ax,bx

带进位加法指令ADC

  • ADC指令将源与目的操作数相加,再加上进位CF标志结果送到目的操作数
  • ADC指令按状态标志的定义相应设置
  • ADC指令主要与ADD配合,实现多精度加法运算

image-2

减法指令SUB

  • SUB指令将目的操作数减去源操作数,结果送到目的操作数

  • SUB指令按照定义相应设置状态标志

    image-20240730180

带借位减法指令SBB

  • SBB指令将目的操作数减去源操作数,再减去借位CF(进位),结果送到目的操作数
  • SBB指令按照定义相应设置状态标志
  • SBB指令主要与SUB配合,实现多精度减法运算

image-20240730180932321

减量指令DEC

  • DEC指令对操作数减1(减量)
  • DEC指令不影响进位CF标志,按定义设置其他状态标志

image-20240730181213127

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
;算法运算类指令
;32位加法/减法
mov ax,0ffffh
sub bx,bx
mov cx,1
sub dx,dx
add ax,cx
adc bx,dx ;带借位加法
sub ax,cx
sbb bx,dx ;带借位减法
add bx,1
inc bx
dec bx
;补码
mov ax,1
neg ax

求补指令NEG(negative)

  • NEG指令对操作数执行求补运算:用零减去操作数然后结果返回操作数
  • 求补运算也可以表达成:将操作数按位取反后加1
  • NEG指令对标志的影响与用零作减法的SUB指令一样

image-20240730182116674