Assembly language problem [repost using template :D]

  • #1

Homework Statement



given that f,g,h,i and j are assigned to registers s0,s1,s2,s3 and s4
and the base addresses for the arrays A,B are in s6,s7

convert this C statement to assemply language: B[8] = A[i-j];

Homework Equations



none

The Attempt at a Solution


image attached


i attached both manual solutions and my answers, i can't understand the second line in his, he is adding the address of array A with variable f, while he should multiply f by 4 to get the offset
 

Answers and Replies

  • #2

Homework Statement



given that f,g,h,i and j are assigned to registers s0,s1,s2,s3 and s4
and the base addresses for the arrays A,B are in s6,s7

convert this C statement to assemply language: B[8] = A[i-j];

Homework Equations



none

The Attempt at a Solution


image attached


i attached both manual solutions and my answers, i can't understand the second line in his, he is adding the address of array A with variable f, while he should multiply f by 4 to get the offset

the manual solution answer
 

Attachments

  • answ.JPG
    answ.JPG
    4.5 KB · Views: 335
  • #3
403
120
What is the array type?
 
  • #6
403
120
32-bit integers

Between that and what jedishrfu said you should be able to figure out why its multiplied by 4 :)
 
  • #8
Between that and what jedishrfu said you should be able to figure out why its multiplied by 4 :)
i know why do we multiply by 4, i was asking why the manual solution didn't :)
 
  • #9
35,123
6,865
you mean mean if i added a number to a reference it automatically multiply it by the size
i know about pointers arithmetic from previous programming course, didn't think about it .. thanks ! :))
In C and C++, if you add a number to a pointer, the result of the addition depends on the type of the pointer. So, adding 1 to an int pointer actually results in an address 4 bytes higher in memory than the address in the pointer. Adding 1 to a double pointer results in an address 8 bytes higher in memory. Adding 1 to a char pointer results in an address 1 byte higher in memory.

Subtracting a number from a pointer works in a similar fashion, but results in addresses that are lower in memory.

In contrast, when you write assembly code you have to do those extra multiplications yourself.
 
  • #10
In C and C++, if you add a number to a pointer, the result of the addition depends on the type of the pointer. So, adding 1 to an int pointer actually results in an address 4 bytes higher in memory than the address in the pointer. Adding 1 to a double pointer results in an address 8 bytes higher in memory. Adding 1 to a char pointer results in an address 1 byte higher in memory.

Subtracting a number from a pointer works in a similar fashion, but results in addresses that are lower in memory.

In contrast, when you write assembly code you have to do those extra multiplications yourself.

if in assembly i should do this extra, so why the manual solution didn't do that?! "it's answer attached"
 

Attachments

  • answ.JPG
    answ.JPG
    4.5 KB · Views: 294
  • #11
35,123
6,865
if in assembly i should do this extra, so why the manual solution didn't do that?! "it's answer attached"
Posting an image of the code in your book is not very helpful. You should also state what sort of assembly code you're working with. Yours appears to be MIPS.

Code:
sub $t0, $s3, $s4
add $t0, $s6, $t0
lw $t1, 16($t0)
sw $t1, 32($s7)
Khaled Kord said:
given that f,g,h,i and j are assigned to registers s0,s1,s2,s3 and s4
and the base addresses for the arrays A,B are in s6,s7

convert this C statement to assemply language: B[8] = A[i-j];
i can't understand the second line in his, he is adding the address of array A with variable f, while he should multiply f by 4 to get the offset
What are the values of f, g, h, and i? To understand what a piece of code is doing, you have to know what values are being added, subtracted, loaded, or stored.

In the first line of code, the value in s4 is being subtracted from the value in s3, with the result being placed in t0.
Start at the first line, and see if you can figure out what gets stored in t0. Then do the same for the second, third, and fourth lines.

Do you know what the LW and SW instructions do?
 
Last edited:

Related Threads on Assembly language problem [repost using template :D]

  • Last Post
Replies
0
Views
2K
Replies
2
Views
5K
  • Last Post
Replies
3
Views
10K
  • Last Post
Replies
1
Views
2K
  • Last Post
Replies
6
Views
4K
  • Last Post
Replies
20
Views
8K
  • Last Post
Replies
13
Views
4K
Replies
12
Views
547
Replies
12
Views
4K
Replies
1
Views
2K
Top