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

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

?? 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--;
		}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产.欧美.日韩| 99re在线视频这里只有精品| 日韩二区三区四区| 一区二区三区不卡视频| 亚洲视频在线一区| 国产精品久久福利| 国产精品不卡在线| 亚洲欧洲日韩女同| 亚洲欧美日本韩国| 亚洲欧美视频一区| 一区二区不卡在线播放 | 日韩精品亚洲专区| 天天色综合成人网| 日本一区中文字幕| 麻豆国产一区二区| 激情六月婷婷久久| 精品国产一区二区国模嫣然| 在线不卡的av| 欧美老人xxxx18| 日韩一区二区中文字幕| 日韩欧美的一区二区| 久久亚洲精品小早川怜子| 国产人成亚洲第一网站在线播放| 国产精品天干天干在线综合| 久久夜色精品国产欧美乱极品| 久久夜色精品国产噜噜av| 欧美韩国日本综合| 亚洲精品视频一区二区| 日韩高清欧美激情| 韩国av一区二区三区在线观看| 国产福利91精品一区| 91香蕉视频在线| 欧美精品色综合| 久久―日本道色综合久久| 国产精品久久久久国产精品日日 | 国产福利一区二区三区视频| 国产99久久久精品| 欧美这里有精品| 日韩欧美综合在线| 国产精品免费视频观看| 一区二区免费视频| 国内精品伊人久久久久av一坑| 北岛玲一区二区三区四区| 日本久久一区二区| 精品国产亚洲在线| 一区二区三区在线观看动漫| 日产精品久久久久久久性色| 国产乱国产乱300精品| 色视频一区二区| 日韩美女主播在线视频一区二区三区| 中国色在线观看另类| 亚洲国产成人av| 成人综合日日夜夜| 欧美日韩性生活| 中文字幕不卡在线| 三级一区在线视频先锋| 大胆亚洲人体视频| 欧美一区二区私人影院日本| 中文字幕一区二区三区四区不卡| 天天操天天干天天综合网| 岛国精品在线观看| 日韩免费一区二区| 一区二区三区日韩精品| 国产成人综合视频| 精品视频1区2区3区| 自拍av一区二区三区| 日韩视频中午一区| 一区二区三区中文字幕在线观看| 国产又黄又大久久| 欧美精品丝袜中出| **欧美大码日韩| 国产麻豆精品视频| 欧美挠脚心视频网站| 日韩毛片视频在线看| 另类调教123区| 欧美精品国产精品| 亚洲人被黑人高潮完整版| 国产一区二区在线视频| 4hu四虎永久在线影院成人| 亚洲人成电影网站色mp4| 国产91高潮流白浆在线麻豆| 7777精品伊人久久久大香线蕉经典版下载| 综合久久国产九一剧情麻豆| 韩国一区二区在线观看| 欧美日韩精品高清| 亚洲一区二区中文在线| 99久久精品费精品国产一区二区| 欧美精品一区二区三区蜜臀| 三级成人在线视频| 欧美日韩免费观看一区二区三区| 亚洲人成网站影音先锋播放| 成人夜色视频网站在线观看| 久久伊人蜜桃av一区二区| 蜜乳av一区二区| 717成人午夜免费福利电影| 亚洲成人激情综合网| 色婷婷av一区二区三区之一色屋| 国产精品久久久久一区二区三区| 韩国在线一区二区| 久久久精品欧美丰满| 蜜臀久久久久久久| 日韩色视频在线观看| 青青草97国产精品免费观看| 在线不卡a资源高清| 日日骚欧美日韩| 日韩三级视频在线看| 蜜桃在线一区二区三区| 91精品国产综合久久久久久| 亚洲最大色网站| 欧美日韩中文精品| 视频在线观看国产精品| 欧美日韩国产影片| 午夜视频在线观看一区| 欧美精品视频www在线观看| 日韩国产精品久久久| 欧美夫妻性生活| 日韩国产欧美在线视频| 欧美一区二区三区视频在线| 天天射综合影视| 日韩欧美亚洲国产另类| 国产精品中文字幕欧美| 国产欧美一区二区精品婷婷| 国产91丝袜在线18| 国产精品久久久久久亚洲伦| 色综合视频在线观看| 亚洲精品你懂的| 欧美中文字幕亚洲一区二区va在线| 天天综合日日夜夜精品| 欧美电影免费观看高清完整版在线| 极品尤物av久久免费看| 国产欧美日韩在线| 一本到不卡精品视频在线观看| 亚洲一线二线三线视频| 91精品婷婷国产综合久久性色| 黄色资源网久久资源365| 国产精品成人网| 欧美日韩一级片网站| 免费成人你懂的| 国产欧美视频一区二区三区| 日本国产一区二区| 免费在线一区观看| 日韩电影一区二区三区| 久久久久久久久久美女| 97aⅴ精品视频一二三区| 亚洲h在线观看| 国产日韩精品一区二区三区在线| 91免费版pro下载短视频| 亚洲高清一区二区三区| 亚洲精品在线电影| 在线亚洲免费视频| 久久精品国产一区二区三 | 欧美做爰猛烈大尺度电影无法无天| 日韩激情中文字幕| 国产欧美日韩精品一区| 欧美色图天堂网| 国产一区二区三区在线观看免费视频 | 欧美大胆人体bbbb| 国产mv日韩mv欧美| 亚洲va中文字幕| 久久久久青草大香线综合精品| 91日韩精品一区| 丝袜美腿亚洲综合| 国产欧美中文在线| 欧美人动与zoxxxx乱| 欧美日韩综合不卡| 视频一区二区三区中文字幕| 国产日韩欧美不卡在线| 欧美一区二视频| 色综合亚洲欧洲| 欧美亚男人的天堂| 日本最新不卡在线| 亚洲激情自拍偷拍| 国产精品免费久久| 精品日韩一区二区三区| 欧美色成人综合| 成人av电影观看| 激情成人综合网| 日产国产高清一区二区三区| 亚洲天堂2014| 中文字幕不卡在线观看| 精品久久久久av影院 | 国产欧美一区二区精品性色超碰 | 日韩欧美一区二区久久婷婷| 色哟哟国产精品| 成人高清在线视频| 精品一区二区在线免费观看| 亚洲国产欧美在线人成| 中文字幕永久在线不卡| 久久亚洲综合av| 欧美一区二区三区色| 欧美丝袜第三区| 91视频精品在这里| 成人免费av资源| 国产一区二区看久久| 美女任你摸久久 | 国产a级毛片一区| 国产一区在线观看视频| 蜜臀久久99精品久久久久久9 | 亚洲午夜影视影院在线观看| 国产精品国产三级国产|