当前位置:编程学习 > 汇编语言 >>

简单的单片机汇编代码中的几个问题!!

org 0 sjmp START org 30h START: mov P1,#0FFh ;LED不亮 st1: mov P2,#0FFh ;准备读数(开关状态) mov A,P2 ;读数 anl A,#0Fh ;取低四位 acall SEG7 ;调用显示码子程序 mov P1,A ;将得到的显示码送数显管显示 sjmp st1 ;循环 SEG7: inc A ;该子程序实现将数字转换为显示码 movc A,@A+pc ret DB 0c0h,0F9h,0a4h,0b0h DB 99h,92h,82h,0F8h DB 80h,90h,88h,83h DB 0c6h,0a1h,86h,8eh end 这里 acall 是什么命令 网上好像没有找到解释 pc是什么 有什么含义 可以把这段程序解释下么 尤其是下面那些db 好像没有和程序关联到啊
补充:pc是一个数么?  movc A,@A+pc   这个结果是什么   a是怎么指向0c0h
答案:ACALL就是短调用子程序(现在的51系列大多内带几K EPROM,大多用ACALL,教科书中LCALL反而很少用)。
SEG7子程序的功能是把A中的数字转换成共阳极7段码编码。
A为数值,PC为当前程序指针,酱紫A+PC刚好对应于共阳极7段码表,但由于MOV A,@A+PC与码表间隔了一个字节的RET,所以SEG7在前面加了一句INC A
其他:ACALL(Absolute Call)是绝对地址调用。
PC是当前程序指针,指向当前正在执行的指令;如果通过断点中止的话,其内容为待执行的下一条指令。
DB(Data Block)用来声明常量数据块。movc A,@A+pc这条语句就可以取出紧邻其后的数据块的内容。 acall是子程序调用,又称为短调用,与此对应的还有一句LCALL也是子程序调用,又称为长调用,两者区别是子程序离本条指令距离长短不同。
PC是16指令寄存器,存放下一条要执行指令的地址,具备自动加一功能。
DB里定义的是LED数码管的段码。 acall 指令是调用短子程序指令,就类似C语言在主函数中调用其他函数时的那个意思。

pc是指令寄存器,存放下一条要执行的语句,通常出现在程序中是实现散转的功能。

DB 是数据类型,表明它后面紧跟的每一项数据占一个字节(逗号隔开),同理还有DW(字),DD(双字)。这个程序中放的是LED的段码,就是要使LED显示数字时的段码,这里把它们有序的集合在一起了,是为了在程序中使用更方便。

明白了吗,希望对你有帮助。 acall  是调用查表程序的命令,类似C语言中调用函数的 语句;Pc 程序计数器,查表得时候会自动加1,和DRTR在查表中的功能一样。 acall是调用子程序指令;PC在C里面是指针 ACALL绝对跳转指令,
pc是程序指针寄存器,指向下一条指令。
db作用类似于c语言中数组的声明。
如果lz以后打算常用汇编,建议lz还是看看有关汇编的书 

上一个:请问汇编问题
下一个:简单的汇编语言求解。

CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,