第1个回答 2011-08-04
1、(R1)=20H 不是一条指令,而只是一种说明,表明R1寄存器中的内容是20H。这个20H是地址还是数据,与这个说明无关。
2、在指令 MOV @R1,#40H 中,@R1 是间接寻址方式,表明R1中的内容是地址,指令的功能表明是将立即数40H传送到R1指定的地址中。
3、在指令中容易混淆的是立即数与直接地址,立即数的特征是有一个前缀#,直接地址没有这个前缀。
无论程序在何处,都可以跳到你要的地方,同样LCALL也是非常好用,它是长调用子程序,也是无论程序执行到何处,遇到它都可以调内存里任何一个位置子程序
所以我用最简单的一句话告诉你,在你需要跳转的时候就用LJMP,在你需要调程序的时候就用LCALL
引用:
⑵ JMP NEAR PTR label 近转移(near jump)
近转移是JMP指令的缺省格式,可以写为"JMP label"。它可在当前代码段内转移,机器指令的操作码是E9,位移量是16位的带符号补码数。指令中的转向地址可以是直接寻址方式、寄存器寻址方式、寄存器间接方式和存储器寻址方式。
● JMP label 直接转移(direct jump)
执行操作:(IP) ← OFFSET label = (IP)当前+16位位移量
转移的目标地址在指令中可直接使用符号地址,由于位移量为16位,它的转移范围应是-32768至+32767,也就是说,近转移指令可以转移到段内的任一个位置。
● JMP reg 寄存器间接转移(register indirect jump)
执行操作:(IP) ← (reg)
转移的目标地址在寄存器中,例如指令"JMP BX"执行的结果,将BX的内容送给IP。
● JMP WORD PTR OPR 存储器间接转移(memory indirect jump)
执行操作:(IP) ← (PA+1,PA)
存储器的物理地址PA由指令中的寻址方式确定,JMP指令执行的结果,把PA单元的字内容送到IP寄存器中。例如"JMP WORD PTR [DI]",物理地址PA = (DS)×24+(DI),指令执行的结果是(IP)= (PA+1,PA)。
Write_Ds1302_Byte(address);
Write_Ds1302_Byte(dat);
这两个函数是网DS1302中写地址和数据的,根据DS1302的时序,可以看明白顺序。
第2个回答 2011-08-04
1. AJMP的跳转范围有限,只能在当前PC所处的2kB块内跳转。LJMP的跳转范围为全64kB空间。
2. 所谓相对,是指相对于当前地址进行跳转,通俗地说就是“前进n步”或“后退n步”。所谓绝对,就是直接跳转到明确指定的地址,通俗地说就是“跳到xxxx位置”。
3. 程序部分分模块,逐步添加模块并运行调试,这样可以逐个排除问题。如果有串口或其它通讯接口可以输出调试信息,有硬件仿真更好。
第3个回答 2011-08-04
都是些 很基本的问题。 基础啊。
1,什么时候用AJMP,什么时候用LJMP?
是 短距离跳转 和 长距离跳转的区别。 通常不同的单片机 都支持相应的伪指令,比如JMP。
编译器自动 根据实际 来编译。 具体要看 那款单片机了。
2,相对转移和绝对转移指令有什么区别?
相对转移: 根据相对地址量来转移。 绝对转移:向绝对地址转移
3,比较大的程序如何调试
一般调试都是 分全速运行, 单步运行 和 断点运行。 根据实际需要了
第4个回答 2023-02-28
LJMP、AJMP、SJMP,都是无条件转移指令。
区别,你就不用深究了。
你编程时,仅需使用一条:JMP,就可以了。
编译软件,会自动帮你,编译成为适合的机器码。