int load_byte(int memory[],int address) {
//This function works by finding the appropriate word then masking
//to obtain the relevant byte
int index,section;
switch (address>>28) {
case 0:
index = address - START_ADDRESS;
printf("index = %d",index);
case 1:
index = address - START_DATA_ADDRESS;
case 7:
index = address - START_STACK_ADDRESS;
}
section = index%4;
index = index/4;
switch (section) {
case 0:
return memory[index]&0x000000ff;
case 1:
return (memory[index]&0x0000ff00)>>8;
case 2:
return (memory[index]&0x00ff0000)>>16;
case 3:
return (memory[index]&0xff000000)>>24;
}
}
START_ADDRESS has a value of 0x00400000 and the sample address I used was 0x00400002, it's just this function that keeps giving me a seg fault, don't quite understand why as the array in question has a size of 1000. Thanks in advance.
Your first switch looks strange, only 0, 1 and 7 are handled. And there are no break;
statements at the end of each case.
The code:
switch (address>>28) {
case 0:
index = address - START_ADDRESS;
printf("index = %d",index);
case 1:
index = address - START_DATA_ADDRESS;
case 7:
index = address - START_STACK_ADDRESS;
}
Since the address
is 0x00400002
, so the switch
will start execution from case 0
,
and you don't have any break
in each case X
, all the code will be run. That is, at last the index
will equal to address - START_STACK_ADDRESS
.
Maybe this was the reason.
Try to add break
s between case
s.
switch (address>>28) {
case 0:
index = address - START_ADDRESS;
printf("index = %d",index);
break;
case 1:
index = address - START_DATA_ADDRESS;
break;
case 7:
index = address - START_STACK_ADDRESS;
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With