
单片机汇编语言中的伪指令问题
以下是我搞不懂的汇编程序:NAMECS_T?PR?CS_T?CS_TSEGMENTCODEPUBLICCS_TRSEG?PR?CS_T?CS_TCS_T:PUSHACCM...
以下是我搞不懂的汇编程序:
NAME CS_T
? PR? CS_T? CS_T SEGMENT CODE
PUBLIC CS_T
RSEG ?PR?CS_T?CS_T
CS_T: PUSH ACC
MOV TH0, #00H
MOV TL0, #00H
MOV A, #4D
SETB TR0
CS_T1: CPL P1.0
NOP
NOP
NOP
NOP
DJNZ ACC, CS_T1
POP ACC
RET
;
END
问题1:段定义伪指令的格式问题
我查找了好几本汇编语言设计的书,讲段定义伪指令的格式都是:
段名 SEGMENT [定位类型][组合类型]['类别']
…
段名 ENDS
定位类型:PARA、BYTE、WORD、DWORD、PAGE
组合类型:PRIVATE、PUBLIC、 COMMON、 AT、 MEMORY、 STACK
类别:'CODE'等
问题‘? PR? CS_T? CS_T SEGMENT CODE’中的CODE是对应于类别‘CODE’吗?怎么没有引号?还有‘PUBLIC CS_T’怎么变成这样了,跑到第二行去了,而且又出现了‘CS_T’,段名是‘? PR? CS_T? CS_T’吧?怎么那么古怪有问号的?
问题2:怎么没有ENDS结束,却有一句:‘RSEG ?PR?CS_T?CS_T’怎么搞的啊?
问题3:‘RSEG ?PR?CS_T?CS_T’中的‘?PR?CS_T?CS_T’与前面的‘? PR? CS_T? CS_T’不同,前面有空格夹在里面,有区别么?还是错误了。
敬请高手赐教,谢谢! 展开
NAME CS_T
? PR? CS_T? CS_T SEGMENT CODE
PUBLIC CS_T
RSEG ?PR?CS_T?CS_T
CS_T: PUSH ACC
MOV TH0, #00H
MOV TL0, #00H
MOV A, #4D
SETB TR0
CS_T1: CPL P1.0
NOP
NOP
NOP
NOP
DJNZ ACC, CS_T1
POP ACC
RET
;
END
问题1:段定义伪指令的格式问题
我查找了好几本汇编语言设计的书,讲段定义伪指令的格式都是:
段名 SEGMENT [定位类型][组合类型]['类别']
…
段名 ENDS
定位类型:PARA、BYTE、WORD、DWORD、PAGE
组合类型:PRIVATE、PUBLIC、 COMMON、 AT、 MEMORY、 STACK
类别:'CODE'等
问题‘? PR? CS_T? CS_T SEGMENT CODE’中的CODE是对应于类别‘CODE’吗?怎么没有引号?还有‘PUBLIC CS_T’怎么变成这样了,跑到第二行去了,而且又出现了‘CS_T’,段名是‘? PR? CS_T? CS_T’吧?怎么那么古怪有问号的?
问题2:怎么没有ENDS结束,却有一句:‘RSEG ?PR?CS_T?CS_T’怎么搞的啊?
问题3:‘RSEG ?PR?CS_T?CS_T’中的‘?PR?CS_T?CS_T’与前面的‘? PR? CS_T? CS_T’不同,前面有空格夹在里面,有区别么?还是错误了。
敬请高手赐教,谢谢! 展开
展开全部
你列出的那个代码是51单片机的代码,使用的是51的编译器。
问题1~3,那些是8086 CPU系列,或者说是计算机使用的汇编语言中使用的语法!
单片机的构架和计算机CPU构架差别特别大,在编写汇编语言的语法、结构也不相同,所以你不要用x86汇编的内容来看待51单片机的汇编,51的汇编比x86简单多了。
至于CS_T只是程序中使用的标号,表示一段程序的开始,没有其他意思。
计算机中将程序拷贝到RAM中再执行,为了防止程序越界出错,才在RAM中设置数据区、代码区和堆栈区等等。但是在51单片机中没有,代码就在ROM,CPU直接读出ROM的代码执行,数据存放在内部128/256字节的RAM,或者扩展存储器XRAM中。另外ROM和XRAM是两个寻址空间,分别使用MOVC和MOVX指令访问,不会发生越界的问题,这你要知道。
另外,51单片机编写汇编语言的语法格式是和x86编写汇编语言的格式是不同的。
问题1~3,那些是8086 CPU系列,或者说是计算机使用的汇编语言中使用的语法!
单片机的构架和计算机CPU构架差别特别大,在编写汇编语言的语法、结构也不相同,所以你不要用x86汇编的内容来看待51单片机的汇编,51的汇编比x86简单多了。
至于CS_T只是程序中使用的标号,表示一段程序的开始,没有其他意思。
计算机中将程序拷贝到RAM中再执行,为了防止程序越界出错,才在RAM中设置数据区、代码区和堆栈区等等。但是在51单片机中没有,代码就在ROM,CPU直接读出ROM的代码执行,数据存放在内部128/256字节的RAM,或者扩展存储器XRAM中。另外ROM和XRAM是两个寻址空间,分别使用MOVC和MOVX指令访问,不会发生越界的问题,这你要知道。
另外,51单片机编写汇编语言的语法格式是和x86编写汇编语言的格式是不同的。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询