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

Assembly language assignment, The main objective of the assignment is to ex...

The main objective of the assignment is to explore the knowledge regarding parallel ports of a computer system. You can read and write datato/from the parallel port using IN and OU

Cache components-microprocessor, Cache components The cache sub-system ...

Cache components The cache sub-system may be divided into 3 functional blocks: Tag RAM, SRAM and theCache Controller. In real designs, these blocks can be implemented  by multi

Instructions, Difference between div and idiv

Difference between div and idiv

Write an assembly language program to fi nd the maximum, Write an assembly ...

Write an assembly language program to find the maximum of: y = x 6 - 14x 2 + 56x for the range -2 ≤ x ≤ 4, by stepping one by one through the range. The program should in

Imul-arithmetic instruction-microprocessor, IMUL: Signed Multiplication: T...

IMUL: Signed Multiplication: This instruction multiplies a signed byte by a signed bit in source operand e in the register AL or signed word in source operand by signed word in th

Program, write a program assembly language for adding two 3*3 matrix

write a program assembly language for adding two 3*3 matrix

Second generation microprocessor, IInd Generation Microprocessor : The ...

IInd Generation Microprocessor : The second generation microprocessor by using n MOS technology seemed in the market in 1973.   The Intel  8080, of nMOS  technology

Timing diagram of minimum mode, give the explaination of timing diagram min...

give the explaination of timing diagram minimum mode memory write cycle

Rol-logical instruction-microprocessor, ROL : Rotate Left without Carry: T...

ROL : Rotate Left without Carry: This instruction rotates the content of the destination operand to the left by the specified count bit-wise excluding the carry. The most signific

8086, Write a program to mask bits D3D2D1D0 and to set bits D5D4 and to inv...

Write a program to mask bits D3D2D1D0 and to set bits D5D4 and to invert bits D7D6 of ax register

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