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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? inst2.c

?? m68k系列反匯編的C語言源碼,供學(xué)習(xí)編譯原理的同學(xué)使用。實用!
?? C
?? 第 1 頁 / 共 2 頁
字號:
/* *                 Author:  Christopher G. Phillips *              Copyright (C) 1994 All Rights Reserved * *                              NOTICE * * Permission to use, copy, modify, and distribute this software and * its documentation for any purpose and without fee is hereby granted * provided that the above copyright notice appear in all copies and * that both the copyright notice and this permission notice appear in * supporting documentation. * * The author makes no representations about the suitability of this * software for any purpose.  This software is provided ``as is'' * without express or implied warranty. *//* * Most of the functions that determine whether an instruction is valid * and then print it (as necessary) are here. */#include <stdio.h>#include <stdlib.h>#include <string.h>#include "dis.h"#include "addr.h"voidbit_dynamic(m68kword inst){	int	destreg = inst & 7;	int	destmode = (inst >> 3) & 7;	int	type = (inst >> 6) & 3;	int	srcreg = (inst >> 9) & 7;	int	size = (destmode == 0) ? LONGWORD : BYTE;	char	name[10];	if (type == 0) {		/* BTST */		if (!ISDEA(destmode, destreg))			return;	} else {		/* BCHG, BCLR, BSET */		if (!ISADEA(destmode, destreg))			return;	}	sprintf(name, "B%s", bitd[type]);	if (getea(buf2, destreg, destmode, size))		return;	sprintf(buf1, "D%d", srcreg);	instprint(ops2f(2) | size2f(size), name, buf1, buf2);	valid = 1;}voidbit_static(m68kword inst){	int	reg = inst & 7;	int	mode = (inst >> 3) & 7;	int	type = (inst >> 6) & 3;	int	size = (ISDATA(mode)) ? LONGWORD : BYTE;	long	value;	int	failure;	char	name[10];	if (type == 0) {		/* BTST */		if (!ISDEAlessIMM(mode, reg))			return;	} else {		/* BCHG, BCLR, BSET */		if (!ISADEA(mode, reg))			return;	}	value = getval(/* BYTE */ WORD, &failure);	if (failure)		return;	if (value & 0xff00)		return;	if (!ISDATA(mode))		value %= 8;	sprintf(name, "B%s", bitd[type]);	if (getea(buf2, reg, mode, size))		return;	immsprintf(buf1, value);	instprint(ops2f(2) | size2f(size) | sharp2f(1), name, buf1, buf2);	valid = 1;}voidbiti_reg(const char *name, int size, const char *reg){	long	value;	int	failure;	value = getval(size, &failure);	if (failure)		return;	immsprintf(buf1, value);	instprint(ops2f(2) | size2f(size) | sharp2f(1), name, buf1, reg);	if (size == BYTE && (value & 0xff00))		return;	valid = 1;}voidbiti_size(const char *name, m68kword inst){	int	reg = inst & 7;	int	mode = (inst >> 3) & 7;	int	size = (inst >> 6) & 3;	long	value;	int	failure;	if (name[0] == 'C') {		/* CMPI */		if (!ISDEAlessIMM(mode, reg))			return;	} else {		/* ADDI, ANDI, EORI, ORI, SUBI */		if (!ISADEA(mode, reg))			return;	}	value = getval(size, &failure);	if (failure)		return;	immsprintf(buf1, value);	if (getea(buf2, reg, mode, size))		return;	instprint(ops2f(2) | size2f(size) | sharp2f(1), name, buf1, buf2);	valid = 1;}voidcmp2_chk2(m68kword inst){	int	srcreg = inst & 7;	int	srcmode = (inst >> 3) & 7;	int	size = (inst >> 9) & 3;	long	value;	int	failure;	int	destreg;	if (!ISCEA(srcmode, srcreg))		return;	value = getval(WORD, &failure);	if (failure)		return;	if (getea(buf1, srcreg, srcmode, size))		return;	destreg = (value >> 12) & 7;	Areg2(buf2, (value & 0x8000) ? 'A' : 'D', destreg);	instprint(ops2f(2) | size2f(size), (value & 0x0800) ? "CHK2" : "CMP2",	  buf1, buf2);	if (value & 0x07ff)		return;	valid = 1;}voidmovep(m68kword inst){	int	addrreg = inst & 7;	int	datareg = (inst >> 9) & 7;	int	opmode = (inst >> 6) & 7;	int	size = (opmode & 1) ? LONGWORD : WORD;	long	value;	int	failure;	value = getval(WORD, &failure);	if (failure)		return;	sprintf(buf1, "D%d", datareg);	immsprintf(buf2, value);	sprintf(buf2 + strlen(buf2), "(%2.2s)", Areg(addrreg));	if (opmode & 2)		instprint(ops2f(2) | size2f(size) | sharp2f(2), "MOVEP",		  buf1, buf2);	else		instprint(ops2f(2) | size2f(size) | sharp2f(1), "MOVEP",		  buf2, buf1);	valid = 1;}voidcas(m68kword inst){	int	reg = inst & 7;	int	mode = (inst >> 3) & 7;	int	size;	int	comparereg;	int	updatereg;	long	value;	int	failure;	if (!ISAMEA(mode, reg))		return;	switch ((inst >> 9) & 3) {	case 1:	size = BYTE;		break;	case 2:	size = WORD;		break;	case 3:	size = LONGWORD;	break;	}	value = getval(WORD, &failure);	comparereg = value & 7;	updatereg = (value >> 6) & 7;	if (failure)		return;	sprintf(buf1, "D%d", comparereg);	sprintf(buf2, "D%d", updatereg);	if (getea(buf3, reg, mode, size))		return;	instprint(ops2f(3) | size2f(size), "CAS", buf1, buf2, buf3);	if (value & 0xfe38)		return;	valid = 1;}voidcas2(m68kword inst){	int	size = (inst & 0x0200) ? LONGWORD : WORD;	long	value[2];	int	failure;	int	comparereg[2];	int	updatereg[2];	int	reg[2];	int	anotd[2];	int	i;	for (i = 0; i < 2; i++) {		value[i] = getval(WORD, &failure);		if (failure)			return;		comparereg[i] = value[i] & 7;		updatereg[i] = (value[i] >> 6) & 7;		reg[i] = (value[i] >> 12) & 7;		anotd[i] = (value[i] & 0x8000) ? 'A' : 'D';	}	sprintf(buf1, "D%d:D%d", comparereg[0], comparereg[1]);	sprintf(buf2, "D%d:D%d", updatereg[0], updatereg[1]);	Areg2(buf3, anotd[0], reg[0]);	buf3[2] = ':';	Areg2(&buf3[3], anotd[1], reg[1]);	instprint(ops2f(3) | size2f(size), "CAS2", buf1, buf2, buf3);	valid = 1;}voidmoves(m68kword inst){	int	srcreg = inst & 7;	int	srcmode = (inst >> 3) & 7;	int	size = (inst >> 6) & 3;	long	value;	int	failure;	int	reg;	int	anotd;	char	*cp1 = buf1, *cp2 = buf2;	if (!ISAMEA(srcmode, srcreg))		return;	value = getval(WORD, &failure);	if (failure)		return;	reg = (value >> 12) & 7;	anotd = (value & 0x8000) ? 'A' : 'D';	if (getea(buf1, srcreg, srcmode, size))		return;	Areg2(buf2, anotd, reg);	if (value & 0x0800) {		cp1 = buf2;		cp2 = buf1;	}	instprint(ops2f(2) | size2f(size), "MOVES", cp1, cp2);	if (value & 0x07ff)		return;	valid = 1;}voidmove(m68kword inst, int size){	int	srcreg, destreg;	int	srcmode, destmode;	srcreg = inst & 7;	srcmode = (inst >> 3) & 7;	destmode = (inst >> 6) & 7;	destreg = (inst >> 9) & 7;	if (ISDIRECT(destmode)) {		if (size == BYTE)			return;	} else if (size == BYTE && ISDIRECT(srcmode)	  || !ISAEA(destmode, destreg))		return;	if (getea(buf1, srcreg, srcmode, size))		return;	if (ISDIRECT(destmode)) {		sprintf(buf2, "%2.2s", Areg(destreg));		instprint(ops2f(2) | size2f(size), "MOVEA", buf1, buf2);	} else {		if (getea(buf2, destreg, destmode, size))			return;		instprint(ops2f(2) | size2f(size), "MOVE", buf1, buf2);	}	valid = 1;}voidmisc_size(const char *name, m68kword inst){	int	reg = inst & 7;	int	mode = (inst >> 3) & 7;	int	size = (inst >> 6) & 3;	if (name[0] == 'T') {		/* TST */		if (size == BYTE && !ISDEAlessIMM(mode, reg))			return;	} else {		/* CLR, NEG, NEGX, NOT */		if (!ISADEA(mode, reg))			return;	}	if (getea(buf1, reg, mode, size))		return;	instprint(ops2f(1) | size2f(size), name, buf1);	valid = 1;}voidmisc_ea(const char *name, m68kword inst, int size){	int	reg = inst & 7;	int	mode = (inst >> 3) & 7;	if (name[1] < 'C') {		/* NBCD, TAS */		if (!ISADEA(mode, reg))			return;	} else {		/* JMP, JSR, PEA */		if (!ISCEA(mode, reg))			return;	}	if (getea(buf1, reg, mode, size))		return;	instprint(ops2f(1), name, buf1);	valid = 1;}voidchk(m68kword inst){	int	srcreg = inst & 7;	int	srcmode = (inst >> 3) & 7;	int	destreg = (inst >> 9) & 7;	if (!ISDEA(srcmode, srcreg))		return;	if (getea(buf1, srcreg, srcmode, WORD))		return;	sprintf(buf2, "D%d", destreg);	instprint(ops2f(2), "CHK", buf1, buf2);	valid = 1;}voidlea(m68kword inst){	int	srcreg = inst & 7;	int	srcmode = (inst >> 3) & 7;	int	destreg = (inst >> 9) & 7;	int	retval;	if (!ISCEA(srcmode, srcreg))		return;	retval = getea(buf1, srcreg, srcmode, LONGWORD);	if (retval)		return;	sprintf(buf2, "%2.2s", Areg(destreg));	instprint(ops2f(2), "LEA", buf1, buf2);	valid = 1;}voidlink(m68kword inst, int size){	int	reg = inst & 7;	long	value;	int	failure;	value = getval(size, &failure);	if (failure)		return;	sprintf(buf1, "%2.2s", Areg(reg));	sprintf(buf2, "%ld", value);	instprint(ops2f(2) | sharp2f(2), "LINK", buf1, buf2);	valid = 1;}voidunlk(m68kword inst){	int	reg = inst & 7;	sprintf(buf1, "%2.2s", Areg(reg));	instprint(ops2f(1), "UNLK", buf1);	valid = 1;}voidswap(m68kword inst){	int	reg = inst & 7;	sprintf(buf1, "D%d", reg);	instprint(ops2f(1), "SWAP", buf1);	valid = 1;}voidbkpt(m68kword inst){	int	vector = inst & 0xf;	sprintf(buf1, "%d", vector);	instprint(ops2f(1) | sharp2f(1), "BKPT", buf1);	valid = 1;}voidtrap(m68kword inst){	int	vector = inst & 0xf;	sprintf(buf1, "%d", vector);	instprint(ops2f(1) | sharp2f(1), "TRAP", buf1);	valid = 1;}voidstop_rtd(const char *name){	int	value;	int	failure;	value = getval(WORD, &failure);	if (failure)		return;	sprintf(buf1, "%ld", value);	instprint(ops2f(1) | sharp2f(1), name, buf1);	valid = 1;}voidmovec(int tocr){	long	value;	int	failure;	int	reg;	int	anotd;	int	controlreg;	char	*cr;	char	*cp1;	char	*cp2;	value = getval(WORD, &failure);	if (failure)		return;	reg = (value >> 12) & 7;	anotd = (value & 0x8000) ? 'A' : 'D';	controlreg = value & 0x0fff;	Areg2(buf1, anotd, reg);	switch (controlreg) {	case 0x000:	cr = "SFC";	break;	/* Source Function Code */	case 0x001:	cr = "DFC";	break;	/* Destination Function Code */	case 0x002:	cr = "CACR";	break;	/* Cache Control Register */	case 0x800:	cr = "USP";	break;	/* User Stack Pointer */	case 0x801:	cr = "VBR";	break;	/* Vector Base Register */	case 0x802:	cr = "CAAR";	break;	/* Cache Address Register */	case 0x803:	cr = "MSP";	break;	/* Master Stack Pointer */	case 0x804:	cr = "ISP";	break;	/* Interrupt Stack Pointer */	default:		return;	}	if (tocr) {		cp1 = buf1;		cp2 = cr;	} else {		cp1 = cr;		cp2 = buf1;	}	instprint(ops2f(2), "MOVEC", cp1, cp2);	valid = 1;}voidext(m68kword inst){	int	reg = inst & 3;	int	opmode = (inst >> 6) & 3;	int	size = (opmode == 2) ? WORD : LONGWORD;	char	sext[5];	sprintf(buf1, "D%d", reg);	strcpy(sext, "EXT");	if (inst & 0x0100)		strcat(sext, "B");	instprint(ops2f(1) | size2f(size), sext, buf1);	valid = 1;}voidmovereg(m68kword inst, const char *regname, int to){	int		reg = inst & 7;	int		mode = (inst >> 3) & 7;	const char	*cp1, *cp2;	if (getea(buf1, reg, mode, WORD))		return;	if (to) {		if (!ISDEA(mode, reg))			return;		cp1 = buf1;		cp2 = regname;	} else {		if (!ISADEA(mode, reg))			return;		cp1 = regname;		cp2 = buf1;	}	instprint(ops2f(2) | size2f(WORD), "MOVE", cp1, cp2);	valid = 1;}voidmoveusp(m68kword inst, int to){	int	reg = inst & 7;	char	*cp1 = buf1, *cp2 = "USP";	sprintf(buf1, "%2.2s", Areg(reg));	if (!to) {		cp1 = cp2;		cp2 = buf1;	}	instprint(ops2f(2) | size2f(LONGWORD), "MOVE", cp1, cp2);	valid = 1;}static voidreglist(char *s, unsigned long regmask, int mode){	char	*t = s;	if (mode == 4)		revbits(&regmask, 16);	s = regbyte(s, regmask & 0xff, "D", 0);	s = regbyte(s, regmask >> 8, "A", s != t);	if (s == t)		strcpy(s, "0");}voidmovem(m68kword inst, int to){	int		reg = inst & 7;	int		mode = (inst >> 3) & 7;	int		size = (inst & 0x40) ? LONGWORD : WORD;	unsigned long	regmask;	int		failure;	char		*cp1, *cp2;	regmask = getval(WORD, &failure) & 0xffff;	if (failure)

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产亚洲精品bt天堂精选| 欧美一区二区免费视频| 国产精品伦理一区二区| 成人黄色小视频在线观看| 中文av一区二区| 色综合天天做天天爱| 亚洲激情五月婷婷| 91精品国产综合久久久久久漫画| 免费的国产精品| 26uuu另类欧美亚洲曰本| 国产精品 欧美精品| 国产精品国产三级国产aⅴ原创| 91视视频在线观看入口直接观看www| 亚洲精品国产a| 91精品国产日韩91久久久久久| 久久精品久久99精品久久| 久久久不卡网国产精品一区| 97精品国产97久久久久久久久久久久| 一区二区三区蜜桃| 欧美一区二区三区人| 国产精品99久久久久久似苏梦涵| 综合久久国产九一剧情麻豆| 欧美肥妇bbw| 国产精品18久久久久久久久| 亚洲免费三区一区二区| 欧美一区二区三区电影| 成人免费视频视频| 亚洲国产精品久久不卡毛片 | 日韩国产在线观看一区| 日韩精品一区二区三区四区 | 国产亚洲污的网站| 91色在线porny| 免费高清在线一区| 亚洲欧美另类在线| 欧美大片国产精品| 色综合久久久久| 极品少妇xxxx精品少妇| 亚洲欧洲在线观看av| 精品嫩草影院久久| 欧美曰成人黄网| 国产成人精品三级| 亚洲国产精品久久不卡毛片| 久久久久久久性| 在线播放中文字幕一区| k8久久久一区二区三区| 乱中年女人伦av一区二区| 亚洲三级小视频| 国产亚洲婷婷免费| 3d动漫精品啪啪1区2区免费 | 亚洲福利一区二区| 国产日韩欧美a| 日韩一区二区三区视频在线观看| 色综合咪咪久久| 国内精品视频一区二区三区八戒| 婷婷开心激情综合| 一区二区三区精品在线观看| 国产精品美女久久久久久2018| 日韩免费观看2025年上映的电影| 欧洲在线/亚洲| 99久久99久久精品免费看蜜桃| 韩国av一区二区三区| 免费久久99精品国产| 性做久久久久久免费观看欧美| 一区二区成人在线| 成人欧美一区二区三区小说| 国产亚洲视频系列| 久久先锋影音av| 精品国产乱码久久久久久闺蜜| 制服丝袜亚洲网站| 欧美三级电影网站| 在线观看视频欧美| 色吧成人激情小说| 日本伦理一区二区| 91视频精品在这里| 色综合久久九月婷婷色综合| 成人a区在线观看| 成人免费看片app下载| 国产成人夜色高潮福利影视| 国产乱子伦一区二区三区国色天香| 蜜臀av一区二区在线免费观看 | 国产宾馆实践打屁股91| 国产一区二区三区在线观看免费| 极品销魂美女一区二区三区| 青青草国产成人av片免费| 日韩精品一二三区| 日本va欧美va精品| 韩国成人福利片在线播放| 韩国视频一区二区| 国产精品一区二区三区网站| 国产酒店精品激情| 丰满亚洲少妇av| 91在线无精精品入口| 一本到不卡精品视频在线观看| 91福利精品视频| 欧美美女一区二区三区| 欧美一级欧美三级| 久久综合色综合88| 国产精品每日更新| 一区二区三区中文字幕精品精品 | 国产午夜精品理论片a级大结局| 国产精品素人一区二区| 亚洲精品视频在线| 欧美aⅴ一区二区三区视频| 韩国在线一区二区| 91女人视频在线观看| 欧美绝品在线观看成人午夜影视| 日韩一二三区视频| 国产精品美女久久久久高潮| 亚洲午夜羞羞片| 国产在线视视频有精品| 色综合一区二区| 日韩欧美资源站| 亚洲人成人一区二区在线观看| 欧美96一区二区免费视频| 东方欧美亚洲色图在线| 欧美日韩第一区日日骚| 国产天堂亚洲国产碰碰| 一级特黄大欧美久久久| 国产一区二区三区在线观看免费| 一本久久综合亚洲鲁鲁五月天 | 国产性做久久久久久| 亚洲男人的天堂在线观看| 毛片一区二区三区| fc2成人免费人成在线观看播放 | 欧美日韩国产乱码电影| 日韩一级黄色片| 最新国产の精品合集bt伙计| 日本欧美一区二区三区| 成人精品国产一区二区4080| 3d成人h动漫网站入口| 中文字幕在线一区二区三区| 日韩高清电影一区| 色婷婷综合久久| 久久久国际精品| 日本不卡一区二区三区| 色综合久久88色综合天天6| 久久综合一区二区| 视频在线观看91| 在线精品视频小说1| 久久久亚洲高清| 蜜桃在线一区二区三区| 欧美视频一二三区| 亚洲色图视频免费播放| 国产91色综合久久免费分享| 日韩一级完整毛片| 午夜精品福利视频网站| 色综合久久久久久久久| 日本一二三不卡| 国产真实精品久久二三区| 欧美精品久久一区| 亚洲国产欧美日韩另类综合| caoporm超碰国产精品| 国产女主播视频一区二区| 精品一区二区三区免费毛片爱 | 欧美亚洲另类激情小说| 综合在线观看色| 99久久精品国产麻豆演员表| 久久综合色8888| 久久国产精品99久久久久久老狼| 欧美丰满少妇xxxbbb| 亚洲一二三区在线观看| 欧美视频中文字幕| 亚洲精品亚洲人成人网在线播放| 成人av午夜电影| 国产精品你懂的在线| 成人午夜碰碰视频| 国产精品日日摸夜夜摸av| 国产91清纯白嫩初高中在线观看 | 99久久精品免费| 亚洲日本电影在线| 99精品视频在线观看| 亚洲天堂成人网| 色香色香欲天天天影视综合网| 亚洲视频在线一区观看| av中文字幕不卡| 亚洲女人小视频在线观看| 在线观看91视频| 午夜视频一区二区| 欧美日韩成人在线一区| 蜜臀av一区二区在线免费观看 | 国产亲近乱来精品视频| 国产精品99久久久| 国产精品久久久久久久久免费相片 | 亚洲婷婷综合久久一本伊一区 | www.一区二区| 亚洲欧美电影院| 欧美三级在线播放| 人人精品人人爱| 国产无一区二区| 日本黄色一区二区| 日本在线播放一区二区三区| 日韩免费成人网| 国产91在线|亚洲| 一区二区三区资源| 欧美一区二区三区婷婷月色 | 成年人网站91| 亚洲va欧美va天堂v国产综合| 日韩一区二区高清| 成人黄动漫网站免费app| 夜夜爽夜夜爽精品视频|