欢迎来到 嗅灵易学

零基础也能上手的脚本技术课,一对一答疑带你入门

4.2 加法和减法

4.2 加法和减法

1.INC 和 DEC指令
  INC reg/mem ;+1
  DEC reg/mem ;-1   
 
2.add 指令
 
  将同尺寸的操作数相加
 
  add 目的操作数,源操作数
 
  相加的结果保存在目的操作数,其指令格式和MOV相同。
 
3.SUB指令
 
  将源操作数从目的操作数减掉,结果保存在目的操作数,指令格式同MOV
 
4.NEG指令
 
  (negate)通过将数字转换为对应的二进制补码求其相反数,
   NEG reg
   NEG mem
 
5.实现算术表达式
 
    Rval = -Xval + ( Yval - Zval)
 
    mov eax,Xval
    neg eax
    mov ebx,Yval
    sub ebx ,Zval
    add eax,ebx
    mov Rval,eax
 
 6.算术运算影响的标志
 
    1.零标志和符号标志
      目的操作数=0,ZF = 1
      mov cx,1     
      sub cx,1     ;cx = 0,ZF = 1
      mov ax,0ffffh
      inc ax       ;ax = 0,ZF = 1
      inc ax       ;ax = 1,ZF = 0
      算术结果为负,符号标志位被设置
      mov cx,0     
      sub cx,1       ;cx = -1,SF = 1
      add cx,2       ;cx = 1,SF = 0
    2.进位标志位
      只有无符号算术运算时,这个标志位才有意义。
      如果无符号加法运算的结果对目的操作数太大而无法容纳时,进位标志将被设置。
 
      mov al,0ffh
      add al,1                ;cf =1,al = 00
      如果将一个较大的无符号数整数从一个较小的无符号整数中减掉,进位标志也会被设置。
 
      mov al,1
      sub al,2   ;CF=1,AL=FF?
      INC,DEC 不影响进位标志
 
   3.溢出标志
     针对有符号算术运算的时候,溢出标志才是有效的。
 
     当算术运算产生的有符号的结果无法容纳于目的操作数中时,溢出标志就被设置。
 
       mov al,+127
       add al,1            ; OF =1
       
       mov al,-128
       sub al,1            ; OF=1
 
         正+正= 负
         负+负= 整
      说明溢出
      
      NEG 指令:  mov al,-128
                  neg al
                  al 装不下 +128,所以 OF = 1
     7.例子程序
 
       TITLE eflags test       {addsub.asm) ;TITLE 是个伪指令,相当于注释
; Description: test eflags value 
; Author: ukyohy
; Create Date: 2009-10-15
; Version:1.0
; Data:                 Modify by:
include Irvine32.inc
.data
   Rval sdword ?
   Xval sdword 26
   Yval sdword 30
   Zval sdword 40
.code                                 ;.code 伪指令标示代码段的开始,所有的可执行语句都放在此
main PROC                             ; PROC 伪指令标示子程序的开始,子程序的名字是main
   ;inc and dec
   mov ax,1000h
   inc ax
   dec ax
   ;expression: Rval = -Xval + (Yval - Zval)
   mov eax,Xval
   neg eax
   mov ebx,Yval
   sub ebx,Zval
   add eax,ebx
   mov Rval,eax
   ;zero flag
   mov cx,1
   sub cx,1   ;ZF=1
   mov ax,0FFFFh ;
   inc ax
   ;sign flag
   mov cx,0
   sub cx,1    ;SF = 1
   mov ax,7FFFh
   add ax,2    ;SF = 1
   ;Carry flag
   mov al,0FFh
   add al,1   ; CF = 1
   ;overflow flag 
   mov al,+127 ;
   add al,1   ;OF = 1
   mov al,-128 
   sub al,1   ;OF = 1,SF = 1
       
   exit
main ENDP                             ;ENDP伪指令标示子程序结束
 
   ;插入其他程序
END main                              ;END伪指令表明该行是程序最后一行,编译器将忽略后面的内容,main 表示该程序的入口点
 
各个标志位总结:
 
     CF :进位标志,最高有效位发生进位或者借尾,该标志设置为1.
     AF  :辅助进位标志,bit 3发生进位或者借位,该标志设置为1
     PF  : 奇偶位,最低有效字节值等于1的位数总数如果是偶数,该标志设置为1
     SF  : 符号位,取的最高有效位的值
     ZF  :结果为0,设置为1
     OF   : CF 标志和次高位进位的异或值
             01000000
             01000000  ;OF = 1
 
             01000000
             11000000   ;OF = 0
 
             11000000
             11000000   ;OF = 0
 
             10000000   
             10000000  ; OF =  1 
 ------------------------------------------------------------------
 
下面几个问题使用以下数据
 
.data
 val1 byte 10h
 val2 word 8000h
 val3 dword 0ffffh
 val4 word 7fffh
1.写一条val2加1的指令
 
  inc val2
 
2.写一条从val3中减掉eax的指令
  
  sub val3,eax
 
 
3.写一条或多条指令从val2中减去val4
   mov ax,val4
   sub val2,ax
 
4.如果使用add指令对val2加1,那么进位标志和符号标志的值分别是什么?
 
  CF = 0,SF = 1 ;SF 的值是最高有效位的结果。
 
5.如果使用add指令对val4加1,那么进位标志和符号标志的值分别是什么?
  CF = 0,SF = 1.
  OF = 1  
 
6.在每条指令执行后,在提示出写下进位,符号,零,溢出标志
   mov ax,7ff0h               
   add al,10h                  CF=   1      SF = 0    ZF= 1   OF= 0
   add ah,1                    CF=   0      SF = 1    ZF= 0   OF= 1
   add ax,2                    CF=   0      SF = 1    ZF= 0   OF= 0
7.用汇编语言实现下面的表达式:AX=(-VAL2+BX) -VAL4
 
  mov ax,val2
  neg ax
  add ax,bx
  sub ax,val4
 
8.正整数和负整数相加的时候是否有可能设置溢出标志位?
  不会,整数最高有效位是0,负数时1,如果次高位进位必然导致最高位进位,如果次高位不进位,最高位也不会进位。
  所以OF始终等于0.
9.负整数和负整数相加产生正整数时是否会设置溢出标志位?
  会,负数最高位是1,次高位如果进位,那么结果会变成负数,所以只有次高位不进位才会产生整数。
   这样OF必定等于1
10.NEG指令是否可能设置溢出标志位
   可能  
11.符号标志和零标志是否可能同时被设置?
   不可能。
12.挑战:写两条连续的指令来同时设置进位标志和溢出标志位的值。
   mov al,80h
   add al,80h

注意:上传附件及图片大小不得大于30M。

⚠️ 版权声明:
本博客所有内容(含教程、源码、工具)仅供个人技术学习与研究交流使用,严禁商用、倒卖、二次分发及非法用途。
未经作者书面授权,任何组织或个人不得转载、复制或用于其他平台,违者将追究相关责任。

0 0 0 举报
复制成功