版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第六章单片机CPU指令集架构何宾2023.08单片机指令模式的选择基于MCS-251ISA的所有MCU都可以设置为两种模式包括源(Source)模式以及二进制(binary)模式单片机指令模式的选择源模式是MCS-251ISA默认的工作模式。在使用MCS-251ISA时,二进制模式用于兼容51架构的高效机器指令编码模式注:(1)二进制模式只是一个命名,并不表示该模式的机器码就是二进制形式表示,机器码依旧以16进制表示)(2)注:STC32G系列单片机只支持源模式,并不支持二进制模式,这一点要特别注意。单片机指令模式的选择在MCS-251ISA中为什么要存在两种模式?这需要从“A5H”指令前缀开始说起,这里需要强调“A5H”是只是一个机器指令码前缀“A5H”前缀会在编译器编译指令时,依据所设置的模式(源模式/二进制模式)自动生成下面通过一个例子来说明单片机指令模式的选择对于SUBBA,Rn指令,该指令是MCS-51ISA中就有的一条指令,在MCS-251ISA中仍然支持该指令在MCS-51ISA中,该指令的编码格式表中,rrr为寄存器编号对应的二进制编码,范围为“000”~“111”当具体的指令为SUBBA,R4时,该指令的编码格式为“10011100”,以十六进制数表示为0x9C位索引76543210字段值10011rrr单片机指令模式的选择指令SUBRmd,Rms为MCS-251ISA中新增加的指令在MCS-251ISA中,该指令的编码格式表中,ssss为寄存器编号md对应的二进制编码,SSSS为寄存器编号ms对应的二进制编码当具体的指令为SUBR4,R4时,该指令的编码格式为“1001110001000100”,以十六进制数表示为0x9C44位索引1514131211109876543210字段值10011100ssssSSSS单片机指令模式的选择因为MCS-51ISA和MCS-251ISA的指令长度是可变的,所以,如果不采取任何措施时,当MCU中的CPU取出这两条指令时,无法区分出这两条指令,导致CPU无法对指令进行”译码”在前面提到,二进制模式是兼容MCS-51ISA的模式,当在MCS-251ISA下,使用MCS-51ISA中的指令时,为了生成兼容MCS-51ISA的高效指令编码,则会保留MCS-51ISA原本的指令编码格式,也就是不对指令格式进行任何修改单片机指令模式的选择此时,为了在二进制模式下运行在MCS-251ISA中新增加的指令(比如指令SUBRmd,Rms),则会对新添加指令的格式进行修改即在指令编码的最前面添加一个字节的二进制序列“10100101”,用十六进制数表示为0xA5,由于0xA和0x5互为按位取反的关系,所以提高了指令的抗干扰能力当在源模式下,高效的运行MCS-251中新添加的指令,则保留指令的编码格式不变,而将MCS-251中原来MCS-51ISA中的指令前面添加一个字节的二进制序列“10100101”,用十六进制数表示为0xA5。单片机指令模式的选择对于指令SUBBA,R4和指令SUBRmd,Rms,在二进制模式和源模式下的指令操作码的编码指令操作码二进制模式源模式SUBBA,R49CHA59CHSUBR4,R4A59CH9CH单片机CPU指令类型和格式MCS-251ISA中包含了268条指令,而MCS-51ISA中只包含了111条指令,指令的规模为MCS-51ISA指令规模的近2.5倍按照所实现的功能,将STC15单片机内8051CPU指令集分为:算术运算指令逻辑指令数据传输指令位指令控制指令单片机CPU指令类型和格式注:(1)下面介绍的指令中,后面带星号的指令表示在MCS-51ISA就提供的指令,其他不带星号的指令表示在MCS-251ISA中新增加的指令。(2)机器码格式中的机器指令,使用[]括起来表示一个字节(8位二进制数),多个字节的指令使用多个[]符号。(3)下面介绍的指令中,机器码格式以二进制序列表示。(4)在汇编助记符指令中,(寄存器)表示寄存器中的内容,((寄存器))表示寄存器中的内容为存储器的地址。比如(R0)表示R0寄存器中的内容,((R0))表示R0中寄存器的内容为指向存储器的地址。加法指令在MCS-251ISA中,加法指令包括两种类型,即:ADD指令ADDC指令加法指令
--ADD指令将源操作数与目的操作数相加,目的操作数可以是寄存器或累加器,将结果保存在寄存器或累加器中CY标志的判断如果相加结果的第7位有进位,则将进位标志位CY设置为“1”AC标志的判断如果与字节变量相加,且相加结果的第3位有进位,则将标志位AC设置为“1”注:AC只对8位数据的相加运算有效,这一点要特别注意!!!加法指令溢出的判断对于无符号的整数加法,CY标志可用于指示相加的结果是否发生了溢出如果加法结果的第6位有进位但第7位没有进位,或者第7位有进位而第6位没有进位,则设置溢出标志OV。对于有符号整数相加,当两个正数相加结果为负数,或者两个负数相加结果为正数时,表示计算结果的溢出,此时将溢出OV标志设置为“1”加法指令零标志的判断当两个数相加的结果为0时,将零标志Z设置为“1”;当两个数相加的结果不为0时,将零标志Z设置为”0”符号标志的判断当两个数相加结果的第7位为“1”时,将符号标志N设置为“1”;当两个数相加结果的第7位为“0”时,将符号标志设置为“0”注:上面提到的第6位和第7位指的是操作数最高有效字节中(8位、16位或32位)的第6位和第7位。这是因为MCS-251ISA中的加法指令支持8位、16位和32位操作。加法指令
--ADD指令ADDA,Rn(*)
该指令执行的操作和机器指令格式在源模式下,需要在机器码前面添加前缀0xA5,此时指令长度变成2个字节机器码中的rrr为寄存器编号对应的二进制序列(范围为“000“~”111“),对应的寄存器编号为R0~R7操作机器码格式字节数时钟数(A)←(A)+(Rn)[00101rrr]12加法指令
--ADD指令ADDA,dir8(*)该指令执行的操作和机器指令格式机器码中的直接地址为汇编指令中的dir8,范围为0~255操作机器码格式字节数时钟数(A)←(A)+(dir8)[00100101][直接地址]21加法指令
--ADD指令ADDA,@Ri(*)该指令执行的操作和机器指令格式在源模式下,需要在机器码前面添加前缀0xA5,此时指令长度变成2个字节。机器码中的i为“0“或”1”,因此可用的寄存器为R0/R1操作机器码字节数时钟数(A)←(A)+((Ri))[0010011i]12加法指令
--ADD指令ADDA,#data(*)
该指令执行的操作和机器指令格式操作机器码字节数时钟数(A)←(A)+#data[00100100][8位立即数]21加法指令
--ADD指令ADDRmd,Rms该指令执行的操作和机器指令格式ssss与SSSS分别为目标寄存器Rmd编号和源寄存器编号Rms所对应的二进制数在二进制模式下,需要在机器码前面添加前缀0xA5,此时指令长度变成3个字节操作机器码字节数时钟数(Rmd)←(Rmd)+(Rms)[00101100][ssssSSSS]21加法指令
--ADD指令【例6-14】下面的指令执行两个8位数的加法运算,即ADDR1,R0在执行该指令之前,R1寄存器中的内容(R1)=“11000011”,R0寄存器中内容(R0)=“10101010”。在执行该指令后,R1寄存器的内容(R1)=“01101101”,(AC)=”0”,(CY)=”1”以及(OV)=”1”加法指令
--ADD指令ADDWRjd,WRjs该指令执行的操作和机器指令格式tttt为目标寄存器WRjd编号jd/2后对应的二进制数,TTTT为源寄存器WRjs编号js/2后对应的二进制数在二进制模式下,需要在机器码前面添加前缀0xA5,此时指令长度变成3个字节操作机器码字节数时钟数(WRjd)←(WRjd)+(WRjs)[00101101][ttttTTTT]21加法指令
--ADD指令ADDDRkd,DRks
该指令执行的操作和机器指令格式uuuu为目标寄存器DRkd编号kd/4后对应的二进制数,UUUU为源寄存器DRks编号ks/4以后对应的二进制数在二进制模式下,需要在机器码前面添加前缀0xA5,此时指令长度变成3个字节操作机器码字节数时钟数(DRkd)←(DRkd)+(DRks)[00101111][uuuuUUUU]21加法指令
--ADD指令ADDRm,#data该指令执行的操作和机器指令格式ssss为目标寄存器Rm编号对应的二进制数在二进制模式下,需要在机器码前面添加前缀0xA5,此时指令长度变成4个字节操作机器码字节数时钟数(Rm)←(Rm)+#data[00101110][ssss0000][8位立即数]31加法指令
--ADD指令ADDWRj,#data16
该指令执行的操作和机器指令格式tttt为目标寄存器WRj编号j/2后对应的二进制数在二进制模式下,需要在机器码前面添加前缀0xA5,此时指令长度变成5个字节操作机器码字节数时钟数(WRj)←(WRj)+#data16[00101110][tttt0100][立即数高位][立即数低位]41加法指令
--ADD指令ADDDRk,#0data16
该指令执行的操作和机器指令格式uuuu为目标寄存器DRk编号k/4后的对应的二进制数在二进制模式下,需要在机器码前面添加前缀0xA5,此时指令长度变成5个字节操作机器码字节数时钟数(DRk)←(DRk)+#data16[00101110][uuuu1000][立即数高位][立即数低位]41加法指令
--ADD指令ADDRm,dir8
该指令执行的操作和机器指令格式dir8为直接地址,ssss为目标寄存器Rm编号对应的二进制数。在二进制模式下,需要在机器码前面添加前缀0xA5,此时指令长度变成4个字节。操作机器码字节数时钟数(Rm)←(Rm)+(dir8)[00101110][ssss0001][直接地址]31加法指令
--ADD指令ADDWRj,dir8该指令执行的操作和机器指令格式dir8为直接地址,tttt为目标寄存器WRj编号j/2后对应的二进制数在二进制模式下,需要在机器码前面添加前缀0xA5,此时指令长度变成4个字节操作机器码字节数时钟数(WRj)←(WRj)+(dir8)[00101110][tttt0101][直接地址]31加法指令
--ADD指令ADDRm,dir16该指令执行的操作和机器指令格式ssss为目标寄存器Rm编号对应的二进制数在二进制模式下,需要在机器码前面添加前缀0xA5,此时指令长度变成5个字节操作机器码字节数时钟数(Rm)←(Rm)+(dir16)[00101110][ssss0011][直接地址高8位][直接地址低8位]41加法指令
--ADD指令ADDWRj,dir16该指令执行的操作和机器指令格式dir16为16位地址,tttt为目标寄存器WRj编号j/2后对应的二进制数在二进制模式下,需要在机器码前面添加前缀0xA5,此时指令长度变成5个字节操作机器码字节数时钟数(WRj)←(WRj)+(dir16)[00101110][tttt0111][直接地址高8位][直接地址低8位]41加法指令
--ADD指令ADDRm,@WRj
该指令执行的操作和机器指令格式ssss为目标寄存器Rm编号对应的二进制数,tttt为源寄存器WRj编号j/2后对应的二进制数在二进制模式下,需要在机器码前面添加前缀0xA5,此时指令长度变成4个字节操作机器码字节数时钟数(Rm)←(Rm)+((WRj))[00101110][tttt1001][ssss0000]31加法指令
--ADD指令ADDRm,@DRk
该指令执行的操作和机器指令格式ssss为目标寄存器Rm编号对应的二进制数,uuuu为源寄存器DRk编号j/2后对应的二进制数在二进制模式下,需要在机器码前面添加前缀0xA5,此时指令长度变成4个字节操作机器码字节数时钟数(Rm)←(Rm)+((WRj))[00101110][uuuu1011][ssss0000]31加法指令
--ADDC指令该指令实现带进位标志的加法。同时将指定的字节变量、CY标志和累加器内容相加,将结果留在累加器中如果第7位有进位,则置位CY标志位如果第3位有进位,则置位AC标志位溢出标志的判断当无符号整数相加时,CY标志表示发生溢出如果第6位进位第7位没有进位,或第7位进位但第6位没有进位,则置位OV标志位。当有符号整数相加时,OV标志表示两个正数相加结果为负数,或两个负数相加结果为正数。第6位和第7位指的是操作数的最高有效字节(8、16或32位)的第6位和第7位加法指令
--ADDC指令该指令对进位标志CY、辅助进位标志AC、溢出标志OV、符号标志N和零标志Z具有影响加法指令
--ADDC指令ADDCA,Rn(*)
该指令执行的操作和机器指令格式rrr为源寄存器Rn编号对应的二进制数在源模式下,需要在机器码前面添加前缀0xA5,此时指令长度变成2个字节操作机器码字节数时钟数(A)←(A)+(CY)+(Rn)[00111rrr]12加法指令
--ADDC指令下面的指令执行两个带进位的8位数加法运算,即ADDCA,R0在执行该指令之前,累加器A中的内容(A)=“11000011”,寄存器R0的内容(R0)=“10101010”,并且(CY)=1运行该指令后,累加器A中的内容(A)=”01101110”,标志位(AC)=”0”,(CY)=”1”和(OV)=”1”加法指令
--ADDC指令ADDCA,dir8(*)该指令执行的操作和机器指令格式表中,dir8为8位的直接地址操作机器码字节数时钟数(A)←(A)+(CY)+(dir8)[00110101][直接地址]21加法指令
--ADDC指令ADDCA,@Ri(*)该指令执行的操作和机器指令格式i为“0”或“1”,这就意味着在该指令中可用的寄存器为R0或R1在源模式下,需要在机器码前面添加前缀0xA5,此时指令长度变成2个字节操作机器码字节数时钟数(A)←(A)+(CY)+((Ri))[0011011i]12加法指令
--ADDC指令ADDCA,#data(*)该指令执行的操作和机器指令格式表中,#data为8为立即数操作机器码字节数时钟数(A)←(A)+(CY)+#data[00110100][8位立即数]21减法指令
--SUB指令
该指令用于从目标操作数中减去指定的变量,将结果留在目标操作数中如果第7位需要借位,则SUB指令设置CY标志位。否则,CY位清零当减去有符号整数时,OV标志表示当从正数中减去负数时产生了负数,或者当从负数中减去正数时产生了正数。这里的第7位指的是操作数的最高有效字节(8、16或32位)中的第7位
该指令影响进位标志CY、溢出标志OV、符号标志N和零标志Z注:仅对于8位操作数来说,才会影响辅助进位标志AC。对于字和双字寄存器,不会影响AC标志位减法指令
--SUB指令SUBRmd,Rms
该指令执行的操作和机器指令格式ssss与SSSS分别为目的寄存器Rmd编号和源寄存器Rms编号对应的二进制数在二进制模式下,需要在机器码前面添加前缀0xA5,此时指令长度变成3个字节操作机器码字节数时钟数(Rmd)←(Rmd)–(Rms)[10011100][ssssSSSS]21减法指令
--SUB指令【例6-16】下面的指令执行两个8位数的减法运算,即SUBR1,R0在执行该指令之前,R1寄存器中的内容(R1)=“11001001”,寄存器R0的内容(R0)=“01010100”运行该指令后,R1寄存器中的内容(R1)=”01110101”,标志位(CY)=”0”,(AC)=”0”和(OV)=”1”减法指令
--SUB指令SUBWRjd,WRjs该指令执行的操作和机器指令格式tttt为目的寄存器WRjd的编号jd/2后对应的二进制数,TTTT为源寄存器WRjs的编号js/2后对应的二进制数在二进制模式下,需要在机器码前面添加前缀0xA5,此时指令长度变成3个字节操作机器码字节数时钟数(WRjd)←(WRjd)–(WRjs)[10011101][ttttTTTT]21减法指令
--SUB指令SUBDRkd,DRks该指令执行的操作和机器指令格式uuuu为目的寄存器DRKd编号kd/4后对应的二进制数,UUUU为源寄存器DRks编号ks/4后对应的二进制数在二进制模式下,需要在机器码前面添加前缀0xA5,此时指令长度变成3个字节操作机器码字节数时钟数(DRkd)←(DRkd)–(DRks)[10011111][uuuuUUUU]21减法指令
--SUB指令SUBRm,#data该指令执行的操作和机器指令格式ssss为目的寄存器Rm编号对应的二进制数在二进制模式下,需要在机器码前面添加前缀0xA5,此时指令长度变成4个字节操作机器码字节数时钟数(Rm)←(Rm)–#data[10011110][ssss0000][8位立即数]31减法指令
--SUB指令SUBWRj,#data16该指令执行的操作和机器指令格式tttt为目的寄存器编号WRj编号j/2后对应的二进制数在二进制模式下,需要在机器码前面添加前缀0xA5,此时指令长度变成5个字节操作机器码字节数时钟数(WRj)←(WRj)–#data16[10011110][tttt0100][立即数高字节][立即数低字节]41减法指令
--SUB指令SUBDRk,#0data16该指令执行的操作和机器指令格式uuuu为目的寄存器DRk编号k/4后对应的二进制数在二进制模式下,需要在机器码前面添加前缀0xA5,此时指令长度变成5个字节操作机器码字节数时钟数(DRk)←(DRk)–#data16[10011110][uuuu1000][立即数高字节][立即数低字节]41减法指令
--SUB指令SUBRm,dir8该指令执行的操作和机器指令格式ssss为目的寄存器Rm编号对应的二进制数在二进制模式下,需要在机器码前面添加前缀0xA5,此时指令长度变成4个字节操作机器码字节数时钟数(Rm)←(Rm)–(dir8)[10011110][ssss0001][直接地址]31减法指令
--SUB指令SUBWRj,dir8该指令执行的操作和机器指令格式tttt为目的寄存器WRj编号j/2后对应的二进制数在二进制模式下,需要在机器码前面添加前缀0xA5,此时指令长度变成4个字节操作机器码字节数时钟数(WRj)←(WRj)–(dir8)[10011110][tttt0101][直接地址]31减法指令
--SUB指令SUBRm,dir16该指令执行的操作和机器指令格式ssss为目的寄存器Rm编号对应的二进制数在二进制模式下,需要在机器码前面添加前缀0xA5,此时指令长度变成5个字节操作机器码字节数时钟数(Rm)←(Rm)–(dir16)[10011110][ssss0011][直接地址高字节][直接地址低字节]41减法指令
--SUB指令SUBWRj,dir16该指令执行的操作和机器指令格式tttt为目的寄存器编号除以2后的二进制表示法在二进制模式下,需要在机器码前面添加前缀0xA5,此时指令长度变成3个字节操作机器码字节数时钟数(WRj)←(WRj)–(dir16)[10011110][tttt0111][直接地址高字节][直接地址低字节]41减法指令
--SUB指令SUBRm,@WRj该指令执行的操作和机器指令格式tttt为源寄存器WRj编号j/2后对应的二进制数,ssss为目的寄存器Rm编号对应的二进制数在二进制模式下,需要在机器码前面添加前缀0xA5,此时指令长度变成4个字节操作机器码字节数时钟数(Rm)←(Rm)–((WRj))[10011110][tttt1001][ssss0000]31减法指令
--SUB指令SUBRm,@DRk该指令执行的操作和机器指令格式uuuu为源寄存器DRk编号k/4后对应的二进制数,ssss为目的寄存器Rm编号对应的二进制数在二进制模式下,需要在机器码前面添加前缀0xA5,此时指令长度变成4个字节操作机器码字节数时钟数(Rm)←(Rm)–((DRk))[10011110][uuuu1011][ssss0000]31减法指令
--SUBB指令实现带借位的减法SUBB指令从累加器A中减去指定的变量和CY标志,将结果保存到累加器A中进位标志的判断如果第7位需要借位,则设置CY(借位)标志位,否则清除CY标志位。如果在执行SUBB指令之前已经设置了CY标志位,这表明在减法的上一步需要借位,因此从累加器A中减去CY标志位和源操作数辅助进位标志的判断如果第3位向第4位借位,则设置AC标志位,否则清除AC标志减法指令
--SUBB指令溢出标志的判断如果需要借位到第6位且第7位无借位,或者第7位借位且第6位无借位,则设置OV标志位。当减去有符号整数时,OV标志指示从正数中减去负数时产生负数,或从负数中减去正数时产生正数注:此处,第6位和第7位指的是操作数的最高有效字节(8、16或32位)该指令影响的标志位包括进位标志CY、溢出标志OV、符号标志N和零标志Z。对于字和双字寄存器,不会影响AC标志减法指令
--SUBB指令SUBBA,Rn(*)
该指令执行的操作和机器指令格式ssss为源寄存器Rn编号对应的二进制数在源模式下,需要在机器码前面添加前缀0xA5,此时指令长度变成2个字节操作机器码字节数时钟数(A)←(A)–(CY)–(Rn)[10011rrr]12减法指令
--SUBB指令下面的指令执行带借位的两个8位数减法运算,即SUBBA,R2在执行该指令之前,累加器A中的内容(A)=“11001001”,寄存器R2的内容(R2)=“01010100”,并且(CY)=”1”运行该指令后,累加器A中的内容(A)=”01110100”,标志位(CY)=”0”,(AC)=”0”和(OV)=”1”减法指令
--SUBB指令SUBBA,dir8(*)该指令执行的操作和机器指令格式dir8为8位的直接地址操作机器码字节数时钟数(A)←(A)–(CY)–(dir8)[10010101][直接地址]21减法指令
--SUBB指令SUBBA,@Ri(*)
该指令执行的操作和机器指令格式i为“0”或“1”,这意味着在该指令中可用的寄存器为R0或R1在源模式下,需要在机器码前面添加前缀0xA5,此时指令长度变成2个字节操作机器码字节数时钟数(A)←(A)–(CY)–((Ri))[1001011i]12减法指令
--SUBB指令SUBBA,#data(*)
该指令执行的操作和机器指令格式操作机器码字节数时钟数(A)←(A)–(CY)–#data[10010100][8位立即数]21算术指令
--递增指令
对于递增指令来说,当0xFF溢出到0x00时,只影响N和Z标志位INCA(*)该指令执行的操作和机器指令格式操作机器码字节数时钟数(A)←(A)+1[00000100]11算术指令
--递增指令INCRn(*)该指令执行的操作和机器指令格式rrr为寄存器Rn编号对应的二进制数在源模式下,需要在机器码前面添加前缀0xA5,此时指令长度变成2个字节操作机器码字节数时钟数(Rn)←(Rn)+1[00001rrr]12算术指令
--递增指令INCdir8(*)该指令执行的操作和机器指令格式该指令中,dir8为8位的直接地址操作机器码字节数时钟数(dir8)←(dir8)+1[00000101][直接地址]21算术指令
--递增指令INC@Ri(*)该指令执行的操作和机器指令格式i的值为“0”或“1”,这意味着该指令中可用的寄存器为R0或R1在源模式下,需要在机器码前面添加前缀0xA5,此时指令长度变成2个字节操作机器码字节数时钟数((Ri)←((Ri))+1[0000011i]12算术指令
--递增指令【例6-18】下面的指令执行递增运算,即INC@R0INCR0INC@R0在执行指令之前,寄存器R0的内容(R0)=”01111110”,片上数据存储器地址0x7E和0x7F的位置保存着两个数0xFF和0x40,即(0x7E)=0xFF和(0x7F)=0x40在执行完指令后,寄存器R0的内容(R0)=”01111111”,片上数据存储器地址0x7E的位置保存着数据为0x00,即(0x7E)=0x00;片上数据存储器地址0x7F的位置保存着数据为0x41,即(0x7F)=0x41算术指令
--递增指令INCRm,#short该指令执行的操作和机器指令格式ssss为源寄存器Rm编号对应的二进制数;#short的取值为1、2或4,其对应的两位二进制编码vv的值分别为“00”、“01”、“10”在二进制模式下,需要在机器码前面添加前缀0xA5,此时指令长度变成3个字节操作机器码字节数时钟数(Rm)←(Rm)+#short[00001011][ssss00vv]21算术指令
--递增指令INCWRj,#short该指令执行的操作和机器指令格式tttt为目的寄存器WRj编号j/2后对应的二进制数;#short的取值为1、2或4,其对应的两位二进制编码vv的值分别为“00“、”01“、”10“在二进制模式下,需要在机器码前面添加前缀0xA5,此时指令长度变成3个字节操作机器码字节数时钟数(WRj)←(WRj)+#short[00001011][tttt01vv]21算术指令
--递增指令INCDRk,#short该指令执行的操作和机器指令格式uuuu为目的寄存器DRk编号k/4后对应的二进制,#short的取值为1、2或4,其对应的两位二进制编码vv的值分别为“00“、”01“、”10“在二进制模式下,需要在机器码前面添加前缀0xA5,此时指令长度变成3个字节操作机器码字节数时钟数(DRk)←(DRk)+#short[00001011][uuuu11vv]21算术指令
--递增指令
操作机器码字节数时钟数(DPTR)←(DPTR)+1[10100011]11算术指令
--递减指令如果变量原来的值为0x00,递减后下溢到0xFF。该指令仅影响符号标志N和零标志ZDECA(*)该指令执行的操作和机器指令格式操作机器码字节数时钟数(A)←(A)–1[00010100]11算术指令
--递减指令DECRn(*)该指令执行的操作和机器指令格式rrr为寄存器Rn编号对应的二进制数在源模式下,需要在机器码前面添加前缀0xA5,此时指令长度变成2个字节操作机器码字节数时钟数(Rn)←(Rn)–1[00011rrr]12算术指令
--递减指令DECdir8(*)
该指令执行的操作和机器指令格式指令中dir8为8位直接地址操作机器码字节数时钟数(dir8)←(dir8)–1[00010101][直接地址]21算术指令
--递减指令DEC@Ri(*)
该指令执行的操作和机器指令格式i的取值”0”或“1”,这意味着该指令可以使用的寄存器为R0或R1在源模式下,需要在机器码前面添加前缀0xA5,此时指令长度变成2个字节操作机器码字节数时钟数((Ri))←((Ri))–1[0001011i]12算术指令
--递减指令【例6-18】下面的指令执行递减运算,即DEC@R0DECR0DEC@R0执行该指令之前,寄存器R0的内容(R0)=”01111111”,片上数据存储器地址为0x7E的位置保存着数据0x00,即(0x7E)=0x00;片上数据存储器地址为0x7F的位置保存着数据0x40,即(0x7F)=0x40当执行完上面的指令后,寄存器R0的内容(R0)=”01111110”,片上数据存储器地址为0x7E的位置保存着数据0xFF,即(0x7E)=0xFF;片上数据存储器地址为0x7F的位置保存着数据0x3F,即(0x7F)=0x3F算术指令
--递减指令DECRm,#short该指令执行的操作和机器指令格式ssss为目的寄存器Rm编号所对应的二进制数。#short的取值为1、2或4,其对应的两位二进制编码vv的值分别为“00“、”01“、”10“在二进制模式下,需要在机器码前面添加前缀0xA5,此时指令长度变成3个字节操作机器码字节数时钟数(Rm)←(Rm)–#short[00011011][ssss00vv]21算术指令
--递减指令DECWRj,#short该指令执行的操作和机器指令格式tttt为目的寄存器WRj编号j/2后对应的二进制数。#short取值为1、2或4,其对应的两位二进制编码vv的值分别为“00”、“01”、“10”在二进制模式下,需要在机器码前面添加前缀0xA5,此时指令长度变成3个字节操作机器码字节数时钟数(WRj)←(WRj)-#short[00011011][tttt01vv]21算术指令
--递减指令DECDRk,#short该指令执行的操作和机器指令格式uuuu为目的寄存器DRk编号k/4后所对应的二进制数。#short取值为1、2或4,其对应的两位二进制编码vv的值分别为“00”、“01”、“10”在二进制模式下,需要在机器码前面添加前缀0xA5,此时指令长度变成3个字节操作机器码字节数时钟数(DRk)←(DRk)-#short[00011011][uuuu11vv]21算术指令
--乘法指令乘法指令将源寄存器中的无符号整数与目标寄存器中的无符号整数相乘两个8位数相乘,乘积的结果为16位乘积结果的最高有效字节保存在目的寄存器所在字的低字节中。最低有效字节保存在后面的字节寄存器中如果乘积结果大于255(0xFF),则设置OV标志位;否则,清除OV标志
两个16位数相乘,乘积的结果为32位乘积结果的最高有效字保存在目标寄存器所在的双字低位字中。最低有效字保存在后面的字寄存器中如果乘积结果大于65535(0xFFFF),则设置OV标志位;否则,清除OV标志算术指令
--乘法指令在执行乘法指令后,CY标志总是为零当对乘积结果的MSB置位时,设置N标志位当乘积的结果为零时,设置Z标志算术指令
--乘法指令MULAB(*)该指令将累加器A和寄存器B中的两个无符号8位整数相乘16位乘积结果的低字节保存在累加器A中,高字节保存在寄存器B中如果乘积结果大于255(0xFF),则设置OV标志;否则,清除OV标志。CY标志始终清零该指令执行的操作和机器指令格式操作机器码字节数时钟数(A)←(A)X(B)的低字节(B)←(A)X(B)的高字节[10100100]11算术指令
--乘法指令MULRmd,Rms该指令执行的操作和机器指令格式ssss与SSSS分别为目的寄存器Rmd和源寄存器Rms编号所对应的二进制数在二进制模式下,需要在机器码前面添加前缀0xA5,此时指令长度变成3个字节操作机器码字节数时钟数如果<目的>md=0,2,4,..,14Rmd←RmdXRms的高字节Rmd+1←RmdXRms的低字节如果<目的>md=1,3,5,..,15Rmd–1←RmdXRms的高字节Rmd←RmdXRms的低字节[10101100][ssssSSSS]21算术指令
--乘法指令【例6-19】下面的指令执行乘法运算,即MULR1,R0在执行指令之前,寄存器R1的内容为(R1)=“01010000”,寄存器R0的内容(R0)=“10100000”在执行完该指令后,乘积的结果为0x3200,寄存器R0的内容(R0)=0x32,寄存器R1的内容(R1)=0x00,(OV)=”1”,(CY)=“0”算术指令
--乘法指令MULWRjd,WRjs该指令执行的操作和机器指令格式tttt为目的寄存器WRjd编号jd/2后所对应的二进制数,TTTT为源寄存器WRjs编号js/2后对应的二进制数在二进制模式下,需要在机器码前面添加前缀0xA5,此时指令长度变成3个字节操作机器码字节数时钟数如果<目的>jd=0,4,8,..,28WRjd←WRjdXWRjs的高字节WRjd+2←WRjdXWRjs的低字节如果<目的>jd=2,6,10,..,30WRjd–2←WRjdXWRjs的高字节WRjd←WRjdXWRjs的低字节[10101101][ttttTTTT]21算术指令
--除法指令除法指令将寄存器中的无符号整数除以无符号整数操作数,并清除CY和OV标志如果设置了商的MSB,则将设置标志位N如果商为零,则设置Z标志注:如果<src>包含0x00,则两个操作数中返回的值都是未定义的;清除CY标志,设置OV,其余标志未定义算术指令
--除法指令DIVAB(*)
该指令用累加器A中的无符号整数除以寄存器B中的无符号整数。所得的商保存在累加器A中,余数保存在寄存器B中当除数(B寄存器的内容)为0时,结果不确定,并且将溢出标志OV设置为1。在执行该指令时,清除进位标志CY该指令执行的操作和机器指令格式操作机器码字节数时钟数(A)←(A)/(B)的商(B)←(A)/(B)的余数[10000100]16算术指令
--除法指令【例6-20】下面的指令执行除法运算,即DIVAB假设累加器A中的内容(A)=”11111011”,寄存器B中的内容(B)=“00010010”执行该指令后
累加器A中的内容(A)=”00001101”,
寄存器B中的内容(B)=“00010001”,(CY)=”0”,(OV)=”0”算术指令
--除法指令DIVRmd,Rms对于字节操作数(<dest>,<src>=Rmd,Rms),除法结果16位8位商和余数分别保存在Rmd所在字的高字节和Rmd所在字的低字节中该指令执行的操作和机器指令格式操作机器码字节数时钟数(Rmd)←余数(Rmd)/(Rms),如果<目的>md=0,2,4,..,14(Rmd+1)←商(Rmd)/(Rms)(Rmd–1)←余数(Rmd)/(Rms),如果<目的>md=1,3,5,..,15(Rmd)←商(Rmd)/(Rms)[10001100][ssssSSSS]26算术指令
--除法指令表中,ssss与SSSS分别为目的寄存器Rmd和源寄存器Rms编号所对应的二进制数在二进制模式下,需要在机器码前面添加前缀0xA5,此时指令长度变成3个字节算术指令
--除法指令【例6-21】下面的指令执行除法运算,即DIVR1,R5在执行该指令之前,寄存器R1的内容(R1)=”11111011”,寄存器R5的内容(R5)=”00010010”执行指令后,商保存在寄存器R1中,即(R1)=”00001101”,余数保存在寄存器R0中,即(R0)=“00010001”。并且,清除CY标志和OV标志算术指令
--除法指令DIVWRjd,WRjs该指令执行的操作和机器指令格式tttt为目的寄存器WRjd编号jd/2后所对应的二进制数,TTTT为源寄存器WRjs编号js/2后所对应的二进制数在二进制模式下,需要在机器码前面添加前缀0xA5,此时指令长度变成3个字节操作机器码字节数时钟数(WRjd)←余数(WRjd)/(WRjs)
如果<dest>jd=0,4,8,...28(WRjd+2)←商(WRjd)/(WRjs)(WRjd–2)←余数(WRjd)/(WRjs)i如果<dest>jd=2,6,10,...30(WRjd)←商(WRjd)/(WRjs)[10001101][ttttTTTT]210算术指令
--BCD调整指令DAA(*)
该指令的功能是对BCD码的加法结果进行调整两个压缩型BCD码按十进制数相加后,须经该指令的调整才能得到压缩型BCD码的和该指令执行的操作和机器指令格式该指令是根据A的最初数值和程序状态字PSW的状态,决定对A进行加06H、60H或66H操作的注:如果前面没有使用加法运算,则不能直接使用DA指令。此外,如果前面执行的是减法运算,则DA指令也不起任何作用操作机器码字节数时钟数如果{[(A3-0)>9]V[(AC)=1]},则:(A3-0)←(A3-0)+6如果{[(A7-4)>9]V[(C)=1]},则:(A7-4)←(A7-4)+6[10110100]13算术指令
--BCD调整指令【例6-22】下面的指令执行BCD调整操作,即假设累加器A中的数据为56H,表示10进制数56的BCD码。寄存器R3的内容为67H,表示10进制数67的BCD码。进位标志为1,则执行指令:ADDCA,R3;累加器A的结果为BEH,(AC)=0,(CY)=0DAA;表示十进制数的124结果表示为(A)=124注:因为在执行完ADDC指令后,(A)=BEH,
(A)3-0>9,所以(A)3-0+6→(A)3-0=4H,向第4位有进位(A)7-4>9,所以(A)7-4+6+进位→(A)7-4=2H,最高位有进位算术指令
--比较指令该指令从目标操作数中减去源操作数,结果不保存在目的操作数中如果第7位需要借位,则设置CY标志。否则,清除CY标志当减去有符号整数时,OV标志位指示正数减去负数出现了负数结果,或者指示负数减去正数出现了正的结果注:这里的第6位和第7位指的是操作数的最高有效字节中的(8、16或32位)第6位和第7位对于该指令,仅当操作数为8位操作数时,才影响AC标志比较的结果将会影响N和Z标志算术指令
--比较指令CMPRmd,Rms该指令执行的操作和机器指令格式ssss与SSSS分别为目的寄存器Rmd和源寄存器Rms编号所对应的二进制数在二进制模式下,需要在机器码前面添加前缀0xA5,此时指令长度变成3个字节操作机器码字节数时钟数(Rmd)–(Rms)[10111100][ssssSSSS]21算术指令
--比较指令【例6-23】下面的指令执行比较操作,即CMPR1,R0假设寄存器R1的内容(R1)=”11001001”,寄存器R0的内容(R0)=”01010100”执行该指令后,(CY)=”0”,(AC)=“0”,(OV)=“1”算术指令
--比较指令CMPWRjd,WRjs该指令执行的操作和机器指令格式tttt为目的寄存器WRjd编号jd/2后所对应的二进制数,TTTT为源寄存器WRjs编号js/2后所对应的二进制数在二进制模式下,需要在机器码前面添加前缀0xA5,此时指令长度变成3个字节操作机器码字节数时钟数(WRjd)–(WRjs)[10111101][ttt
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 老年智能穿戴设备研发工程师考试试卷及答案
- 2025年中国葛洲坝集团易普力股份有限公司禹州分公司招聘22人(河南)笔试历年参考题库附带答案详解
- 2025年11月福建福州市马尾区国有资产服务中心招聘编外人员1人笔试历年参考题库附带答案详解
- 2025山东移动春季校园招聘笔试历年参考题库附带答案详解
- 2025山东威海乳山鑫蜜客人力资源有限公司招聘劳务派遣人员34人笔试历年参考题库附带答案详解
- 2025安徽宣城郎溪开创控股集团有限公司下属子公司第二批员工招聘11人笔试历年参考题库附带答案详解
- 2025天津市华海国有资产投资管理有限公司面向社会招聘12人笔试历年参考题库附带答案详解
- 2025国家电投集团中国电力招聘26人笔试历年参考题库附带答案详解
- 2025四川绵阳科技城新区投资控股(集团)有限公司(含所属公司)人力资源需求外部招聘暨市场化选聘(2025年第三批次)部笔试历年参考题库附带答案详解
- 2025四川成都产业投资集团有限公司“蓉漂人才荟”赴高校校园招聘2人笔试历年参考题库附带答案详解
- 湖南省湘潭市2026年下学期七年级数学期中考试卷附答案
- 2025浙江湖州市产业投资发展集团下属市飞英融资租赁有限公司招聘笔试历年参考题库附带答案详解
- 2024广州铁路职业技术学院招聘笔试真题参考答案详解
- 2026年物业管理师综合提升试卷附参考答案详解【轻巧夺冠】
- 2026年一级建造师《(矿业工程)管理与实务》考试真题及答案
- 2026安徽合肥工业大学招聘管理人员20名笔试参考题库及答案解析
- 威海市住宅工程质量通病防治手册
- 北京市西城区2026年高三一模英语试卷(含答案)
- 义务教育数学课程标准(2025年修订版 VS 2022年版)对比
- 污水厂上游来水管理制度
- 教师语言与礼仪
评论
0/150
提交评论