单片机,程序存储器中的字节,如何区分是指令还是数据?23
发布网友
发布时间:2023-11-27 12:00
我来回答
共5个回答
热心网友
时间:2024-12-04 08:16
指令和数据主要是单片机按照其约定的命令书写格式来确定的。
比如说 MOV R7, #74H MOV A, #00H
编译成HEX文件就是7F 74 74 00
当计算机看到7F时,它就自己知道是MOV R7,所以后面的74就是你所说的数据,既然74在这里是数据,那么它后面的74肯定就是指令的,因为你在写MOV R7, #74H指令后不可能再加个数据吧。
那你又要问了,单片机为什么不把74 74 理解为MOV A, #74H?这是因为在单片机里面,它解析每一个16进制数据时,是按其物理顺序一个接一个顺序执行的,如果你把74 74 理解为MOV A, #74H,那么,它前面和后面都会错多出一个未知数据,肯定是不允许的。单片机执行程序时,从第一条开始一条一条分析,肯定不会多或少,如果多了或少了,那就是程序出错,也就是我们常说的程序飞了!
热心网友
时间:2024-12-04 08:16
这个提问本身提得不够准确,单片机存储的信息其实都是(二进制)数据,指令也是由数据组成的。估计题目中所说的“数据”应是指“常数”。
热心网友
时间:2024-12-04 08:17
单片机是靠硬件,来执行程序存储器里面的程序代码。
单片机内部硬件的细节,厂家都没有公布。
即使公布了,基本上,大家都看不懂。
所以,此题无解。
上面各位所做的回答,都是瞎猜,没有任何依据。
热心网友
时间:2024-12-04 08:17
编程时用户定义,编译是分配地址.
热心网友
时间:2024-12-04 08:18
确切的说:没有区别!
它们的区别是由编程者保证的,单片机没有这个义务,呵呵
单片机永远认为PC所指向的地方存了一条指令,无论那里存的是什么。
也就是说,编程者要保证PC不要指错了地方。
所以不要转移到数据表上,数据表之前别忘了ret或者转移,以及堆栈要平衡等等。