程序中有一指令SJMP,,则执行该指令后跳转到()。A该指令的下一条指令处B主程序开始处C该指令的第一个字节D该指令的上一条指令处
程序中有一指令SJMP$,,则执行该指令后跳转到()。
A该指令的下一条指令处B主程序开始处C该指令的第一个字节D该指令的上一条指令处
题目解答
答案
A选项:该指令的下一条指令处
通常,程序执行完一条指令后自然会进入下一条指令。但是,SJMP $ 将导致程序跳转到 SJMP $ 这条指令的地址,而不是跳过它去到下一条指令。因此,A选项是错误的。
B选项:主程序开始处
SJMP 是相对于当前指令地址的跳转,而不是跳回到主程序开始处。因此,B选项是错误的。
C选项:该指令的第一个字节
这是正确的。SJMP $ 指的是从当前指令跳转到当前指令的地址,也就是它自己。因此,程序会不断地执行这条指令,形成一个无限循环。
因此,C选项是正确的。
D选项:该指令的上一条指令处
由于 $ 代表当前指令的地址,不是它前面的地址,所以D选项是错误的。
综上所述,正确答案是C:“该指令的第一个字节”。
解析
SJMP指令是单片机汇编语言中的短跳转指令,采用相对寻址方式。其操作数为相对偏移量,表示从当前指令地址开始的偏移。符号$`在汇编语言中通常表示**当前指令的起始地址**。因此,`SJMP $的含义是跳转到自身地址,形成无限循环。
关键点:
- 相对寻址:SJMP的跳转目标是当前指令地址加上偏移量。
$的含义:表示当前指令的起始地址,而非下一条指令或其他位置。- 循环机制:若指令跳转到自身,程序将无限重复执行该指令。
选项分析
选项A:该指令的下一条指令处
SJMP指令的作用是改变程序计数器(PC)的值,而SJMP $的偏移量为0,表示跳转到当前指令地址。因此,程序不会自然进入下一条指令,而是重复执行当前指令。选项A错误。
选项B:主程序开始处
SJMP是相对跳转,而非绝对跳转。若要跳转到主程序开始处,需使用绝对地址(如LJMP指令)。选项B错误。
选项C:该指令的第一个字节
SJMP $的偏移量为0,跳转地址为当前指令的起始地址(即第一个字节)。此时程序会无限循环执行该指令。选项C正确。
选项D:该指令的上一条指令处
$表示当前指令地址,而非前一条指令地址。SJMP的偏移量无法指向历史地址。选项D错误。