⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 code.h

📁 snl语言是一个简单的具有嵌套过程定义的过程式语言
💻 H
字号:
/****************************************************/
/* 文件 code.h										*/
/* 说明 TINY编译器代码生成功能和TM机界面			*/
/* 主题 编译器结构:原理和实例						*/
/* 作者 Kenneth C. Louden							*/
/* 注释 高广宇										*/
/****************************************************/

/* 判断联入标志,如已联入该文件则不再联入 */
#ifndef _CODE_H_
#define _CODE_H_

/* 程序指令指示器pc为7,指向当前指令存储位置		*
 * 程序指示器将使用寄存器数组中的第8个寄存器	*/
#define  pc 7	


/* 过程活动记录头指针指示器sp指向过程活动记录的头地址指针 */
#define  sp 6

/* 过程活动记录尾指针指示器top指向过程活动记录的尾地址指针 */
#define  top  5 

/* 过程活动记录sp到display表距离指示器displayOff */
#define  displayOff  4

/* 存储指示器mp指向用于临时变量存储的数据存储器顶端 */
#define  mp 3

#define  ac2 2      /* 第三累加器 */

#define  ac1 1		/* 第二累加器 */

#define  ac 0		/* 第一累加器 */




/**************** 代码产生功能函数 *******************/

/* 该函数在代码文件code中写入指令的注释行,注释内容由c指定 */
void emitComment( char * c );

/************************************************************
 * 该函数产生一条只用寄存器操作数的TM指令,寄存器地址模式	*
 * op 为操作码												*
 * r  为目标寄存器											*
 * s  为第一寄存器											*
 * t  为第二寄存器											*
 * c  为要写入代码文件code的注释内容,						*
 *    当代码生成追踪标志TraceCode为TRUE时写入目标代码文件	*
 ************************************************************/
void emitRO( char *op, int r, int s, int t, char *c);

/************************************************************
 * 该函数产生一条寄存器-内存操作数的TM指令					*
 * op 为操作码												*
 * r  为目标寄存器											*
 * d  为偏移值												*
 * s  为基地址寄存器										*
 * c  为要写入代码文件code的注释内容,						*
 *    当代码生成追踪标志TraceCode为TRUE时写入目标代码文件	*
 ************************************************************/
void emitRM( char * op, int r, int d, int s, char *c);

/* 该函数略过参数howMany指定数量代码指令行,函数返回当前代码指令写入地址 */
int emitSkip( int howMany);

/* 该函数退回到由参数loc指明的上一个已经略过的代码指令写入地址 */
void emitBackup( int loc);

/* 该函数把当前代码写入地址恢复为当前未写入代码指令的最高地址 */
void emitRestore(void);

/************************************************************
 * 该函数在产生一条寄存器-内存操作数TM指令时,				*
 * 将一个绝对地址参数转换为pc相对地址参数					*
 * op 为操作码												*
 * r  为目标寄存器											*
 * a  为绝对存储器地址										*
 * c  为要写入代码文件code的注释内容,						*
 *    当追踪标志TraceCode为TRUE时写入						*
 ************************************************************/
void emitRM_Abs( char *op, int r, int a, char * c);

#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -