微机原理课件第六章 指令系统_第1页
微机原理课件第六章 指令系统_第2页
微机原理课件第六章 指令系统_第3页
微机原理课件第六章 指令系统_第4页
微机原理课件第六章 指令系统_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第六章 指令系统一单片机的编程过程编写汇编语言源程序(.ASM)编译链接(.OBJ)伪指令翻译成机器码以及程序的地址定位。(.BIN或.ASM)EPROM工具:文本编辑器工具:专用编译器工具:编程器图6-1例:TEST.ASM源文件ORG2018HDCB0BDHAXEQU1AHBXEQU1CHORG2080HMAIN:LDAX,#01HLDBX,#03HLJMPMAINEND编译成.OBJ文件XXXXXX(定位信息)0BDHXXXXXX(定位信息)LD1AH,#01HLD1CH,#03HLJMP2080H翻译成.HEX文件文件头(0000H)0BDH2018H空 空 A1H2080H01H20

2、81H00H2082H1AH2083HA1H2084H03H2085H00H2086H1CH2087HE7H2088HF5H2089HFFH208AH文件尾二汇编语言指令格式:操作码操作数,.,操作数操作码:指令类型(传送、加、减、乘、除、逻辑判断等)操作数:代表操作码所要操作的数据或数据存放的地址,在8098的指令系统中一条指令最多可以有三个操作数。三指令系统使用的数据类型共6种数据类型:指的是操作数的数据表示方式和所占用的字节数。A、 字节型:无符号型(字节型)0255;有符号型(短整数型)(补码)-128127B、 字型:无符号型(字型)065535;有符号型(整数型)(补码)-3276

3、832767C、 双字型:无符号型(双字型)0232-1;有符号型(长数型)(补码)-231231-1对于不同的数据类型分配数据的地址有限制。对于字节型地址可任意分配,对于字型低位地址必须是偶数,对于双字型最低位地址必须是4的倍数。在每条指令中,都已明确指定所使用的操作数的数据类型。四寻址方式:寻址方式:在指令中操作数表达具体数据的方式。共有四种。A、 立即数寻址:操作数直接就是数据。数据前应加#号。例:LDB20H,#22HB、 寄存器寻址:若数据是位于CPU内部的寄存器组或SFR时,可以使用寄存器寻址。采用寄存器寻址的操作数是用要读写的寄存器或SFR的地址代表。对于字或双字操作数用最低位的

4、地址代表。例:LDB20H,22H(将22H的内容送到20H中)LD20H,22H(将22H、23H的内容送到20H、21H中)C、 寄存器间接寻址:对于读写外部地址单元(通过外部地址、数据总线),采用寄存器间接寻址方式。寄存器间接寻址的操作数本身是CPU内部的寄存器,他的内容是要寻址的数据的地址。例:LD22H,4000H(错)例:LD22H,#4000HLDB20H,22H自动增量间接寻址:LD22H,#4000H(A)LD20H,22H+; (B)LDB20H,22H+执行前:20H00H;21H00H;22H00H;23H00H4000H55H;4001HAAH(A) 执行后:20H5

5、5H;21HAAH;22H02H;23H40H4000H55H;4001HAAH(B) 执行后:20H55H;21H00H;22H01H;23H40H4000H55H;4001HAAHD、 变址寻址:由基地址和偏移地址组合形成的寻址方式。例:比较间接寻址和变址寻址LD22H,#4000HLD20H,22HLD20H,30H22H间接寻址的地址是4000H,变址寻址的地址是4030H。长变址寻址和短变址寻址:若偏移量为八位二进制数,为短变址寻址。若偏移量为16位二进制数,为长变址寻址。例:短变址寻址LD20H,30H22HLD20H,-3H22H短变址寻址的偏移量的范围从-128127例:长变址

6、寻址LD20H,2000H22H长变址寻址的偏移量范围是065535零寄存器寻址:变址寻址的变形。零寄存器:在CPU内部地址是00H、01H的两个寄存器的内容不能改变,就是零。例:LD20H,2000H0LD20H,30H0五指令中操作数使用寻址方式的规则:在任一个指令中,只有最后一个操作数可采用四种寻址方式中的任一种,而其它操作数必须采用寄存器直接寻址方式。例:ADD20H,22HADD20H,22HADD20H,22HADD20H,22H,24HADD20H,22H,24HADD20H,22H,24H再例:LDAX,#4000HLDAX,#0001H为什么会有这样的规律:操作码操作数,.,

7、操作数其中,操作码由八位二进制数组成A1A076543210操作码指明最后一个操作数的寻址方式,其余操作数的寻址方式隐含为寄存器寻址方式六指令系统分类1、数据传送指令2、算术运算指令3、逻辑操作指令4、栈操作指令5、无条件转移和调用指令6、条件转移指令7、位为“0”或位为“1”转移指令8、循环控制指令9、单寄存器指令10、移位指令11、特殊控制指令12、规格化指令符号说明:wreg:操作数使用寄存器直接寻址的字型数据waop:操作数可使用任意一种寻址方式的字型数据breg:操作数使用寄存器直接寻址的字节型数据baop:操作数可使用任意一种寻址方式的字节型数据lreg:操作数使用寄存器直接寻址的

8、双字型数据(双字型数据只能使用寄存器直接寻址方式)七数据传送指令(a)LDwreg,waopLDBbreg,baop(b)STwreg,waopSTBbreg,baop(c) LDBSEwreg,baop短整数变整数LDBZEwreg,baop字节变字例:LDBSEAX,80H(A)AX:1111,1111,1000,0000LDBZEAX,80H(B)AX:0000,0000,1000,0000八算术运算指令:(A) 程序状态字(PSW)STVTICZVNZ中断屏蔽寄存器Z:零标志位N:负标志位V:溢出标志位VT:溢出陷阱标志位C:进位标志位I:中断标志位ST:粘着标志位以上标志位除了I标志

9、位和中断有关,ST标志位和循环移位指令标志位外,其余标志位都和加减乘除运算有关。加减运算不考虑进位或借位,若运算结果为零,置零标志位。运算结果为零 Z=1,运算结果不为零 Z=0将运算结果作为无符号数的运算结果,改变C标志位加法:有进位 C=1,无进位 C=0减法:有借位 C=0,无借位 C=1将运算结果作为有符号数的运算结果,改变V,VT,N若运算结果溢出(运算结果超过补码表示范围)V=VT=1未溢出 V=0,VT不变。若运算结果为负或负溢出 N=1若运算结果为正或正溢出 N=0例:LDBAL,#0FCHLDBBL,#0FCHADDBAL,BLC=?,V=?,VT=?N=?C=1,V=VT=

10、0,N=1例:LDBAL,#01000110BLDBBL,#01000110BADDBAL,BLC=?,V=?,VT=?N=?C=0,V=VT=1,N=0例:LDBAL,#00111100B(60)LDBBL,#10111010B(-70)SUBBAL,BLC=?,V=?,VT=?N=?C=0,V=VT=1,N=0V和VT的区别:VT:算术运算若有溢出,可以使VT置1,若无溢出不能使VT清零。只有通过专用指令CLRVT,VT才能等于0。V:随算术运算的溢出或不溢出而置1或清零。V和VT的使用方法:开始-70-60判断V=1-70+30判断V=140+30判断V=1结束是否跳转到出错处理程序是跳

11、转到出错处理程序否是跳转到出错处理程序否方法A开始-70-60判断VT=1是否跳转到出错处理程序40+3060-70+30结束方法B方法A:1、程序复杂2、可以知道具体那个运算出错。方法A:1、程序简单2、不知道具体那个运算出错。(B) 加减法指令1、 加法字节加ADDBbreg,baop(2操作数)ADDBDbreg,Sbreg,baop(3操作数)字加ADDwreg,waop(2操作数)ADDDwreg,wbreg,waop(3操作数)带进位相加ADDCBbreg,baop(2操作数)ADDCwreg,wreg(2操作数)ADDCB 和ADDC运算过程:breg(wreg)= breg(w

12、reg)+baop(waop)+C例:四字节加法:(大于65536的加法)838860+838860838860=1100,1100,1100,1100,1100838860=1100,1100,1100,1100,1100838860=1100,1100,1100,1100,1100838860=1100,1100,1100,1100,110011001,0001,1001,10001101,程序:SUM:LDAX,#1100,1100,1100,1100BLDBX,#1100BLDCX,#1100,1100,1100,1100BLDDX,#1100BADDCX,AXADDCDX,BXRET

13、运算结果:DX(高位)CX(低位)2、 减法同加法一一对应breg(wreg)= breg(wreg)-baop(waop)-(C的反)(C) 比较指令CMPBwreg,waopCMPbreg,baop比较指令相当与减法指令(被比较数减比较数),但运算结果不存入wreg(breg)中,运算结果的正负,是否为零等,从而改变标志位(C、N、Z、V、VT)。(D) 乘除指令:有符号数和无符号数的乘除指令不同。1、乘法:有符号数:MULlreg,waopMULlreg,wreg,waopMULBwreg,baopMULBwreg,breg,baop无符号数:MULUlreg,waopMULUlreg,

14、wreg,waopMULUBwreg,baopMULUBwreg,breg,baop例:MULU20H,24H21H,20H(CCH,CCH)25H,24H(CCH,CCH)积:A3D5C290H运算结果:21H,20H(C2H,90H)23H,22H(A3H,D5H)2、 除法有符号数:DIVlreg,waopDIVBwreg,baop无符号数:DIVUlreg,waopDIVUBwreg,baop例:DIVU20H,24H23H,22H,21H,20H(00H,01H,12H,34H)25H,24H(24H,68H)商:7H,余数:135CH21H,20H(00H,07H)23H,22H(

15、13H,5CH)九 条件转移指令:1、 条件转移的基本模式:条件是否满足跳转到指令确定的地址下一条指令是否例:程序片断:START:LDAX,#01HLDBX,#02HCMPAX,BXJCSTARTLDAX,BX条件判断中的条件:PSW中的各标志位。2、 条件转移指令的分类:对进位标志位的判断、对V,VT,N标志位的判断、对Z标志位的判断、位测试指令、循环控制指令、对ST标志位的判断。A、 对进位标志位的判断(比较无符号数时使用)JC,JNC,JH,JNHJC:C=1,进位标志位为1,跳转JNC:C=0,进位标志位为0,跳转JH:C=1且Z=0,当两个无符号数相比较,被比较数大于比较数时跳转。

16、JNH:C=0或Z=1,当两个无符号数相比较,被比较数小于或等于比较数时跳转。例:CMP20H,22HJNHcaddB、 对V、VT、N标志位的判断(比较有符号数时使用)对V标志位的判断:JV、JNV对VT标志位的判断:JVT、JNVT对N标志位的判断:JGT、JLE、JGE、JLTJGT:N=0,Z=0被比较数大于比较数跳转(带符号数)JLE:N=1或Z=1被比较数小于或等于比较数跳转(带符号数)JGE:N=0被比较数大于或等于比较数跳转(带符号数)JLT:N=1被比较数小于比较数跳转(带符号数)例:LDB20H,#0F4HLDB22H,#0F5HCMPB20H,22H若0F4H,0F5H代

17、表无符号数,若被比较数大于比较数则跳转,用什么指令?答:JH若0F4H,0F5H代表有符号数(补码),若被比较数大于比较数则跳转,用什么指令?答:JGTC、 对Z标志位判断:JNE、JEJNE:Z=0不相等则跳转JE: Z1 相等则跳转D、位测试指令:JBC,JBS 对于CPU内部寄存器的每一位都可以通过相应的指令来测试内容例:JBC20H,7,caddJBS20H,0,caddE、循环控制指令:DJNZbreg,cadd 减一非零跳转例:LDB20H,#5 START: . . .DJNZ20H,START.例:软件按键消抖,需要使用沿时子程序沿时子程序DELAY:LDBAL,#30HDEL

18、AY1:NOPDJNZAL,DELAY1RET沿时时间循环次数循环一次指令执行的时间例:编写沿时500US的子程序。8098,12MDELAY:LDBAL,#XXXXHDELAY1:NOPDJNZAL,DELAY1RET执行时间NOP+DJNZ=4+9=13个状态周期循环次数=沿时时间/13个状态周期答:500130.25=154DELAY:LDBAL,#154DELAY1:NOPDJNZAL,DELAY1RET再例:编写沿时1MS的子程序。8098,12M程序1DELAY:LDBAL,#308DELAY1:NOPDJNZAL,DELAY1RET程序2DELAY:LD AL,#308DELAY

19、1:NOPDJNZAL,DELAY1RET程序3DELAY:LDBAL,#154DELAY1:NOPNOPNOPNOPDJNZAL,DELAY1RET程序4DELAY:LDBAL,#7DELAY1:LDB BL,#22DELAY2:NOPDJNZBL,DELAY2DJNZAL,DELAY1RETF、对粘着位的判断:JNST,JSTJNST:ST=0,跳转JST:ST1,跳转十 无条件转移和调用指令1、无条件转移指令SJMP、LJMP、BRA、SJMP: SJMP cadd 1024cadd-当前指令地址1023,寻址范围小,占用的存储空间小B、LJMP: LJMPcadd可以寻址地址空间的任一

20、个地址,占用的存储空间大例:开始是否溢出20H21H出错处理40H41H结束是否溢出是否是否START:ADDB20H,21HJNVSTART1LJMPERROR1START1:ADDB40H,41HJNVSTART2ERROR1:XXXXXXXXXXXXXXXXXXXXXXXXSTART2:RETC、BR: BRwreg把由wreg代表的寄存器内容作为转移的目的地址。例:LDAX,4000H BRAX当前PC=2900H,执行完指令后,PC=4000H2、调用指令子程序:子程序是一段独立的程序模块。可由主程序的调用指令调用。使用子程序有利于程序的模块化、易修改性、程序的减化等。例:MAIN:

21、LDAX,#01HMAIN:LDAX,#01HLDBX,#01HLDBX,#01HLDCX,#01HLDCX,#01HLDDX,#01HLDDX,#01HADDAX,CXLCALLLADDADDCBX,DXLDAX,#02HLDAX,#02HLDBX,#02HLDBX,#02HLDCX,#02HLDCX,#02HLDDX,#02HLDDX,#02HLCALLLADDADDAX,CXLJMPMAINADDCBX,DXLADD:ADDAX,CXLJMPMAINADDCBX,DXRET子程序调用指令:SCALL、LCALLSCALL:SCALLcadd1024cadd-当前指令址1023,寻址范围小

22、,速度快。LCALL:LCALLcadd可以寻址地址空间的任一个地址,速度慢。十一 移位指令:包括左移和右移指令1、左移指令C0字节、字、双字SHLBbreg,#count由立即数确定移位次数(015)SHLBbreg,breg由寄存器内容确定移位次数(031)SHLwreg,#count由立即数确定移位次数(015)SHLwreg,breg由寄存器内容确定移位次数(031)SHLLLreg,#count由立即数确定移位次数(015)SHLLLreg,breg由寄存器内容确定移位次数(031)2、右移指令A、逻辑右移指令字节、字、双字C0逻辑右移SHRBwreg,#count由立即数确定移位次

23、数(015)SHRBwreg,breg由寄存器内容确定移位次数(031)SHRbreg,#count由立即数确定移位次数(015)SHRbreg,breg由寄存器内容确定移位次数(031)SHRLLreg,#count由立即数确定移位次数(015)SHRLLreg,breg由寄存器内容确定移位次数(031)B、算术右移指令字节、字、双字C01算术右移SHRABwreg,#count由立即数确定移位次数(015)SHRABwreg,breg由寄存器内容确定移位次数(031)SHRAbreg,#count由立即数确定移位次数(015)SHRAbreg,breg由寄存器内容确定移位次数(031)SH

24、RALLreg,#count由立即数确定移位次数(015)SHRALLreg,breg由寄存器内容确定移位次数(031)C、左移和右移指令的使用移位指令可分为逻辑性移位和算术性移位。逻辑性移位例:半字节交换指令A0A1A2A3A4A5A6A7A4A5A6A7A0A1A2A3SWAP:LDBBL,ALSHLBAL,#4SHRBBL,#4ORBAL,BLRET算术性移位对于无符号数左移一位相当于乘2,右移一位相当于除2。对于有符号数左移一位相当于乘2,若最高位是1,右移一位且最高位移入1相当于除2。若最高位是0,右移一位且最高位移入0相当于除2。十二 栈操作指令堆桟操作是存储数据的特殊方法。下面比较普通的数据存储和压栈操作 LD20H,30H PUSH30H 普通的数据存储需要在指令中明确指定数据存储的目标地址。而在压栈操作中不需要指出数据存储的目标地址。那么在压栈操作中数据存放到什么位置?在SFR中有两个个寄存器(0018H,0019H)叫堆桟指针寄存器SP。在压栈操作中,数据存储的目标地址就是堆桟指针寄存器的内容(所以堆桟指针寄存器是一个字,因为存放的

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论