c51汇编问题

来源:百度知道 编辑:UC知道 时间:2024/06/28 06:14:54
有一个正确的汇编程序,不理解..

ORG 0000H ;
LJMP MAIN ;
ORG 030H ;
MAIN: MOV P0,#0DBH ;11011011--零为亮
ACALL DELay ;
MOV P0,#06DH ;01101101
ACALL DELay ;
MOV P0,#0B6H ;10110110
ACALL DELay ;
AJMP MAIN ;
delay: mov r7,#255 ;延时子程序
d1: mov r6,#255
d2: djnz r6,d2
djnz r7,d1
ret
end

其中,前三行是为了跳过串口的30H地址么?那执行第二行不就直接跳过第三行了?第三行不就没有用了??
还有,第四行,是什么意思..貌似在书上没有看到过p0...
keyi , mov A,p0或者 MOV P0,A 么??

逐一回答阁下问题:
前三行是为了跳过串口的30H地址么?那执行第二行不就直接跳过第三行了?第三行不就没有用了??
ORG 0000H ;
LJMP MAIN ;
ORG 030H ;
ORG是伪指令,设定PC的值。执行LJMP 后,自动跳到MAIN执行。楼主应该知道为什么汇编程序要这样写?是为了跳过中断入口地址。因为程序执行中断程序时要跳到中断入口地址执行,如果这些地址里写了别的程序,就坏了,把它当中断函数执行了。如果没有ORG 030H MAIN 指令在程序存储区的位置会很靠前的,就进到中断入口里了。有了ORG 030H 后,它将排在在地址30H后。这样不会和中断函数冲突。
还有,第四行,是什么意思..貌似在书上没有看到过p0...
把立即数0DBH 送给P0.
mov A,p0或者 MOV P0,A 么??
有的 P0要大写,这是直接寻址,A 、P0里的数在数据存储区。
MOV P0,#0DBH 是立即寻址,0DBH 在程序存储空间。