汇编基础03:数学运算&逻辑运算

Catalogue
  1. 1. 汇编基础03:数学运算&逻辑运算
    1. 1.1. 数字运算
      1. 1.1.1. 进制度量单位
      2. 1.1.2. 加法
      3. 1.1.3. 减法
      4. 1.1.4. 乘法
      5. 1.1.5. 除法【待解决疑问】
      6. 1.1.6. 自增
      7. 1.1.7. 自减
    2. 1.2. 逻辑运算
      1. 1.2.1.
      2. 1.2.2.
      3. 1.2.3. 异或
      4. 1.2.4.
    3. 1.3. neg mem

汇编基础03:数学运算&逻辑运算

数字运算

进制度量单位

image-20200518165645492

加法

加法指令:ADD

格式:ADD OPRD1 ,OPRD2

功能:两数相加

加法指令运算结果对CF,SF,OF,PF,ZF,AF都有影响,不允许OPRD1 和OPRD2同时为存储器

带进位的加法指令:ADC

功能:OPDR1= OPDR1 + OPDR2 + CF

结果放在操作数1里

示例:

1
2
3
4
5
6
7
8
9
10
.586
.MODEL flat, stdcall
.code
main proc
mov eax ,5
mov ebx ,5
add eax ,ebx
mov eax ,eax
main ENDP
END main

减法

减法指令:SUB

格式:SUB OPRD1,OPRD2

功能:两个操作数相减,从OPDR1中减去OPDR2,结果保存在OPDR1中

立即数不能用于目的操作数,两个存储器之间的操作数之间不能直接相减,操作数可为8位或16位的无符号数或带符号数

带借位减法指令:SBB

格式:SBB OPDR1,OPDR2

功能:OPDR1 = OPDR1 - OPDR2 -CF

示例:

1
2
3
4
5
6
7
8
9
10
.586
.MODEL flat, stdcall
.code
main proc
mov eax ,15
mov ebx ,5
sub eax ,ebx
mov eax ,eax
main ENDP
END main

乘法

无符号位乘法指令:MUL

格式:MUL OPDR

带符号位乘法指令:IMUL

格式:IMUL OPDR

功能:乘法操作

OPDR位通用寄存器或存储器操作数

本指令影响标志位:CF,OF

乘法指令是将操作数*EAX,并将结果返回EAX,所以只需要一个操作数

示例:

1
2
3
4
5
6
7
8
9
10
.586
.MODEL flat, stdcall
.code
main proc
mov eax ,2
mov ebx ,5
mul ebx
mov eax ,eax
main ENDP
END main

除法【待解决疑问】

无符号位除法指令:DIV

格式:DIV OPDR

有符号位除法指令:IDIV

格式:IDIV OPDR

功能:实现两个带符号数的二进制除法运算

16bit的被除数,商放在AL,余数放在AH

32bit的被除数,商放在AX,余数放在DX

64bit的被除数,商放在EAX,余数放在EDX

128bit的被除数,商放在RAX,余数放在RDX

示例:

1
2
3
4
5
6
7
8
9
10
11
12
.586
.MODEL flat, stdcall
.code
main proc
mov ax,1000
mov bl,50
div bl
mov ah,ah
mov al,al
mov eax,eax
main ENDP
END main

出现的问题:

  1. vs2015里面不能看到变量的变化

自增

+1指令:INC

格式:INC OPDR

功能:OPDR = OPDE +1

示例:

1
2



自减

-1指令:DEC

格式:DEC OPDR

功能:OPDR = OPDE -1

逻辑运算

image-20200518165714673

指令:AND

格式:AND OPDR1,OPDR2

影响标志位PF、SF、ZF,使CF = 0 ,OF= 0

主要用于修改操作数或置某些位为零


指令:OR

格式:OR OPDR1,OPDR2


异或

指令:XOR

格式:XOR OPDR1,OPDR2


指令:NOT

格式:NOT exp

neg mem

转换成二进制补码,也就是补码+1