版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第六章单片机CPU指令集架构何宾2023.08主要内容数据类型和端指令集中的符号规则单片机CPU寻址模式指令模式的选择单片机CPU指令类型和格式单片机CPU指令集架构
--数据类型和端MCS-251ISA寻址的数据类型注:16位的字或32位的双字可以保存在存储器中任何字节开始的地址,注意不需要在16位字(两字节)或32位双字(四字节)边界上对齐数据类型二进制位的个数位(bit)1字节(byte)8字(word)16双字(doubleword)32单片机CPU指令集架构
--数据类型和端在MCS-251ISA中,字和双字以大端形式保存在内存和寄存器文件中在将数据保存到存储器中时,字或双字的最高有效字节(MostSignificantByte,MSB)在指令中指定的存储器的字节中,其余字节保存在存储器高地址的位置,最低有效字节(LeastSignificantByte,LSB)保存在存储器最高地址的位置对于大端来说,满足高址低字节,低址高字节的规则。而小端正好相反,满足高址高字节,低址低字节的规则单片机CPU指令集架构
--数据类型和端下面将通过一个例子说明在大端模式下,存储器地址和寄存器不同字节之间的对应关系代码清单6-1在寄存器和存储器之间移动数据的汇编语言代码
MOVWR0,#A3B6HMOV00:0201H,WR0MOVDR4,#0000C4D7H单片机CPU指令集架构
--数据类型和端对于指令MOVWR0,#A3B6H来说,它将立即数0xA3B6加载到16位(字)寄存器WR0中对于指令MOV00:0201H,WR0来说,它将16位(字)寄存器的内容保存到数据存储器地址为00:0201H的位置对于指令MOVDR4,#0000C4D7H来说,它将零扩展的32位立即数0x0000C4D7加载到32位(双字)寄存器DR4中0xA30xB6数值位号158700xA30xB600:0201H00:0202H0x000x000xC40xD7数值位号3124231615870单片机CPU指令集架构
--指令集中的符号规则MCS-251的ISA兼容了MCS-51的ISA,也就是说在MCS-251的ISA中包含了全部MCS-51ISA中的指令本节介绍MCS-251ISA中对于指令中使用的各种符号的定义规则包括传统MCS-51ISA中的寄存器符号的表示、地址符号的表示,以及指令中操作数的符号表示规则指令集中的符号规则
--寄存器符号的表示当在MCS-251的ISA中使用MCS-51ISA中的指令时,会使用到MCS-51ISA中规定的寄存器符号,包括:A:表示MCS-51(简称8051)CPU核中的8位累加器ACCDPTR:表示16位的数据指针,指向外部数据空间或者代码存储空间PC:表示16位的程序计数器,指向下一条要执行指令的地址C:表示进位标志CYAB:表示A和B寄存器对,用于乘和除操作SP:表示堆栈指针DPS:数据指针选择寄存器R0~R7:8个8位的寄存器指令集中的符号规则
--操作数符号的表示规则在MCS-251ISA中,对于操作数的符号描述含义符号描述@Ri通过寄存器R1或R0间接寻址的地址,范围为00H~FFHRnnrrr当前寄存器组所选择的8位寄存器R0-R7,8位寄存器的编号n的范围为0~7,rrr为n对应的二进制编码RmRmdRmsm,md,msssssSSSSRm为寄存器文件中当前选择的8位(字节)寄存器,范围为R0~R15Rmd为8位(字节)目标寄存器Rms为8位(字节)源寄存器m、md和ms为8位(字节)寄存器的编号,范围为0~15ssss为寄存器编号m或md所对应的二进制编码SSSS为寄存器编号ms对应的二进制编码指令集中的符号规则
--操作数符号的表示规则WRj
WRjdWRjs@WRj
@WRj+dis16
j,jd,js
ttttTTTTWRj为当前寄存器文件所选择的16位(字)寄存器,包括WR0、WR2、…和WR30WRjd为16位(字)目标寄存器WRjs为16位(字)源寄存器@WRj表示通过16位(字)寄存器WR0~WR30进行间接寻址的地址,范围为00:0000~00:FFFFH@WRj+dis16表示通过16位(字)寄存器WR0~WR30指定的存储器地址加上由dis16指定的0~64Kbyte范围的偏移值所得到间接寻址的地址,范围为00:0000H~00:FFFFHj、jd和js为16位(字)寄存器的编号,取值范围为0~30之间的偶数(包括0),即0、2、4、6、8、…、28和30tttt为j/2或jd/2对应的二进制编码TTTT为js/2对应的二进制编码符号描述指令集中的符号规则
--操作数符号的表示规则DRk
DRkdDRks@DRk
@DRk+dis24
k,kd,ks
uuuuUUUUDRk为当前寄存器文件所选择的32位(双字)寄存器,包括DR0、DR4、…、DR28、DR56和DR60DRkd为32位(双字)目标寄存器DRks为32位(双字)源寄存器@DRk表示通过32位(双字)寄存器DR0~DR28、DR56或DR60进行间接寻址的地址,范围在00:0000H~FF:FFFFH@DRk+dis24为通过寄存器DR0-DR28、DR56或DR60指定的基地址加上由dis24所指定的0~64Kbyte范围的偏移值所的得到间接寻址的地址,范围为00:0000H~FF:FFFFHk、kd和ks为32位(双字)寄存器编号,k、kd和ks的取值为0、4、8、…、28、56和60uuuu为k/4或kd/4对应的二进制编码UUUU为ks/4对应的二进制编码符号描述指令集中的符号规则
--操作数符号的表示规则dir8dir为8位直接寻址的地址,地址范围为00:0000H~00:00FFH或地址范围为S:00H~S:FFH的SFR空间dir16dir16为直接寻址的16位地址,地址范围为00:0000H~00:FFFFH#data#data为8位立即数#data16#data为16位立即数#0data16#1data16#0data16和#1data16均表示32位立即数。其中,#0data16表示用16个二进制数“0”填充高16位,#1data16表示用16个二进制数“1”填充高16位#shortvv#short表示值为1或2或4的常数,它仍然是立即数vv为#short/2对应的二进制编码(其中,1/2=0=“00”,2/2=1=“01”,4/2=2=“10”)符号描述指令集中的符号规则
--操作数符号的表示规则bit
yyy可直接位寻址的地址。其范围为00:0020H~00:007FH或SFR内可位寻址的地址yyy为为位号(0~7)对应的二进制编码bit51bit51为可直接位寻址的地址,在存储空间或SFR中范围为00H~FFH。在内部存储器字节中,00H~7FH表示为地址20H~2FH的128个位。80H~FFH表示16个SFR中的128位。需要注意,SFR必须以0或8结尾relrel为8位相对寻址的符号。在机器码中使用补码表示,目标操作数的范围为-128~+127的字节,计算为相对下一条指令的第一个字节addr11addr11为11位目标地址,其目标地址在下一条指令所在的同一个2kB块内addr16addr16为16位目标地址,其目标地址在下一条指令所在的同一个64kB块内addr24addr24为24位目标地址,它是MCS-251ISA的所有可寻址的范围符号描述单片机CPU指令集架构
--单片机CPU寻址模式一条机器指令包含两部分,即:操作码和操作数操作码的目的是要对被操作对象进行处理典型的,对被操作对象实现逻辑与或非运算、加减乘除运算等在机器/汇编语言指令中,将操作对象称为操作数在STC增强型8051单片机和STC32G系列单片机中,这些被操作的对象(操作数)可以保存在CPU的内部寄存器、片内Flash程序存储器、片内基本RAM、片内扩展RAM或者片外扩展存储器中,也可能是仅是一个常数,它作为操作码的一部分存在单片机CPU指令集架构
--单片机CPU寻址模式因此,就需要预先确定一些规则,一方面使得操作数可以保存在这些区域内;另一方面,CPU可以找到它们在单片机中,将CPU寻找操作对象(操作数)所在存储位置的方式,称为寻址模式单片机CPU指令集架构
--单片机CPU寻址模式MCS-251的ISA支持下面的寻址模式(区分源和目的),包括:寄存器寻址在这种寻址模式中,指令中指定包含操作数的寄存器立即寻址在这种寻址模式中,指令中包含着操作数直接寻址在这种寻址模式中,指令包含操作数地址间接寻址在这种寻址模式中,指令指定包含操作数地址的寄存器单片机CPU指令集架构
--单片机CPU寻址模式位移寻址在这种寻址模式中,指令指定一个寄存器和一个偏移量。操作数地址是寄存器内容(基地址)和偏移量之和相对寻址在这种寻址模式中,指令包含从下一条指令到目标地址(控制转移的地址,例如跳转地址)的带符号偏移量位寻址在这种寻址模式中,指令包含位地址单片机CPU寻址模式
--立即数寻址模式MCS-51的ISA和MCS-251的ISA都支持立即寻址模式下面分别介绍MCS-51ISA和MCS-251ISA提供的立即数寻址模式
单片机CPU寻址模式
--立即数寻址模式MCS-251ISA在这种寻址模式中,在指令中就包含着立即数当执行8位(字节)操作时,使用8位立即数(#data)当执行16位(字)操作时,使用16位立即数(#data16)
当执行32位(双字)操作时,低16位(字)使用16位(字)立即数填充,高16位(字)使用16个二进制数“0”(由#0data16表示)或使用16个二进制数“1”(由#1data16表示)填充。将16位立即数数据放入双字寄存器(DRk)的MOVH指令,将数据放入高位字,同时保持低位字不变。递增/递减指令包含指定递增/递减量的立即数(#short取值为1、2或4)单片机CPU寻址模式
--立即数寻址模式MCS-51ISA
在这种寻址模式中,指令仅使用8位立即数(#data)注:立即数前面必须加上前缀符号‘#’进行标识【例6-1】下面的指令采用了立即数寻址模式,即MOVA,#3AH该指令将8位十六进制表示的立即数3A加载到累加器A中,即(A)=0x3A
【例6-2】下面的指令采用了立即数寻址模式,即MOVWR4,#1230H该指令将16位十六进制表示的立即数1230加载到字寄存器WR4中,即(WR4)=0x1230单片机CPU寻址模式
--直接寻址模式MCS-51的ISA和MCS-251的ISA都支持直接寻址模式下面分别介绍MCS-51ISA和MCS-251ISA提供的直接寻址模式
单片机CPU寻址模式
--直接寻址模式MCS-251ISA在这种寻址模式中,指令包含数据操作数的地址。其中:8位地址可寻址范围包括片上RAM地址范围为00:0000H~00:007FH的区域和SFR地址范围为S:080H~S:0FFH的区域,可以以字节(8位)、字(16位)和双字(32位)的形式访问这些区域16位地址可寻址范围为片上RAM地址范围为00:0000H~00:FFFFH的区域,可以以字节(8位)、字(16位)和双字(32位)形式访问这些区域在MCS-251ISA中,存储器的地址包括一个区域编号,即00:、01:、...、FF:这与传统MCS-51ISA的地址表示不同单片机CPU寻址模式
--直接寻址模式在MCS-251ISA中,在SFR区域内寻址的地址需要加入前缀符号‘S:’,以表示后面跟随的地址是SFR区域内的地址,即S:000H~S:1FFH区分存储器地址和SFR地址是必要的,这是因为指令可以使用直接寻址模式来寻址存储器地址范围为00:0000H~00:01FFH的空间以及SFR地址范围为S:000H~S:1FFH的空间单片机CPU寻址模式
--直接寻址模式下面的指令采用了直接寻址模式,即MOVDR0,EDATA0100H假设16位数据存储器地址为00:0100H的位置保存的数据信息0x120x340x560x7800:0100H00:0101H00:0102H00:0103H该指令将16位数据存储器地址为00:0100H的一个32位(双字)数据(连续四个字节的地址)0x12345678加载到32位寄存器DR0中0x120x340x560x78数值位号3124231615870注:当立即数去掉了前缀“#”时,该立即数就不是原来立即数的含义了,而是变成了直接寻址的地址值,这一点要特别注意!单片机CPU寻址模式
--直接寻址模式下面的指令采用了直接寻址模式,即MOVWR2,0x60假设8位数据存储器地址为0x60的位置保存的数据信息0xA50x5A00:0060H00:0061H该指令将8位数据存储器地址为0x60的一个16位(字)数据0xA55A加载到16位寄存器WR2中0xA0x50x50xA数值位片机CPU寻址模式
--间接寻址模式MCS-251ISA和MCS-51ISA通过不同的寄存器进行间接寻址MCS-251ISA通过8位(字节)、16位(字)和32位(双字)寄存器作为间接寻址的寄存器在寄存器中保存着寻址存储空间的地址单片机CPU寻址模式
--间接寻址模式8位(字节)寄存器(@Ri,i=0或1)在寄存器R0和R1中的8位地址可以访问数据存储器的地址范围为00:0000H~00:00FFH16位(字)寄存器(@WRj,j=0、2、4、...、30)在WRj中的16位地址可以访问的数据存储器的地址范围为00:0000H~00:FFFFH32位(双字)寄存器(@DRk,k=0、4、8、...、28、56、60)在DRk寄存器中的低24位(高8位必须为0)生成的有效地址可以访问整个16MB地址空间如果使用DR60作为通用数据指针,需要注意DR60是扩展堆栈指针寄存器SPX单片机CPU寻址模式
--间接寻址模式MCS-51ISA指令使用间接寻址来访问片上RAM、代码存储器和外部数据RAM8位(字节)寄存器(@Ri,i=0或1)在寄存器R0和R1中的8位地址可以访问片上存储器的地址范围为00H~FFH,以及外部数据RAM低256字节的区域16位(字)数据指针(@DPTR或@A+DPTR)MOVC和MOVX指令使用该间接寻址模式来访问代码(程序)存储器和外部数据RAM16位程序计数器(@A+PC)MOVC指令使用该间接模式来访问代码(程序)存储器单片机CPU寻址模式
--间接寻址模式【例6-5】下面的指令采用了间接寻址模式,即MOV@WR0,WR2假设在16位(字)寄存器WR2中保存的数据为0x8976,即(WR2)=0x8976;WR0寄存器中保存的地址为0xFFE,执行该指令后,将WR2寄存器中的数据,写到数据存储器地址为00:0FFEH的位置0x890x7600:0FFEH00:0FFFH单片机CPU寻址模式
--间接寻址模式【例6-6】下面的指令采用了间接寻址模式,即MOV@DR0,WR8假设在16位(字)寄存器WR8中保存的数据为0xABCD,即(WR8)=0xABCD;DR0寄存器中保存的地址为0x00010000,执行该指令后,将WR8寄存器中的16位(字)数据,写到数据存储器地址为01:0000H的位置注:01:表示XDATA区域,片内扩展RAM区域0xAB0xCD01:0000H01:0001H单片机CPU寻址模式
--寄存器寻址模式MCS-51和MCS-251ISA均支持寄存器寻址模式MCS-251ISA在寄存器寻址模式中,数据指令中的操作数保存在下面的寄存器中:8位(字节)寄存器R0~R1516位(字)寄存器WR0、WR2、...、WR3032位(双字)寄存器DR0、DR4、...、DR28、DR56、DR60MCS-51ISA在寄存器寻址模式中,指令仅寻址寄存器R0–R7单片机CPU寻址模式
--寄存器寻址模式当一条指令包含两个相同类型的寄存器(例如,指令MOVRmd,Rms)时Rmd中的符号“d”表示目的,为英文单词destination(目的)的缩写,即Rmd为目的操作数Rms中的索引“s”表示源,为英文单词Source(源)的缩写,即Rms为源操作数在一条具体的指令中,使用R0~R15中具体的一个寄存器符号来分别表示Rmd和Rms比如,MOVR2,R10单片机CPU寻址模式
--寄存器寻址模式【例6-7】下面的指令采用了寄存器寻址模式,即INCWR4,#2该指令将16位(字)寄存器WR4的内容加2,即(WR4)+2→(WR4)【例6-8】下面的指令采用了寄存器寻址模式,即INCDPTR该指令将16位(字)寄存器DPTR的内容加1,即(DPTR)+1→(DPTR)单片机CPU寻址模式
--位移寻址模式一些MOV指令使用位移寻址模式将8位(字节)或16位(字)从源移动到目标单片机CPU寻址模式
--位移寻址模式16位位移寻址(@WRj+dis16)间接访问存储器中最低的64KB空间在16位(字)寄存器WRj中保存着要寻址的存储器的基地址。将该基地址与16位带符号的偏移量dis16进行相加,生成访问存储器的最终16位有效地址如果基地址和偏移量之和超过0xFFFF,则计算出的地址会在区域00:内回卷例如,0xF000与0x2005之和为0x11005,取0x11005的低16位作为最终的地址值0x1005单片机CPU寻址模式
--位移寻址模式类似地,如果基地址和负偏移量之和小于零,则计算的地址将回卷到区域00:的顶部例如,0x2005与0xF000之和为0x11005,取0x11005的低16位作为最终的地址值为0x1005单片机CPU寻址模式
--位移寻址模式24位位移寻址(@DRk+dis24)间接访问存储器的整个16MB地址空间在32位(双字)寄存器DR0、DR4、...、DR24、DR28、DR56或DR60中保存着要寻址的存储器的24位基地址(寄存器的高8位必须为0,以保证始终提供的是24位有效基地址)将基地址该与16位带符号的偏移量dis24相加,生成访问存储器的最终24位有效地址单片机CPU寻址模式
--位移寻址模式【例6-9】下面的指令采用了位移寻址模式,即MOV@WR2+0x100,WR4假设在16位(字)寄存器WR2中保存着要访问数据存储器的16位基地址0x0000,在16位(字)寄存器WR4中保存着立即数0x5678该指令首先将WR2中保存的基地址和16位的偏移量0x100进行相加,得到访问数据存储器的有效地址0x0100,即00:0100H;然后将寄存器WR4的值0x5678保存到数据存储器地址为00:0100H的位置0x560x7800:0100H00:0101H单片机CPU寻址模式
--相对寻址模式相对寻址时将程序计数器(PC)中的当前值与指令中第二个字节给出的数相加,其结果作为转移指令的转移地址PC中的当前值为基地址,指令第二个字节给出的数作为偏移量。由于目的地址是相对于PC中的基地址而言,所以这种寻址方式称为相对寻址偏移量为带符号的数,取值范围为-128~+127。这种寻址方式主要用于跳转指令单片机CPU寻址模式
--相对寻址模式【例6-10】下面的一组指令中JC指令采用了相对寻址模式,即
代码清单6-1包含相对寻址指令JC的一组指令return:MOVR1,#0xA0;立即寻址模式MOVA,#0x60;立即寻址模式ADDA,R1;寄存器寻址模式JCreturn;相对寻址模式其中,JC指令后面跟随着标号return,该指令表示当进位标志CY为“1”时,跳转到程序代码中标号为return的位置单片机CPU寻址模式
--相对寻址模式程序存储器的地址(十六进制表示)标号汇编指令机器指令(十六进制表示)指令实现的功能
return:
FF:0251MOVR1,#0xA57E10A50xA0→(R1),(R1)=0xA5FF:0254MOVA,#0x6874680x60→(A),(A)=0x68FF:0256ADDA,R1A529(R1)+(A)→(A),(A)=0x0D,CY=”1”FF:0258JCreturn40
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年流行感冒幼儿园
- 深度解析(2026)《GBT 22291-2017白茶》:从标准文本到产业未来
- 深度解析(2026)《GBT 21545-2008通信设备过电压过电流保护导则》
- 《JBT 20159-2013卡式瓶灌装封口机》专题研究报告
- 《JBT 20023-2016药品泡罩包装机》专题研究报告
- 《JBT 15122-2025无损检测仪器 充电式旋转磁场探伤仪》专题研究报告
- 高中化学讲义提升课时4 常见有机反应类型 有机物的检验、鉴别与分离
- 2026年三八活动幼儿园
- 2026年及未来5年中国豆奶行业发展监测及市场发展潜力预测报告
- 2026年及未来5年中国村镇银行市场全面调研及行业投资潜力预测报告
- 部编版道德与法治五年级下册第11课《屹立在世界的东方》精美课件
- 工艺技术文件审批流程
- 全媒体运营师题库(附参考答案)
- MOOC 孙子兵法-湖南大学 中国大学慕课答案
- 二十世纪的中国宗族研究
- 2024年上海市消防救援总队消防文员招聘笔试参考题库附带答案详解
- JBT 10205.2-2023 液压缸 第2部分:缸筒技术规范 (正式版)
- (完整版)xx中学“双积双评”积分入团实施方案
- 洪水影响评价报告示范文本
- 英语图表类作文课件
- DoCare重症监护临床信息系统方案
评论
0/150
提交评论