gpt4 book ai didi

c - 对指针值 C 的添加操作

转载 作者:太空宇宙 更新时间:2023-11-04 04:01:41 24 4
gpt4 key购买 nike

我在尝试用 C 语言创建汇编模拟器程序时遇到问题。有 5 个寄存器:REGA、REGB、REGC、REGX 和 INSP,以及 10 个指令:NOP、SET、AND(按位 &)、OR(按位|), ADD, SUB, SHL(<< left), SHR(>>), JMP.

程序从文件中读取指令;包含指令和 2 个参数的行。在大多数情况下,第一个参数是寄存器名称(例如 REGA),第二个参数可以是寄存器名称或整数。

我正在使用 sscanf 从文件中获取指令。

我在使用 ADD、SUB、SHL 和 SHR 函数时遇到问题。我的 ADD 函数是:

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;

但是没用。

最佳答案

您没有说什么 不起作用 - 但是,您构建内部循环和 if 的方式至少有一个错误。每当内部循环发现一个与第二个操作数不匹配的寄存器时,else block 将被执行 - 因此将添加第二个操作数指定的寄存器之前的所有寄存器到(如果第二个操作数是一个 int,所有 寄存器将被添加到)。 else block 的内容必须移动到循环之后,并且只有当内部循环没有找到寄存器时才能执行它们。

关于c - 对指针值 C 的添加操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10883314/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com