汇编基础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