课后作业3.13~3.1819、乘法的非压缩BCD码调整指令AAM格式:AAM功能:将AX内容转换成两位非压缩的BCD码 说明:乘法运算只有非压缩BCD码调整指令AAM,用来把AX中字节乘法的积转换成两位非压缩的BCD码。MOV AX,0705H ;AH←BCD码7,AL←BCD码5MUL AH ;AX←AL×AH=23HAAM ;把结果AX调整为两位非压缩的BC D码0305H20、除法的非压缩BCD码调整指令AAD格式:AAD功能:将AX中两位非压缩的BCD码调整成二进制数 说明:除法运算只有非压缩的BCD码调整指令AAD。与其他运算的BCD调整指令相比,操作正好相反,其他运算的BCD调整是将二进 制结果调整成为正确的BCD码,而AAD是在除法运算前,把AX中的两位非压缩的BCD码调整成二进制数,以解决非压缩BCD码的除法运算 问题。MOV AX,0205H ;AX←非压缩BCD码25MOV BL,04H ;BL←非压缩BCD码4AAD ;AX= 19H(AL←AH×10+AL=25,AH←0)DIV BL ;AL←AX/BL=06H(商),AH=01H (余)第三章指令系统三峡大学陈慈发0717-6394358,13972597617chcf0415@126. com128086CPU的指令格式8086CPU的指令系统38086CPU的寻址方式指令系统指令分类数据传送指 令算术运算指令逻辑运算与移位指令串操作指令控制转移指令处理机控制指令算术运算指令(20条)实现加法、减法 、乘法、除法运算,包括无符号数和有符号数的8位和16位二进制运算以及无符号数的BCD码运算和BCD码调整大部分指令影响标志寄存 器中的状态标志位分类功能助记符格式操作状态标志位OSZAPC加法(3条)加法带进位加加1ADD d,sADCd,sINCdd←d+sd←d+s+CFd←d+1↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑- 减法(5条)减法带借位减减1取补比较SUBd,sSBBd,sDECdNEGdCMP d,sd←d-sd←d-s-CFd←d-1d←0-dd-s只影响标志位↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑- ↑↑↑↑↑1↑↑↑↑↑↑乘法(2条)无符号数乘法有符号数乘法MULsIMULsAX←AL×s(字节 运算),DX:AX←AX×s(字运算)同MUL,但操作数可带符号↑××××↑↑××××↑除法(2条)无符号数除法 有符号数除法DIVsIDIVsAH:AL←AX/s(字节运算),AL放商,AH放余数DX:AX←DX:AX/ s(字运算),AX放商,DX放余数同DIV,但操作数可带符号××××××××××××符号扩展(2条)字节扩展为字字 扩展为双字CBWCWDAX←(扩展)ALDX:AX←(扩展)AX------------BCD码调整(6条)加法 压缩BCD调整加法非压缩BCD调整减法压缩BCD调整减法非压缩BCD调整乘法非压缩BCD调整除法非压缩BCD调整DAA AAADASAASAAMAAD将AL内容转换成两位压缩的BCD码将AL内容转换成一位非压缩的BCD码将AL内容转换 成两位压缩的BCD码将AL内容转换成一位非压缩的BCD码将AX内容转换成两位非压缩的BCD码将AX中两位非压缩的BCD码调整 成二进制数×↑↑↑↑↑×××↑×↑×↑↑↑↑↑×××↑×↑×↑↑×↑××↑↑×↑×加法指令1、不带进位加法指令AD D格式:ADDd,s功能:(d)?(d)+(s)说明:将目的操作数d与源操作数s相加结果送回d中 内存立即数AH,ALBH,BLCH,CLDH,DLAX,BXCX,DXSI,DIBP,SP【例】 A DD AX,BX ADD CL,[SI] ADD [BX][DI-10H],WORDPTR80H ADD CH,AL ADD BX,1 ADD BYTEPTR[20H],20H ADD AL,30H ADD BYTEPTR[DI],1 2H影响全部状态标志位d、s必须具有相同的字长?ADDAX,BLd、s不能为段寄存器? ADDDS,2000Hd不能是立即数?ADD10H,AX对状态标志位的影响1和的最 高位向前有进位0否则CF=1结果为负0否则SF=1结果为00否则 ZF=1两个操作数符号相同,而结果符号与之相反0否则OF=1和的D3位向D4位有进位0 否则AF=1和的低字节中1的个数为偶数0否则PF=2、带进位加法指令ADC(ADdbyCa rry)格式:ADCd,s功能:(d)?(d)+(s)+CF说明:将目的操作数d与源操作数s和进位 标志CF相加结果送回d中【例】设AX=1000H,CF=1,则 ADD AX,100H;AX=1100H ADC AX,10 0H;AX=1101H,CF=0 ADC AH,0F0H;AH=01H,CF=13、加一指令INC(INCrease)格 式:INCd功能:(d)?(d)+1说明:将目的操作数d加1后结果送回d中【例】设AX=0FF00H, CF=0,则 INC AX;AX=0FF01H INC AH;AH=00H,CF=0ADC影响全部状态标志位INC不影响C F标志【例】双字加法。设(DX)=0002H,(AX)=0F365H,(BX)=0005H,(CX)=0E024H, 求(DX):(AX)+(BX):(CX)=?AXF365HCXE024HADDAXD3 89HCF←1DX0002HBX0005HADCDX0008HCF←0CF= 1指令序列: (1)ADDAX,CX (2)ADCDX,BX(DX):(AX)+(BX):(C X)=0002F365H+0005E024H=0008D389H=(DX):(AX)问:指令执行完后各状态标志位 如何?CF=AF=ZF=PF=SF=OF=DEBUG演示减法指令 4、不带进位减法指令SUB格式:SUBd,s功能:(d)?(d)-(s)说明:将目的操作数d与源操 作数s相减结果送回d中内存立即数AH,ALBH,BLCH,CLDH,DLAX,BXCX,DXSI,DI BP,SP【例】 SUB AX,BX SUB CL,[SI] SUB [BX][DI-10H],WORDPTR80H SUB CH,AL SUB BX,1 SUB BYTEPTR[20H],20H SUB AL,30H SUB BYT EPTR[DI],12H影响全部状态标志位d、s必须具有相同的字长?SUBAX,BLd、s不能为 段寄存器?SUBDS,2000Hd不能是立即数?SUB10H,AX对状态标志位的 影响1最高位向前有借位0否则CF=1结果为负0否则SF=1结果为0 0否则ZF=1两个操作数符号相同,而结果符号与之相反0否则OF=1D3位向D4 位有借位0否则AF=1差的低字节中1的个数为偶数0否则PF=5、带进位减法指令SBB 格式:SBBd,s功能:(d)?(d)-(s)-CF说明:将目的操作数d与源操作数s和进位标志CF相减 结果送回d中【例】设AX=1101H,CF=1,则 SUB AX,100H ;AX=1001H,CF=0 SBB AX,10 0H ;AX=1000H,CF=0 SBB AH,11H ;AH=0FFH,CF=16、减一指令DEC(DECrease) 格式:DECd功能:(d)?(d)-1说明:将目的操作数d减1后结果送回d中【例】设AX=00F FH,CF=0,则 DEC AX ;AX=00FEH DEC AH ;AH=FFH,CF=0 SUB AH,1 ;AH=FF H,CF=1SBB影响全部状态标志位DEC不影响CF标志7、取负指令NEG(NEGative)格式:NEGd 功能:说明:将目的操作数取负后送回d中【例】设AX=00FFH,则 NEG AX ;AX=FF01H NEG AL ;AL=01H8、比较指令CMP(Compare)格式:CMPd,s功能:(d)-(s)说明:仅将目 的操作数d与源操作数s相减,结果并不送回d中【例】 CMP AX,BX CMP CL,[SI] CMP CL,56HCM P影响标志位,不改变操作数NEG是取负,不是取反,影响标志位9、无符号数乘法指令MUL(MULtiple)格式:MUL s功能:当s为字节数据时AX←AL×s当s为字数据时DX:AX←AX×s说 明:将无符号的源操作数s与累加器相乘,结果送回AX或DX:AX中【例】 MUL BL ;AX←AL×BL MUL CX ;DX:AX←AX×CX MUL BYTEPTR[DI] ;AX←AL×(DS:[DI])AL/AX为隐含的乘数寄存器AX /(DX:AX)为隐含的乘积寄存器s只能是通用寄存器或存储器操作数,不能是段寄存器或立即数 ?MULDS ? MULWORDPTR200H影响CF和OF标志,其它标志无意义:若运算结果的高半部分不为0,即字节运算时结果AH≠ 0、字运算时结果DX≠0,则标志CF和OF均为1,否则CF和OF均为0乘法指令10、有符号数乘法指令IMUL格式:IMU Ls功能:当s为字节数据时AX←AL×s当s为字数据时DX:AX←AX×s 说明:将有符号的源操作数s与累加器相乘,结果送回AX或DX:AX中【例】 IMUL DH ;AX←AL×DH IMUL SI ;DX:AX←AX×SI IMUL WORDPTR[BX+2] ;DX:AX←AX×(DS:[BX+2])00 乘积的高一半是符号扩展,无有效数据11否则IMUL指令:CF/OF=00乘积的高一半为零 ,无有效数据11否则MUL指令:CF/OF=11、无符号数除法指令DIV(DIVide)格式:DIV s功能:s为字节:被除数在AX中s为字:被除数在DX:AX中商:AL?AX/s余数:AH?AX% s商:AX?DX:AX/s余数:DX?DX:AX%sAX/(DX:AX)为隐含的被除数寄存器A L/AX为隐含的商寄存器AH/DX为隐含的余数寄存器s只能是通用寄存器或存储器操作数,不能是段寄存器或立即数 ?DI VES ?DIVBYTEPTR30H对所有状态标志均无定义商溢出错时,自动产生除法出错中断(INT0 ),此时商和余数都不确定除法指令【例】 DIV CL ;AH:AL←AX/CL DIV BX ;DX:AX←DX:AX /BX DIV BYTEPTR[SI] ;AH:AL←AX/(DS:[SI])12、有符号数除法指令IDIV格式:ID IVs功能:同DIV,只是针对有符号数。【例】 IDIV BH ;AH:AL←AX/BH IDIV DI ;DX:AX←DX:AX/DI IDIV WORDPTR[BP+10H] ;DX:AX←DX:AX/(SS:[BP+10H]) 有符号数除法的余数可以为正也可以为负。例如,-17除以+5,可以是商为-3余数为-2,也可以是商为-4余数为+3。为了避免结果的 不唯一性,IDIV指令规定余数的符号必须和被除数的符号相同。13、字节符号扩展指令CBW(ChangeBytetoWord )格式:CBW功能:若AL7=0,则AH=00000000b=00H若AL7= 1,则AH=11111111b=FFH说明:将AL的符号位扩展到AX,但扩大后所代表的有符号数的数值不变。主要用 于有符号数除法指令前对被除数进行扩展以达到除法指令中对被除数位数的要求。【例】要进行两个有符号数相除AL÷BL,由于除数在BL中 是8位,而被除数在AL中也是8位,所以应将被除数扩展成16位并放在AX中,即应执行指令 CBW ;AX←(扩展)AL ID IV BL ;AH:AL←AX/BLAL/AX为隐含的操作数不影响标志位符号扩展指令14、字符号扩展指令CWD(Chan geWordtoDoubleWord)格式:CWD功能:若AX15=0,则DX=0000000000 000000b=0000H若AX15=1,则DX=1111111111111111b =FFFFH说明:将AX的符号位扩展到DX。【例】要进行两个有符号数相除AX÷CX,由于除数在CX中是16位,而被除数 在AX中也是16位,所以应将被除数扩展成32位并在DX:AX中,即应执行指令 CWD ;DX:AX←(扩展)AX IDIV CX ;DX:AX←(DX:AX)/CXDX:AX为隐含的操作数不影响标志位【例】要进行两个有符号数相除AL÷SI,由于除数 在SI中是16位,而被除数在AL中是8位,所以应将被除数扩展成32位并在DX:AX中,即应执行指令 CBW ;AX←(扩展)A L CWD ;DX:AX←(扩展)AX IDIV SI ;DX:AX←DX:AX/SIBCD码调整指令15、加法的压缩B CD码调整指令DAA格式:DAA功能:对AL中的压缩BCD码加法结果进行调整。说明:必须紧跟在ADD/ADC指 令之后出现。AL低4位>9AF=1AL←AL+06HAL高4位>9CF=1AL←AL+60H调整算法AL 为隐含操作数,且为压缩BCD码除OF不确定之外,其余标志位均受影响,其中CF说明结果是否大于99【例】 设AL=25H,BL= 37H,问执行下列指令后,AL=?CF=? ADD AL,BL DAA00100101+001101110101 1100大于9+06H修正01011100+0000011001100010=62BCD故:AL=62BCD ,CF=0【例】CPU执行下列指令后,问AL=?CF=? MOV AL,68H ADD AL,89H DAA01 101000+1000100111110001AF=1+06H+60H修正11110001+011001 10101010111=157BCD故:AL=57BCD,CF=1大于9CF=1【例】设AX和BX中存放着两个 4位的压缩型BCD码,求两数之和,并将和放在AX中(一个16位的寄存器中可以存放一个4位的BCD码)。ADD AL,BL ;低 字节相加DAA ;低字节调整MOV CL,AL ;空出ALMOV AL,AHADC AL,BH ;高字节相加 DAA ;高字节调整MOV AH,ALMOV AL,CL16、加法的非压缩BCD码调整指令AAA格式 :AAA功能:对AL中的非压缩BCD码加法结果进行调整。说明:必须紧跟在ADD/ADC指令之后出现。AL低4位>9 AF=1AL←AL+06HAH←AH+1AL←ALAND0FHAF=CF=1调整算法否则AL←ALAN D0FHAF=CF=0AL/AH为隐含操作数,且AL为非压缩BCD码AF和CF标志受影响,其余标志位不受影响【例】设AX =0339H,BL=36H,问执行下列指令后,AX=?CF=? ADD AL,BL AAAAL←AL+BL=39H+36H =6FHAL低4位为1111(0FH)>9因此执行AAA指令后: AL←AL+06H=6FH+06H=75H AH←AH+ 1=03H+01H=04H AL←ALAND0FH=75HAND0FH=05H AF=CF=1故:AX=0405H, CF=117、减法的压缩BCD码调整指令DAS格式:DAS功能:对AL中的压缩BCD码减法结果进行调整。说明 :必须紧跟在SUB/SBB指令之后出现。AL低4位>9AF=1AL←AL-06HAL高4位>9CF=1AL←AL- 60H调整算法AL为隐含操作数,且为压缩BCD码除OF不确定之外,其余标志位均受影响,其中CF说明结果是否小于0【例 】 设AL=34H,BL=89H,问执行下列指令后,AL=?CF=? SUB AL,BL DAS00110100-10 00100110101011大于9且AF=1-06H-60H修正10101011-0110011001000101=45BCD故:AL=45BCD,CF=1大于9且CF=118、减法的非压缩BCD码调整指令AAS格式:AAS功能:对AL中的非压缩BCD码减法结果进行调整。说明:必须紧跟在SUB/SBB指令之后出现。AL低4位>9AF=1AL←AL-06HAH←AH-1AL←ALAND0FHAF=CF=1调整算法否则AL←ALAND0FHAF=CF=0AL/AH为隐含操作数,且AL为非压缩BCD码AF和CF标志受影响,其余标志位不受影响【例】设AX=021CH,BL=02H,问执行下列指令后,AX=?CF=? SUB AL,BL AASAL←AL-BL=1CH-02H=1AHAL低4位为1010(0AH)>9因此执行AAS指令后: AL←AL-06H=1AH-06H=14H AH←AH-1=02H-01H=01H AL←ALAND0FH=14HAND0FH=04H AF=CF=1故:AX=0104H,CF=1 |
|