Chinaunix首页 | 论坛 | 博客
  • 博客访问: 19790
  • 博文数量: 8
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 90
  • 用 户 组: 普通用户
  • 注册时间: 2015-10-17 19:40
文章分类

全部博文(8)

文章存档

2015年(8)

我的朋友
最近访客

分类: 嵌入式

2015-10-18 10:39:04

一、
80c51的汇编指令一共111条,按执行时间分,单周期指令64条;双周期指令45条;四周期指令2条;
1.一个机器周期执行完的指令为单周期指令
一个机器周期是1us;也就是1us一个高电平,单周期指令就是一个字节的指令,就是8位高低电平
按编码字节分:单字节指令49条;双字节指令45条;三字节指令17条
按功能分:数据传送类、跳转调用类、位操作类
二;
用c语言开发程序,不知道程序具体是怎么运行的;
# include <reg52.h>硬件资源文件,把单片机的硬件资源与变量联系起来
三:
微控制器是一个死循环程序
死循环有俩种:while(1)、for(;;)
1.什么是指令系统:单片机、arm、dsp中的某一个的所有指令的集合
指令标准格:   
标号  : 操作码 目的操作数,  源操作数 ; 注释
标号由英文字母打头,长度不超过8个字节的符号,代表的是后面的第一条指令的第一个字节在程序存储器中存储的地址,称为符号地址的标号,就是符号地址
例:loop :
操作码或助记符
源操作数就是数据的来源
2.符号约定  
八位立即数  : #data
十六位立即数 :#data16
Rn 工作寄存器R0-R7之一
Ri Rn中的R0和R1;R0和R1可以存放寄存器间接寻址的地址指针
addr11 11位地址   2k字节的范围  eg:AJMP MAIN 跳转的范围就是2k字节
addr16 16位地址 64k字字节的范围 eg:LJMP MAIN 跳转的范围就是64k字节
rel 带符号的8位地址偏移量  eg:SJMP MAIN  跳转范围-128。。127在加上main刚好256个字节
$ 跳转到当前指令第一个字节的地址   例:stmp $  stmp是跳转指令,$是跳转到当前指令的第一个字节stmp处,故这条指令就是反复跳转的意思
相当于:
loop:stmp loop
(x)  rom中的编号x单元
((x))  寄存器间接寻址
五、寻址方式
寻址方式就是cpu寻找操作数的方式
7种寻址方式
1.直接寻址:在指令中直接给出操作数的地址
MOV A,50H
片内ram00——7fh可以采用直接寻址,128个字节的地址
片外ram80-ffh不能由直接寻址访问,只能由寄存器间接寻址访问
如果用直接寻址方式例:mov a,89H;是访问特殊功能寄存器;
2.寄存器间接寻址:操作数的地址放在寄存器中的寻址方式
举例:MOV P0,#01H和
MOV 80H,#01H是等价的
所以若要把立即数01h送到80h单元,上面的语句就错了
只能:MOV R0,#80H
MOV @R0,#01H
寄存器间接寻址:把01h送到ro中存放的地址单元处



MOV A,@R0
片内ram @R0 或@R1
片外ram @R0 或@R1:八位 或@DPTR:16位 当地址大于ff H时,必须用DPTR
片内ram数据传送:mov
片外ram数据传送:movx 
3.立即寻址
源操作数一定是立即数的寻址方式
mov A,#50H
4.寄存器寻址
操作数在工作寄存器或特殊功能寄存器中;
寄存器间接寻址的注意事项:由以上分析得:寄存器间接寻址不能对特殊功能寄存器进行访问
堆栈指令也是间接寻址,它以堆栈指针SP作为间接寻址寄存器
5.变址寻址:由基地址与偏移地址的和做为最后的操作数的地址,基地址存放在DPTR和PC中,偏移地址存放在累加器中;
一共三条指令
查表操作指令,表格在ROM里,预先在ROM里存放的表格,(数组?试一下),这条指令读取的是是ROM中存储的常数;是预先编程时保存的常数表,A发生变化,就是读常数表中不同的数;
MOV A,@A+DPTR  
MOV A,@A+PC
基本地址不变,可变的是偏移地址,偏移地址在A里面,这条指令读取的是rom中的常数
6.相对寻址
LJMP  跳转的范围rel-128--127
7.位寻址
片内ram20h-2fh位寻址,51有11个特殊功能寄存器可以位寻址,52有12个;








阅读(579) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~