计算机组成原理与汇编语言实验指导书
CLC
LOOPER:
MOV AL, DATA2[SI]
ADC DATA1[SI],AL INC SI DEC CX
JNZ LOOPER
INT 20H ;终止程序
考虑:上面的功能能否使用字加法来完成?
★INC 加1指令 格式:INC dest
功能:目的寄存器dest加1,结果保存在目的寄存器中。一般用于循环程序中修改地址指针。 说明
(1)INC指令只影响SF,ZF,AF,PF,OF标志。不影响CF标志;
(2)目的寄存器可以是寄存器和存储单元,不能为立即数和段寄存器;
INC DL
;8位寄存器+1
INC SI ;16位寄存器+1
INC BYTE PTR [BX][SI] ;存储器+1(字节操作) INC WORD PTR [DI] INC DS
2. 减法指令
★SUB 减法指令
格式:SUB dest,src
功能:目的操作数dest减源操作数src,结果保存在目的操作数dest中,根据运算结果影响AF、CF、OF、PF、SF、ZF标志。 说明
(1)可以进行8位、16位的无符号数和带符号数的减法运算; (2)源操作数和目标操作数不能同时为存储器, 不能为段寄存器; (3)指令影响标志位的情况:
运算后,CF=1,表示无符号数小减大;SF=1,表示带符号数小减大,OF=1,表示运算结果溢出;其他条件标志(SF,AF,PF,ZF)根据定义设定。
★SBB 带借位减法指令 格式:SBB dest,src
功能:目的操作数dest减源操作数src和当前的CF标志(上条指令的结果),结果保存在目的操作数dest中,根据运算结果影响AF、CF、OF、PF、SF、ZF标志。可用于实现多字节的减法运算。 说明
- 11 -
;存储器+1(字操作) ;错
计算机组成原理与汇编语言实验指导书
(1)参考SUB的说明;
★DEC 减1指令 格式:DEC dest
功能:对目的操作数dest进行减1,结果保存在目的操作数dest中。一般用于在循环程序中修改地址指针和循环次数。 说明
(1)目的操作数可以是寄存器 、存储器。不能是段寄存器和立即数。 (2)影响SF,ZF,AF,PF,OF,不影响CF。 ★NEG 求补指令 格式:NEG dest
功能:对目的操作数进行按位求反未位加1运算,即若目的操作数为负数,则求目的操作数的补码。 说明
(1)目的操作数可以是寄存器 、存储器。不能是段寄存器和立即数。 (2)影响标志:A、C、O、P、S、Z。对CF、OF标志定义如下:
CF: 操作数为0时求补,CF=0;否则CF=1; OF: 对-128或-32768求补,OF=1;否则OF=0;
★CMP 比较指令
格式:CMP dest,src
功能:目的操作数dest减源操作数src,结果不保存,只根据运算结果影响AF、CF、OF、PF、SF、ZF标志。 说明
(1) CMP指令的规定和SUB指令相同; (2) CMP指令的应用:
根据Z标志,可判断两个操作数是否相等:
例: CMP AX,BX ;指令执行后 ZF=1,(AX) = (BX),两者相等
ZF=0,(AX) (BX),两者不相等
根据CF标志,可判断两个无符号数的大小: 例: CMP AX,BX
CF=0,(AX) > (BX); CF=1,(AX) < (BX);
根据SF、OF标志,判断二个带符号数的大小 例: CMP AX,BX ;指令执行后 OF=SF=0或SF=OF=1,即SF和OF同号时:A>B; OF、SF异号时: A
★MUL 无符号数乘法指令
- 12 -
;指令执行后
计算机组成原理与汇编语言实验指导书
格式:MUL SRC
★IMUL 带符号数乘法指令 格式:IMUL SRC
功能:若是字节乘法,则把AL中的数值乘SRC,得到的字乘积保存在AX寄存器中;若是字节乘法,则把AX中的数值乘SRC,得到的双字乘积保存在AX寄存器中。 说明
(1)AL(AX)为隐含的乘数寄存器; (2)AX(DX,AX)为隐含的乘积寄存器;
(3)SRC不能为立即数;
(4)除CF和OF外,对条件标志位无定义,CF和OF标志定义如下: 对于MUL指令,若乘积的高一半为0,则CF/OF=0/0,否则CF/OF=11; 对于IMUL指令,若乘积的高一半是低一半的符号位的扩展,则CF/OF=0/0,否则CF/OF=11;
例:(AX) = 16A5H,(BX) = 0611H (1) IMUL BL
(AX) =(AL) (BL)=A5×11=5B×11=060B=F9F5 则(AX)=0F9F5H CF=OF=1 (2) MUL BX
(DX, AX)=(AX) × (BX)=16A5×0611=0089 5EF5 则 (DX)=0089H (AX)=5EF5H CF=OF=1 ★DIV 无符号数除法指令 格式:DIV SRC
★IDIV 带符号数除法指令 格式:IDIV SRC
功能:若是字节除法,则把AX中的数值除以SRC,得到的商保存在AL寄存器中,余数保存在AH寄存器中;若是字除法,则把(DX,AX)中的数值除以SRC,得到的商保存在AX寄存器中,余数保存在DX寄存器中。 说明
(1)AX(DX,AX)为隐含的被除数寄存器; (2)AL(AX)为隐含的商寄存器; (3)AH(DX)为隐含的余数寄存器; (4)SRC不能为立即数;
(5)对所有条件标志位均无定义;
(6)带符号数的除法,余数的符号与被除数的符号相同; ★CBW 字扩展指令
格式:CBW 功能:若(AL)的最高有效位为0,则(AH)= 00H;若(AL)的最高有效位为1,则(AH)= 0FFH
- 13 -
WHY?
4. 除法指令用于完成带符号数以及无符号的二进制除法运算。
计算机组成原理与汇编语言实验指导书
说明
(1)无操作数指令;
(2)隐含对AL进行符号扩展,结果保存在AX中; (3)不影响条件标志位; ★CWD双字扩展指令 格式:CWD
功能:若(AX)的最高有效位为0,则(DX)= 0000H;若(AX)的最高有效位为1,则(DX)= 0FFFFH 说明
(1)隐含对AX进行符号扩展,结果保存在DX,AX中; (2)参考CBW指令说明。
5. 10进制调整指令用于对加、减、乘、除的二进制运算结果进行调整,使结果转换为压缩BCD码表示的10进制数。 ★DAA 加法的十进制调整指令 格式:DAA ★DAS 减法的十进制调整指令 格式:DAS
功能:把加法或减法运算的运算结果AL中的二进制数调整为压缩的BCD码10进制数; 说明
(1)隐含的操作寄存器为AL,紧接在加减指令之后使用,要求加减运算的结果保存在AL寄存器中;
(2)影响条件标志位(对OF无定义); (3)调整方法:
AF=1或(AL)0~3=A~F,则(AL) ? (AL) ± 06H,AF=1 CF=1或(AL)4~7=A~F,则(AL) ? (AL) ± 60H,CF=1 ( DAA做?+‘,??DAS做?-‘?) 例: 数据段定义如下:
DATA SEGMENT
BCD1 BCD2 BCD3
DB 34H,18H ; (1834)BCD DB 89H,27H ; (2789)BCD DB 2 DUP (?)
DATA ENDS
计算,要求结果为BCD码表示的10进制数。 (1) BCD3 ??BCD1+BCD2 ;(4623)BCD
(2) BCD3 ?BCD1?- BCD2 ;(9045)BCD =-955 程序如下: (1) MOV
ADD
AL, BCD1 ;(AL)=34H
AL, BCD2 ;(AL)=34+89=BDH
;(AL)=BD+60+06=23H AF=CF=1
- 14 -
DAA
计算机组成原理与汇编语言实验指导书
MOV
MOV ADC DAA MOV
BCD3, AL ;(BCD3)=23H
AL, BCD1+1 ;(AL)=18H
AL, BCD2+1 ;(AL)=18+27+1=40H AF=1 CF=0 ;(AL)=40+06=46H BCD3+1, AL ;(BCD3+1)=46H AL, BCD1
;(AL)=34H ;(AL)=34-89=ABH
(2) MOV
DAS
MOV
SUB AL, BCD2
;(AL)=AB-60-06=45H AF=CF=1 BCD3, AL ;(BCD3)=45H
MOV AL, BCD1+1 ;(AL)=18H SBB AL, BCD2+1 ;(AL)=18-27-1=F0H DAS
;(AL)=F0-60=90H AF=0 CF=1
;(BCD3+1)=90H
MOV BCD3+1, AL ★AAA 加法调整指令 格式:AAA
★AAS 减法调整指令 格式:AAS
功能:把加法或减法运算的运算结果AL中的二进制数调整为非压缩的BCD码10进制数; 说明
(1)隐含的操作寄存器为AL,紧接在加减指令之后使用; (2)除AF、CF外,对其它条件标志位无定义;
(3)调整方法:
若(AL)0~3=0~9且AF=0,则(AL)4~7 = 0,(AL)0~3保持不变,AF =CF=0
若(AL)0~3=A~F或AF=1,则(AL) = (AL)±6,(AL)4~7=0 (AH)=(AH)±1,AF = CF=1
( AAA做?+‘,??AAS做?-‘?)
★AAM 乘法调整指令 格式:AAW
功能:把AL中二进制表示的乘积转换为非压缩的BCD码表示的10进制数 说明
(1)隐含的操作寄存器为AL,紧接在MUL指令之后使用
(2)对OF、CF、AF无定义,根据AL的寄存器的值设置SF、ZF、PF; (3)调整方法:
AL中二进制除以0AH,商保存在AH,余数保存在AL中; ★AAD 除法调整指令 格式:AAD
功能:把被除数表示为非压缩的BCD,保存在AX中; 说明
(1)隐含的操作寄存器为AL,AH,一般在除法指令之前使用;
- 15 -