不用特意写 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的书都有说了。
有奖活动 | |
---|---|
【有奖活动】分享技术经验,兑换京东卡 | |
话不多说,快进群! | |
请大声喊出:我要开发板! | |
【有奖活动】EEPW网站征稿正在进行时,欢迎踊跃投稿啦 | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
打赏了!打赏了!打赏了! |