亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專(zhuān)輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? asm.c

?? 非常好的源碼
?? C
?? 第 1 頁(yè) / 共 5 頁(yè)
字號(hào):
		}
	}
	else {
		/* can't imagine any other kind of operand */
		expressionP->X_seg = SEG_NONE;
		InputPointer--;
	}
/*
 * It is more 'efficient' to clean up the expressions when they are created.
 * Doing it here saves lines of code.
 */

	clean_up_expression(expressionP);
	SKIP_WHITESPACE();  /* -> 1st char after operand. */
	know(*InputPointer != ' ');
	return (expressionP->X_seg);
}                       /* operand */
/* Internal. Simplify a struct expression for use by AsmExpression()
 * In:  address of a expressionS.
 *  The X_seg field of the expressionS may only take certain values.
 *  Now, we permit SEG_PASS1 to make code smaller & faster.
 *  Elsewise we waste time special-case testing. Sigh. Ditto SEG_NONE.
 * Out: expressionS may have been modified:
 *  'foo-foo' symbol references cancelled to 0,
 *      which changes X_seg from SEG_DIFFERENCE to SEG_ABSOLUTE;
 *  Unused fields zeroed to help AsmExpression().
 */
static void clean_up_expression(register expressionS *expressionP)
{
	switch (expressionP->X_seg) {
	case SEG_NONE:
	case SEG_PASS1:
		expressionP->X_add_symbol = NULL;
		expressionP->X_subtract_symbol = NULL;
		expressionP->X_add_number = 0;
		break;
	case SEG_BIG:
	case SEG_ABSOLUTE:
		expressionP->X_subtract_symbol = NULL;
		expressionP->X_add_symbol = NULL;
		break;
	case SEG_TEXT:
	case SEG_DATA:
	case SEG_BSS:
	case SEG_UNKNOWN:
		expressionP->X_subtract_symbol = NULL;
		break;
	case SEG_DIFFERENCE:
		/* It does not hurt to 'cancel' NULL==NULL when comparing symbols for
		'eq'ness. It is faster to re-cancel them to NULL than to check for
		this special case. */
		if (expressionP->X_subtract_symbol == expressionP->X_add_symbol
				|| (expressionP->X_subtract_symbol
					&& expressionP->X_add_symbol
					&& expressionP->X_subtract_symbol->sy_frag == expressionP->X_add_symbol->sy_frag
					&& expressionP->X_subtract_symbol->SymbolValue == expressionP->X_add_symbol->SymbolValue)) {
			expressionP->X_subtract_symbol = NULL;
			expressionP->X_add_symbol = NULL;
			expressionP->X_seg = SEG_ABSOLUTE;
		}
		break;
	default:
		InternalError(1103);
		break;
	}
}
/*
 *          expr_part ()
 * Internal. Made a function because this code is used in 2 places.
 * Generate error or correct X_?????_symbol of expressionS.
 * symbol_1 += symbol_2 ... well ... sort of.
 */
static segT expr_part(symbolS **symbol_1_PP,symbolS * symbol_2_P)
{
	segT return_value;
	know((*symbol_1_PP) == NULL
		|| ((*symbol_1_PP)->sy_type & N_TYPE) == N_TEXT
		|| ((*symbol_1_PP)->sy_type & N_TYPE) == N_DATA
		|| ((*symbol_1_PP)->sy_type & N_TYPE) == N_BSS
		|| ((*symbol_1_PP)->sy_type & N_TYPE) == N_UNDF
		);
	know(symbol_2_P == NULL
		|| (symbol_2_P->sy_type & N_TYPE) == N_TEXT
		|| (symbol_2_P->sy_type & N_TYPE) == N_DATA
		|| (symbol_2_P->sy_type & N_TYPE) == N_BSS
		|| (symbol_2_P->sy_type & N_TYPE) == N_UNDF
		);
	if (*symbol_1_PP) {
		if (((*symbol_1_PP)->sy_type & N_TYPE) == N_UNDF) {
			if (symbol_2_P) {
				return_value = SEG_PASS1;
				*symbol_1_PP = NULL;
			}
			else {
				know(((*symbol_1_PP)->sy_type & N_TYPE) == N_UNDF);
				return_value = SEG_UNKNOWN;
			}
		}
		else {
			if (symbol_2_P) {
				if ((symbol_2_P->sy_type & N_TYPE) == N_UNDF) {
					*symbol_1_PP = NULL;
					return_value = SEG_PASS1;
				}
				else {
					/* {seg1} - {seg2} */
					InternalError(1063);
				}
			}
			else {
				return_value = N_TYPE_seg[(*symbol_1_PP)->sy_type & N_TYPE];
			}
		}
	}
	else {              /* (* symbol_1_PP) == NULL */
		if (symbol_2_P) {
			*symbol_1_PP = symbol_2_P;
			return_value = N_TYPE_seg[(symbol_2_P)->sy_type & N_TYPE];
		}
		else {
			*symbol_1_PP = NULL;
			return_value = SEG_ABSOLUTE;
		}
	}
	know(return_value == SEG_ABSOLUTE
		|| return_value == SEG_TEXT
		|| return_value == SEG_DATA
		|| return_value == SEG_BSS
		|| return_value == SEG_UNKNOWN
		|| return_value == SEG_PASS1
		);
	know((*symbol_1_PP) == NULL
	|| ((*symbol_1_PP)->sy_type & N_TYPE) == seg_N_TYPE[(int) return_value]);
	return (return_value);
}                       /* expr_part() */
/* Expression parser. */
/*
 * We allow an empty expression, and just assume (absolute,0) silently.
 * Unary operators and parenthetical expressions are treated as operands.
 * As usual, Q==quantity==operand, O==operator, X==expression mnemonics.
 * We used to do a aho/ullman shift-reduce parser, but the logic got so
 * warped that I flushed it and wrote a recursive-descent parser instead.
 * Now things are stable, would anybody like to write a fast parser?
 * Most expressions are either register (which does not even reach here)
 * or 1 symbol. Then "symbol+constant" and "symbol-symbol" are common.
 * So I guess it doesn't really matter how inefficient more complex expressions
 * are parsed.
 * After AsmExpression(RANK,resultP) InputPointer -> operator of rank <= RANK.
 * Also, we have consumed any leading or trailing spaces (operand does that)
 * and done all intervening operators.
 */
typedef enum {
	O_illegal,          /* (0)  what we get for illegal op */
	O_multiply,         /* (1)  * */
	O_divide,           /* (2)  / */
	O_modulus,          /* (3)  % */
	O_left_shift,       /* (4)  < */
	O_right_shift,      /* (5)  > */
	O_bit_inclusive_or, /* (6)  | */
	O_bit_or_not,       /* (7)  ! */
	O_bit_exclusive_or, /* (8)  ^ */
	O_bit_and,          /* (9)  & */
	O_add,              /* (10) + */
	O_subtract          /* (11) - */
}
operatorT;
#undef __
#define __ O_illegal
static const operatorT op_encoding[256] = { /* maps ASCII -> operators */
	__, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __,
	__, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __,
	__, O_bit_or_not, __, __, __, O_modulus, O_bit_and, __,
	__, __, O_multiply, O_add, __, O_subtract, __, O_divide,
	__, __, __, __, __, __, __, __,
	__, __, __, __, O_left_shift, __, O_right_shift, __,
	__, __, __, __, __, __, __, __,
	__, __, __, __, __, __, __, __,
	__, __, __, __, __, __, __, __,
	__, __, __, __, __, __, O_bit_exclusive_or, __,
	__, __, __, __, __, __, __, __,
	__, __, __, __, __, __, __, __,
	__, __, __, __, __, __, __, __,
	__, __, __, __, O_bit_inclusive_or, __, __, __,
	__, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __,
	__, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __,
	__, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __,
	__, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __,
	__, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __,
	__, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __,
	__, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __,
	__, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __
};
/*
 *  Rank    Examples
 *  0   operand, (expression)
 *  1   + -
 *  2   & ^ ! |
 *  3   * / % < >
 */
static const operator_rankT
op_rank[] = {0, 3, 3, 3, 3, 3, 2, 2, 2, 2, 1, 1};
static segT             /* Return resultP -> X_seg. */
AsmExpression(register operator_rankT rank,   /* Larger # is higher rank. */
	register expressionS *resultP)  /* Deliver result here. */
{
	expressionS right;
	register operatorT op_left;
	register char c_left;   /* 1st operator character. */
	register operatorT op_right;
	register char c_right;
	know(rank >= 0);
	(void) operand(resultP);
	know(*InputPointer != ' ');   /* Operand() gobbles spaces. */
	c_left = *InputPointer;   /* Potential operator character. */
	op_left = op_encoding[c_left];
	while (op_left != O_illegal && op_rank[(int) op_left] > rank) {
		InputPointer++;   /* -> after 1st character of operator. */
		/* Operators "<<" and ">>" have 2 characters. */
		if (*InputPointer == c_left && (c_left == '<' || c_left == '>')) {
			InputPointer++;
		}               /* -> after operator. */
		if (SEG_NONE == AsmExpression(op_rank[(int) op_left], &right)) {
			InternalError(1066);
		}
		know(*InputPointer != ' ');
		c_right = *InputPointer;
		op_right = op_encoding[c_right];
		if (*InputPointer == c_right && (c_right == '<' || c_right == '>')) {
			InputPointer++;
		}               /* -> after operator. */
		know((int) op_right == 0
			|| op_rank[(int) op_right] <= op_rank[(int) op_left]);
		/* InputPointer -> after right-hand quantity. */
		/* left-hand quantity in resultP */
		/* right-hand quantity in right. */
		/* operator in op_left. */
		if (resultP->X_seg == SEG_PASS1 || right.X_seg == SEG_PASS1) {
			resultP->X_seg = SEG_PASS1;
		}
		else {
			if (op_left == O_subtract) {
				/* Convert - into + by exchanging symbols and negating
				number. I know -infinity can't be negated in 2's
				complement: but then it can't be subtracted either. This
				trick does not cause any further inaccuracy. */
				register symbolS *symbolP;
				right.X_add_number = -right.X_add_number;
				symbolP = right.X_add_symbol;
				right.X_add_symbol = right.X_subtract_symbol;
				right.X_subtract_symbol = symbolP;
				if (symbolP) {
					right.X_seg = SEG_DIFFERENCE;
				}
				op_left = O_add;
			}
			if (op_left == O_add) {
				segT seg1;
				segT seg2;
				know(resultP->X_seg == SEG_DATA
					|| resultP->X_seg == SEG_TEXT
					|| resultP->X_seg == SEG_BSS
					|| resultP->X_seg == SEG_UNKNOWN
					|| resultP->X_seg == SEG_DIFFERENCE
					|| resultP->X_seg == SEG_ABSOLUTE
					|| resultP->X_seg == SEG_PASS1
					);
				know(right.X_seg == SEG_DATA
					|| right.X_seg == SEG_TEXT
					|| right.X_seg == SEG_BSS
					|| right.X_seg == SEG_UNKNOWN
					|| right.X_seg == SEG_DIFFERENCE
					|| right.X_seg == SEG_ABSOLUTE
					|| right.X_seg == SEG_PASS1
					);
				clean_up_expression(&right);
				clean_up_expression(resultP);
				seg1 = expr_part(&resultP->X_add_symbol, right.X_add_symbol);
				seg2 = expr_part(&resultP->X_subtract_symbol, right.X_subtract_symbol);
				if (seg1 == SEG_PASS1 || seg2 == SEG_PASS1) {
					need_pass_2 = TRUE;
					resultP->X_seg = SEG_PASS1;
				}
				else if (seg2 == SEG_ABSOLUTE)
					resultP->X_seg = seg1;
				else if (seg1 != SEG_UNKNOWN
						&& seg1 != SEG_ABSOLUTE
						&& seg2 != SEG_UNKNOWN
						&& seg1 != seg2) {
					know(seg2 != SEG_ABSOLUTE);
					know(resultP->X_subtract_symbol);
					know(seg1 == SEG_TEXT || seg1 == SEG_DATA || seg1 == SEG_BSS);
					know(seg2 == SEG_TEXT || seg2 == SEG_DATA || seg2 == SEG_BSS);
					know(resultP->X_add_symbol);
					know(resultP->X_subtract_symbol);
					InternalError(1067);
				}
				else
					resultP->X_seg = SEG_DIFFERENCE;
				resultP->X_add_number += right.X_add_number;
				clean_up_expression(resultP);
			}
			else {      /* Not +. */
				if (resultP->X_seg == SEG_UNKNOWN || right.X_seg == SEG_UNKNOWN) {
					resultP->X_seg = SEG_PASS1;
					need_pass_2 = TRUE;
				}
				else {
					resultP->X_subtract_symbol = NULL;
					resultP->X_add_symbol = NULL;
					/* Will be SEG_ABSOLUTE. */
					if (resultP->X_seg != SEG_ABSOLUTE || right.X_seg != SEG_ABSOLUTE) {
						InternalError(1068);
					}
					else {
						switch (op_left) {
						case O_bit_inclusive_or:
							resultP->X_add_number |= right.X_add_number;
							break;
						case O_modulus:
							if (right.X_add_number) {
								resultP->X_add_number %= right.X_add_number;
							}
							else {
								InternalError(1069);
							}
							break;
						case O_bit_and:
							resultP->X_add_number &= right.X_add_number;
							break;
						case O_multiply:
							resultP->X_add_number *= right.X_add_number;
							break;
						case O_divide:
							if (right.X_add_number) {
								resultP->X_add_number /= right.X_add_number;
							}
							else {
								InternalError(1069); /* division par zero */
							}
							break;
						case O_left_shift:
							resultP->X_add_number <<= right.X_add_number;
							break;
						case O_right_shift:
							resultP->X_add_number >>= right.X_add_number;
							break;
						case O_bit_exclusive_or:
							resultP->X_add_number ^= right.X_add_number;
							break;
						case O_bit_or_not:
							resultP->X_add_number |= ~right.X_add_number;
							break;
						default:
							InternalError(1104);
							break;
						}   /* switch(operator) */
					}
				}       /* If we have to force need_pass_2. */
			}           /* If operator was +. */
		}               /* If we didn't set need_pass_2. */
		op_left = op_right;
	}                   /* While next operator is >= this rank. */
	return (resultP->X_seg);
}
/* get_symbol_end()

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
蜜桃av噜噜一区二区三区小说| 在线中文字幕不卡| 久久电影网电视剧免费观看| 午夜在线电影亚洲一区| 亚洲成人自拍一区| 国产传媒一区在线| 精一区二区三区| 美国欧美日韩国产在线播放| 麻豆精品一区二区av白丝在线| 免费美女久久99| 久久er精品视频| 韩国欧美国产一区| 成人午夜免费av| 色婷婷久久一区二区三区麻豆| 91网站在线播放| 欧美天堂亚洲电影院在线播放| 精品婷婷伊人一区三区三| 欧美日韩一区三区四区| 欧美精品乱码久久久久久按摩 | 欧美va亚洲va在线观看蝴蝶网| 91精品国产入口| 精品国产1区2区3区| 国产欧美视频一区二区| 国产精品久久三区| 亚洲午夜国产一区99re久久| 午夜精品久久久久久久久久 | 99久久久久免费精品国产| av电影天堂一区二区在线观看| 99re亚洲国产精品| 欧美剧情片在线观看| 欧美电视剧免费全集观看| 欧美国产精品v| 一区二区三区四区在线| 日本欧美一区二区| 国产.欧美.日韩| 在线观看一区不卡| 欧美电影免费观看高清完整版| 欧美激情一区二区三区| 亚洲精品菠萝久久久久久久| 五月天欧美精品| 国产精品99久久久| 色偷偷成人一区二区三区91 | 国产精品乱子久久久久| 亚洲国产一区二区三区青草影视| 蜜桃av噜噜一区| 91在线观看视频| 日韩视频在线一区二区| 中文字幕亚洲在| 美腿丝袜亚洲色图| 波多野结衣一区二区三区| 欧美另类高清zo欧美| 国产日本亚洲高清| 日韩一区欧美二区| 不卡av在线网| 欧美成人精品3d动漫h| 中文字幕一区二区日韩精品绯色| 免费一级片91| 欧美挠脚心视频网站| 国产午夜亚洲精品午夜鲁丝片| 一区二区三区国产精华| 激情综合色综合久久| 色综合久久精品| 久久久久久久久久久99999| 亚洲电影第三页| 91视频在线观看| 久久中文娱乐网| 午夜激情综合网| 99久久久无码国产精品| 久久久蜜桃精品| 日韩精品乱码av一区二区| 成人aa视频在线观看| 欧美大片免费久久精品三p| 一区二区高清在线| 国产a久久麻豆| 亚洲精品在线观看视频| 午夜婷婷国产麻豆精品| 91一区一区三区| 日本一区二区电影| 国产九色精品成人porny| 欧美日韩国产乱码电影| 欧美国产一区二区在线观看 | 欧美日韩三级视频| 亚洲免费观看高清| 成人美女视频在线观看18| 精品国产乱码久久| 日本成人超碰在线观看| 日本乱人伦aⅴ精品| 国产精品入口麻豆九色| 国产麻豆精品theporn| 精品欧美一区二区久久| 欧美bbbbb| 日韩午夜电影在线观看| 日本系列欧美系列| 欧美日本一区二区| 日韩国产欧美在线播放| 欧美日韩一区成人| 亚洲成精国产精品女| 欧美亚洲综合在线| 亚洲综合成人在线视频| 色综合咪咪久久| 亚洲人成精品久久久久| 99久久免费精品| 亚洲视频一区二区在线| 99精品国产99久久久久久白柏| 亚洲欧洲精品一区二区三区不卡| 成人av电影在线| 18成人在线视频| 在线影视一区二区三区| 亚洲一卡二卡三卡四卡无卡久久| 日本精品一区二区三区高清| 亚洲精品国久久99热| 91福利在线观看| 午夜欧美视频在线观看| 欧美一区在线视频| 国精产品一区一区三区mba桃花 | 亚洲大片免费看| 欧美一区二区免费视频| caoporn国产精品| 一区在线播放视频| 一本到不卡免费一区二区| 一区二区三区高清不卡| 欧美日韩激情一区| 蜜臀av一区二区在线观看| 欧美刺激午夜性久久久久久久 | 日韩欧美国产精品| 国产乱码字幕精品高清av| 欧美激情一区二区三区蜜桃视频| av成人老司机| 亚洲成人av一区二区| 日韩一级大片在线观看| 懂色av一区二区夜夜嗨| 亚洲精品欧美激情| 欧美一区二区在线观看| 国产一区三区三区| 亚洲欧洲99久久| 欧美伦理影视网| 国产精品综合一区二区三区| 亚洲色图视频网站| 91 com成人网| 国产精品一线二线三线精华| 中文字幕亚洲成人| 欧美一区二区三区视频免费播放| 国产在线不卡视频| 亚洲精品视频免费观看| 91精品国产综合久久久久久漫画| 丰满白嫩尤物一区二区| 亚洲一区在线播放| 欧美精品一区二区三区蜜桃| 97久久精品人人澡人人爽| 日一区二区三区| 国产人成一区二区三区影院| 欧美日韩综合在线免费观看| 精品一区二区三区不卡| 日韩毛片视频在线看| 日韩欧美一二区| 色8久久精品久久久久久蜜| 久久成人免费日本黄色| 中文字幕一区不卡| 精品美女被调教视频大全网站| 暴力调教一区二区三区| 蜜臀精品久久久久久蜜臀| ...xxx性欧美| 久久这里只有精品视频网| 欧美亚洲高清一区二区三区不卡| 久久99国产精品尤物| 一区二区三区在线影院| 久久久久久**毛片大全| 欧美精品99久久久**| 成人av电影在线网| 激情欧美一区二区三区在线观看| 亚洲靠逼com| 国产亚洲人成网站| 日韩三级伦理片妻子的秘密按摩| 成人av影院在线| 激情另类小说区图片区视频区| 一区二区在线免费| 国产精品无人区| www日韩大片| 69堂成人精品免费视频| 色综合久久六月婷婷中文字幕| 国产麻豆精品久久一二三| 美女网站在线免费欧美精品| 亚洲精品国产成人久久av盗摄| 国产精品视频一区二区三区不卡| 日韩欧美综合一区| 欧美日韩成人高清| 91小视频免费看| 不卡一卡二卡三乱码免费网站| hitomi一区二区三区精品| 国产精品一区三区| 精品系列免费在线观看| 日韩国产精品久久| 亚洲成人av在线电影| 亚洲最色的网站| 一区二区三区av电影| 中国av一区二区三区| 亚洲国产精品激情在线观看| 精品国产乱码久久久久久蜜臀| 91精品国产免费| 正在播放亚洲一区|