概述:
加减法指令:
- INC和DEC指令:操作数加一或减一
- ADD指令 格式:ADD目的操作数,源操作数
- SUB指令 格式:SUB目的操作数,源操作数
- 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