汇编语言加法和减法详解

本文详细介绍了汇编语言中的加法和减法运算,包括INC和DEC指令、ADD和SUB指令、NEG指令,以及它们如何影响CPU的标志位。通过示例展示了如何执行加减法表达式,并解释了各种标志位的变化情况。
摘要由CSDN通过智能技术生成

算术运算是汇编语言中一个大得令人惊讶的主题!本节重点在于加法和减法的运算。

 

先从最简单、最有效的指令开始:INC(增加)和 DEC(减少)指令,即加 1 和减 1。然后是能提供更多操作的 ADD、SUB 和 NEG(非)指令。最后,将讨论算术运算指令如何影响 CPU 状态标志位(进位位、符号位、零标志位等)。请记住,汇编语言的细节很重要。

INC 和 DEC 指令

INC(增加)和DEC(减少)指令分别表示寄存器或内存操作数加 1 和减 1。语法如下所示:

INC reg/mem
DEC reg/mem

下面是一些例子:

  .data  myWord WORD 1000h  .code  inc myWord                         ; myWord = 1001h  mov bx,myWord  dec bx                             ; BX = 1000h

根据目标操作数的值,溢岀标志位、符号标志位、零标志位、辅助进位标志位、进位标志位和奇偶标志位会发生变化。INC 和 DEC 指令不会影响进位标志位(这还真让人吃惊)。

ADD 指令

ADD 指令将长度相同的源操作数和目的操作数进行相加操作。语法如下:

ADD dest,source

在操作中,源操作数不能改变,相加之和存放在目的操作数中。该指令可以使用的操作数与 MOV 指令相同。下面是两个 32 位整数相加的短代码示例:

  .data  var1 DWORD 10000h  var2 DWORD 20000h  .code  mov eax,var1    ; EAX = 10000h  add eax,var2    ; EAX = 30000h

标志位:进位标志位、零标志位、符号标志位、溢出标志位、辅助进位标志位和奇偶标 志位根据存入目标操作数的数值进行变化。

SUB 指令

SUB 指令从目的操作数中减去源操作数。该指令对操作数的要求与 ADD 和 MOV 指令相同。指令语法如下:

SUB dest, source

下面是两个 32 位整数相减的短代码示例:

  .data  var1 DWORD 30000h  var2 DWORD 10000h  .code  mov eax,var1         ;EAX = 30000h  sub eax,var2         ;EAX = 20000h

标志位:进位标志位、零标志位、符号标志位、溢出标志位、辅助进位标志位和奇偶标 志位根据存入目标操作数的数值进行变化。

NEG 指令

NEG(非)指令通过把操作数转换为其二进制补码,将操作数的符号取反。下述操作数可以用于该指令:

NEG reg
NEG mem

提示:将目标操作数按位取反再加 1,就可以得到这个数的二进制补码。

标志位:进位标志位、零标志位、符号标志位、溢出标志位、辅助进位标志位和奇偶标志位根据存入目标操作数的数值进行变化。

执行算术表达式

使用 ADD、SUB 和 NEG 指令,就有办法来执行汇编语言中的算术表达式,包括加法、减法和取反。换句话说,当有下述表达式时,就可以模拟 C++ 编译器的行

  • 4
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值