打印

51单片机特殊单元隐含的秘密

[复制链接]
5095|27
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zenyin|  楼主 | 2008-1-11 21:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
一个原始的计算机指令本来是应该这样来编码的:

   指令码头目标存储位置第一操作数第二操作数下一条指令的地址
但由于计算机默认下一条指令就在此指令后(分支和循环,操作数就是下一条指令地址)所以下一条指令这一节就删除了,而目标存储位置,可以用累加的方式来表达  例如A=A+XX  于是有再省去了一节,于是基本指令编码就是三字节长,由前面的引子我们发现隐含可以简短代码长度,而对51来说,它有三字节也有两字节指令甚至还有单字节指令,它是怎么继续隐含的呢?  下面我们看51中那些是隐含的: A R0~R7 @R0 @R1 C (位累加器) AB (只用于乘除法) DPTR(必须16位一起用) SP(只限于PUSH 和POP 指令,PC(只限于查表), 这些隐含的是怎么"隐藏掉"的呢单元,其实你分析一下编址,她们就显原形了,编码有高低各4个位,其低4位就是它们的编码,下面看X3H这3对应DPTR, X4H 一定和累加器打交道  X6H和X7是间接寻址@R0和@R1 X8H到XFH 是R0到R7 X5H不隐含,但它"隐约"告诉我们它后面是个直接地址,那X2H呢,它是中断返回和LJMP,那X1H呢,它是AJMP 和ACALL 那XO呢,它是空跳NOP JBC JZ JNZ JC JNC JB JNB SJMP 相对跳转的组合 知道了这些规律对指令寻址译码运行可以理解得更透,而且一眼就能看出它是几个字节 例如CLR A
CLR C INC A INC RN INC @R0 INC DPTR MOVC A,@A+PC MOVX A,@DPTR,DIV AB MUL AB MOV A,RN MOV @R0,A等都是单字节,INC 地址 PUSH 地址 MOV A,#数.....都是两字节  三字节则是一个都隐含不了,有点意思吧做个有心人,你也可以发现的.

相关帖子

沙发
szhgx26| | 2008-1-12 12:14 | 只看该作者

^^

使用特权

评论回复
板凳
mohanwei| | 2008-1-12 12:26 | 只看该作者

盘腿坐下来听课

使用特权

评论回复
地板
HWM| | 2008-1-12 12:45 | 只看该作者

如果LZ知晓基本的编码技术或状态树就不会感到有何稀奇的了

使用特权

评论回复
5
wxj1952| | 2008-1-12 14:28 | 只看该作者

MCS-51单片微型计算机指令手册

zenyin老师如果没有这本20页的手册的话,我拷贝一份传给你。
举例:

0-:INC Rn ;n=0~7,-=8~F
1-:DEC Rn
2-:  ADD A,Rn
3-:  ADDC A,Rn
4-:  ORL A,Rn
.
.
.
.
F-:  MOV Rn,A

n1: ACALL addr
m1: AJMP addr
.
.
.
.

使用特权

评论回复
6
sz_kd| | 2008-1-12 19:05 | 只看该作者

楼主真细心啊

使用特权

评论回复
7
HWM| | 2008-1-13 11:31 | 只看该作者

晕!这帖还加酷,看来“裤子”贱卖了。

使用特权

评论回复
8
hotpower| | 2008-1-13 11:34 | 只看该作者

哈哈~~~编码组合就是个阵列,搞过反汇编什么都明白了

使用特权

评论回复
9
edanzg| | 2008-1-13 11:38 | 只看该作者

路过。

使用特权

评论回复
10
iC921| | 2008-1-13 12:26 | 只看该作者

好好读一下

51单片机特殊单元隐含的秘密 

一个原始的计算机指令本来是应该这样来编码的:

  指令码头目标存储位置第一操作数第二操作数下一条指令的地址
  但由于计算机默认下一条指令就在此指令后(分支和循环,操作数就是下一条指令地址)所以下一条指令这一节就删除了,
  而目标存储位置,可以用累加的方式来表达  例如A=A+XX

  于是有再省去了一节,于是基本指令编码就是三字节长,由前面的引子我们发现隐含可以简短代码长度,而对51来说,它有三字节也有两字节指令甚至还有单字节指令,它是怎么继续隐含的呢?

  下面我们看51中那些是隐含的: 
A R0~R7 @R0 @R1 C (位累加器) AB (只用于乘除法) DPTR(必须16位一起用) SP(只限于PUSH 和POP 指令,PC(只限于查表), 这些隐含的是怎么"隐藏掉"的呢单元,

其实你分析一下编址,她们就显原形了,编码有高低各4个位,其低4位就是它们的编码,下面看X3H这3对应DPTR, X4H 一定和累加器打交道  

X6H和X7是间接寻址@R0和@R1 X8H到XFH 是R0到R7 X5H不隐含,但它"隐约"告诉我们它后面是个直接地址,

那X2H呢,它是中断返回和LJMP,
那X1H呢,它是AJMP 和ACALL 
那XO呢,它是空跳NOP JBC JZ JNZ JC JNC JB JNB SJMP 相对跳转的组合 

知道了这些规律对指令寻址译码运行可以理解得更透,而且一眼就能看出它是几个字节 例如
CLR A
CLR C 
INC A 
INC RN 
INC @R0 
INC DPTR 
MOVC A,@A+PC 
MOVX A,@DPTR,
DIV AB 
MUL AB 
MOV A,RN 
MOV @R0,A等都是单字节,
INC 地址 PUSH 地址 MOV A,#数.....都是两字节  
三字节则是一个都隐含不了,有点意思吧做个有心人,你也可以发现的. 
 
懵懵懂懂,看不懂哪!!

使用特权

评论回复
11
zhiwei| | 2008-1-13 13:00 | 只看该作者

不就是编码吗?

使用特权

评论回复
12
hotpower| | 2008-1-13 13:03 | 只看该作者

行(高2位)列(低4位)即为不同的指令~~~

使用特权

评论回复
13
mapleyang| | 2008-1-13 20:13 | 只看该作者

re

zenyin总是能把简单的事情复杂化...

使用特权

评论回复
14
samuelyu| | 2008-1-13 22:44 | 只看该作者

楼主真的是很细心哦;

记得 51 只有 255 条指令,那么丢失的那条指令做什么去了?

使用特权

评论回复
15
zenyin|  楼主 | 2008-1-17 11:19 | 只看该作者

丢失的是0A5H未定义指令哈:)

OA5H估计=NOP,我经常用OA5H  做1。NOP 2。做串行通信同步头,因为指令是不会编译产生的,所以具有某种唯一性,除非0A5H是字符和常数 3。用来加密程序以降低程序的可阅读性
   不过我更希望0A5H =DEC DPTR /0A5H=XRL BIT,C/或者 0A5H是软件中断 

使用特权

评论回复
16
pheavecn| | 2008-1-17 13:07 | 只看该作者

很多新51就把A5做dec dptr

使用特权

评论回复
17
googlelism| | 2008-1-19 22:09 | 只看该作者

没研究过。见识了

使用特权

评论回复
18
gyt| | 2008-1-20 09:37 | 只看该作者

搞过指令系统就很明白了

使用特权

评论回复
19
平常人| | 2008-1-20 10:47 | 只看该作者

LZ可能没有学过计算机设计原理,但从多年实践中总结出一些

学精了,佩服!

我认为这条裤子鼓励钻研的意义大于帖子本身内容的意义。

使用特权

评论回复
20
fabest| | 2008-1-20 22:32 | 只看该作者

顶楼主一个.....喜欢钻研...

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

90

主题

393

帖子

5

粉丝