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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? codeavr.c

?? Outputs messages to a 2line LCD
?? C
?? 第 1 頁 / 共 4 頁
字號:
#include <stdio.h>
#include	<string.h>
#include <stdlib.h>
#include "defs.h"
#include "data.h"
#include "headers.h"


// Some predefinitions:
//
// INTSIZE is the size of an integer in the target machine
// BYTEOFF is the offset of an byte within an integer on the
//                                                                                                                                                                                                                                                                                       target machine. (ie: 8080,pdp11 = 0, 6809 = 1,
//                                                                                                                                                                                                                                                                                       360 = 3)
// This compiler assumes that an integer is the SAME length as
// a pointer - in fact, the compiler uses INTSIZE for both.

#define	INTSIZE			2			// can't really be changed for AVR
#define	BYTEOFF			1
#define	LABEL_PREFIX	"_"
#define	GLOBAL_PREFIX	"_"


#define	CHECKBYTE		0x55

static GetMemChar(int ptr, int offset);
static GetMemInt(int ptr, int offset);
static GetMemLong(int ptr, int offset);
static int CheckExtFun(char *p);

static struct t_fn 
{
	char name[20];
   int flag;
} extfunlist[] = {"structoffset",0,
   						"sextx",0,
							"sextz",0,
							"div",0,
                     "mul",0,
                     "neg",0,
                     "putstk_l",0,
                     "putstk_i_x", 0,
                     "putstk_i_z", 0,
                     "glpp",0,
                     "push_l",0,
                     "pop_l",0,
                     "sub_l",0,
                     "div_l",0,
                     "le",0,
                     "_case",0,
							"",0				};

static int CheckExtFun(char *p) {
	int i;

   i = 0;
   while (strlen(extfunlist[i].name) > 0) {
   	if (strcmp(extfunlist[i].name, p) == 0) {
      	if (extfunlist[i].flag == 0) {
      		extfunlist[i].flag = 1;
      		return FALSE;
         	}
         else
         	return TRUE;
         }
      else
      	i++;
      }
   return FALSE;
}


// print all assembler info before any code is generated

void header(void) {
	char ttt[100];

	outstr(";**********************************************************\n");
	outstr("; Small C for AVR\n;");
	FEvers();
   outstr("; Modifications and AVR code Copyright (C) by Ron Kreymborg\n");
	outstr(";**********************************************************\n");
	outstr("#include\t<avr.inc>\n");
   if (incname[0]) {
   	strcpy(ttt, "#include\t<");
      strcat(ttt, incname);
      strcat(ttt, ">\n");
   	outstr(ttt);
      }
   outstr("\tcol\t132\n");
   outstr("\tlstexp-\n");
   ot("module\t");
   outstr(module);
   nl();
   gtext();
}


void jmptable(void) {
}


void nl(void) {
	outbyte(EOL);
}


void initmac(void) {
	defmac("smallc\t1");
}


int galign(int t) {
	return(t);
}


// return size of an integer

int intsize(void) {
	return(INTSIZE);
}


// return offset of ls byte within word
// (ie: 8080 & pdp11 is 0, 6809 is 1, 360 is 3)

int byteoff(void) {
	return(BYTEOFF);
}


// Emit user label prefix

void LabPrefix(void) {
	outstr(LABEL_PREFIX);
}


void NamePrefix(void) {
	outstr(GLOBAL_PREFIX);
}


void InsertPrefix(char *t) {
	strcpy(t, GLOBAL_PREFIX);
}


// Emit internal label prefix

void internal_prefix(void) {
	outstr(GLOBAL_PREFIX);
}


// Save C machine state

void PushState(void) {
	ol("push\tr16");
   ol("in\tr16,0x3f");
   ol("push\tr16");
   ol("push\tr0");
   ol("push\tr1");
   ol("push\tr2");
   ol("push\tr3");
   ol("push\tr4");
   ol("push\tr5");
   ol("push\tr6");
   ol("push\tr7");
   ol("push\tr8");
   ol("push\tr9");
   ol("push\tr10");
   ol("push\tr11");
   ol("push\tr12");
   ol("push\tr13");
   ol("push\tr14");
   ol("push\tr15");
   ol("push\tr17");
   ol("push\tr18");
   ol("push\tr19");
   ol("push\tr20");
   ol("push\tr21");
   ol("push\tr22");
   ol("push\tr23");
   ol("push\tr24");
   ol("push\tr25");
   ol("push\tr26");
   ol("push\tr27");
   ol("push\tr28");
   ol("push\tr29");
   ol("push\tr30");
   ol("push\tr31");
}


// Restore C machine state

void PopState(void) {
	ol("pop\tr31");
	ol("pop\tr30");
	ol("pop\tr29");
	ol("pop\tr28");
	ol("pop\tr27");
	ol("pop\tr26");
	ol("pop\tr25");
	ol("pop\tr24");
	ol("pop\tr23");
	ol("pop\tr22");
	ol("pop\tr21");
	ol("pop\tr20");
	ol("pop\tr19");
	ol("pop\tr18");
	ol("pop\tr17");
	ol("pop\tr15");
	ol("pop\tr14");
	ol("pop\tr13");
	ol("pop\tr12");
	ol("pop\tr11");
	ol("pop\tr10");
	ol("pop\tr9");
	ol("pop\tr8");
	ol("pop\tr7");
	ol("pop\tr6");
	ol("pop\tr5");
	ol("pop\tr4");
	ol("pop\tr3");
	ol("pop\tr2");
   ol("pop\tr1");
   ol("pop\tr0");
	ol("pop\tr16");
   ol("out\t0x3f,r16");
   ol("pop\tr16");
   ol("reti");
}



// Output internal generated label prefix

void olprfix(void) {
	outbyte('L');
}


// Output a label definition terminator

void col(void) {
	outbyte(':');
}


// begin a comment line for the assembler

void comment(void) {
	outbyte(';');
}


// print any assembler stuff needed after all code

void trailer(void) {
	ol("end");
}


// function prologue

void prologue(void) {
	ot("ldiz\t");
   onum(softstklimit);
   outstr("\t\t; initialise for stack monitoring");
   nl();
   ot("ldi\tr20,");
   onum(CHECKBYTE);
   nl();
   ol("st\tz+,r20");
   ol("st\tz+,r20");
   if (hardstklimit != 0xffff) {
		ot("ldiz\t");
	   onum(hardstklimit);
	   nl();
	   ol("st\tz+,r20");
	   ol("st\tz+,r20");
      }
}


void CheckCode(void) {
   outstr("_ChkSoftStk");
   nl();
	ot("ldix\t");
	onum(softstklimit);
   outstr("\t\t; Stack monitoring code");
	nl();
   ol("ld\tr20,x+");
   ot("cpi\tr20,");
   onum(CHECKBYTE);
   nl();
   ol("brne\t_SoftErr");
   ol("ld\tr20,x+");
   ot("cpi\tr20,");
   onum(CHECKBYTE);
   nl();
   ol("brne\t_SoftErr");
   ol("ret");
   outstr("_SoftErr");
   nl();
   ot("in\tr20,");
   onum(StkErrPort);
   nl();
   ot("cbr\tr20,");
   onum(StkErrBit[1]);
   nl();
   ot("out\t");
   onum(StkErrPort);
   outstr(",r20\n");
   ol("rjmp\t$");
	if (hardstklimit != 0xffff) {
		outstr("_ChkHardStk");
	   nl();
		ot("ldix\t");
		onum(hardstklimit);
		nl();
	   ol("ld\tr20,x+");
	   ot("cpi\tr20,");
	   onum(CHECKBYTE);
	   nl();
	   ol("brne\t_HardErr");
	   ol("ld\tr20,x+");
	   ot("cpi\tr20,");
	   onum(CHECKBYTE);
	   nl();
	   ol("brne\t_HardErr");
	   ol("ret");
      outstr("_HardErr");
      nl();
      ot("in\tr20,");
      onum(StkErrPort);
      nl();
      ot("cbr\tr20,");
      onum(StkErrBit[0]);
      nl();
      ot("out\t");
	      onum(StkErrPort);
      outstr(",r20\n");
      ol("rjmp\t$");
      }
}

// text (code) segment

void gtext(void) {
	ol("rseg\tscode");
}


// data segment

void gdata(void) {
	ol("rseg\tsdata");
}


// provide the next available register(s)

int getregister(int type, int ident, int value) {
	int retval, bytes;

	bytes = 1;					// assume char
   if (type == CLONG)
     	bytes = 4;
   else
   if (type == CINT || type == UCINT || ident == POINTER)
		bytes = intsize();
   if (NextReg + bytes > REGS)
   	return -1;
	retval = REGBASE - NextReg;
	NextReg += bytes;
	return (retval);
}



// Restore the register boundary

void ResetRegBoundary(void) {
	NextReg = 0;
}


// Indicate register usage

void regsummary(void)
{
	outstr(";\tNext register free: r");
   onum(REGBASE-NextReg);
   nl();
}


// Output the variable symbol at scptr as an extern or a public

void ppubext(int scptr) {
	char text[50];

	if (symtab[scptr].storage == STATIC)
		return;
	ot(symtab[scptr].storage == EXTERN ? "extern\t" : "public\t");
	InsertPrefix(text);
   strcat(text, symtab[scptr].name);
	outstr(text);
	nl();
}


// Output the function symbol at scptr as an extern or a public

void fpubext(int scptr) {
	char text[50];

	if (symtab[scptr].storage == STATIC || symtab[scptr].type == STRUCTDEF)
		return;
	ot(symtab[scptr].offset == FUNCTION ? "public\t" : "extern\t");
	InsertPrefix(text);
   strcat(text, symtab[scptr].name);
	outstr(text);
	nl();
}


// Output a number

void onum(int num) {
	outdec(num);
}


// print partial instruction to get an immediate value into
// the primary register


void immed(STATE *stpt) {

   if (!(stpt->ident == FUNCTION || stpt->ident == FUNCDEF) && (stpt->storage == PUBLIC || stpt->storage == STATIC || stpt->storage == EXTERN)) {
		stkptr++;
      stack[stkptr].type = stpt->type;
      stack[stkptr].storage = stpt->storage;
      }
   else {
		ot("ldiz\t");
      InX = 0;
      }
}


void outname (char *p) {
	if (stkptr)
   	strcpy(stack[stkptr].name, p);
   else
   	outstr(p);
}


void doimmed(STATE *stpt, char *sname, int offset) {
	if (stpt->storage == AUTO) {
   	if (offset) {
		   if (InX)
	         ot("adiw\tr26,");
	      else
	      	ot("adiw\tr30,");
	      onum(offset);
	      nl();
         }
   	}
   else {
		if (InX) {
		   ot("ldi\tr31,high(");
		   outstr(stack[stkptr].name);
	      if (offset) {
	 			outstr("+");
	         onum(offset);
	         }
		   outstr(")\n");
			ot("ldi\tr30,low(");
		   outstr(stack[stkptr].name);
	      if (offset) {
	 			outstr("+");
	         onum(offset);
	         }
		   outstr(")\n");
		 	InX = 0;
	      }
	 	else {
		   ot("ldi\tr27,high(");
		   outstr(stack[stkptr].name);
	      if (offset) {
 				outstr("+");
	         onum(offset);
	         }
		   outstr(")\n");
			ot("ldi\tr26,low(");
		   outstr(stack[stkptr].name);
	      if (offset) {
	 			outstr("+");
	         onum(offset);
	         }
		   outstr(")\n");
		 	InX = 1;
   	   }
      }
}


void long_immed(void) {
   ot("ldil\t");
}


void doStructOff(int offset) {

   ot("ldi\tr25,");
   onum(offset>>8);
   ot("; ");
   onum(offset);
   nl();
   ot("ldi\tr24,");
   onum(offset & 0xff);
   nl();
   gcall("structoffset", CINT);
}


void gintoff(void) {
	ol("cli\t; interrupts off");
}


void ginton(void) {
	ol("sei\t; interrupts on");
}



// Fetch a static memory cell into the primary register.
// Do a cast if required.

void getmem(STATE *stpt) {
	int ptr;

	ptr = stpt->ptr;

	if (stkptr && (stpt->type == VOID || stpt->type == UCINT || stpt->type == CINT || (stpt->ident == POINTER && !stpt->pointing))) {
//		ol("ldd\tr0,z+1");
//     	ol("ld\tr31,z");
//		ol("mov\tr30,r0");
		if (stpt->ident == FUNCTION || stpt->ident == ARRAY) {
	      ot("ldi\tr31,high(");
	      outstr(stack[stkptr].name);
	      outstr(")\n");
	      ot("ldi\tr30,low(");
	      outstr(stack[stkptr].name);
	      outstr(")\n");
	      stkptr--;
         return;
	      }
		if (InX || (stpt->ident == FUNCPTR || (Indexing && stpt->ident != POINTER)))
			ot("lds\tr31,");
		else
			ot("lds\tr27,");
      outstr(stack[stkptr].name);
      nl();
		if (InX || stpt->ident == FUNCPTR || (Indexing && stpt->ident != POINTER)) {
  	   	ot("lds\tr30,");
     	   InX = 0;
         }
      else {
      	ot("lds\tr26,");
         InX = 1;
         }
  	   outstr(stack[stkptr].name);
      outstr("+1\n");
	   stkptr--;
		}
   else
	if (stkptr && (stpt->type == CCHAR || stpt->type == UCCHAR)) {
   	if ((CallFunction || stkptr) && stpt->ident == ARRAY) {
	      ot("ldi\tr31,high(");
	      outstr(stack[stkptr].name);
	      outstr(")\n");
	      ot("ldi\tr30,low(");
	      outstr(stack[stkptr].name);
	      outstr(")\n");
	      stkptr--;
         InX = 0;
         return;
	      }
		if (InX || stpt->ident == FUNCPTR || stpt->ident != POINTER) {
      	ot("lds\tr30,");
         InX = 0;
         }
      else {
			ot("lds\tr26,");
         InX = 1;
         }
      outstr(stack[stkptr].name);
      nl();
      if (IfFlag || Indexing)
      	sign_extend_int(stpt);
      stkptr--;
		}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久久99精品久久| 精品一区二区国语对白| 久久99久久精品| 色综合久久久久综合| 日韩亚洲欧美高清| 一区二区三区欧美日韩| 国产精品18久久久久久久久久久久| 色婷婷国产精品综合在线观看| 久久久久久久电影| 蜜臀久久久99精品久久久久久| 日本久久一区二区三区| 国产亚洲一区二区三区| 久久不见久久见免费视频7| 欧美网站大全在线观看| 亚洲色图.com| 成人激情免费电影网址| 2020国产成人综合网| 日韩 欧美一区二区三区| 欧美影视一区二区三区| 亚洲精品一二三| 成人av免费网站| 国产精品视频第一区| 国产宾馆实践打屁股91| 精品福利在线导航| 精品亚洲国内自在自线福利| 91精品国产综合久久精品性色| 亚洲综合网站在线观看| 91国产免费观看| 亚洲综合一区二区精品导航| 91一区一区三区| 亚洲综合一区二区| 欧美日韩在线观看一区二区| 亚洲国产精品视频| 777久久久精品| 日韩中文欧美在线| 91精品国产色综合久久不卡电影 | 亚洲地区一二三色| 在线国产电影不卡| 午夜伊人狠狠久久| 日韩一区二区在线观看视频 | 亚洲狠狠丁香婷婷综合久久久| 不卡av电影在线播放| 久久久国产一区二区三区四区小说 | 91视频.com| 亚洲激情第一区| 7777精品伊人久久久大香线蕉| 亚洲一区二区三区在线| 制服丝袜亚洲色图| 琪琪一区二区三区| 国产日本亚洲高清| 91色九色蝌蚪| 亚洲不卡av一区二区三区| 91精品国产色综合久久不卡蜜臀 | 亚洲欧美国产77777| 91国在线观看| 奇米精品一区二区三区在线观看一 | 亚洲精品乱码久久久久久黑人| 色噜噜狠狠色综合中国| 日本中文一区二区三区| 国产精品视频九色porn| 国产欧美日韩激情| 91久久人澡人人添人人爽欧美| 日韩福利电影在线| 国产精品久久久久久久久果冻传媒 | 国产九色精品成人porny | 中文字幕精品在线不卡| 日本韩国欧美一区二区三区| 老司机精品视频线观看86| 中文字幕视频一区二区三区久| 欧美日韩1234| aaa欧美日韩| 蜜桃av噜噜一区| 亚洲精品videosex极品| 久久亚洲免费视频| 欧美精品一二三| 99re视频精品| 久久99日本精品| 亚洲国产成人av网| 国产精品国产三级国产| 欧美不卡一区二区三区| 在线观看视频91| 成人免费看视频| 韩国女主播一区二区三区| 亚洲大型综合色站| 亚洲日本一区二区三区| 国产无人区一区二区三区| 欧美乱熟臀69xxxxxx| 94色蜜桃网一区二区三区| 美女脱光内衣内裤视频久久网站| 一区二区视频在线| 亚洲国产成人午夜在线一区| 日韩视频永久免费| 欧美剧情电影在线观看完整版免费励志电影 | 免费黄网站欧美| 亚洲国产日日夜夜| 亚洲欧美另类久久久精品2019| 国产色综合久久| 精品人伦一区二区色婷婷| 欧美一区午夜视频在线观看| 一本一道久久a久久精品综合蜜臀| 国产精品一级片在线观看| 日韩精品欧美精品| 日韩精品一区第一页| 亚洲制服丝袜av| 亚洲精品视频免费看| 亚洲欧洲精品成人久久奇米网| 欧美sm美女调教| 日韩一区二区三区观看| 欧美群妇大交群中文字幕| 欧美妇女性影城| 欧美艳星brazzers| 欧美少妇性性性| 欧美日韩国产精品成人| 欧美日韩色一区| 欧美日韩高清一区二区| 67194成人在线观看| 91精品国产aⅴ一区二区| 在线不卡中文字幕播放| 日韩午夜精品电影| 精品国产精品网麻豆系列| 精品99一区二区三区| www久久久久| 国产精品免费久久久久| 亚洲精品高清在线| 亚洲一区二区三区在线| 日本三级亚洲精品| 国产制服丝袜一区| 99久久精品久久久久久清纯| 欧美日本在线播放| 日韩女优av电影在线观看| wwwwxxxxx欧美| 中文字幕日本乱码精品影院| 一区二区三区高清不卡| 奇米亚洲午夜久久精品| 国产一区二区看久久| 99免费精品视频| 欧美亚洲国产bt| 精品欧美黑人一区二区三区| 国产亚洲一区字幕| 一区二区三区四区激情| 看电视剧不卡顿的网站| 盗摄精品av一区二区三区| 色综合视频在线观看| 777xxx欧美| 国产精品久久久久久久浪潮网站| 一区二区三区精品久久久| 久久99九九99精品| 91麻豆国产香蕉久久精品| 制服丝袜日韩国产| 国产精品国产三级国产三级人妇| 亚洲午夜久久久久中文字幕久| 九九久久精品视频 | 丰满亚洲少妇av| 欧美伊人久久久久久午夜久久久久| 精品日韩欧美一区二区| 亚洲精品免费在线播放| 国产一区二区中文字幕| 在线中文字幕不卡| 久久久影院官网| 亚欧色一区w666天堂| av亚洲精华国产精华精华| 日韩一区二区三区电影| 亚洲精品视频在线| 韩国女主播一区二区三区| 欧美日韩三级视频| 亚洲欧美日韩国产综合| 国产精品一级黄| 精品日本一线二线三线不卡| 亚洲午夜电影网| 99久久精品免费看国产| 国产午夜一区二区三区| 久久99精品一区二区三区三区| 欧美亚洲综合网| 亚洲卡通欧美制服中文| 成人福利在线看| 久久先锋影音av鲁色资源| 亚洲3atv精品一区二区三区| 色综合天天天天做夜夜夜夜做| 久久综合狠狠综合久久激情 | 亚洲一区二区偷拍精品| 97超碰欧美中文字幕| 欧美极品少妇xxxxⅹ高跟鞋| 精品写真视频在线观看| 欧美久久一二三四区| 亚洲成年人影院| 在线观看视频一区| 亚洲日本青草视频在线怡红院| 成人不卡免费av| 国产精品三级电影| 成人av资源在线观看| 日本一区二区三区久久久久久久久不 | 日韩高清电影一区| 欧美日韩精品免费观看视频| 亚洲另类在线一区| 欧洲av在线精品| 亚洲国产美国国产综合一区二区| 一本久久综合亚洲鲁鲁五月天| 亚洲女同一区二区| 日本电影欧美片| 亚洲成人av电影|