首页 > 其他分享 >EFLGE对加减法的影响

EFLGE对加减法的影响

时间:2022-09-07 12:11:17浏览次数:77  
标签:标志 操作数 EFLGE mov eax 指令 ax 加减法 影响

概述:

加减法指令:

  1. INC和DEC指令:操作数加一或减一
  2. ADD指令  格式:ADD目的操作数,源操作数
  3. SUB指令  格式:SUB目的操作数,源操作数
  4. NEG求补指令:  指令通过将数字转换为对应的补码而求得其相反数

 

一、INC和DEC指令:操作数加一或减一

 1 INC reg/mem
 2 DEC reg/mem
 3 .data
 4 myWord world 1000h
 5 .code
 6 Inc myWord ;1001h
 7 Mov bx,myword
 8 Dec bx     ;1000h
 9 
10 INC ESI
11 DEC EDI

二、ADD指令:格式:ADD目的操作数,源操作数

1 .data
2 Var1 dword 10000h
3 Var2 dword 20000h
4 .code
5 Mov eax,var1 ;eax=10000h
6 Add eax,var2 ;eax=30000h

影响的标志:ADD指令根据目标噪作数的值相应修改进位标志、零标志、符号标志、溢出标志、
销助进位标志和奇仰标志

三、SUB指令:格式:SUB目的操作数,源操作数

1 .data
2 Var1 dword 30000h
3 Var2 dword 10000h
4 .code
5 Mov eax,var1 ;eax=30000h
6 sub eax,var2 ;eax=20000h

减法可以转换为加法运算,补码表示法:
                  4-1等价于4+(-1)
影响的标志:

        SUB指令根据目标操作数的值相应修改进位标志、零标志、符号标志、溢出标志、
        辅助进位标志和奇偶标志。

 

 

 四、NEG求补指令:指令通过将数字转换为对应的补码而求得其相反数

可以使用如下格式的操作数: NEGreg NEGmem
作用:将目的操作数的所有数据位取反加1:
D8求补之后是28 28+D8=100
14求补之后是EC EC+14=100
1234求补之后是EDCC EDCC+1234=10000
1111求补之后是EEEF 1111+EEEF=10000
影响的标志:进位标志(CF),零标志(ZF),符合标志(SF),溢出标志(OF),辅助进 位标志(AF),奇偶标志(PF);
当操作数为0时,置CF位为0当操作数不为0时,置CF位为1。


总结:实现算术表达式

模拟C++编译器表达式:rval=-xval+(yval-zVal);
翻译成汇编如下:
设:

 1 Rval SDWORD?
 2 Xval SDWORD26
 3 Yval SDWORD30
 4 Zval SDWORD40
 5 ; Expression: Rval =-Xval + (Yval-Zval)
 6 mov eax,Xval
 7 neg eax           ; -26
 8 mov ebx,Yval
 9 sub ebx,Zval    ; -10
10 add eax,ebx
11 mov Rval,eax   ;-36

 

七、例子程序分析

 1 ITLE  Addition and Subtraction        (AddSub3.asm)
 2 
 3 ; Chapter 4 example. Demonstration of ADD, SUB,
 4 ; INC, DEC, and NEG instructions, and how
 5 ; they affect the CPU status flags.
 6 ; Last update: 06/01/2006
 7 
 8 INCLUDE Irvine32.inc
 9 
10 .data
11 Rval   SDWORD ?
12 Xval   SDWORD 26
13 Yval   SDWORD 30
14 Zval   SDWORD 40
15 
16 .code
17 main PROC
18     ; INC and DEC
19     mov    ax,1000h
20     inc    ax        ; 1001h
21     dec    ax        ; 1000h
22 
23     ; Expression: Rval = -Xval + (Yval - Zval)
24     mov    eax,Xval
25     neg    eax        ; -26
26     mov    ebx,Yval
27     sub    ebx,Zval    ; -10
28     add    eax,ebx
29     mov    Rval,eax    ; -36
30 
31     ; Zero flag example:
32     mov    cx,1
33     sub    cx,1        ; ZF = 1
34     mov    ax,0FFFFh
35     inc    ax        ; ZF = 1
36 
37     ; Sign flag example:
38     mov    cx,0
39     sub    cx,1        ; SF = 1
40     mov    ax,7FFFh
41     add    ax,2        ; SF = 1
42 
43     ; Carry flag example:
44     mov    al,0FFh
45     add    al,1        ; CF = 1,  AL = 00
46 
47     ; Overflow flag example:
48     mov    al,+127
49     add    al,1        ; OF = 1
50     mov    al,-128
51     sub    al,1        ; OF = 1
52 
53     exit
54 main ENDP
55 END main

 

标签:标志,操作数,EFLGE,mov,eax,指令,ax,加减法,影响
From: https://www.cnblogs.com/-swordsman/p/16664952.html

相关文章