1、第一章第一章 微型计算机系统导论微型计算机系统导论(第一讲)第一讲)算术运算指令1本讲主要内容第四章第四章 80 x86 指令系统指令系统(第第五五讲讲)(1 1)加法指令)加法指令n ADD(add)加法加法格式:格式:ADD DST,SRC操作:操作:DST=DST+SRCn ADC(add with carry)带进位的加法带进位的加法格式:格式:ADC DST,SRC操作:操作:DST=DST+SRC+CFn INC(increment)加加1格式:格式:INC DST操作:操作:DST=DST+1算术运算指令算术运算指令第四章第四章 80 x86 80 x86 指令系统指令系统算术运
2、算指令算术运算指令说明:说明:1、DST:REG/MEM,SRC:8/16data/REG/MEM。2、DST、SRC不能同时为不能同时为MEM。3、加法指令影响标志寄存器的状态标志。、加法指令影响标志寄存器的状态标志。4、INC指令不影响指令不影响CF标志。标志。第四章第四章 80 x86 80 x86 指令系统指令系统算术运算指令算术运算指令 例例 4.3 计 算 两 个 多 字 节 十 六 进 制 数 之 和:计 算 两 个 多 字 节 十 六 进 制 数 之 和:3B74AC60F8H+20D59E36C1H=?式中被加数和加数均有式中被加数和加数均有5个字节,可以编一个循环程序实现个
3、字节,可以编一个循环程序实现以上运算。假设已将被加数和加数分别存入从以上运算。假设已将被加数和加数分别存入从DATA1和和DATA2开始的两个内存区,且均为低位字节在前,高位字节在后,如图开始的两个内存区,且均为低位字节在前,高位字节在后,如图4.15所示。要求相加所得结果仍存回以所示。要求相加所得结果仍存回以DATA1为首址的内存区。为首址的内存区。第四章第四章 80 x86 80 x86 指令系统指令系统算术运算指令算术运算指令F8H60HACH存储器DATA174H3BHC1H36H9EHD5H20HDATA2被加数加数图4.19 例4.3中被加数和加数在内存中的存放情况 第四章第四章
4、80 x86 80 x86 指令系统指令系统算术运算指令算术运算指令程序如下:程序如下:MOV CX,5;设置循环次数;设置循环次数 MOV SI,0 ;置位移量初值;置位移量初值 CLC ;清进位;清进位CFLOOPER:MOV AL,DATA2SI ;取一个加数;取一个加数 ADC DATA1SI,AL ;和一个被加数相加;和一个被加数相加 INC SI ;位移量加;位移量加1 DEC CX ;循环次数减;循环次数减1 JNZ LOOPER ;加完否,若没完,转;加完否,若没完,转LOOPER,;继续相加继续相加 HLT ;程序暂停;程序暂停 第四章第四章 80 x86 80 x86 指令
5、系统指令系统算术运算指令算术运算指令(2 2)减法指令)减法指令SUB(subtract)SUB(subtract)减法减法格式:格式:SUB DSTSUB DST,SRCSRC操作:操作:DST=DST-SRCDST=DST-SRCSBB(subtract with borrow)SBB(subtract with borrow)带借位的减法带借位的减法格式:格式:SBB DSTSBB DST,SRCSRC操作:操作:DST=DST-SRC-CFDST=DST-SRC-CFDEC(Decrement)DEC(Decrement)减减1 1格式:格式:DEC DSTDEC DST操作:操作:D
6、ST=DST-1DST=DST-1第四章第四章 80 x86 80 x86 指令系统指令系统算术运算指令算术运算指令NEG(Negate)NEG(Negate)求补求补格式:格式:NEG DSTNEG DST操作:操作:DST=0-DST DST=0-DST 利用利用NEGNEG指令可以得到负数的绝对值指令可以得到负数的绝对值CMP(Compare)CMP(Compare)比较比较格式:格式:CMP DST,SRCCMP DST,SRC操作:操作:DST-SRCDST-SRC 相当于减法,但不保存结果,仅影响标志。相当于减法,但不保存结果,仅影响标志。第四章第四章 80 x86 80 x86
7、指令系统指令系统算术运算指令算术运算指令说明:说明:1、DST:REG/MEM,SRC:8/16data/REG/MEM。2、DST、SRC不能同时为不能同时为MEM。3、减法指令影响标志寄存器的状态标志。、减法指令影响标志寄存器的状态标志。4、DEC指令不影响指令不影响CF标志。标志。第四章第四章 80 x86 80 x86 指令系统指令系统算术运算指令算术运算指令(3 3)乘法指令)乘法指令MUL(Unsigned Multiple)MUL(Unsigned Multiple)无符号数乘法无符号数乘法 格式:格式:MUL SRCMUL SRC 操作:操作:AX=ALAX=AL*SRC(SR
8、C(字节)字节)/DX,AX=AX/DX,AXAL,=AL,余数余数=AH=AH 2 2、字除法:、字除法:DX,AX/SRC,DX,AX/SRC,商商=AX,=AX,余数余数=DX=DX第四章第四章 80 x86 80 x86 指令系统指令系统算术运算指令算术运算指令ALAL源操作数源操作数AXAXAHAHAXAXAXAX源操作数源操作数DXDXDXDX商商余数余数8 8位位1616位位1616位位3232位位除数除数除数除数被除数被除数被除数被除数第四章第四章 80 x86 80 x86 指令系统指令系统算术运算指令算术运算指令IDIV(Signed divide)IDIV(Signed
9、divide)有符号数除法有符号数除法格式:格式:IDIV SRCIDIV SRC操作:类似操作:类似DIVDIV。说明:说明:1 1、SRC SRC 为为 REG/MEMREG/MEM。2 2、除法指令影响状态标志但对所有标志无定义。、除法指令影响状态标志但对所有标志无定义。3 3、商可能出现溢出,会立即产生除法溢出中断。、商可能出现溢出,会立即产生除法溢出中断。第四章第四章 80 x86 80 x86 指令系统指令系统算术运算指令算术运算指令(5)符号扩展指令)符号扩展指令CBW(Convert byte to word)CBW(Convert byte to word)字节扩展到字字节扩
10、展到字格式:格式:CBW CBW;如果(如果(ALAL)80H,80H,则(则(AHAH)00H,00H,否则(否则(AHAH)0FFH0FFH操作:操作:把把AL扩展到扩展到AX。CWD(Convert word to double word)CWD(Convert word to double word)字扩展到双字字扩展到双字格式:格式:CWD CWD;如果(如果(AX)8000H,则(则(DX)0000H,否则(否则(DX)0FFFFH操作:操作:把把AX扩展到扩展到DX,AX。说明:说明:1 1、CBWCBW和和CWDCWD对标志位无影响对标志位无影响 2 2、扩展方法、扩展方法 由符号扩展指令实现,正数补由符号扩展指令实现,正数补0 0,负数补,负数补1 1。(无符号数的扩展:将高位补(无符号数的扩展:将高位补0 0)第四章第四章 80 x86 80 x86 指令系统指令系统算术运算指令算术运算指令Thank you!