Mips swapping without temp variable

  • Thread starter Thread starter jiggleswiggly
  • Start date Start date
  • Tags Tags
    Mips Variable
Click For Summary
The discussion centers on modifying a MIPS assembly program to implement a swap function that adheres to specific constraints, particularly the use of the stack for local variables. The original code initializes two integers, n1 and n2, and aims to swap their values using a procedure that requires six load and store instructions. A user expresses confusion about the use of the jal (jump and link) and jr (jump register) instructions in this context. Another participant points out that the XOR method proposed for swapping values does not require a temporary variable, highlighting its efficiency due to the properties of XOR. The conversation emphasizes understanding the stack's role in managing local variables in assembly language, as well as the implications of optimization techniques in coding practices.
jiggleswiggly
Messages
4
Reaction score
0
so i have swap.s
Code:
	.text
main:
	la	$a0,n1
	la	$a1,n2
	jal	swap
	li	$v0,1	# print n1 and n2; should be 27 and 14
	lw	$a0,n1
	syscall
	li	$v0,11
	li	$a0,' '
	syscall
	li	$v0,1
	lw	$a0,n2
	syscall
	li	$v0,11
	li	$a0,'\n'
	syscall
	li	$v0,10	# exit
	syscall

swap:
	
	

L1: 

	.data
n1:	.word	14
n2:	.word	27
my goal is to:
Modify swap.s to translate the following procedure directly to MIPS
assembly language. The temp variable, like all local variables in C
(when not optimized), is stored on the stack. In other words you
cannot use $t0 to hold temp, though you may need it briefly. Hint: you
will need to use 6 lw/sw instructions.
This exercise is slightly contrived, and could be easier if we let you
optimize and use $t0 to hold the temp variable, part of the point of this
exercise is to see what kind of difference optimization can make.
Code:
void swap (int *px, int *py) {
int temp;
temp = *px;
*px = *py;
*py = temp;
}
i am confused on jal and jr's though...
for swap could I just do:
Code:
xor $a0 $a0 $a1
	xor $a1 $a0 $a1
	xor $a0 $a0 $a1
	jr $ra

or do i need to save to the stack and such?
 
Technology news on Phys.org
Hey jiggleswiggly and welcome to the forums.

That piece of XOR code is actually a real swap that works without needing a temporary variable.

If you wanted to prove it then use the properties of XOR and note that A XOR A = 0 and 0 XOR B = B for any B and A.
 
Learn If you want to write code for Python Machine learning, AI Statistics/data analysis Scientific research Web application servers Some microcontrollers JavaScript/Node JS/TypeScript Web sites Web application servers C# Games (Unity) Consumer applications (Windows) Business applications C++ Games (Unreal Engine) Operating systems, device drivers Microcontrollers/embedded systems Consumer applications (Linux) Some more tips: Do not learn C++ (or any other dialect of C) as a...

Similar threads

  • · Replies 4 ·
Replies
4
Views
1K
  • · Replies 4 ·
Replies
4
Views
5K
  • · Replies 1 ·
Replies
1
Views
7K
  • · Replies 1 ·
Replies
1
Views
3K
  • · Replies 4 ·
Replies
4
Views
7K
  • · Replies 5 ·
Replies
5
Views
10K
  • · Replies 1 ·
Replies
1
Views
8K
  • · Replies 1 ·
Replies
1
Views
10K
  • · Replies 5 ·
Replies
5
Views
6K
  • · Replies 1 ·
Replies
1
Views
6K