汇编-加减法指令

算术运算、逻辑运算与移位操作指令

加法运算类指令

加法指令

普通加法指令 ADD 影响 6 个标志位

带进位加法指令 ADC 影响 6 个标志位

1 指令 INC 影响 5 个标志位 不会影响 CF

使用 ADC 之前要先把 CF 清零

INC 的操作数不可以是段寄存器立即数

求内存数据段中 M1M2 为首的 两个 20 字节数之和,并将结果写入 M2 为首的区域中

按照字节运算

	LEA SI, M1
	LEA DI, M2
    MOV CX, 20
	CLC   ; 使CF = 0
    
NEXT: MOV  AL, [SI]
      ADC [DI], AL
      INC SI
      INC DI
      DEC CX
      JNZ NEXT
     
      HLT

按照字运算

	LEA SI, M1
	LEA DI, M2
    MOV CX, 10
	CLC   ; 使CF = 0
    
NEXT: MOV  AX, [SI]
      ADC [DI], AX
      ADD SI, 2
      ADD DI, 2
      DEC CX
      JNZ NEXT
     
      HLT

减法运算类指令

SUB: 对标志位的影响与 ADD 相同

SBB: 对标志位的影响与 INC​ 相同 对操作数的要求及对标志位的影响与 SUB 相同

SUB: OPRD1  OPRD2  CF > OPRD1

DEC 对操作数的要求及对标志位的影响与 INC 相同

应用程序例

; 程序功能: 延时(定时)
		MOV BL, 2
NEXT1:  MOV CX, 0FFFFH ; 0是为了让计算机识别这是一个16进制数字
NEXT2:  DEC CX
		JNZ NEXT2 ;ZF=0 转NEXT2
		DEC BL   
		JNZ NEXT1 ; ZF=0 转NEXT1
		HLT   ;暂停执行

NEG 指令

NEG OPRD 8/16

0  OPRD > OPRD

因此这个指令又叫求补指令

执行NEG指令之后,一般情况下都会使得 CF1 ,除非给定的操作数为零才会使 CF0

当指定的操作数的值为 80H(128) 或者 8000H(32768) ,则执行 NEG 指令后 结果不变,但 OF 置一,其他情况下 OF 均置零

CMP 指令

CMP OPRD1,OPRD2

操作 OPRD1  OPRD2

指令执行的结果不影响目标操作数,仅影响标志位

常用于比较两个数字的大小

  • 两个无符号数的比较

    CMP AX,BX

    AXBXCF=0

    AX<BXCF=1

    AX=BXCF=0ZF=1

  • 两个带符号数的比较

    CMP AX,BX

    两个数字的大小由 OFSF 共同决定

    OFSF 状态相同 AXBX

    OFSF 状态不同 AX<BX

    ( )

    CMP 指令示例

    		LEA BX, MAX
    		LEA SI, BUF
    		MOV CL, 20
    		MOV AL, [SI]
    NEXT :  INC SI
    		CMP AL, [SI]
    		JNC GOON		; CF=0转移
    		XCHG [SI], AL
    GOON:   DEC CL
    		JNZ NEXT
    		MOV [BX], AL
    		HLT
    

    程序功能20 个数字中寻找最大值并放入 MAX

posted @   ccz9729  阅读(1253)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示