《第三章指令系统.ppt》由会员分享,可在线阅读,更多相关《第三章指令系统.ppt(115页珍藏版)》请在三一办公上搜索。
1、第三章 指令系统,3.1 操作数类型及寻址方式,3.3 指令系统详解,3.2 程序状态字,3.4 例题,汇编语言原程序的格式,标号:操作码 操作数1,操作数2,操作数3;注释,3.1 操作数类型及寻址方式,一、操作数类型,对8098单片机而言,可以采用7种类型的操作数,它们是:,18位无符号数(字节型)数据格式:D7D0取值范围:0255(十进制表示)。,216位无符号数(字型)数据格式:D15D0取值范围:065535(十进制表示)。,332位无符号数(双字型)数据格式:D31D0取值范围:0(232 1)(十进制表示)。,4.8位带符号数(短整数)数据格式:D7D0,D7是符号位。取值范围
2、:128+127(十进制表示)。,6.32位带符号数(长整数)数据格式:D31D0。取值范围:231+(231 1)(十进制表示)。,5.16位带符号数(整数)数据格式:D15D0,D15是符号位。取值范围:32768+32767(十进制表示)。,7一位数(位型)在数据中,位是最基本的单位。若想了解单片机内部数据存储器RAM中任何一位的状态,可以通过该位所在字节的地址及其位号而对其测试。,二、寻址方式,对于96系列单片机,可通过六种基本寻址方式来实现地址空间内操作数的访问:,寄存器直接寻址;间接寻址;自动增量间接寻址;立即寻址;短变址寻址;长变址寻址。,这六种寻址方式属单片机硬件所支持的基本寻
3、址方式,与某些专用寄存器结合还可形成一些其他的寻址方式,如零寄存器寻址和堆栈指针寄存器寻址。,寄存器直接寻址在指令中可以有一个到三个操作数采用寄存器直接寻址方式,取决于指令。寄存器地址必须遵循操作数类型的定位规则。,例1INCBCL;CL=CL+1,为字节型操作,无定位规则。,例2MUL20H,26H;20H,21H单元及26H,27H单元中各存放一个16位数,乘积(32位)放在20H23H中。,例3ADDAX,BX,CX;AX BXCX,2.间接寻址要求访问的操作数地址是一个存放在寄存器文 件中的WORD变量,通过它可去寻找操作数。用间接寻址方式能够在8098地址空间中的任何 地点找到操作数
4、。一条指令中,只能有一个操作数用间接寻址方 式,其余的操作数必须用寄存器直接寻址。,例1LDAX,AX;AX内容决定的地址单元内容存放到AX。,例2ADDBAL,BL,CX;CX决定的地址单元内容加上BL的内容,结果放在AL中。,例3POPAX;将栈顶上的一个字弹出到AX 内容所决定的字地址单元,且SP SP2。,3.自动增量间接寻址作为地址指针的字变量在对操作数寻址后,自动增值调整,增值大小取决于操作数的类型。,例1LDAX,BX+;将BX决定的地址空间的内 容传送到AX,且 BX BX2。,例2LDBAH,BX+;将BX决定的地址空间的内 容传送到AH,且 BX BX1。,4.立即寻址该寻
5、址方式允许一个操作数直接从一个指令段里取得。一条指令只能包含一个立即数,其余操作数必须用寄存器直接寻址。,例1 ADDAX,#1230H;AXAX1230H,例2 ADDB AL,#30H;AL AL30H,5.短变址寻址指令中含有一地址段和一8位偏移量段。地址段选定寄存器组合中某字寄存器,该寄存器内容即为16位基地址。8位偏移量为有符号数,它与基地址之代数和可形成操作数有效地址。这样,有效地址的范围可以从基地址前128个字节到后127个字节。,例LDAX,26HBX;AXMEM_(BX26H),ADDBAL,BL,0FDHCX;AL BLMEM_(CX-3),6.长变址寻址这种寻址方式类似于
6、短变址寻址方式,不同之处在于指令的第二个字段是16位,与WORD字变量相加后,形成一个操作数的有效地址。这里不需要进行符号扩展。一条指令只能含有一个长变址寻址的参数,其余操作数必须用寄存器直接寻址。,例ADDAX,BX,TABLECX;AXBXMEM_(CXTABLE),ADDBAL,BL,TABLECX;AL BLMEM_(CXTABLE),7.零寄存器寻址在8098单片机硬件结构里,寄存器文件里开始的二个字固定为零,称之为零寄存器。除了给运算和比较提供常数零之外,还能作为长变址寻址中的WORD字变量,派生出零寄存器寻址方式。这种零寄存器与寻址方式的结合,使存储器中的任何一个单元都能被直接地
7、寻址到。,例1 LDAX,8098H0;将地址为8098H单元的内容送到AX寄存器。,例2 LDBAH,26H0;将片内寄存器阵列中26H字节单元内容送到AH中,例3POP2200H0;将栈顶的内容弹出送入2200H单元和2201H单元,且SP SP2。,8.堆栈指针寄存器寻址堆栈指针寻址是将堆栈指针SP作为间接寻址寄存器,其中的内容作为操作数地址。这种寻址方式为访问堆栈中的数据提供了方便。例如:可用堆栈指针作为间接寻址的字变量去访问栈顶,或用于短变址方式中以访问堆栈中的数据。,例1 PUSHSP;将栈顶两字节再次压入堆栈。,例2 LDAX,8SP;将栈顶下第8个单元和第9单元的内容送入AX中
8、,3.2 程序状态字寄存器PSW,程序状态字PSW保存了用户程序运行所需的状态信息。它的低8位称为中断屏蔽寄存器,高8位保存有7种状态信息,它们可以成为支配程序走向的依据,编制软件时十分有用。而这些状态是由单片机在执行程序的过程中自动形成的。,3V 溢出标志位当单片机的运算结果超出前述数据类型所定义的范围时,V=1;反之,V=0。,1Z 零标志位当单片机的运算结果为0时,Z=1;反之,Z=0。,2N 负标志位当单片机的操作结果为负值时,N=1;反之,N=0。,4VT 溢出陷阱标志位单片机执行某一条指令后,若V=1,则VT同时为1;随后执行另一条指令而使V=0时,VT保持为1。,5C 进位标志位
9、单片机进行算术运算,可能出现进位或借位。有进位时,C=1;反之,C=0。有借位时,C=0;反之,C=1。如果发生移位操作,移出去的位为1时,C=1,反之,C=0。,6ST 粘位标志位如果单片机在向右移位的过程中使C=1,则ST同时为1;随后的操作出现C=0时,ST仍然为1。,7I 中断允许标志位I=1表示允许中断发生,I=0则为禁止中断。这两种状态是依靠单片机分别执行开中断和关中断指令实现的。,3.3 指令系统详解,8098单片机指令按功能可分成下列几类:(l)数据传送指令;(2)算术运算指令;(3)逻辑操作指令;(4)栈操作指令;(5)无条件转移和调用指令;(6)条件转移指令;(7)位为“0
10、”或位为“1”转移指令;(8)循环控制指令;(9)单寄存器指令;(10)移位指令;(11)特殊控制指令;(12)规格化指令。,指令系统的有关约定,不同性质指令的操作用不同的助记符表示,而关于字节、字、双字运算的区别采用以下标志:B字节运算(8位);L双字运算(32位)。助记符中最后一个英文字母不是B或L,代表字运算。,8098单片机的指令系统,允许使用13个操作数。用汇编语言书写时,可用符号名表示,或者是具体数字。操作数又可分为目的操作数D(Destination)和源操作数S(Source)。指令的常见形式:,无操作数指令:助记符单操作数指令:助记符D(或S)双操作数指令:助记符D,S三操作
11、数指令:助记符D,S1,S2,无符号数乘法与除法指令的操作码为两个字节,其它指令的操作码为一个字节。两个字节的操作码,其中第一个字节恒为FEH。,位型操作数的使用有如下限制:在指令系统中只能对PSW中的某些标志位,置“1”或清“0”。对于其他的位型操作数,只能测试,不能设置。测试时必须指明字节地址和该字节中的位号。,操作数的通用表示法,如下表所示。,PSW中6个标志位的状态表示方法如下:,为便于编程和讲解例题,对寄存器文件中的8个存储单元分别作出了定义,它们的名称与地址如下:,它们可以构成8个字节型寄存器,或4个字型寄存器,还可以构成两个双字寄存器。,不同的寻址方式下,各种操作数的表达格式如下
12、:,指令系统中使用的其它符号如下:,一、数据传送指令,这类指令用于片内寄存器之间的数据传送,立即数向寄存器的数据传送,寄存器和存储器之间的数据传送。这类指令均为两个操作数。,数据传送指令对状态标志的影响:,1.LDwreg,waop;字传送,功能:把waop代表的字操作数送到寄存器文件的字寄存器wreg中。,例l立即数传送LDAX,#1234H;AX1234H,例2寄存器传送LDAX,BX;AXBX,例3间接寻址传送LDBX,#1234H;BX1234HLDAX,BX;把存储器单元1234H1235H 中的内容送入AX。,例4间接增量传送LDBX,#1234HLDAX,BX+;存储器单元123
13、4H1235H中的 内容送入AX,且BX内容加2。,例5短变址传送LDBX,#1234HLDAX,12HBX;存储器单元1246H1247H中 的内容送入AX。,例6长变址传送LDBX,#1234HLDAX,1234HBX;把存储器单元2468H2469H 中的内容送入AX。,2.LDBbreg,baop;字节传送,功能:把baop代表的字节操作数送到寄存器文件的字节寄存器中。,例1立即数传送LDBAL,#12H;AL12H。,例2寄存器传送LDBAL,BL;BX的低位字节送入AX的低 位字节。,例3间接寻址传送LDBX,#1234HLDBAL,BX;1234H单元中的数送入AL,例4间接增量
14、传送LDBX,#1234HLDBAL,BX+;1234H单元中的数送入AL;BX寄存器增1,例5短变址传送LDBX,#1234HLDBAL,12HBX;1246H单元中的数送入AL,例6长变址传送LDBX,#1234HLDBAL,1234HBX;2468H单元中的数送入AL,3.ST wreg,waop;字存储,功能:把wreg表示的字寄存器的内容送到由waop表示的字寄存器中或字存储单元中,waop不能是立即数。,例1STAX,BX;AX的内容存BX,例2STAX,BX+;AX的内容存放由BX内容指出 的存储单元,且BX内容加2。,4.STB breg,baop;字节存储,功能:把breg表
15、示的字节寄存器的内容送到由baop表示的字节寄存器中或字节存储单元中,baop不能是立即数。,例1 LDAX,#1234HSTBAL,AX;将34H存放到1234H单元。,例2LDAX,#1234HSTBAH,1234H0;将AH的内容(12H)存放到 1234H单元。,5.LDBSE wreg,baop;短整数变整数传送,功能:把baop代表的源字节操作数作符号扩展送入由wreg代表的目标寄存器中。,例1LDBBL,#12HLDBSEAX,BL;AX0012H,例2LDBSEAX,#8AH;AX0FF8AH,6.LDBZE wreg,baop;字节转换为字,功能:将baop代表的源字节操作数
16、作零扩展后送入目标字寄存器中。,例1寄存器传送LDBBL,#12HLDBZEAX,BL;AX0012H,例2间接寻址传送LD BX,#1234HLDBZEAX,BX;存储器1234H单元中的数扩展后送AX,二、算术运算指令,算术运算指令包括加法、减法、乘法、除法、比较指令。这些指令都要影响程序状态字中的状态标志。,指令包括以下类型:16位加、减、比较;8位加、减、比较;8位乘8位乘法;16位乘16位得32位积的乘法;32位除以16位的除法;16位除以8位的除法;乘除运算又分带符号和不带符号运算。,1.ADD wreg,waop;双操作数字相加,功能:把wreg代表的字寄存器内容与waop代表的
17、字操作数相加,结果在wreg中。,对状态标志的影响:,设AX=1357H,BX=2468H,2468H=11H,2469H=22H,例1 ADDAX,BX;该指令执行后,AX=37BFH,BX内容不变,例2 ADDAX,#1357H;执行后,AX=26AEH。,例3 ADDAX,BX;执行后,AX=3568H,BX内容不变。,2.ADD Dwreg,Swreg,waop;三操作数字相加,功能:将Swreg代表的字寄存器内容加上waop代表的字操作数,结果存入Dwreg代表的字寄存器中。Swreg与waop内容不变。,对状态标志的影响:,设AX=0123H,BX=1234H,CX=2468H,1
18、234H=11H,1235H=22H,例1 ADDAX,BX,#1234H;AX=2468H,BX不变。,例2 ADDAX,BX,CX;AX=369CH,BX和 CX不变。,例3 ADDAX,AX,BX;AX=2334H,BX不变。,3.ADDBbreg,baop;双操作数字节相加,功能:把breg代表的字节寄存器内容与baop代表的字节操作数相加,结果在breg中。,对状态标志的影响:,例1 ADDBAL,CL;CL和AL相加,结果送入AL,例2 ADDBAL,#12H;12H与AL的内容相加,结果 送入AL。,例3 ADDBAL,BX;将BX所指向的单元的内容与 AL相加,结果存入AL。,
19、4.ADDB Dbreg,Sbreg,baop;三操作数字节相加,功能:将Sbreg代表的字节寄存器内容加上baop代表的字节操作数,结果存入Dbreg代表的字节寄存器中。Sbreg与baop内容不变。,对状态标志的影响:,例1 ADDB AL,BL,CL;BX和CX的低字节相加,结果送AX的低字节。,例2 ADDB AL,AL,#12H;ALAL+12H,例3 ADDB AL,AL,BX+;将BX决定的存储单元内容与AL相加,结果在AL中,BX内容增1。,5.ADDC wreg,waop;带进位的字相加,功能:把wreg代表的字寄存器内容与waop代表的字操作数及进位标志C相加,结果在wre
20、g中。相加之和不为0时,零标志位Z清零;相加之和为0时,Z不变(即不能将Z置“1”)。,对状态标志的影响:,例 ADDC BX,DX;将BX内容、DX内容及进位标志值三者相加,结果送入BX中。,6.ADDCB breg,baop;带进位的字节相加,功能:把breg代表的字节寄存器内容与baop代表的字节操作数及进位标志C相加,结果在breg中。相加之和不为0时,零标志位Z清零;相加之和为0时,Z不变(即不能将Z置“1”)。,对状态标志的影响:,例:ADDCB AL,BL,ADDCB AL,#26H,ADDCB AL,BX,ADDCBAL,BX+,ADDCBAL,8098HBX,7.SUB wr
21、eg,waop;双操作数字相减,功能:把wreg代表的字寄存器内容与waop代表的字操作数相减,结果放在wreg中。如果够减,状态标志C为1;如果不够减,C为0。,对状态标志的影响:,例:LDAX,#1234HLDBX,#6789HSUBBX,AX;BX=6789H1234H=5555H;C=1,8.SUB Dwreg,Swreg,waop;三操作数字相减,功能:把Swreg代表的字寄存器内容与waop代表的字操作数相减,结果放在Dwreg中。如果够减,状态标志C为1;如果不够减,C为0。,对状态标志的影响:,例:LDAX,#1234HLDBX,#6789HSUBCX,BX,AX;CX=678
22、9H1234H=5555H;C=1,9.SUBB breg,baop;双操作数字节相减,功能:把breg代表的字节寄存器内容与baop代表的字节操作数相减,结果放在breg中。如果够减,状态标志C为1;如果不够减,C为0。,对状态标志的影响:,例:LD AX,#1234HSUBB AH,AL;AH=12H34H=0DEH;C=0,10.SUBB Dbreg,Sbreg,baop;三操作数字节相减,功能:把Sbreg代表的字节寄存器内容与baop代表的字节操作数相减,结果放在Dbreg中。如果够减,状态标志C为1;如果不够减,C为0。,对状态标志的影响:,例:SUBBAL,BL,CL,SUBBA
23、L,BL,#05H,SUBBAL,BL,CX,SUBBAL,BL,5CX,SUBBAL,BL,1234HCX,11.SUBC wreg,waop;带借位的字减法,功能:将wreg代表的字寄存器内容减去waop代表的字操作数,再减去状态标志C的反,结果放在wreg中。如果够减,状态标志C为1;如果不够减,C为0。,对状态标志的影响:,例:LDAX,#4488HLDBX,#1122HSUBAX,BX;AX=4488H1122H=3366H;C=1SUBCBX,AX;BX=1122H3366H=0DDBCH;C=0,12.SUBCB breg,baop;带借位的字节减法,功能:将breg代表的字节寄
24、存器内容减去baop代表的字节操作数,再减去状态标志C的反,结果放在breg中。如果够减,状态标志C为1;如果不够减,C为0。,对状态标志的影响:,例:SUBBAH,ALSUBCBAH,AL,13.CMP wreg,waop;字比较,功能:把wreg代表的字寄存器内容与waop代表的字操作数相减,wreg和waop的内容不变,仅改变标志位。wreg=waop时Z=1,N=0,C=1wregwaop时Z=0,N=0,C=1,对状态标志的影响:,例:设AX=1234H,BX=1235H,CMP AX,BX;指令执行后,AX,BX不变,Z=0,C=0,N=1,V=0。CMP AX,#1234H;立即
25、数比较 CMP AX,BX;间接寻址比较 CMP AX,BX+;间接增量比较,14.CMPB breg,baop;字节比较,功能:把breg代表的字节寄存器内容与baop代表的字操作数相减,breg和baop的内容不变,仅改变标志位。breg=baop时Z=1,N=0,C=1bregbaop时Z=0,N=0,C=1,对状态标志的影响:,例:CMPBAL,BLCMPBAL,#5CMPBAL,BX CMPBAL,BX+CMPBAL,5BXCMPBAL,8031HBX,15.MUL Lreg,waop;整数乘法(双操作数),功能:Lreg代表的寄存器为一个32位寄存器,它的低16位为一个整数,将这个
26、整数与waop代表的16位操作数进行带符号乘法运算,结果为32位,存入Lreg。,对状态标志的影响:,例1LD AX,#0101HLDBX,#0202HMULAX,BX;两数相乘,32位结果存入BX,即BX=00020402H。结果地址分配:20H:02H;21H:04H;22H:02H;23H:00H,例2MULAX,#8098HMUL BX,AXMUL BX,AX+,16.MUL Lreg,wreg,waop;整数乘法(三操作数),功能:把由wreg代表的寄存器字内容和由waop代表的字操作数进行带符号乘法运算,结果存入32位目的寄存器Lreg中。,对状态标志的影响:,例LDAX,#010
27、2HLDBX,#0203HMULCX,AX,BX;两数相乘,32位的结果存入 CX,CX=00020706H。,指令执行结果:寄存器地址:27H26H25H24H寄存器内容:00H02H07H06H,17.MULB wreg,baop;短整数乘法(双操作数),功能:wreg为一字寄存器,将其低位字节内容与baop代表的字节操作数进行带符号乘法运算,16位结果存入目的寄存器wreg中。,对状态标志的影响:,例LDBAL,#12HLDBBL,#34HMULBAX,BL;两数相乘,结果存入AX,;AX=03A8H。,18.MULB wreg,breg,baop;短整数乘法(三操作数),功能:把由br
28、eg代表的寄存器字节和baop代表的操作数字节进行带符号乘法,16位结果存入目的寄存器wreg中,breg、baop不变。,对状态标志的影响:,例1LDBAH,#12HLDBBL,#34HMULBAX,AH,BL;AX AH BL,例2LDBAH,#2HLDBX,#1234HMULBAX,AH,02BX;AX AH1236H,19.MULU Lreg,waop;无符号字乘法(双操作数),功能:Lreg代表的是一个32位寄存器,它的低位字(16位)与waop代表的字操作数进行无符号乘法,32位结果存入Lreg中。,对状态标志的影响:,本指令与MULLreg,waop指令类似,其区别仅在于本指令为
29、无符号数运算。,20.MULU Lreg,wreg,waop;无符号字乘法(三操作数),功能:把wreg代表的字寄存器内容与waop代表的字操作数进行无符号乘法,32位结果存入目的寄存器Lreg中。,对状态标志的影响:,该指令与MUL指令类似,其区别仅在于该指令为无符号数运算。,21.MULUB wreg,baop;无符号字节乘法(双操作数),功能:wreg为一字寄存器,将其低字节内容与baop代表的字节操作数进行无符号乘法,16位结果存入wreg中。,对状态标志的影响:,22.MULUB wreg,breg,baop;无符号字节乘法(三操作数),功能:把breg代表的寄存器字节与baop代表
30、的操作数字节进行无符号乘法,16位积送入wreg中。,对状态标志的影响:,23.DIV Lreg,waop;整数除法(带符号),功能:把由Lreg代表的寄存器内容(长整数)带符号除以由waop代表的整数,商存入Lreg的低位字中,余数存入Lreg的高位字中。当商大于一个字时,V=1,VT=1。,对状态标志的影响:,例LDCX,#2468H;CX2468HLDAX,#1234H;AX1234HLDBX,#0001H;BX0001HDIVAX,CX 指令执行后,商为0007H,在AX中;余数为135CH,在BX中。,24.DIVB wreg,baop;短整数除法(带符号),功能:把由wreg代表的
31、寄存器内容(整数)带符号除以由baop代表的短整型数,商存入wreg的低字节,余数存入wreg的高字节。当商大于一个短整数时,V=1,VT=1。,对状态标志的影响:,例LDAX,#1234HLDBBL,#12HDIVBAX,BL该指令执行后,商存入AL,余数存入AH。,25.DIVU Lreg,waop;字除法(无符号),功能:无符号除法运算。把由Lreg代表的无符号寄存器操作数(32位)除以由waop代表的字操作数,商存入Lreg的低字,余数存入Lreg的高字。,对状态标志的影响:,26.DIVUB wreg,baop;字节除法(不带符号),功能:无符号除法运算。把由wreg代表的无符号寄存
32、器操作数(16位)除以由baop代表的字节操作数,商存入wreg的低字节,余数存入wreg的高字节。,对状态标志的影响:,三、逻辑操作指令,这类指令有“与”、“或”、“异或”三类,每类又分为字操作和字节操作。每种操作都使标志位中的C及V置0,并根据操作结果改变Z和N标志。,1.ANDwreg,waop;字逻辑与(双操作数),功能:把由wreg代表的寄存器字和由waop代表的字操作数进行按位“与”操作,结果放在wreg中。,对状态标志的影响:,例ANDAX,BX,ANDAX,#1234H,ANDAX,BX+,ANDAX,1234HBX,2.ANDDwreg,Swreg,waop;字逻辑与(三操作
33、数),功能:把由Swreg代表的寄存器字和由waop代表的字操作数按位相与,结果放在Dwreg。,对状态标志的影响:,例AND AX,BX,CX;AXBXCX,ANDAX,AX,#1234H;AXAX1234H,ANDAX,BX,CX,ANDAX,BX,CX+,ANDAX,BX,12CX,3.ANDBbreg,baop;字节逻辑与(双操作数),功能:把由breg代表的寄存器字节和baop代表的操作数字节进行按位相与,结果放在breg中。,对状态标志的影响:,例ANDBAL,BL;ALALBL,ANDBAL,#12H;ALAL12H,ANDBAL,BX,ANDBAL,BX+,ANDBAL,12B
34、X,ANDBAL,1234BX,4.ANDBDbreg,Sbreg,baop;字节逻辑与(三操作数),功能:把由Sbreg代表的寄存器字节和由baop代表的字节操作数按位相与,结果放在Dbreg。,对状态标志的影响:,例ANDB AL,BL,#12H,ANDBAL,BL,CX,ANDBAL,BL,CX+,ANDBAL,BL,12CX+,ANDBAL,BL,1234CX+,5.ORwreg,waop;字逻辑或,功能:把wreg代表的字寄存器内容和由waop代表的字操作数进行按位“或”操作,结果放在wreg中,或操作没有三个操作数的情况。,对状态标志的影响:,例LD AX,#1234HLD BX,
35、#5678HOR AX,BX;AX与BX逻辑或指令执行后,AX=567CH,6.ORBbreg,baop;字节逻辑或,功能:把breg代表的字节寄存器内容和由baop代表的字节操作数进行按位“或”操作,结果放在breg中。,对状态标志的影响:,例ORB AL,BL,ORB AL,#05H,ORB AL,BX,7.XORwreg,waop;字逻辑异或,功能:把由wreg代表的字寄存器内容,与waop代表的字操作数进行按位“异或”。两操数相应位不同时,该位为1;相应位的相同时,该位为0,异或操作没有三操作数的情况。,对状态标志的影响:,例设(2468H)=52H,(2469H)=15H,LD AX
36、,#4234HLDBX,#2468HXORAX,BX+,指令执行后,AX=5766H,BX=246AH,8.XORBbreg,baop;字节逻辑异或,功能:把由breg代表的寄存器宇节内容,与baop代表的字节操作数进行按位“异或”。两操数相应位不同时,该位为1;相应位的相同时,该位为0。,对状态标志的影响:,例XORBAL,BL,XORBAL,BX,XORBAL,CX+,XORBAL,1234CX,四、栈操作指令,片内寄存器队列的18H和19H中放堆栈指针SP。,1.PUSH waop;字进栈,功能:把waop代表的字操作数压入堆栈,SPSP2。,对状态标志的影响:,堆栈是向下生成的,当把一
37、个字压入栈时,SP2;从栈中弹出一个字时,SP2。,2.PUSHF;PSW标志进栈,功能:将程序状态字PSW压入栈中,然后把PSW清零。SPSP2。,对状态标志的影响:,3.POP waop;字出栈,功能:把栈顶的字弹出到waop指定的单元中,SPSP+2。,对状态标志的影响:,4.POPF;PSW标志出栈,功能:栈顶的字弹出到程序状态字PSW中,即恢复原压入栈中的PSW值,SPSP2。,对状态标志的影响:,五、无条件转移和调用指令,无条件转移指令包括:长转移、短转移、间接转移,调用指令分:长调用和短调用。,1.LJMP cadd;长跳转,功能:把指令结束后的下一地址值与指定的偏移量相加,送到
38、PC中,实现转移。,例PC值 指令目标码20F4 LJMP INITE7120120F7 2209INIT:LD 20H,#0C000HA100C020,从20F7H到2209H,偏移量为0112H,因此,指令的目标码为E71201。,2.SJMP cadd;短跳转,功能:把本指令结束后的下一个地址与指定的偏 移量相加,送到PC中,形成跳转。,例PC值 指令目标码21FC SJMP INIT200B 21FE 2209INIT:LD 20H,#0C000HA100C020,上述指令中偏移量为:2209H21FEH=000BH。因此目标码为200BH。,3.BRwreg;间接转移,功能:把由wr
39、eg代表的字寄存器内容作为转移的目的地址。,例设AX=2020H,BRAX;指令执行后,PC=2020H。,4.Lcallcadd;长调用,功能:把PC值(返回地址)压入栈中,并将本指令结束后的下一地址与偏移量相加,其结果作为调用地址送入PC。,6.RET;从子程序返回,功能:将栈顶的内容(即返回地址)弹出到PC,且堆栈指针SP+2,7.TRAP;软件陷井指令,功能:执行此指令造成一次中断调用,相应的中断向量为2010H。指令操作不受PSW中的中断允许标志的影响。此指令供Intel开发工具用。,5.Scallcadd;短调用,功能:把PC值(返回地址)压入栈中,并将本指令结束后的下一地址与指令
40、中给出的11位(包括1个符号位)偏移量相加,其结果作为调用地址,送入PC。,六、条件转移指令,此类指令是根据条件满足或不满足来决定是否转移。,根据某一个标志是0或是1转移;,两个标志位“相与”条件转移;,两个标志位“相或”条件转移;,某个字节寄存器的任一位为1或0转移;,循环控制转移。,条件转移指令对状态标志的影响:,1.JCcadd;进位标志C为1则转移,功能:若进位标志C=1,则转移到cadd处;若C=0,则顺序执行下一条指令。,3.JEcadd;Z标志为1(相等)则转移,功能:如果标志Z=1,转移到cadd;若Z=0,顺序执行下一条指令。,2.JNCcadd;进位标志C为0则转移,功能:
41、若C=0,则转移到cadd处;若C=1,则顺序执行下一条指令。,4.JNEcadd;Z标志为0(不相等)则转移,功能:如果标志Z=0,转移到cadd;若Z=1,顺序执行下一条指令。,5.JGEcadd;大于或等于(带符号数)时转移,功能:如果标志N=0,则转移到cadd;若N=1,顺序执行下一条指令。,6.JLTcadd;小于(带符号数)时转移,功能:如果标志N=1,转移到cadd;若N=0,顺序执行下一条指令。,8.JNVcadd;溢出标志不为1时转移,功能:如果标志V=0,转移到cadd;若V=1,顺序执行下一条指令。,7.JVcadd;溢出标志为1时,功能:如果标志V=1,转移到cadd
42、;若V=0,顺序执行下一条指令。,10.JNVTcadd;溢出陷井标志不为1时转移,功能:如果标志VT=0,转移到cadd;若VT=1,顺序执行下一条指令。,11.JSTcadd;粘着位标志为1时跳转,功能:如果标志ST=1,转移到cadd;若ST=0,顺序执行下一条指令。,9.JVTcadd;溢出陷井标志为1则转移,功能:如果标志VT=1,转移到cadd;若VT=0,顺序执行下一条指令。,12.JNSTcadd;粘着位不为1时转移,功能:如果标志ST=0,转移到cadd;若ST=1,顺序执行下一条指令。,13.JGTcadd;带符号数大于零时转移,功能:如果标志N=0且Z=0,则转移到cad
43、d;否则顺序执行下一条指令。,15.JHcadd;无符号数大于零有进位时转移,功能:如果标志C=1且Z=0,则跳转到cadd;否则顺序执行下一条指令。,14.JLEcadd;带符号数小于或等于零时转移,功能:如果标志N=1或Z=1则转移到cadd,否则顺序执行下一条指令。,16.JNHcadd;无符号数不高于零时转移,功能:如果标志C=0或Z=1则转移到cadd;即无符号数无进位或结果为零时转移。,17.JBCbreg,bitno,cadd;指定位为0时转移,功能:测试由breg的第bitno位,若该位为0,则转移到cadd;若不为0,顺序执行下一条指令。,例JBCAL,7,AS2,若AL的第
44、7位为0,则转移到标号AS2;否则顺序执行。,18.JBSbreg,bitno,cadd;指定位为1时转移,功能:测试由breg的第bitno位,若该位为1,则转移到cadd;若不为1,顺序执行下一条指令。,19.DJNZbreg,cadd;减1非零跳转,功能:把breg的内容减1,若结果为0,则顺序执行下一条指令;若结果不为0,则跳转到cadd。,注意:对某些特殊功能寄存器的位测试以后,要破坏寄存器的内容,使用时要注意。对于非特殊功能寄存器,测试后寄存器内容不变。,七、单寄存器指令,单寄存器指令包括以下指令:寄存器增1,寄存器减1,操作数取反,寄存器清0,整数取反以及整数带符号扩展等。这些指
45、令根据操作结果影响PSW中的状态标志。,1.INCwreg;字增1,功能:把由wreg代表的寄存器字内容加1。,例INCAX;设AX的内容为1234H,该指令执行后,(AX)=1235H,对标志位的影响:,2.INCBbreg;字节增1,功能:把由breg代表的寄存器字节内容加l。,例INCBAL;AX的低字节加1,对标志位的影响:,3.DECwreg;字减1,功能:把由wreg代表的寄存器字内容减l。,例DECAX,对标志位的影响:,4.DECBbreg;字节减1,功能:把由breg代表的寄存器字节内容减l。,例DECBAL;AX的低字节减1,对标志位的影响:,5.NEGwreg;整型数求补
46、,功能:把wreg的内容求补。即,按位取反后,最低位加1。,对标志位的影响:,6.NEGBbreg;短整型数求补,功能:把breg代表的字节寄存器内容求补码。方法是:按位取反后,最低位加1。,例LDAL,#0FFHNEGBAL;指令执行后,AL=01H,对标志位的影响:,7.EXTLreg;整型数符号扩展至长整型数,功能:把Lreg中的低字的符号位扩展到整个操作数的高字。,对标志位的影响:,8.EXTBwreg;短整型数符号扩展至整型数,功能:把wreg低字节的符号扩展到整个操作数的高字节。,对标志位的影响:,9.NOTwreg;字求反,功能:把由wreg代表的寄存器字按位求反。即1变0,0变
47、1。,对标志位的影响:,10.NOTBbreg;字节求反,功能:把由breg代表的寄存器字节按位求反。,对标志位的影响:,11.CLRwreg;字清零,功能:把由wreg代表的寄存器字清零。,对标志位的影响:,12.CLRBbreg;字节清零,功能:把由breg代表的寄存器字节清零。,对标志位的影响:,八、移位指令,移位指令包括左移、右移。可以进行字节、字、双字的移位。移出的最后一位保存在状态标志C中。,1.SHLwreg,#countSHL wreg,breg;字左移,功能:由wreg代表的寄存器字左移。每次移位后,右端以零填充。最后移出的位保存在C中。,对标志位的影响:,2.SHLBbre
48、g,#count或SHLB breg,breg;字节左移,功能:由breg代表的寄存器字节左移,每次移位后,右端以零填充。最后移出的位保存在进位标志C中。,例SHLB AH,#02H,对标志位的影响:,LDB BL,#02H SHLB AH,BL,3.SHLLLreg,#count或SHLL Lreg,breg;双字左移,功能:由Lreg代表的寄存器双字左移,最后移出的位保存在进位标志C中。,例LD BX,#0205HLD AX,#0102H SHLL AX,BL;(BX,AX)左移5位,对标志位的影响:,4.SHRwreg,#count或SHR wreg,breg;字逻辑右移,功能:由wre
49、g代表的寄存器字操作数右移,每次移位后,左端以0填充,最后移出的位保存在进位标志C中。指令开始,ST标志位置0,当一个“1”移入C标志,以后又移出时,ST置1。,对标志位的影响:,5.SHRBbreg,#count或SHRB breg,breg;字节逻辑右移,功能:由breg代表的字节操作数右移,每次移位后,左端以0填充,最后移出的位保存在进位标志C中。指令开始,ST被置0,以后ST的状态由操作决定。,对标志位的影响:,6.SHRLLreg,#count或SHRL Lreg,breg;双字逻辑右移,功能:由Lreg代表的寄存器中双字操作数右移,每次移位后,左端填以0。最后移出的位保存在进位标志
50、C中。指令开始ST被置0,以后ST的状态由操作决定。,对标志位的影响:,7.SHRAwreg,#count或SHRA wreg,breg;字算术右移,功能:由wreg代表的寄存器字操作数右移,右移时考虑原数的符号。最后移出的位保存在进位标志C中。指令开始,ST标志被清除,以后ST的状态受操作的影响。,对标志位的影响:,8.SHRABbreg,#count或SHRAB breg,breg;字节算术右移,功能:由breg代表的寄存器字节操作数右移,最后移出的位保存在进位标志C中。指令开始,ST被置0,以后ST由操作决定。,对标志位的影响:,9.SHRALLreg,#count或SHRAL Lreg