我在尝试用 C 语言创建汇编仿真程序时遇到问题。有 5 个寄存器:REGA、REGB、REGC、REGX AND INSP,以及 10 条指令:NOP、SET、AND(按位 &)、OR(按位 |)、 ADD、SUB、SHL(<< 左)、SHR(>>)、JMP。
程序从文件中读取指令;包含指令和 2 个参数的行。在大多数情况下,第一个参数是寄存器名称(例如 REGA),第二个参数可以是寄存器名称或整数。
我正在使用 sscanf 从文件中获取说明。
我在使用 ADD、SUB、SHL 和 SHR 功能时遇到问题。我的添加功能是:
int opcode_add(char* opcode, char *arg1, char *arg2){
int i, j;
for(i = 0; i < MAX_REGISTER; i++){
if (strcmp(register_str[i],arg1) == 0){
for(j = 0; j <=MAX_REGISTER; j++){
if(strcmp(register_str[j],arg2) == 0){
*register_ptr[i] = *register_ptr[i] + *register_ptr[j];
break;
}else {
*register_ptr[i] = *register_ptr[i] + atoi(arg2);
}
}
}
}
INSP++;
return (0);
}
如果传递了 2 个寄存器参数,该函数将起作用。例如:
SET REGA 1
SET REGB 2
ADD REGA REGB
但如果传递了寄存器和整数,则不会。例如:
SET REGA 2
ADD REGA 1
问题出在这一行:
*register_ptr[i] = *register_ptr[i] + atoi(arg2);
我试过这样做:
int y = *register_ptr[i];
int k = atoi(arg2);
int result = y+k;
*register_ptr[i] = result;
但它没有用。