I'm taking a class in sparc assembly, and I'm having a hard time with this concept. We're supposed to add two numbers together that can have as many as 100 digits. Since this is too many to fit into one register, I have to save them in memory and then deal with them. This is the part that I can't figure out. When saving it, should I use %d or %s? I'm saving the input in a variable that I declared like this: input1:.skip 4 * 50. Also, I was planning on using addx and addxcc to keep the carry and was planning on loading up 32 bits at a time and adding that and then restoring it, but I can't figure it out.
Am I going about this in the right way? Does anyone have any suggestions? Thanks in advance!
.section ".data" format: .asciz "%s%c" displayformat: .asciz "%d\n" prompt1: .asciz "Enter first number (100 digit max): " prompt2: .asciz "Enter second number (100 digit max): " sDisplaySum: .asciz "\nThe sum is: %d" sDisplayDiff: .asciz "\nThe difference is: %d" nl: .byte '\n' .align 4 .section ".bss" input1: .skip 4 * 50 input2: .skip 4 * 50 sum: .skip 4 * 50 diff: .skip 4 * 50 .align 4 findSumDiff: save %sp, -96, %sp!can not be leaf b/c must call validate subroutine !use a loop to continue to load .words and check each time to see if %l1 and %l2 are 0 !use addxcc and mov 0, %l3!set byte counter to loop set input1, %l0!load first 32 bits to add ld [%l0 + %l3], %l1!first number set input2, %l0!load first 32 bits to add ld [%l0 + %l3], %l2!second number addcc %l1, %l2, %l4!does first add and sets the carry flag set sum, %l5 st %l4, [%l5 + %l3]!store the first part of the sum into memory add %l3, 4, %l3!increment counter addloop: set input1, %l0!loads the next 32 bits of first number ld [%l0 + %l3], %l1 set input2, %l0!loads the next 32 bits of second number ld [%l0 + %l3], %l2 addxcc %l1, %l2, %l4!adds in carry to the addition, adds, then sets the flag again set sum, %l5 st %l4, [%l5 + %l3]!store the first part of the sum into memory add %l3, 4, %l3!increments counter again cmp %l3, 200 bne addloop nop ret restore
I was thinking I was having a problem with the load and store part of things... What do you think?