80X86汇编语言程序设计 第二章⑤.8086 8088指令系统(二)加减运算指令.doc

80X86汇编语言程序设计 第二章⑤.8086 8088指令系统(二)加减运算指令.doc

  1. 1、本文档共5页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
80X86汇编语言程序设计 第二章⑤.8086 8088指令系统(二)加减运算指令

80X86汇编语言程序设计 第二章 8086/8088寻址方式和指令系统 (二)加减运算指令 1.加法指令ADD 格式:ADD OPRD1,OPRD2 执行的操作:(OPRD1)←(OPRD1)+(OPRD2) 例如:MOV AX,7896H ;(AX)=7896H 即(AH)=78H (AL)=96H ;各标志位保持不变 ADD AL,AH ;AL=AL+AH=96H+78H(=10EH)=0EH 前面的1给了进位标志CF。 即(AH)=78H (AX)=780EH CF=1 PF=0 AF=0 ZF=0 SF=0 OF=0 例如:ADD DX,0F0F0H 执行前(DX)=4652H 执行后(DX)=4652H+F0F0H(=13742H)=3742H 前面的1给了进位标志CF。 ZF=0 SF=0 CF=1 OF=0 这里4的二进制码是0100,F是1111,一个正数一个负数相加肯定OF是0。 例如:ADD AX,4321 执行前(AX)=62A0H 执行后(AX)=62A0+4321=A5C1H 这里要注意,A的二进制数是1010,最高有效位为1,所以SF为1。 两个正数相加,结果为负的就溢出;两个负数相加,结果为正的就溢出。 SF=1 ZF=0 CF=0 OF=1 这里6的二进制码是0110,而4的二进制码是0100,两个正数相加,结果A为1010为负,所以OF为1。 从上面例子可看出:加法指令影响标志位。 OF位根据操作数的符号及其变化情况来设置:若两个操作数的符号相同而结果的符号与之相反时OF=1,否则OF=0。 CF位可以用来表示无符号数的溢出。由于无符号数的最高有效位只有数值意义而无符号意义,所以从该位产生的进位应该是结果的实际进位值,但在有限数的范围内就说明了结果。 2.带进位加指令ADC(Add with Carry) 格式:ADC OPRD1,OPRD2 执行的操作:(OPRD1)←(OPRD1)+(OPRD2)+(CF) 例如:下列指令序列执行两个双精度(32位)的加法。设目的操作数放在DX和AX寄存器中,其中DX存放高位字,源操作数存放在BX、CX中,其中BX存放高位字。(双精度的数高位和高位相加,低位和低位相加,首先加低位。) 如指令执行前:(DX)=0002H (AX)=0F365H (BX)=0005H (CX)=0E024H 指令序列为:ADD AX,CX ADC DX,BX 执行第一条指令后: (AX)=AX+CX=F365+E024)=1D389)=D389H SF=1 ZF=0 CF=1 OF=0 这里F的二进制是1111,E的二进制是1110,得出的D是1101。所以OF为0。(8以上全是负的,8以下全是正的) 执行第二条指令后: (DX)=DX+BX+CF=0002+0005+0001=0008H SF=0 ZF=0 CF=0 OF=0 则该指令序列执行完后:(DX)=0008H (AX)=D389H 从上面的例子可以看出: 为实现双精度加法,必须用两条指令分别完成低位字和高位字的加法,而且在高位字相加时,应该使用ADC指令以便把前一条ADD指令作低位字加法所产生的进位值加入高位字之内。另外,带符号的双精度数的溢出,应该根据ADC指令的OF位来判断,而作低位加法用的ADD指令的溢出是无意义的。此指令影响标志位。 3.加1指令INC(INCrement) 格式:INC OPRD 这条指令完成对操作数OPRD加1,然后把结果送回OPRD,即: (OPRD)←(OPRD)+1 操作数OPRD可以是通用寄存器,也可以是存储单元。这条指令执行的结果影响标志ZF、SF、OF、PF和AF,但它不影响CF。 该指令主要用于调整地址指针和计数器。 例如:写出把首地址为BLOCK的字数组的第6个字送到DX寄存器的指令。 要求使用以下几种寻址方式: (1)寄存器间接寻址 MOV BX,OFFSET BLOCK ;首先把BLOCK里的偏移地址送给BX ,这里也可以用LEA BX,BLOCK ADD BX,000AH MOV DS,[BX] (2)寄存器相对寻址 LEA BX,BLOCK

文档评论(0)

yan698698 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档