汇编中$+6的意义与理解

汇编中$+6的意义与理解

简介

在汇编语言中, $+6 这样的表达式通常表示相对于当前指令地址的偏移量。这里的 $ 符号代表当前程序计数器(PC)的位置,因此 ($+6) 意味着从当前指令执行完毕后,下一条要执行的指令位置向前或向后移动6个字节。
$ 符号确实代表当前指令的地址。对于 jb Flags2.RCP_UPDATED, ($+6) 这样的条件跳转指令,在大多数情况下(尤其是在8位和16位处理器的汇编语言中),$ 表示当前指令执行完毕后的下一条指令的地址,因此$+6指的是从当前指令位置向后偏移6个字节的位置。

举例说明

	call	wait30ms				; 等待30ms新的脉冲
	jb	Flags2.RCP_UPDATED, ($+6)	; 是否有更新的RC脉冲可用-继续
	ljmp	init_no_signal			; 返回检测输入信号

	clr	Flags2.RCP_UPDATED		 	; 脉冲已经测定的标志
	mov	A, New_Rcp					; 加载新的RC值
	clr	C
	subb	A, #RCP_VALIDATE		; 高于验证级别?
	jc	measure_pwm_freq_start		; 不,重新开始

例如,在上述代码片段中:

jb Flags2.RCP_UPDATED, ($+6)

这条指令是条件跳转指令,如果 Flags2.RCP_UPDATED 标志位为真(即设置了某个条件码),则程序会跳转到当前指令之后第6个字节处开始执行下一条指令。这意味着它将不会执行紧跟在该 jb 指令后面的那条长跳转指令(ljmp init_no_signal),而是执行其后的两条或三条指令(取决于具体架构的指令长度)

指令长度

指令长度通常指的是指令在内存中占用的字节数。不同的处理器架构和汇编语言有不同的指令集,每条指令的长度也因此不同。在上述8051相关的汇编代码示例中,jb 指令、数据传输指令(如 mov)、算术运算指令(如 subb)等通常都占据不同的字节数。例如,一些简单的单字节指令可能只占1个字节,而更复杂的指令,比如涉及跳转地址或条件判断的指令,可能会占用2个或更多字节。在实际编程时,理解并计算指令长度对于进行内存管理和优化程序性能非常重要。

你可能感兴趣的:(51汇编学习笔记,汇编,51单片机,MCU,单片机)