Write an assembly language program, Assembly Language

Assignment Help:

You are to write an assembly language program called subfaq.s that computes the generalized subfactorial function of nonnegative integer inputs i0 and n. The generalized subfactorial function is defined by the following recursion.

gs(0) = 1
inc(0) = i0

gs(n) = n gs(n-1) - inc(n-1)
inc(n) = -inc(n-1)

The generalized subfactorial function is closely related to the factorial function:
Factorial(n) can be written n! and is equal to gs(n) when i0 = 0.
Subfactorial(n) can be written !n and is equal to gs(n) when i0 = 1.

The values of both factorial and subfactorial get large very rapidly as n increases, so your program should return a 64-bit number representing gs(n) mod 264. In other words, just let your 64-bit register overflow. Try to make your code as short and efficient as possible. I recommend not using recursion, but rather writing a loop that starts from 0 and increments up to n. Write your assembly code from scratch rather than writing C and compiling to assembly. It takes only 10 to 20 instructions, and this will be your only assignment to write code in assembly. Don't miss out on the experience. You may copy your procedure entry and exit code from the textbook or the gcc compiler output without citing the source. Try to get your assembly code for subfac.s to occupy at most 50 bytes (30 is possible). To see your machine code, use
gcc64 -c subfaq.s

to produce object file subfaq.o , then use
objdump64 -d subfaq.o .

The following C program (called run_subfaq.c ) can be used to test your subfaq function. Do not include it with your submission; I already have it.

lli subfaq(int n, lli i0);

int main(int argc, char* argv[])
{
int i = 1, n;
lli i0, ans;
if(argc < 3) {printf("Usage: gs i0 n1 n2 n3 ... (list of non-negative integers)"); return -1;}
sscanf(argv[i++], "%lld", &i0);
while (i < argc) {
sscanf(argv[i], "%d", &n);
if(n < 0) printf("%d out of range\n", n);
else {
ans = subfaq(n, i0);
printf("gs(%d, %lld) = %lld\n", n, i0, ans);
}
i++;
}
return(0);
}

The compile command to test your programs will look like this:
gcc64 -Wall -std=gnu99 -o gs run_subfaq.c subfaq.s .
Here are two sample outputs to use in testing your programs.
C:>gs 0 0 1 2 3 4 5 6 13
gs(0, 0) = 1
gs(1, 0) = 1
gs(2, 0) = 2
gs(3, 0) = 6
gs(4, 0) = 24
gs(5, 0) = 120
gs(6, 0) = 720
gs(20, 0) = 2432902008176640000
gs(21, 0) = -4249290049419214848
gs(
C:>gs 1 0 1 2 3 4 5 6 13
gs(0, 1) = 1
gs(1, 1) = 0
gs(2, 1) = 1
gs(3, 1) = 2
gs(4, 1) = 9
gs(5, 1) = 44
gs(6, 1) = 265
gs(20, 1) = 895014631192902121
gs(21, 1) = 348563181341392924

(The outputs for n = 21 have overflowed the 64-bit word size.)


Related Discussions:- Write an assembly language program

Programming, Using the following table as a guide, write a program that ask...

Using the following table as a guide, write a program that asks the user to enter an integer test score between 0 and 100. The program should display the appropriate letter grade.

Web services. , describes vertical and horizontal web services protocols. N...

describes vertical and horizontal web services protocols. Next, identify the similarities and differences between vertical and horizontal web services protocols. Finally, explain w

Segment registers-microprocessor, Segment Registers The 8086 addresses ...

Segment Registers The 8086 addresses a segmented memory unlike 8085. The complete 1 megabyte memory, which 8086 is capable to address is divided into 16 logical segments.Thusea

Program to generate waveforms connected, Write a 68hc11 assembly language p...

Write a 68hc11 assembly language program which generation of the following waveforms connected to your DAC i)   Square wave ii)  Saw tooth waveform iii) Sine wave iv) U

Power pc-microprocessor, Power Pc : A Power PC is a microprocessor des...

Power Pc : A Power PC is a microprocessor designed to meet a standard, which was combining designed by Motorola, Apple and IBM. The PowerPC standard specifies a common instruc

The real time system (rts)-microprocessor, The real time System (RTS) : ...

The real time System (RTS) : Calling the clock real-time is somewhat of a misnomer because it only shows the time setting it has been given. The RTC is the other half of chip

Write an assembly language program, Your assignment for this project is to ...

Your assignment for this project is to write an assembly language program that checks if the user's input is a valid ISBN number. A sample run of your program might look like:

Login system, a pseudo-code to add username and password combination up to ...

a pseudo-code to add username and password combination up to a limit of 10

Selecting array elements, implement the following c++ code in assembly lang...

implement the following c++ code in assembly language using the block-structured .IF and .while directives

Pointer and index registers-microprocessor, Pointer and Index Registers ...

Pointer and Index Registers The pointers contain offset within the specific segments. The pointers BP, IP and SP generally containoffsets within thedata, code and stack segment

Write Your Message!

Captcha
Free Assignment Quote

Assured A++ Grade

Get guaranteed satisfaction & time on delivery in every assignment order you paid with us! We ensure premium quality solution document along with free turntin report!

All rights reserved! Copyrights ©2019-2020 ExpertsMind IT Educational Pvt Ltd