51单片机 汇编语言里的 寄存器 是默认定义的么?

举例说明我的问题:

例如,操控单片机的P1寄存器,汇编程序可以直接写成:MOV P1,#AAH

但是在C语言中,必须要在头文件中定义P1寄存器(即sfr P1 = 0x80),然后才能写P1=0xAA; 否则,编译会报错。

我的问题是,汇编语言不需要对 寄存器 进行定义么?如果要定义,在哪里定义的?

51单片机汇编语言中的特殊功能寄存器是默认定义了的,严格而言是是编译器定义的,而用户使用的寄存器是可以自由定义的,以下说说具体情况:
1、00H~1FH,这部分为工作寄存器,四个组的R0~R7,系统默认定义的,用户最好不要随意定义。
2、20H~2FH,这部分为位寻址寄存器,用户可以定义,但最好不轻易用作他用。
3、30H~7FH,这部分为用户随意使用的寄存器区,可以随意定义。
4、80H~FFH,这部分为特殊功能寄存器区,用户不能定义。
温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2017-10-06
是的,用 KEIL 编程,它能自动识别汇编语言中的寄存器名称。

不需要另外再说明。

MOV P1,#AAH

应为:
MOV P1,#0AAH
-------------
如果你愿意,也可以对已有的寄存器、地址,重新命名。
使用 EQU 伪指令即可。追问

多谢。您好像已经回答了我好几个问题了。
我想您一定知道C语言的头文件可以改寄存器名称的,例如:在中有sfr P1=0x80;,我可以改成sfr PORT-ONE=0x80;。我想问,在Keil的汇编语言中,能否像C语言中改变头文件的方式,改变寄存器的名称。注意,不是用EQU伪指令,也不是在汇编的源程序中改,而是通过改某一个文件的内容,从而改变寄存器的名称。

追答

这几天,看到过你提出的这样的问题。

编写C语言程序,必须在开始位置,用 #include ,包含一些头文件。
用汇编语言编程,寄存器名称等,系统都预置了,不用像 C 语言那样初级,必须自己操心。
因此,多数使用汇编语言的人,都不愿意、也不需要,做这种无聊的操作。

但是,在汇编程序的开始,也确实可以包含其它文件。
格式是:$INCLUDE (MY_reg51.inc)

楼主可在你的 KEIL 文件夹中,找到 reg51.inc 文件,复制为 MY_reg51.inc。
删除其中原有的寄存器命名,再按照原内容的格式,你可以随便重新命名寄存器。

以后,你只要把这个文件包含进来,你就可以使用自定义的寄存器名称。

这样做,其实并没有什么好处,你和别人,格格不入,只能自己和自己玩了。

本回答被提问者和网友采纳
第2个回答  2015-10-01
标准的51单片机 寄存器 是默认定义的
非标的寄存器 需要另外定义
第3个回答  2015-10-15
特殊功能寄存器是默认了的,像00-7FH的通用RAM,如果你要命名,就可以按照你自己的命名规则来命名
相似回答