免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 779 | 回复: 0
打印 上一主题 下一主题

Ax51学习笔记 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-01-26 11:44 |只看该作者 |倒序浏览

不用特意写 AJMP LJMP ,直接写 JMP 就行,KEIL 编译器会自动处理

如果使用单文件汇编模式,则基本使用
ORG 00H
END
的架构就可以在中间写代码了。

如果采用模块化编程,则可以使用多个编译指示符来控制生成重点还是谈谈模块话编程吧。
因为普通编程实在是没啥好说的,直接一个文件写完所有

CSEG 定义一个 absolute segment,是固定的,具体用法和 ORG 其实没啥区别,混用也没啥压力
CSEG AT 200H
其实跟 ORG 是一个道理的,定位到一个绝对地址。不过既然使用了可从定位的形式,那当然就要
忘记ORG了。

可以通过绝对定位段来指定需要的地址
CSEG AT 00H
DSEG AT 40H


Relocate segment 是很有好处的,例如将模块的空间分配交给链接器 loader 来处理,
可以多人合作方便程序以模块的形式,不会将地址空间搞重复
方便分配堆栈空间

对于复位向量和中断向量则使用 CSEG 定义的绝对地址定位,格式是
CSEG AT 0003h

SEGMENT 定义一个段,然后 RSEG 选择该段就OK了

PROG    SEGMENT        CODE
    RSEG    PROG

而堆栈则可以这样做

STACK    SEGMENT        IDATA
    RSEG    STACK
    DS    10H ; 预留16个字节

PROG    SEGMENT        CODE
STACK    SEGMENT        IDATA
CONST    SEGMENT        CODE
INTVET    SEGMENT        CODE
VAR    SEGMENT        DATA
BITVAR    SEGMENT        BIT

一般来说需要这些段。因为变量是可以自动分配地址的,所以用可从定位段是有很大优势的
只需要预留位置就行了,不需要关心变量的具体地址。
具体用法:

    ; allocate variable
    RSEG    VAR
DUMMY:    DS    1

    ; allocate vit variable
    RSEG    BITVAR
DPY_SW:        DBIT     1
INT_FLAG:     DBIT     1


宏定义如下,带参数,很简单,例如
LOAD_R0 MACRO R0_Val
        MOV R0, #R0_Val
        ENDM
调用时则
LOAD_R0 20H


基本上新鲜的东西就这么多了,而那些指令集的用法,随便一本C51的书都有说了。

Etual
2011-1-26


您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP