跳至内容

Introspector/GccCpp/tree-dump.c/字符类switch

来自维基教科书,开放书籍,开放世界

如果我们查看节点类的汇编代码,我们将看到以下内容

L5

	subl	$12, %esp	 #,
	leal	-56(%ebp), %eax	 #, tmp119
	pushl	%eax	 # tmp119
	call	TReftree_code_class::operator char()	 #
	addl	$4, %esp	 #,
	movsbl	%al,%eax	 # tmp120, tmp121
	pushl	%eax	 # tmp121
	call	IS_EXPR_CODE_CLASS(char)	 #
	addl	$16, %esp	 #,
	testb	%al, %al	 # tmp122
	je	L21	 #,
	subl	$8, %esp	 #,
	pushl	-24(%ebp)	 # t
	pushl	8(%ebp)	 # di
	call	queue_and_dump_type(dump_info*, tree_common*)	 #
	addl	$16, %esp	 #,
	subl	$12, %esp	 #,
	leal	-56(%ebp), %eax	 #, tmp132
	pushl	%eax	 # tmp132

	call	TReftree_code_class::operator char()	 #
	addl	$16, %esp	 #,
	movb	%al, -257(%ebp)	 #,
	cmpb	$101, -257(%ebp)	 #, "e"
	je	L32	 #,

如果我们等于一个“e”,则跳至#块 L32

	cmpb	$101, -257(%ebp)	 #,
	jg	L30	 #,

如果我们大于一个“e”,则跳至#块 L30


	cmpb	$50, -257(%ebp)	 #,
	je	L25	 #,

如果我们等于一个“2”,则跳至块#块 L25

	cmpb	$50, -257(%ebp)	 #, // 2
	jg	L31	 #,

如果我们大于一个“2”,则跳至块#块 L31


	cmpb	$49, -257(%ebp)	 #, // '1'
	je	L23	 #, // case '1'
	jmp	L29	 #

如果我们有一个“1”,则跳至块#块 L29

L31:
	cmpb	$60, -257(%ebp)	 #,
	je	L25	 #,
	jmp	L29	 #

如果我们有一个“<”,则跳至#块 L25,否则跳至#块 L29

L30:
	movb	-257(%ebp), %al	 #, tmp134
	subl	$114, %eax	 #, tmp134
	cmpb	$1, %al	 #, tmp134
	ja	L29	 #,
	jmp	L32	 #\

从eax中减去“r”

跳至#块 L29 跳过

如果我们等于一个“e”,则跳至#块 L32

华夏公益教科书