转化v8cpu代码

转化v8cpu代码

本代码旨在转化为一种 v 8 c p u v8cpu v8cpu的代码。这种v8cpu的运行规则在http://v8cpu.qinyue.world/instruction-set.html上可以见到。

描述:输入指令的截止地址和指令代码,输出每一个指令对应的代码。
输入:
第一行:两个一位十六进制整数 X , Y X,Y XY,表示输入指令的截止地址为0xXY。
接下来输入 ( X − 1 ) ∗ 16 + Y + 1 (X-1)*16+Y+1 X116+Y+1组二位十六进制整数ST,表示每个地址的存储数值。
输出:
对每一个四位指令,输出一行该指令对应的代码。

下面是代码。

#include<bits/stdc++.h>
using namespace std;
#define MAXN 20
#define re register int
char c[MAXN][MAXN][3];//Memory 0xXY
const int n=16;
int x,y;
void init(){for(re i=0;i<n;i++)for(re j=0;j<n;j++)c[i][j][0]=c[i][j][1]='0';}
int zh(char x){return x<='9'&&x>='0'?int(x-'0'):int(x-'A'+10);}
char fz(int x){return x<=9&&x>=0?x+'0':x-10+'A';}
char read(){char x=getchar();return (x=='\n'||x==' ')?read():x;}
void work(char a1,char a2,char a3,char a4){
	int u=zh(a1),v=zh(a2),s=zh(a3),t=zh(a4);
	switch(u){
		case 1:printf("LOADM R%c,0x%c%c\n",a2,a3,a4);break;
		case 2:printf("LOADB R%c,%d\n",a2,s*16+t);break;
		case 3:printf("STOREM R%c,0x%c%c\n",a2,a3,a4);break;
		case 4:printf("MOVE R%c,R%c\n",a4,a3);break;
		case 5:printf("ADDI R%c,R%c,R%c\n",a2,a3,a4);break;
		case 6:printf("ADDF R%c,R%c,R%c\n",a2,a3,a4);break;
		case 7:printf("OR R%c,R%c,R%c\n",a2,a3,a4);break;
		case 8:printf("AND R%c,R%c,R%c\n",a2,a3,a4);break;
		case 9:printf("XOR R%c,R%c,R%c\n",a2,a3,a4);break;
		case 10:printf("ROT R%c,%d\n",a2,zh(a4));break;	
	    case 11:printf("JUMP R%c,0x%c%c\n",a2,a3,a4);break;
	    case 12:printf("HALT\n");break;
	}
}
void in(int u,int v){
	for(re i=0;i<u;i++)for(re j=0;j<n;j++)c[i][j][0]=read(),c[i][j][1]=read();
	for(re i=0;i<=v;i++)c[u][i][0]=read(),c[u][i][1]=read();
}
int main(){
	init();
	scanf("%d%d",&x,&y);
	in(x,y);
    for(re i=0;i<x;i++)for(re j=0;j<n;j+=2)work(c[i][j][0],c[i][j][1],c[i][j+1][0],c[i][j+1][1]);
    for(re j=0;j<=y;j+=2)work(c[u][j][0],c[u][j][1],c[u][j+1][0],c[u][j+1][1]);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值