|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区
您需要 登录 才可以下载或查看,没有账号?立即注册
×
<span style="color:#000000;"不用特意写 AJMP LJMP ,直接写 <span style="color:#0000ff;"JMP</span 就行,KEIL 编译器会自动处理<br /<br /如果使用单文件汇编模式,则基本使用 <br /<span style="color:#0000ff;"ORG</span 00H<br /END <br /的架构就可以在中间写代码了。<br /<br /如果采用模块化编程,则可以使用多个编译指示符来控制生成重点还是谈谈模块话编程吧。<br /因为普通编程实在是没啥好说的,直接一个文件写完所有<br /<br /CSEG 定义一个 absolute segment,是固定的,具体用法和 <span style="color:#0000ff;"ORG</span 其实没啥区别,混用也没啥压力<br /CSEG AT 200H<br /其实跟 <span style="color:#0000ff;"ORG</span 是一个道理的,定位到一个绝对地址。不过既然使用了可从定位的形式,那当然就要<br /忘记ORG了。<br /<br /可以通过绝对定位段来指定需要的地址<br /CSEG AT 00H<br /DSEG AT 40H <br /<br /<br /Relocate segment 是很有好处的,例如将模块的空间分配交给链接器 loader 来处理,<br /可以多人合作方便程序以模块的形式,不会将地址空间搞重复<br /方便分配堆栈空间<br /<br /对于复位向量和中断向量则使用 CSEG 定义的绝对地址定位,格式是<br /CSEG AT 0003h<br /<br /SEGMENT 定义一个段,然后 RSEG 选择该段就OK了<br /<br /PROGSEGMENTCODE<br /RSEGPROG<br /<br /而堆栈则可以这样做<br /<br /STACKSEGMENTIDATA<br /RSEGSTACK<br /<span style="color:#ff0000;"DS</span10H <span style="color:#0000cc;";</span 预留16个字节<br /<br /PROGSEGMENTCODE<br /STACKSEGMENTIDATA<br /CONSTSEGMENTCODE<br /INTVETSEGMENTCODE<br /VARSEGMENTDATA<br /BITVARSEGMENTBIT<br /<br /一般来说需要这些段。因为变量是可以自动分配地址的,所以用可从定位段是有很大优势的<br /只需要预留位置就行了,不需要关心变量的具体地址。<br /具体用法:<br /<br /<span style="color:#0000cc;";</span allocate variable<br /RSEGVAR<br /DUMMY<span style="color:#0000cc;":</span<span style="color:#ff0000;"DS</span1<br /<br /<span style="color:#0000cc;";</span allocate vit variable<br /RSEGBITVAR<br /DPY_SW<span style="color:#0000cc;":</spanDBIT 1<br /INT_FLAG<span style="color:#0000cc;":</span DBIT 1<br /<br /<br /宏定义如下,带参数,很简单,例如<br /LOAD_R0 <span style="color:#0000ff;"MACRO</span R0_Val<br /<span style="color:#0000ff;"MOV</span R0<span style="color:#0000cc;",</span #R0_Val<br /<span style="color:#0000ff;"ENDM</span<br /调用时则<br /LOAD_R0 20H<br /</span |
|