《微机原理课件第6讲.ppt》由会员分享,可在线阅读,更多相关《微机原理课件第6讲.ppt(51页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第第3章章 8086的寻址方式和指令系统的寻址方式和指令系统 3.1 8086的寻址方式的寻址方式3.2 8086指令格式及数据类型指令格式及数据类型3.3 8086的指令集的指令集乘法指令指令指令含义含义时钟数时钟数MUL无符号数乘法70139+EAIMUL整数乘法80160+EAAAM乘法的ASCII调整83MUL无符号数乘法指令MUL无符号数乘法指令(Multiply unsigned)格式 MUL src。功能 将源操作数和累加器中的数都当成无符号数,然后将两数相乘,src可以是字(065535)和字节(0255)。操作数要求l可以是寄存器、存储单元,但不能是立即数;l源操作数是存储单
2、元时,必须在操作数前加B或W说明是字节还是字。MUL无符号数乘法指令运算情况 l源操作数是一个字节 源操作数与累加器AL中的内容相乘,乘积为双倍长的16位数,高8位送到AH,低8位送AL。即 AXAL源。AL被乘数被乘数8位位操作数操作数乘数乘数8位位AX乘积乘积16位位MUL无符号数乘法指令运算情况 l源操作数是一个字 源操作数与累加器AX的内容相乘,结果为32位数,高位字放在DX寄存器中,低位字放在AX寄存器中。即 (DX,AX)AX 源AX被乘数被乘数16位位操作数操作数乘数乘数16位位AX乘积乘积32位位DX举例举例MUL CL ;AL乘乘CL,结果在,结果在AX中中MUL BX ;A
3、X乘乘BX,结果在,结果在DX:AX中中MUL BYTE DI;AL乘存储器乘存储器(8位位),结果在,结果在AX中中MUL WORDBX;AX乘存储器字,结果在乘存储器字,结果在DX:AX中中如果运算结果的高半部分如果运算结果的高半部分(在在AH或或DX中中)为零,为零,则状态标志位则状态标志位(CF)=(OF)=0,否则,否则(CF)=(OF)=1。因此,。因此,状态标志位状态标志位(CF)=(OF)=1,表示,表示AH或或DX中包含着乘积中包含着乘积的有效位。的有效位。MUL无符号数乘法指令举例举例MOV AL,14H ;(AL)=14H-20MOV CL,05H ;(CL)=05H-5
4、MUL CL ;(AX)=0064H-100本本例例中中结结果果的的高高半半部部分分(AH)=0,因因此此,状状态态标标志志位位(CF)=(OF)=0,通通过过检检测测标标志志,可可以以去去除除结结果果中中的前导无效零。的前导无效零。有了乘法有了乘法(和除法和除法)指令,使有些运算程序的编指令,使有些运算程序的编程变得简单方便。但是必须注意,乘法指令的执行程变得简单方便。但是必须注意,乘法指令的执行速度很慢,除法指令也是如此速度很慢,除法指令也是如此。MUL无符号数乘法指令IMUL整数乘法指令IMUL整数乘法指令(Integer Multiply)格式 IMUL src。功能 将源操作数和累加
5、器中的数都当成有符号数,然后将两数相乘,src可以是字(-3276832767)和字节(-128127)。操作数要求和运算情况 与MUL要求相同。举例举例IMUL CL ;AL乘乘CL,结果在,结果在AX中中IMUL BX ;AX乘乘BX,结果在,结果在DX:AX中中IMUL BYTE DI;AL乘存储器乘存储器(8位位),结果在,结果在AX中中IMUL WORDBX;AX乘存储器字,结果在乘存储器字,结果在DX:AX中中如果运算结果的高半部分如果运算结果的高半部分(在在AH或或DX中中)为为0或或1,则状态标志位则状态标志位(CF)=(OF)=0,否则,否则(CF)=(OF)=1。因此,。因
6、此,状态标志位状态标志位(CF)=(OF)=1,表示,表示AH或或DX中包含着乘积中包含着乘积的有效位。为的有效位。为0,则表示高半部分是,则表示高半部分是符号扩展符号扩展。IMUL整数乘法指令正数,正数,AH或或DX 为全为全0负数,负数,AH或或DX为全为全1举例举例MOV AX,04E8H ;(AX)=04E8HMOV BX,4E20H ;(BX)=4E20HIMULBX ;(DX:AX)=(AX)(BX)以以上上指指令令的的执执行行结结果果为为:(DX)=017FH,(AX)=4D00H,且且(CF)=(OF)=1。实实际际上上,以以上上指指令令完完成成带带符符号号数数+1256和和+
7、20000的的乘乘法法运运算算,得得到到乘乘积积为为+25120000。由由于于此此时时DX中中结结果果的的高高半半部部分分包包含含着着乘乘积积的的有有效效数数字字,故状态标志位故状态标志位(CF)=(OF)=1。IMUL整数乘法指令AAM乘法的ASCII调整指令AAM乘法的ASCII调整指令(ASCII Adjust for Multiply)格式 AAM。功能 对AL中的两个非压缩十进制数相乘的乘积进行十进制数的调整,在AX中得到正确的非压缩十进制数的乘积,高位在AH中,低位在AL中。调整的过程 把AL寄存器内容除以10,商放在AH中,余数在AL中。即:lAH AL/10所得的商;lAL
8、AL/10所得的余数.AAM乘法的ASCII调整指令举例 求两个非压缩十进制数08和04之乘积。解:MOV AL,08H;置初值 MOV BL,04H MUL BL;AL08与04之乘积20H AAM;调整得AH03H(十位位),AL02H(个位)结果:AX0302H,即BCD数32。若想转换成ASCII码,需再执行 OR AX,3030H除法指令指令指令含义含义时钟数时钟数DIV无符号除法80168+EAIDIV 整数除法101190+EAAAD除法的ASCII调整60CBW 把字节转换成字2CWD 把字转换成双字5DIV无符号数除法指令DIV无符号数除法指令(Division unsign
9、ed)格式格式 DIV src。功能功能 将两个无符号数相除,被除数的长度必须是除数长度的两倍,若不够,必须扩展被除数的长度。操作数要求l可以是寄存器、存储单元,但不能是立即数;l源操作数是存储单元时,必须在操作数前加B或W说明是字节还是字。DIV无符号数除法指令运算情况 l源操作数是一个字节 16位被除数必须放入AX中,src为为8位。ALAX/src字节的商 AHAX/src字节的余数 AX16位位被除数被除数操作数操作数8位位除数除数AL商商 AH余数余数 DIV无符号数除法指令运算情况 l源操作数是一个字 32位被除数必须放入(DX,AX)中,src为16位。AX(DX,AX)/src
10、字的商 DX(DX,AX)/src字的余数 DX,AX32位位被除数被除数操作数操作数16位位除数除数AX商商 DX余数余数 举例举例MOV AX,0F05H ;(AX)=0F05HMOV DX,068AH ;(DX)=068AHMOV CX,08E9H ;(CX)=08E9HDIV CX ;运算完毕后,商运算完毕后,商(AX)=BBE1H,余数,余数(DX)=073CH DIV无符号数除法指令注意事项 执行DIV指令时,如果除数为0,或字节除法时AL寄存器中的商大于FFH,或字除法时AX寄存器中的商大于FFFFH,则CPU立即自动产生一个类型号为0的内部中断。DIV无符号数除法指令IDIV整
11、数除法指令IDIV整数除法指令(Integer Division)格式 IDIV src。功能 将两个带符号数相除,被除数的长度必须是除数长度的两倍,若不够,必须用CBW或CWD扩展被除数的长度。操作数要求与运算情况 同同DIV。注意事项注意事项 执执行行IDIV指指令令时时,如如果果除除数数为为0,或或字字节节除除法法时时AL寄寄存存器器中中的的商商超超出出-128127范范围围,或或字字除除法法时时AX寄寄存存器器中中的的商商超超出出-3276832767范范围围,则则CPU立立即自动产生一个类型号为即自动产生一个类型号为0的内部中断。的内部中断。IDIV整数除法指令IDIV整数除法指令关
12、于余数的符号关于余数的符号 在在对对有有符符号号数数进进行行除除法法运运算算时时,例例如如-30除除以以8,可可以以得得到到商商为为-4,余余数数为为+2;也也可可以以得得到到商商为为-3,余余数为数为-6,两结果都是正确的。,两结果都是正确的。对对于于8086,规规定定余余数数的的符符号号和和被被除除数数的的符符号号相相同同,因此第二种结果是因此第二种结果是8086执行完以后的结果。执行完以后的结果。被除数扩展问题 无无论论是是无无符符号号数数还还是是有有符符号号数数除除法法时时,必必须须满满足足被被除除数数长长度度是是除除数数长长度度的的两两倍倍。当当不不够够时时,涉涉及及到到被被除除数的
13、扩展。数的扩展。无无符符号号数数:被被除除数数的的扩扩展展比比较较简简单单,添添上上足足够够的的零零就就可可以以了了。以以下下指指令令将将AL中中的的一一个个8位位无无符符号号数数扩扩展展成成为为16位,存放在位,存放在AX中。中。MOV AL,0FBH;(AL)=11111011BXOR AH,AH;(AH)=00000000B 有符号数:有符号数:被除数的扩展必须根据各自的符号来完被除数的扩展必须根据各自的符号来完成,因此,需要借助指令成,因此,需要借助指令CBW和和CWD完成。完成。CBW把字节转换成字指令CBW把字节转换成字指令(Convert Byte to Word)格式 CBW。
14、功能 把寄存器AL中字节的符号位扩充到AH的所有位。(AH被称为AL的符号扩充),),不影响标志位。扩展方法 AL为正数(AL=80H)时,即D7=1时,使AH=0FFH。扩展方法扩展方法MOV AL,4FH;(AL)=01001111BCBW;由于由于AL7FH,或者说,或者说AL为负数时,符号位为为负数时,符号位为1,AH应补应补1,因此,因此(AH)=11111111B CBW把字节转换成字指令CWD把字转换成双字指令CWD把字转换成双字指令(Convert Word to Double Word)格式 CWD。功能 把寄存器AX中字的符号位扩充到DX的所有位。扩展方法 AX为正数(AX
15、7FFFH)时,即即D15=1时,使DX=0FFFFH。CBW和和CWD指指令令在在带带符符号号数数的的乘乘法法(IMUL)和和除除法法(IDIV)运运算算中中十十分分有有用用,在在字字节节或或字字的的运运算算之之前前,将将AL或或AX中数据的符号位进行扩展。例如:中数据的符号位进行扩展。例如:MOV AL,MUL_BYTE;(AL)8位被乘数位被乘数(带符号数带符号数)CBW ;扩展成为;扩展成为16位带符号数,在位带符号数,在AX中中IMULBX;两个;两个16位带符号数相乘,结果在位带符号数相乘,结果在DX:AX中中 CBW和CWDAAD除法的ASCII调整指令AAD除法的ASCII调整
16、指令(ASCII Adjust for Division)格式 AAD。功能 在做除法之前,将AX中BCD码转换成二进制数并存入AL中。调整过程 AL AH10AL;AH 00。位运算指令(12条)逻辑运算逻辑运算循环移位循环移位NOT取反ROL循环左移AND与ROR循环右移OR或RCL通过进位的循环左移XOR异或RCR通过进位的循环右移TEST测试算术逻辑移位算术逻辑移位SHL/SAL逻辑/算术左移SHR逻辑右移SAR算术右移 位操作指令是对位操作指令是对8位或位或16位的寄存器或存储单元位的寄存器或存储单元中的内容按位进行操作。中的内容按位进行操作。逻辑运算指令命令命令含义含义时钟数时钟数
17、NOT取反316+EAAND与317+EAOR或316+EAXOR异或317+EATEST测试311+EANOT取反指令NOT取反指令(Logical Not)格式 NOT dst。功能 dst dst取反,执行完后不影响标志位。操作数要求可以是8位或16位寄存器、存储器。对于存储器操作,需指明是字还是字节。AND逻辑与指令AND逻辑与指令(Logical AND)格式格式 AND dst,src。src可以是立即数。功能功能 dst dstsrc,执行完后影响标志位。主要用于使操作数的某些位保留(和“1”相与),而使某些位清除(和“0”相与)。操作数要求可以是8位或16位寄存器、存储器,不能
18、同时为men。对于存储器操作,需指明是字还是字节。OR逻辑或指令OR逻辑或指令(Logical OR)格式 OR dst,src。src可以是立即数。功能 dst dstsrc,执行完后影响标志位。主要用于使操作数的某些位保留(和“0”相或),而使某些位置1(和“0”相或)。)。操作数要求可以是8位或16位寄存器、存储器,不能同时为men。对于存储器操作,需指明是字还是字节。AND,OR,NOT举例举例 MOV AL,35H;AL=0011,0101B AND AL,0FH;0000,1111B,得AL=05H OR AL,70H;0111,0000B,得AL=75H NOT AL;取反得10
19、00,1010B,即AL=8AHXOR异或指令XOR异或指令(Exclusive OR)格式 XOR dst,src。src可以是立即数。功能 dst dst src,执行完后影响标志位。主要用于使操作数的某些位保留(和“0”相异或),而使某些位取反(和“1”相异或)。操作数要求 可以是8位或16位reg、men,不能同时为men。对于存储器操作,需指明是字还是字节。TEST测试指令TEST测试指令(Test)格式 TEST dst,src。src可以是立即数。功能 dstsrc,执行完后影响标志位。但是与完后的结果不回送。主要用于对某些位数据的检测,编程时,其后往往紧跟条件转移指令。操作数要
20、求可以是8位或16位寄存器、存储器,不能同时为men。对于存储器操作,需指明是字还是字节。逻辑运算指令总结 除了NOT指令外,其他指令都影响状态标志位。这些指令将根据各自逻辑运算的结果影响SF、ZF和PF状态标志位,同时将CF和OF置“0”,但,但AF的值不确定。算术逻辑移位指令命令命令含义含义时钟数时钟数SHL/SAL 逻辑逻辑/算术左移算术左移220+EA+4*位位SHR逻辑右移逻辑右移220+EA+4*位位SAR算术右移算术右移220+EA+4*位位SHL/SAL逻辑/算术左移指令SHL/SAL逻辑算术左移指令(Shift Logic/Arithmetic Left)格式格式 SHL/S
21、AL dst,1/CL。功能功能 将寄存器或存储器中的目的操作数的各位左移,每移一次,最低有效位LSB补0,而最高有效位MSB进入标志位CF。MSBLSB0CFSHL/SAL逻辑算术左移指令举例MOV AH,06H;SAL AH,1;MOV CL,03HSHL DI,CLSAL BYTE PTRBX 左移一次,相当于乘以左移一次,相当于乘以2,仅移位一次时,可以直,仅移位一次时,可以直接用立即数表示,否则,移位次数必须送入接用立即数表示,否则,移位次数必须送入CL中。中。AH06H00000110B将将AH的内容左移的内容左移1次,次,AH 00001100B;将;将DI的内容左移的内容左移3
22、次次;将内存单元的字节左移;将内存单元的字节左移1位位SHR逻辑右移指令SHR逻辑右移指令(Shift Logic Right)格式 SHR dst,1/CL。功能 各位进行右移。每移一次,低位进入CF,最高位补0。MSBLSB0CFSHR逻辑右移指令说明说明 若目的操作数为无符号数,每右移一次,目的操作数除以2,余数被丢掉。举例举例用右移的方法作除法1338165。解:解:MOV AL,1000 0101B;AL133MOV CL,03H;CL移位次数SHR AL,CL;右移3次指令执行后,AL10H16,余数5被丢失。标志位CF、AF不定。SAR算术右移指令SAR算术右移指令(Shift
23、Arithmetic Right)格式格式 SAR dst,1/CL。功能功能 各位进行右移。每移一次,低位进入CF,最高位保持不变,所谓算术和逻辑的区别就是在右移时,是补符号位还是零。MSBLSBCFSAR算术右移指令说明 若目的操作数为带符号数,每右移一次,目的操作数除以2,余数被丢掉。举例用右移的方法作除法-1288-16。解:MOV AL,1000 0000B;AL-128 MOV CL,03H;CL移位次数 SHR AL,CL;右移3次指令执行后,AL1111,0000B0F0H=-16。循环移位指令命令命令含义含义时钟数时钟数ROL循环左移220+EA+4*位位ROR循环右移220
24、+EA+4*位位RCL通过进位的循环左移220+EA+4*位位RCR通过进位的循环右移220+EA+4*位位ROL循环左移指令ROL循环左移指令(Rotate Left)格式格式 ROL dst,1/CL。功能功能 将dst向左循环移动1位或或CL寄存器指定的位数。最高位移到进位标志CF,同时,最高位移到最低位形成循环,进位标志CF不在循环回路之内。MSBLSBCFROR循环右移指令ROR循环右移指令(Rotate Right)格式格式 ROR dst,1/CL。功能功能 将dst向右循环移动1位位或CL寄存器指定的位数。最低位移到进位标志CF,同时最低位移到最高位。MSBLSBCFRCL通过
25、进位位循环左移指令RCL通过进位位循环左移指令 Rotate through Carry Left格式格式 RCL dst,1/CL。功能功能 将dst连同进位标志CF一起向左循环移动1位或由CL寄存器指定的位数。最高位移入CF,而CF移入最低位。MSBLSBCFRCR通过进位位循环右移指令RCR通过进位位循环右移指令 Rotate through Carry Right格式格式 RCR dst,1/CL。功能功能 将dst与进位标志CF一起向右循环移动1位,或由CL寄存器指定的位数。最低位移入进位标志CF,CF则移入最高位。MSBLSBCF利利用用循循环环移移位位指指令令可可以以对对寄寄存存器器或或存存储储器器中中的的任任一一位位进进行行位位测测试试。例例如如要要求求测测试试AL寄寄存存器器中中第第5位位的的状状态态是是“0”还还是是“1”,则则可可利利用用以以下下指指令令实实现:现:MOV CL,5;(CL)移位次数移位次数ROL AL,CL;(CF)AL的第的第5位位JNC ZERO;若若(CF)=0,则转,则转ZERO ;否则;否则ZERO:循环移位指令的应用小结算术类指令的分类与具体功能位运算指令的分类与具体功能本节作业本节作业P121-7
限制150内