📄 code.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 + -