繁体   English   中英

在不浪费代码空间的情况下读取内存中的特定字节-8051

Reading specific byte in memory without wasting code space - 8051

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我试图提出一种更有效的方法,以从AT89S52微控制器的扩展内存中读取一系列字节。

我已经组织了内存存储,例如内存位置取决于“ bank”和“ Unit”。 我将用定义来说明:

Storage1 equ 0C000h ;bank 1 for unit 1 = C0:00h to C0:FFh
                    ;bank 1 for unit 2 = C1:00h to C1:FFh
                    ;bank 1 for unit 3 = C2:00h to C2:FFh
                    ...
                    ;bank 1 for unit 16 = CF:00h to CF:FFh

Storage2 equ 09000h ;bank 2 for unit 1 = 90:00h to 90:FFh
                    ;bank 2 for unit 2 = 91:00h to 91:FFh
                    ;bank 2 for unit 3 = 92:00h to 92:FFh
                    ...
                    ;bank 2 for unit 16 = 9F:00h to 9F:FFh

在此,每个存储体的每个单元都有256个字节。 目前,我可以使用以下代码访问每个单元:

StorageN equ 0C000h
UnitNo equ 2h

mov DPTR,#StorageN
mov A,#UnitNo
orl DPH,A
movx A,@DPTR

使用Keil的在线文档评估此代码后,此代码需要8个字节的存储空间。

为了提高可读性,我还定义了每个存储区中每个单元的特殊字节在何处具有特殊含义:

Storage1Status equ 0C0FEh ;255th byte of all units in bank1=status
Storage2Status equ 0C0FBh ;252nd byte of all units in bank2=status

如果要从存储体1获取存储单元2的状态并将结果放入存储单元5的存储体2中,我将使用以下代码:

mov DPTR,#Storage1Status
mov A,#1h ;unit 1
orl DPH,A
movx A,@DPTR
mov R7,A ;save status

mov DPTR,#Storage2Status
mov A,#5h ;unit 5
orl DPH,A
mov A,R7
movx @DPTR,A

每次大约需要18个字节的代码空间才能将一个值从一个位置更新到另一位置。

在我的应用程序中,很多时候单位号保持不变,但是银行经常变化。 所以我会用这样的代码来访问银行:

mov DPTR,#Storage2
mov A,#1h ;unit 1
orl DPH,A
movx A,@DPTR

mov DPTR,#Storage1
mov A,#1h ;unit 1
orl DPH,A
movx A,@DPTR

mov DPTR,#StorageN
mov A,#1h ;unit 1
orl DPH,A
movx A,@DPTR

...

mov DPTR,#StorageX
mov A,#1h ;unit 1
orl DPH,A
movx A,@DPTR

但这浪费了很多代码字节,只是为了从不同的存储库中取出一个字节。 是否有一种无需太多存储空间即可执行此类处理的方法?

问题暂未有回复.您可以查看右边的相关问题.
1 在装配中分支而不浪费存储空间或不知道地址-8051

我当前正在为8051处理器创建代码,每次执行典型的分支例程(执行的功能取决于变量值)时,都会占用大量空间。 我将用代码和注释进行解释。 我典型的分支代码遵循以下格式: 在发现jmp命令存在之后,我想尝试利用它,因此我不会为每个选项浪费3个额外的存储字节和2个额外的时钟周期。 ...

2 读取字符串而不浪费内存

我必须从stdin读取一个字符串,在不浪费的情况下分配内存。 我已经这样做了,但我不相信它,因为这样我认为我浪费了记忆! 任何想法? 我应该一次读一个角色吗? ...

6 浪费空间或内存泄漏:Python

我对以下情况感到困惑,也许我的词汇在这里是错误的,所以深表歉意。 假设我们有一个元组x = ('a', []) ,然后我们做x = (x[0], [1, 2, 3]) 。 由于新的元组引用了旧的元组,因此我们无法删除旧的元组对象,但是由于该旧的元组对象,我们仅使用对x [0]的引用, ...

2013-11-05 19:54:09 3 158   python
7 8051中的多数检测位,不会浪费时钟周期

我正在尝试查看是否有更简单的方法来执行此操作。 我正在做的是在8051微控制器中制作四个UART,其中每个UART都禁用了发送,并且每个UART的接收分别通过光电晶体管在端口P0.0至P0.3上感测到(这里是无线的)。 为了使此事情可靠,我觉得我需要对端口进行几次采样以获得正确的数据。 ...

9 增加数据结构而不浪费内存

我有一个类Tree ,我想扩展到更专业的数据结构,如Order_tree和Interval_tree 。 这些扩充需要添加到Node ,例如大小信息,以及对某些算法的微小改动。 我想知道在性能,可读性和可维护性方面实现C ++扩充的最佳方法。 树不应该以多态方式使用。 到目前为止我所 ...

10 逐字节读取内存

我有一个long [],我想一次读取两个位。 我的数据是将二进制数00、01、10和11端对端连接在一起,填充为长整数,然后填充为数组。 我将一次读取一长段数据,可能是从一半开始,看来直接从内存读取一次(一次两个字节)比遍历long []并拉取更有意义。每次带掩码两位。 我似乎无法 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2021 STACKOOM.COM