Answered step by step
Verified Expert Solution
Question
1 Approved Answer
WRITE ASSEMBLY CODE... Random Number Generator For this question, you'll create a pseudo - random number generator ( specifically , a linear congruential generator )
WRITE ASSEMBLY CODE...
Random Number Generator
For this question, you'll create a pseudorandom number generator specifically a linear congruential generator function in lab S
Our LCGs behaviour will be like this:def randint:seed seed return seedThe commentedout lines would be necessary to express this as actual Python code which needs global variables explicitly declared, and
isn't limited to bit integer arithmetic but these are not necessary in an assembly translation of the logic.
Our random number generator will always start with the same seed o That means it will always generate the same sequence of "random"
numbers, but that's fine for what we're doing.
The random seed will need to be a bit integer in static memory, reserved and initialized in a data section.
The constants in the calculation are larger than bit constants that are allowed in most instructions, so the only way to use them is with
movabs to first get the value into a register:
movabs $@
With those hints, write a function randint in that generates pseudorandom unsigned integers as described.Random Array
Write an assembly function fillarray that takes two arguments: a bit signed integer array pointer and the number of elements. It
should fill the array with random values generated using your randint
We don't want our array values to be too big, so we'll keep the array elements in the range but still as bit integers Hint:
call randint
and $xffrax
sub $rax
Dot Product
Write an assembly function dot that takes two bit signed integer array pointers and a length assumed to be the same for both
arrays It should return the dot product of the two arrays, ie
arrarrcdotsarr
Array of Structs
Instead of working with pairs of arrays, maybe we should work with arrays of pairs. The provided lab defines this struct:intt a; pairt;In C we know that array elements are guaranteed to be adjacent in memory, but struct members are also guaranteed to be arranged
in memory in the order they're declared. We generally expect them to be adjacent, so this struct should take bytes: the first bytes are a
and the next are Its actually a little more complicated than that because of padding and alignment, but we can ignore those for now.
Repeat the dot product calculation, but taking a single array of pairt and a length as arguments.
Step by Step Solution
There are 3 Steps involved in it
Step: 1
Get Instant Access to Expert-Tailored Solutions
See step-by-step solutions with expert insights and AI powered tools for academic success
Step: 2
Step: 3
Ace Your Homework with AI
Get the answers you need in no time with our AI-driven, step-by-step assistance
Get Started