80X86学习笔记--算术运算指令

原创 2012年03月23日 15:55:17

一.加减运算指令

1.加法指令ADD

格式:ADD OPRD1, OPRD2

操作:OPRD1<-OPRD1+OPRD2

加法指令影响标志位,OF位更具操作数符号变化情况来设置:若两个操作数符号相同而结果与之相反时溢出,OF=1,否则OF=0。

CF可以用来表示无符号数的溢出,最高位产生进位或借位,产生溢出,CF=1。

2.带进位的加指令ADC

格式:ADC OPRD1, OPRD2

操作:OPRD<-OPRD1+OPRD2+CF

ADD AX, CX

ADD DX, BX

为实现双精度加法,必须使用两条指令完成低位字和高位字加法,在使用高位字相加时,应用ADC把前一条ADD作低位字加法所产生的进位值加入高位字之内,带符号的双精度溢出,应根据ADC的OF位来判断。

3.加1指令INC

格式:INC OPRD

操作:OPRD<-OPRD+1

操作数可以使通用寄存器,存储单元,影响标志位ZF,SF,OF,PF和AF,但不影响CF,该指令主要用于调整地址指针和计数器。

4.减法指令SUB

格式:SUB OPRD1,OPRD2

操作:OPRD1<-OPRD1-OPRD2

减法溢出:若两个数的符号相反, 而结果符号与减数相同则OF=1,结果溢出。

5.带进位减指令SBB

格式:SBB OPRD1, OPRD2

操作:OPRD1<-OPRD1 – OPRD2 – CF

例:

SBB AL, DL

SBB DX, AX

该指令主要用于多字节数相减。

6.减1指令DEC

DEC OPRD

操作:OPRD<-OPRD-1

例:

DEC VARB

操作数可以使通用寄存器,也可是存储单元,在相减时,把操作数作为一个无符号数对待。这条指令执行的结果影响ZF,SF,OF,PF,AF,不影响CF。

该指令主要用于调整地址指针和计数器。

7.取补指令NEG

格式:NEG OPRD

操作:OPRD<- -OPRD

该指令对操作数取补,就是用0减去操作数,再把结果送回操作数。

若在字节操作时对128取补,或在字操作对32768取补,则操作数不变,但OF被置为1,其他均为0.

操作数可以是通用寄存器,也可是存储单元,此指令执行结果影响CF,ZF,SF,OF,AF,PF.

操作数为0时,运算结果使CF=0,其他情况则均为1.

8.比较指令CMP

格式:CMP OPRD1, OPRD2

操作数OPRD1减去OPRD2,运算结果不送到OPRD1,但影响标志CF,ZF,SF,OF,AF,PF。

执行比较指令后,可根据ZF是否置位,判断两者是否相等,若两者是无符号数,则根据CF判断大小;若为有符号数,则根据SF OF判断大小。

二.乘除运算指令

乘除运算指令分为有符号数和无符号数运算指令。

1.乘法指令

一个操作数总是因旱灾寄存器AL或AX中,另一个操作数可以采用立即数方式以外的任一种寻址方式。

(1)无符号乘法MUL

格式:MUL OPRD

两个8位相乘得16位放在AX中,两个16位相乘得32位乘积放到DX,AX,  DX存放高位字。

若乘积结果高半部分(字节相乘时为AX, 字相乘时为DX)不等于0,则标志CF=1,OF=1,否则CF=0, OF=0,所以若CF=1和OF=1表示AH或DX中含有结果的有效数,该指令对其他标志位无定义。

(2)有符号乘法指令IMUL

若乘积结果的高半部分不是低半部分符号扩展,则标志CF=1,OF=1,若CF=1,OF=1表示在AH或DX中含有结果的有效数,该指令对其他标志位无定义。

2.除法指令

除数总是因旱灾寄存器AX(除数是8位)或者DX和AX(除数是16位)中,另一个操作数可以采用除立即数方式外任意一种寻址方式。

(1)无符号数除法指令DIV

除以8位,商放在AL中,余数放在AH中。

除以16位,商放在AX,余数放在DX中。

若除数为0,或者在8位数除时超过8位,或者16位除时超过16位,则认为是除溢出,引起0号中断。

除法指令对标志位影响无定义。

(2)有符号数除法IDIV

当除数位0,或太大(字节除时超过127,字时超过32767),或者商太小(-127,-3267),则引起0号中断。

3.符号扩展指令

由于除法指令隐含使用字被除数或双字被除数,所以当除数位字节,或者除数和被除数为字时,需要在除操作前扩展被除数。

(1)字节转换为字指令CBW

例:

MOV AX, 3487H   ;AH=34H AL=87H

        CBW                  ;AH=0FFH, AL=87H

这条指令不影响各标志位。

(2)字转换为双字指令CWD

例:

MOV AX, 4567H    ;AX=4567H

CWD                   ;AX=4567H, DX=0

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

80X86学习笔记--数据传送指令

一.传送指令 格式:mov dst, src 源操作数可以使累加器,寄存器,存储单元,立即数。 目的操作数不能为立即数。 注意问题: 源和目的操作数不能同时是段寄存器;代...

80x86汇编语言学习笔记(四)

这次总结一下汇编语言中的变量和标号首先,变量和标号均表示存储单元,也就是某个地址,但不同的是,变量表示的存储单元用来存储数值,而标号表示的单元则是用来存储代码。由此可以推断,变量应该指向DS,标号应该...

80X86学习笔记--变量与标号

变量表示存储单元中存放的数值,标号表示存储单元中存放的指令代码。 (1)数据定义语句 通过数据定义语句可为数据项分配存储单元,并根据需要设置其初值,还可用符号代表数据项,此时符号与分配的存储单元相...

80x86汇编语言学习笔记(三)

今天上午开始看汇编语言程序设计初步,这一章分为:汇编语言语句、变量和标号、常用伪指令语句和源程序组织、顺序程序设计、分支程序设计、循环程序设计这几块,这次总结一下汇编语言的语句。 首先汇编语言的语句分...

80X86学习笔记--汇编语言的语句

(1)语句的种类和格式 1.语句的种类 指令语句和伪指令语句两类,指令语句有着与其对应的机器指令,伪指令语句没有与其对应的机器指令,只是指示汇编程序如何汇编源程序,包括符号的定义,变量的定义,段的...

80x86汇编学习笔记(时刻更新中)

在学习80x86语言的时候,时刻记录下来自己不懂的查到的知识。 1.  显示字符串后面跟随的 0DH,0AH,'$' 0DH 回车符ASCII码 0AH 换行符ASCII码 '$' DOS功能调用IN...

80x86汇编语言学习笔记(二)二次修改版

本来想上午搞定,但今天在外面逛了一天买东西。。。#相对昨天做了一些补充————2010/2/15##修改了有符号数使用CMP指令后标志CF和OF的值和两个操作数的大小关系——2010/2/23#这次总...

西门子PLC学习笔记十三-(算术运算指令与控制指令)

今天在写一篇PLC的学习笔记,本篇将介绍PLC最基本的运算指令与控制指令,本篇将直接上截图。 1.基本算数运算指令 1)整数运算 2)长整数运算 3)实数运算 、 ST...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)