我在嘗試使用C創建程序集仿真程序時出現問題。有5個寄存器:REGA,REGB,REGC,REGX和INSP以及10條指令:NOP,SET和AND SHR(>>),JMP。),OR(逐位),ADD,SUB,SHL(< <左),SHR(>>),JMP。在指針值上添加操作C
程序從文件讀取指令;包含指令和2個參數的行。在大多數情況下,第一個參數是一個寄存器名稱(例如REGA),第二個參數可以是一個寄存器名稱或一個整數。
我使用sscanf從文件中獲取指令。
我遇到了ADD,SUB,SHL和SHR函數的問題。我的外接功能是:如果2個寄存器參數傳遞
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);
}
的功能工作。例如:
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;
,但沒有奏效。
什麼錯誤訊息您收到? –
這看起來很可疑:'for(j = 0; j <= MAX_REGISTER; j ++)'外部'for'的終止條件是'i
hmjd