51单片机汇编部分资料

51单片机汇编启动文件详解,包括了里面用到的种种汇编伪代码的详解

链接:

https://wenku.baidu.com/view/b788fce8a98271fe900ef906.html

或者:http://www.eeworld.com.cn/mcu/2015/0115/article_18006.html

若链接失效,可在百度文库里搜索:STARTUP51、STARTUP51.A51详解。



51单片机的idata,xdata,pdata,data的详解:

https://www.cnblogs.com/jikexianfeng/p/5870357.html



51汇编伪指令:

http://blog.csdn.net/qlexcel/article/details/78552738?locationNum=4&fps=1

该文章详解了常见的汇编伪指令,有:DS、BIT、USING、SEGMENT、RSEG、CSEG、XSEG、ISEG、BSEG、ORG、EQU、DATA 、DB 等

这里只介绍几个比较难懂的几个:

SEGMENT用于声明一个可重定位的段,形如(段名  SEGMENT   段所在的存储区)例如:

?C_C51STARTUP   SEGMENT   CODE  ;段名?C_C51STARTUP,该段被声明为代码段,被链接到CODE区
?STACK          SEGMENT   IDATA	;段名??STACK,该段被声明为数据段,被链接到内部RAM区,即IDATA区

上面这些只是声明,如果打算在这些段中放入代码或变量,必须使用重定位指令RSEG,例如:

RSEG    ?STACK	;选择之前定义过的一个可重定位的段?STACK,下面的汇编语句将会被放置到该段,直到遇到下一个段定位指令,例如CSEG/RSEG/DSEG等。
DS      1	;预留存储区命令。声明先占用一个字节的空间,在编译时,这个预留的空间不会被其他变量所使用。在这里的意义是,给硬件栈分配1个byte(实际这样是有问题的,应该为硬件栈预留更多空间)
EXTRN CODE (?C_START)	;引用外部变量或函数?C_START
PUBLIC  ?C_STARTUP		;声明全局变量或函数
CSEG    AT      0	;在代码段中绝对定位(一般用于建立中断向量表)
?C_STARTUP:     LJMP    STARTUP1	;地址0总是存放复位向量地址
RSEG    ?C_C51STARTUP	;选择之前定义过的一个可重定位的段?C_C51STARTUP,下面的汇编语句将会被放置到该段

SEGMENT(可重定位段)指令相对的,还有绝对定位段(不可重定位段)指令:CSEG、XSEG、ISEG、BSEG,绝对定位段指令不需要指定段名,只指定绝对位置即可,如上面的语句:

CSEG    AT      0	;在代码段中绝对定位,用AT指定绝对地址






你可能感兴趣的:(51单片机汇编部分资料)