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

Bcsl-022, define accounting.briefly explain the accounting concepts which g...

define accounting.briefly explain the accounting concepts which guide the accountant at the recording stage.

Int n-unconditional branch instruction-microprocessor, INT N : Interrupt T...

INT N : Interrupt Type N:- In the interrupt structure of 8086/8088, 256 interrupts are distinct equivalent to the types from OOH to FFH. When an instruction INT N is executed,

Into-jmp-unconditional branch instruction-microprocessor, INTO : Interrupt...

INTO : Interrupt on Overflow:- It is executed, when the overflow flag OF is set. The new contents of IP and CS register are taken from the address 0000:0000 as described in INT

Segmentation, segmentation and overlapping in assemble language

segmentation and overlapping in assemble language

Length-assemblers directive-microprocessor, LENGTH : Byte Length of a Labe...

LENGTH : Byte Length of a Label: This directive is not available in MASM. This is used to mention to the length of a data array or a string. MOV CX. LENGTH ARRAY This sta

Code for reading flow & generating led output, Code for Reading Flow & Gene...

Code for Reading Flow & Generating LED Output The code starts with the scanning of the PORT 3, for reading the flow status to check for various flow conditions and compare to

Dma controller-microprocessor, DMA controller :     Steps in...

DMA controller :     Steps include in transferring a block of data from I/O devices (for example a disk) to memory: 1. CPU sends a signal to initiate disk transfe

Lab Assignment, 1) Write an 80x86 assembly language program in EXE file for...

1) Write an 80x86 assembly language program in EXE file format to do the following tasks: a) Open and read the contents of a file into memory (use at least 1 kB). b) Sort the li

Code using hla language, You have been hired by the Elbonian government to ...

You have been hired by the Elbonian government to write an Assembly program to help its workforce determine how much their tax will be. The tax laws in Elbonian are very simple. Th

Display control-microprocessor, Display control 8279  provides  a  16  ...

Display control 8279  provides  a  16  byte  display  memory  and  refresh  logic.  Every address in the display memory corresponds to a display unit with address zero represen

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