单片机程序语句解释:下面每条语句是什么意思啊,大概说说让我可以理解这段程序。

已知程序执行前有A=02H,SP=52H,(51H)=FFH,(52H)=FFH。下述程序执行后:
POP DPH
POP DPL
MOV DPTR,#4000H
RL A
MOV B,A
MOVC A,@A+DPTR
PUSH Acc
MOV A,B
INC A
MOVC A,@A+DPTR
PUSH Acc
RET
ORG 4000H
DB 10H,80H,30H,50H,30H,50H
请问:A=( ),SP=( ),(51H)=( ),(52H)=( ),PC=( )。

已知程序执行前有A=02H,SP=52H,(51H)=FFH,(52H)=FFH。下述程序执行后:
POP DPH ;DPH出栈,SP=SP-1
POP DPL ;DPL出栈,SP=SP-1
MOV DPTR,#4000H ;(DPTR)= 4000H
RL A ;(A)循环左移1位,(A)= 04H
MOV B,A ;(B)= 04H
MOVC A,@A+DPTR ;(A)= @04H+4000H=30H
PUSH Acc ;A入栈,SP=SP+1
MOV A,B ;(A)= 04H
INC A ;(A)= 05H
MOVC A,@A+DPTR ;(A)= @04H+4000H=50H
PUSH Acc ;A入栈,SP=SP+1
RET ;主程序返回
ORG 4000H ;定义地址开始处
DB 10H,80H,30H,50H,30H,50H;定义6字节数据
请问:A=( 50H ),SP=( 52H ),(51H)=( 30H ),(52H)=( 50H ),PC=(5030H )。追问

为什么SP=52H?有人说RET之后栈指针减2,对吗?

追答

对对对!这点疏忽了。

已知程序执行前有A=02H,SP=52H,(51H)=FFH,(52H)=FFH。下述程序执行后:
POP DPH ;DPH出栈,SP=SP-1
POP DPL ;DPL出栈,SP=SP-1
MOV DPTR,#4000H ;(DPTR)= 4000H
RL A ;(A)循环左移1位,(A)= 04H
MOV B,A ;(B)= 04H
MOVC A,@A+DPTR ;(A)= @04H+4000H=30H
PUSH Acc ;A入栈,SP=SP+1
MOV A,B ;(A)= 04H
INC A ;(A)= 05H
MOVC A,@A+DPTR ;(A)= @04H+4000H=50H
PUSH Acc ;A入栈,SP=SP+1
RET ;主程序返回SP=SP-2
ORG 4000H ;定义地址开始处
DB 10H,80H,30H,50H,30H,50H;定义6字节数据
请问:A=( 50H ),SP=( 50H ),(51H)=( 30H ),(52H)=( 50H ),PC=(5030H )。

温馨提示:内容为网友见解,仅供参考
第1个回答  2018-06-25
请问一下PC是怎么算的?

求解释下下面单片机程序的每一步是什么意思,谢谢了
既然你还没学汇编,我就不用专业术语给你解释了,用好理解的方法帮你简单解释下,如果有必要我们再讨论 org 0000h ;表示下一条指令的地址是0000h ljmp 0030h ;跳转到30h处的指令 org 0030h cword:mov a,#0c5h ;cword:人为定义的标号,mov a,#0c5h :把0c5h放入a寄存器里 mov...

求单片机大神解释这些语句是啥意思,并且最终实现了什么功能,谢谢...
这个程序就是外部中断0 只要发生电平变化,就会进入中断,

那位大侠帮我解释下这几个语句啊,麻烦清楚一点
temp<<=1; \/\/\/temp=temp>>1,左移, 相当于temp=temp*2,结果就是每次循环,亮的灯依次左移一个 }

各位高手,请问单片机程序里“\\”“..\\\\”"\/"等等到底是什么意思呀,怎么...
..看到这个问题我很无语。“\/”是C语言里面,“\/*”的话就是用来注释这一句程序。“\\“这个也是C语里的。当加上一个字母他就成了一个语句。比如“\\N”就是换行。“\\\\”也是用来注释的,反正就是在这以后的所有东西都成了没有用的东西,计算机是不会编译这他的,

单片机程序需要给每一行程序作出详尽的解释,能让我看明白为止。
define uchar unsigned char \/\/宏定义一个无符号char型 define uint unsigned int \/\/宏定义一个无符号char型 \/*Define ADC operation const for ADC_CONTR*\/ define ADC_POWER 0x80 \/\/ADC power control bit define ADC_FLAG 0x10 \/\/ADC complete flag define ADC_START 0x...

这是单片机数据区传送程序,我想知道它每一句的意思,拜托了
你真难为答题者,明明有源程序,你贴上来就可以了,这种图片上来,别人怎么给你回答?ORG 0000H程序入口 LIMP MAIN 转移到MAIN ORG 0100H程序开始运行地址 MAIN:MOV R2,#00H送数据00到R2 MOV R3,00H将R0中的数送R3(估计这里是错误的是不是应该#00)MOV R4,#20H将20H送R4 MOV R5,#00H将00...

如何理解这段单片机程序. 各位大侠,请解释一下。我搞不明白,为什么会这 ...
++c的意思就是c先自加1然后再进行运算,你的程序中,刚开始程序是不执行if语句里面的这些语句的 但是c要先加一然后再判断是不是比300大,知道第三百次到了,c值就变成300了,if语句的条件就满足,这时候才执行{ LedNumVal++ ; \/\/每隔300个扫描周期加一次 C =0; \/\/每隔300个扫描清零 }...

...LOOP: OUTPUT: DELAY: DELAYLOOP: 格是什么意思 我是初学者_百度知...
DELAYLOOP: 是行号,这句:DJNZ R7,DELAYLOOP 就是说 R7减一后要是不为0 就跳到DELAYLOOP: 执行。DELAY: 是子函数入口。ACALL DELAY 这句调用子函数DELAY,也就是从DELAY: 执行 执行到RET 后返回,执行下一句ACALL DELAY 也就是DJNZ R2,OUTPUT 这个子函数是延时用的。。

各位单片机高手,哪位帮我分析一下下面这个程序,问题出...
回答:首先给你解释一下“<<”位移符的作用: 因为你的P1=0xfe,二进制数据就是11111110,左移一位之后为11111100,0往左移了一位,但是最低位系统自动以0补齐,而0x7f的二进制数据位01111111,所以if语句是永远进入不了的。 当然,针对此问题,C51给出了一个解决方案: 使用_crol_()函数可解决此问题...

这个单片机的程序怎么看?
即只要不断电,就始终循环执行,那只有用while(1)语句。以下面的简单的主程序为例 while(1)下的一对大括号构成了无限循环程序,就是画红框的两行,永无限循环的执行下去。这就是单片机主程序必须要的结构,而其它的程序中是不允许有这种无限循环(也叫死循环)语句的。

相似回答