发新帖我要提问
12
返回列表
打印

利用数组的方式可以选择的访问寄存器

[复制链接]
楼主: langgq
手机看帖
扫描二维码
随时随地手机跟帖
21
guoyt| | 2020-5-27 23:14 | 只看该作者 回帖奖励 |倒序浏览
玩汇编的目的是速度和代码大小两者并重,当芯片的速度够快了,可以满足我们的要求了难道为了速度可以使自己的代码很大

使用特权

评论回复
22
langgq|  楼主 | 2020-5-27 23:17 | 只看该作者
以至于内部flash不够,需要外部的flash,那样的话取指各方面的速度要受影响了

使用特权

评论回复
23
hanwe| | 2020-5-27 23:22 | 只看该作者
指令中直接给出操作数地址(dir)的寻址方式称为直接寻址。寻址对象为:1 内部数据存储器,在指令中以直接地址表示;2特殊功能寄存器SFR,在指令中用寄存器名称表示。

使用特权

评论回复
24
huwr| | 2020-5-27 23:26 | 只看该作者
以寄存器中的内容为地址,该地址的内容为操作数的寻址方式称为寄存器间接寻址。能够进行寄存器间接寻址的寄存器有:R0、R1、DPTR,用前面加@表示,如@R0、@R1、@DPTR。寄存器间接寻址的存储空间包括内部数据存储器和外部数据存储器。由于内部数据存储器共有128字节,因此用一字节的R0和R1可间接寻址整个空间。而外部数据存储器最大可达64K,仅R0或R1无法寻址整个空间,为此需要由P2端口提供外部RAM高8位地址,由R0或R1提供低8位地址,由此共同寻址64K字节范围。也可用16位的DPTR寄存器间接寻址64K字节存储空间。

使用特权

评论回复
25
llia| | 2020-5-27 23:30 | 只看该作者
其实,如果是入门的话,这些知识你不必深究,先学会怎么应用即可,等你的知识深度到达一定层次的时候,你就会明白是什么意思了。

使用特权

评论回复
26
wangzsa| | 2020-5-27 23:38 | 只看该作者

如果想完全了解的话,建议你去看看《微机原理》吧,上面说的很详细,很清楚!

使用特权

评论回复
27
zhuww| | 2020-5-27 23:41 | 只看该作者

指令都是规定死的,你硬背就完事了。想那么多干啥

使用特权

评论回复
28
zhanglli| | 2020-5-27 23:45 | 只看该作者
寄存器不一定在内存中,所以不能取址

使用特权

评论回复
29
yufe| | 2020-5-27 23:49 | 只看该作者
我看LZ关键是没有搞明白什么是直接寻址

使用特权

评论回复
30
hanwe| | 2020-5-27 23:52 | 只看该作者
如果非要做只能判断地址然后赋值

使用特权

评论回复
31
hanwe| | 2020-5-27 23:55 | 只看该作者

嗯,sfr reg0 = 0xe0;
sfr reg1 = 0xe1;


void sfr_set(U8 addr, U8 val)
{
    if(addr = 0xe0){
                reg0 = val;
        }else
    if(addr = 0xe1){
                reg1 = val;
        }else
        ......
}

使用特权

评论回复
32
yufe| | 2020-5-27 23:58 | 只看该作者
建议用 数组,这样相对较简单,占用的内存也相对要少写吧

使用特权

评论回复
33
llia| | 2020-5-28 21:54 | 只看该作者
是的,确实是像楼主说的那样啊,那个EX就代表了那三个寄存器。。

使用特权

评论回复
34
dingy| | 2020-5-28 21:57 | 只看该作者

8051的片内RAM中的高128字节,有两个地址空间,一个是SFR寄存器空间,只可直接访问

使用特权

评论回复
35
langgq|  楼主 | 2020-5-28 22:04 | 只看该作者
对,另一个空间是存储空间只可间接访问。

使用特权

评论回复
36
langgq|  楼主 | 2020-5-28 22:09 | 只看该作者
嗯,好的,多谢大家

使用特权

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

本版积分规则